如何在python中拆分一个巨大的文本数据集?

时间:2018-03-28 22:59:32

标签: python python-3.x machine-learning dataset

我的机器学习项目的第一部分是将巨大的数据集分成3个部分,然后将它们用作训练数据集和测试数据集。此数据集包括10milion行,如下所示:

enter image description here

上图是我的数据集的屏幕截图。我不想改变列或行的顺序,所以随机在这里不起作用。正如您所看到的,它们是由立柱分隔的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的屏幕截图: enter image description here

请告诉我我的代码有多正确?

2 个答案:

答案 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)

所以方法如下:

  1. 打开文件

  2. 逐行读取文件时,使用split()方法拆分每一行。同时拆分时也将获得的字符串转换为浮点数。

  3. 现在您将整个文件作为float类型的多维数组。

  4. 获取样本数(行数)。

  5. 在第一个数据中使用从0到行/ 3的切片存储行,在data2中使用行/ 3到行* 2/3,在data3中使用剩余的行。

  6. 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()