Создать CSV-файл с рандомизированными путями к файлам в Python - PullRequest
0 голосов
/ 16 января 2019

У меня есть много CSV-файлов, в том числе данные из моделирования, которое я делаю. Я передаю их в алгоритм глубокого обучения, помещая все выходные файлы моделирования csv в виде путей к файлам в другой отдельный файл csv. Однако мне нужны два CSV-файла, один из которых содержит 20% путей к выходным CSV-файлам, а другой - остальные 80%. У меня есть алгоритм, чтобы сделать это, но он не рандомизирован;

with open('C:\\train.csv', 'w') as outf:

  print('x:data,y:label', file=outf)

  for i in range(80):
      print('./1/a_%s.csv, 1' % (i + 21), file=outf)

with open('C:\\test.csv', 'w') as outf:

  print('x:data,y:label', file=outf)

  for i in range(20):
      print('./1/a_%s.csv, 1' % (i + 1), file=outf)

Когда я делаю это таким образом, я получаю файлы 1-20 в одном из файлов CSV и от 21 до 100 в другом. Однако я хочу, чтобы они были рандомизированы. так что, может быть, если у меня всего 10 сэмплов, 3 и 7 (случайных) в одном файле, а остальные - в другом. Есть ли способ, которым я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Это распространенная проблема в машинном обучении. scikit-learn имеет несколько инструментов для решения этой проблемы, например, train_test_split

from sklearn.model_selection import train_test_split

indices = list(range(1, 101))
i_a, i_b = train_test_split(indices, train_size=0.8, test_size=0.2)

Теперь вы можете перебирать i_a (80 случайных индексов) и i_b (20 случайных индексов), как в исходном коде:

with open('C:\\train.csv', 'w') as outf:
    print('x:data,y:label', file=outf)

    for i in i_a:
        print('./1/a_%s.csv, 1' % i, file=outf)

with open('C:\\test.csv', 'w') as outf:
    print('x:data,y:label', file=outf)

    for i in i_b:
        print('./1/a_%s.csv, 1' % i, file=outf)
0 голосов
/ 16 января 2019

Может быть, вы можете попытаться создать массив индексов и сначала перемешать их. Затем используйте первые 80 индексов для первого CSV и rest (20) для второго:

from random import shuffle    

indices = list(range(1,101))
shuffle(indices)

with open('C:\\train.csv', 'w') as outf:
    print('x:data,y:label', file=outf)

    for i in indices[:80]:
        print('./1/a_%s.csv, 1' % i, file=outf)

with open('C:\\test.csv', 'w') as outf:
    print('x:data,y:label', file=outf)

    for i in indices[80:]:
        print('./1/a_%s.csv, 1' % i, file=outf)
...