我有很多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)
当我这样做时,我在一个csv文件中得到了1-20的文件,而在另一个csv文件中得到了21到100的文件。但是,我希望将它们随机化。因此,如果我总共有10个样本,则在一个文件中有3个和7个(随机),而在另一个文件中有其余的。有办法吗?
答案 0 :(得分:3)
也许您可以尝试制作索引数组并先对其进行随机排序。然后将前80个索引用于第一个CSV,将其余80个用于第二个CSV:
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)
答案 1 :(得分:0)
这是机器学习中的常见问题。 scikit-learn
有several tools用于处理此问题,例如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)