2016-03-15 76 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格式,我希望相應地採樣數據。但無論如何謝謝。 :) –

相關問題