2016-03-15 128 views
3

我一直在使用一个CSV数据来实现我的脚本,并希望将数据样本分成两个数据集:Python:如何将数据采样到测试和训练数据集?

  1. 测试数据
  2. 列车数据

我想采样数据集85%和15%的部门,并希望输出两个CSV文件Test.csv和Train.csv

我希望它在基础Python中做,不想使用任何其他外部模块,如Numpy,SciPy,Pandas或Scikitlearn 。任何人都可以帮助我以百分比的方式随机抽取数据。此外,我将提供可能具有随机观察数的数据集。到目前为止,我刚刚阅读了熊猫和其他各种模块以百分比为基础对数据进行了抽样,并没有针对我的问题提供具体的解决方案。

此外,我想在这两个文件中保留CSV的标题。由于标题会使每行可访问,并可用于进一步分析。

+0

您的帖子非常广泛。详细说明你已经尝试了什么。用问号清楚你问的是什么问题。 –

+0

@MartinCowie我刚刚在网络搜索研究。到目前为止没有尝试任何东正在寻找一个逻辑,我想从现有的文件创建两个文件。 'Test.csv'和'Train.csv'从一个masterfile'data.csv'我希望85%的数据应该在'test.csv'中,其余15%的数据在'train.csv' –

回答

2

使用random module中的random函数可得到01之间的均匀分布的随机数。

如果是> .85写入训练数据,否则测试数据。见How do I simulate flip of biased coin in python?

import random 

with open(input_file) as data: 
    with open(test_output, 'w') as test: 
     with open(train_output, 'w') as train: 
      header = next(data) 
      test.write(header) 
      train.write(header) 
      for line in data: 
       if random.random() > 0.85: 
        train.write(line) 
       else: 
        test.write(line) 
+0

csv.writer没有名为'写'的对象,我认为它应该是作家? –

+0

道歉,修理 –

+0

hatsoff!但数据还包含标题。并且标题出现在一个文件中,并且不在第二个文件中。在这两种文件中保留标题的任何方法 –

2

使用random.shuffle来创建数据集的随机排列,并切它如你所愿:

import random 
random.shuffle(data) 
train = data[:int(len(data)*0.85)] 
test = data[len(train):] 

由于您所请求的特定解决方案来划分一个潜在的大的CSV文件分成两个文件的培训和测试数据,我也将显示如何,可以使用如上述的一般方法类似的方法来完成:

import random 

# Count lines 
with open('data.csv','r') as csvf: 
    linecount = sum(1 for lines in csvf if line.strip() != '') 

# Create index sets for training and test data 
indices = list(range(linecount)) 
random.shuffle(indices) 
ind_test = set(indices[:int(linecount*0.15)]) 
del indices 

# Partition CSV file 
with open('data.csv','r') as csvf, open('train.csv','w') as trainf, open('test.csv','w') as testf: 
    i = 0 
    for line in csvf: 
     if line.strip() != '': 
      if i in ind_test: 
       testf.write(line.strip() + '\n') 
      else: 
       trainf.write(line.strip() + '\n') 

由此,我假定第e CSV文件每行包含一个观察值。

这将创建一个精确的85:15分割。如果准确度较低的分区对您来说还不错,Peter Wood的解决方案会更有效率。

+0

我希望这可以工作与CSV数据呢? –

+0

“CSV数据”是什么意思?你没有提到你如何在问题中存储你的数据,所以我只是假设“数据”是一系列观察结果。 – Callidior

+0

如果我没有提到,我很抱歉。但截至目前我的数据是CSV格式,我希望相应地采样数据。但无论如何谢谢。 :) –

相关问题