무작위 샘플링으로 데이터 세트를 생성하고 출력 크기를 제한 할 수 있습니까?파일 크기에 의한 랜덤 샘플링 제한
~ 260MB 텍스트 파일의 입력이 있고 원본 파일에서 무작위로 항목이 생성되는 다양한 크기 (~ 1MB, ~ 5MB, ~ 10MB, ...)의 파일을 생성하고 싶습니다.
가장 좋은 방법은 무엇입니까?
무작위 샘플링으로 데이터 세트를 생성하고 출력 크기를 제한 할 수 있습니까?파일 크기에 의한 랜덤 샘플링 제한
~ 260MB 텍스트 파일의 입력이 있고 원본 파일에서 무작위로 항목이 생성되는 다양한 크기 (~ 1MB, ~ 5MB, ~ 10MB, ...)의 파일을 생성하고 싶습니다.
가장 좋은 방법은 무엇입니까?
가장 쉬운 방법은 출력 할 때 파일을 읽고 건너 뛰는 것입니다.
계수 (%)를 사용하여 매 n 번째 행을 가져옵니다. 스킵 행을 샘플 파일의 크기/요구 파일의 크기로 설정하십시오. 예를 들어 260MB/5MB = 52이므로 % 연산자를 52로 설정하면 약 5MB의 파일을 가져와야합니다. 난수 발생기
StreamReader inputFile = new StreamReader(File.OpenRead("c:\\bigfile.csv"));
StreamWriter outputFile = new StreamWriter(File.OpenWrite("c:\\smallfile.csv"));
int rowCount = 0;
while(!inputFile.EndOfStream)
{
string line = inputFile.ReadLine();
if (rowCount % 1000 == 1)
outputFile.WriteLine(line);
rowCount++;
}
요청한 :
여기 짧은 예이다. 이 버전에서는 5mb를 만드는 행 수를 계산합니다 (10 만 개를 넣었습니다). 그러면 파일이 100,000 개의 행이로드 될 때까지 무작위로 반복됩니다. 모든 행을 가져 오기 전에 완료되면 파일을 다시 읽기 시작합니다. 이것은 매우 '무작위'가 될 것입니다.
StreamReader inputFile = new StreamReader(File.OpenRead("c:\\bigfile.csv"));
StreamWriter outputFile = new StreamWriter(File.OpenWrite("c:\\smallfile.csv"));
Random rand = new Random(Guid.NewGuid().GetHashCode());
int rowCount = 0;
int rowsUsed = 0;
skipCount = rnd.Next(1, 2000);
while(rowsUsed < 100000)
{
while(!inputFile.EndOfStream || rowsUsed > 100000)
{
string line = inputFile.ReadLine();
if (rowCount % skipCount == 1)
{
outputFile.WriteLine(line);
skipCount = rnd.Next(1, 2000);
}
rowCount++;
}
StreamReader inputFile = new StreamReader(File.OpenRead("c:\\bigfile.csv"));
}
이렇게하면 동일한 5MB 파일이 매번 생성됩니다. 권리? 나는 달라질 수있는 5MB 파일이 필요하지만 매번 같지는 않습니다. 나의 초기 구현은 무작위 항목을 선택하고 _n_ 개수의 항목을 건너 뛰는 것입니다. 그러나 출력 파일 크기를 결정할 방법이 없습니다. 생성 된 각 파일마다 다른 내용을 생성하려면 어떻게해야합니까? 아니면 쓰기 전에 파일 크기를 미리 결정하거나 추정 할 수있는 방법이 있습니까? 편집과 함께 – Awoi
위의 답변. –