在 Python 中创建具有随机文件路径的 CSV 文件
Create CSV file with randomised filepaths in Python
我有很多 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 个(随机),其余的在另一个文件中。有什么办法可以做到吗?
也许你可以尝试制作索引数组并先将它们打乱。然后对第一个 CSV 使用前 80 个索引,对第二个使用其余 (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)
这是机器学习中的常见问题。 scikit-learn
has several tools for dealing with this, e.g. 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)
我有很多 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 个(随机),其余的在另一个文件中。有什么办法可以做到吗?
也许你可以尝试制作索引数组并先将它们打乱。然后对第一个 CSV 使用前 80 个索引,对第二个使用其余 (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)
这是机器学习中的常见问题。 scikit-learn
has several tools for dealing with this, e.g. 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)