如何在python中拆分巨大的文本数据集?
我的机器学习项目的第一部分是将庞大的数据集分成3部分,然后将它们用作训练数据集和测试数据集。此数据集包含1000万行,如下所示: 上图是我的数据集的截图。我不想更改列或行的顺序,因此随机数在这里不起作用。如您所见,它们是由一个选项卡分隔的6列,包含1000万行。我想把这些行分成3个独立的部分,第一个3333.333行是我的数据集1,第二个3333.333行是数据集2,其余是数据集3。因此,3个不同的文本文件的组成部分(列)的顺序没有改变。 我正在使用Spyder3,在您的帮助下我编写了以下代码:如何在python中拆分巨大的文本数据集?,python,python-3.x,machine-learning,dataset,Python,Python 3.x,Machine Learning,Dataset,我的机器学习项目的第一部分是将庞大的数据集分成3部分,然后将它们用作训练数据集和测试数据集。此数据集包含1000万行,如下所示: 上图是我的数据集的截图。我不想更改列或行的顺序,因此随机数在这里不起作用。如您所见,它们是由一个选项卡分隔的6列,包含1000万行。我想把这些行分成3个独立的部分,第一个3333.333行是我的数据集1,第二个3333.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更改为0.0和1.0。此外,其中一些不在同一列中。请参见下面的data1第一行的屏幕截图:
请告诉我如何更正我的代码?打印需要普通括号->() 将代码更改为:
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)]
打印需要普通方括号->() 将代码更改为:
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)]
因此,方法如下:
f=open('input.txt','r')
l=[f中的行的映射(float,line.strip().split())
无样品=长度(l)
数据1=l[0:int(无样本/3)][:]
数据2=l[int(无样本/3):int(无样本*2/3)][:]
data3=l[int(无样本*2/3):无样本][:]
//将多维列表写入文件
文件=打开('data1.txt','w')
对于data1中的行:
file.writelines([%s\t”%item for item in row])
file.writelines(“\n”)
file.close()
,因此方法如下:
f=open('input.txt','r')
l=[f中的行的映射(float,line.strip().split())
无样品=长度(l)
数据1=l[0:int(无样本/3)][:]
数据2=l[int(无样本/3):int(无样本*2/3)][:]
data3=l[int(无样本*2/3):无样本][:]
//将多维列表写入文件
文件=打开('data1.txt','w')
对于data1中的行:
file.writelines([%s\t”%item for item in row])
file.writelines(“\n”)
file.close()
要如何分割文件?随机拆分?另外,与一起使用时不需要关闭文件。谢谢您的回答。不,不是随机的。正如您在我的数据集的屏幕截图中所看到的,它们是由一个选项卡分隔的6列,包括1000万行。我想把这些行分成3个独立的部分,第一个3333.333行是我的数据集1,第二个3333.333行是数据集2,其余是数据集3。因此,3个不同的文本文件的组成部分(列)顺序没有改变。不要忘记将后面的行缩进…
请查看编辑后的问题,并将data1的屏幕截图与原始数据集的屏幕截图进行比较。您想如何分割该文件?随机拆分?另外,与一起使用时不需要关闭文件。谢谢您的回答。不,不是随机的。正如您在我的数据集的屏幕截图中所看到的,它们是由一个选项卡分隔的6列,包括1000万行。我想把这些行分成3个独立的部分,第一个3333.333行是我的数据集1,第二个3333.333行是数据集2,其余是数据集3。因此,3个不同的文本文件不会改变组件(列)的顺序。不要忘了将后面的行缩进…
请查看编辑的问题,并将data1的屏幕截图与原始数据集的屏幕截图进行比较。感谢您的快速回答。我更正了它,但是当我执行打印代码时,我得到了这个错误:“NameError:name'data'未定义”您是否更改了代码中的其他内容<代码>数据应存在于带有块的中。拆分后,它们将成为我的训练和测试数据集。我应该应用离散贝叶斯规则,熵,决策规则,量化。。。在那上面。所以这些行不是字符串,我应该找到每列中每个数字的概率。但第一步是将它们划分为3个独立的数据集,我使用python实现了这一点。如果windows比Python更简单,请告诉我。我编辑了答案。如果现在要将列表转换回字符串,只需调用“\n”.join(data1)
。这将在每个e之间创建一个带“\n”的字符串