我的机器学习项目的第一部分是将巨大的数据集分成3个部分,然后将它们用作训练数据集和测试数据集。此数据集包括10milion行,如下所示:
上图是我的数据集的屏幕截图。我不想改变列或行的顺序,所以随机在这里不起作用。正如您所看到的,它们是由立柱分隔的6列,包括10行的行。我想将这些行拆分为3个独立的部分,其中第一个3333333.333行是我的数据集1,然后第二个3333333.333行是数据集2,其余部分是数据集3。所以3个不同的文本文件,组件(列)的顺序没有改变。 我正在使用Spyder3,我在您的帮助下编写了以下代码:
f = open ( 'pr_data.txt' , 'r') """Reading File"""
l = [ map(float,line.strip().split()) for line in f ]
no_samples = len(l)
data1 = l[0:int(no_samples/3)][:]
data2 = l[int(no_samples/3):int(no_samples*2/3)][:]
data3 = l[int(no_samples*2/3):no_samples][:]
file = open('data1.txt','w')
for row in data1:
file.writelines(["%s\t" % item for item in row])
file.writelines("\n")
file.close()
file = open('data2.txt','w')
for row in data2:
file.writelines(["%s\t" % item for item in row])
file.writelines("\n")
file.close()
file = open('data3.txt','w')
for row in data3:
file.writelines(["%s\t" % item for item in row])
file.writelines("\n")
file.close()
通过上面的代码,3文本文件是在同一目录下创建的,但问题是:数字的精度会发生变化。例如,0&1和1更改为0.0和1.0。此外,其中一些不在同一列中。请参阅以下内容中第一行data1的屏幕截图:
请告诉我我的代码有多正确?
答案 0 :(得分:1)
打印需要普通括号 - > () 将您的代码更改为:
print(data.read())
如果您将数据作为字符串处理(在此示例中),则应首先将其拆分为每个新行data.split("\n")
。这将返回每行的列表。
编辑: 现在,您可以将该列表切片以获得3个单独的列表:
data1 = lines[0:1/3*len(lines)]
data2 = lines[1/3*len(lines):2/3*len(lines)]
data3 = lines[2/3*len(lines):len(lines)]
答案 1 :(得分:1)
所以方法如下:
打开文件
逐行读取文件时,使用split()方法拆分每一行。同时拆分时也将获得的字符串转换为浮点数。
现在您将整个文件作为float类型的多维数组。
获取样本数(行数)。
在第一个数据中使用从0到行/ 3的切片存储行,在data2中使用行/ 3到行* 2/3,在data3中使用剩余的行。
f = open ( 'input.txt' , 'r')
l = [ map(float,line.strip().split()) for line in f ]
no_samples = len(l)
data1 = l[0:int(no_samples/3)][:]
data2 = l[int(no_samples/3):int(no_samples*2/3)][:]
data3 = l[int(no_samples*2/3):no_samples][:]
//Write a multidimensional list to a file
file = open('data1.txt','w')
for row in data1:
file.writelines(["%s\t" % item for item in row])
file.writelines("\n")
file.close()