2010-08-18 116 views
3

我正在使用Weka Java庫以讀取CSV文件將其轉換爲ARFF文件使用Weka Java代碼 - 如何將CSV(無標題行)轉換爲ARFF格式?

問題是,CSV文件沒有標題行,只有數據。我在導入CSV文件後如何分配屬性名稱? (所有列將字符串數據類型)

這裏是我的代碼至今:

CSVLoader loader = new CSVLoader(); 
    loader.setSource(new File(CSVFilePath)); 
    Instances data = loader.getDataSet(); 

    ArffSaver saver = new ArffSaver(); 
    saver.setInstances(data); 
    saver.setFile(new File(outputFilePath)); 
    saver.writeBatch(); 

我試圖尋找通過Weka的源代碼摸不着頭腦,但我不能讓元首或它的尾巴:-(

回答

5

簡短的回答是,你在文件中讀取,不能分配的屬性名稱。

CSVLoader假設CSV的第一行是標題。如果這是一個例如,它會使用tha t實例數據作爲標題行而不是實例數據,這絕對不是你想要的。

在上面的代碼之前,您需要讀取文件,寫入標題行並再次保存文件。

請參閱my answer to your question on the weka mailing list

+0

感謝。我會嘗試的。我假設我的問題是在郵件列表中丟失了:-( – Greg 2010-08-19 10:42:08

+0

不用擔心,通過不同的途徑詢問是個好主意:) – michaeltwofish 2010-08-19 12:29:38

1

我的解決辦法:

SELECT 'nameColumn1','nameColumn2' 
UNION 
SELECT idColumn1,idColumn2 
FROM path 
INTO OUTFILE '/tmp/w.csv' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n'; 

nameColumn1和nameColumn2是列標題,將其作爲csv文件的第一行。

+0

這個解決方案看起來有點不合適,但是沒問題。 – demongolem 2016-12-23 16:46:45

2

如果數據中沒有標題行,可以使用選項-H。

CSVLoader loader = new CSVLoader(); 
loader.setSource(new File(CSVFilePath)); 

String[] options = new String[1]; 
options[0] = "-H"; 
loader.setOptions(options); 

Instances data = loader.getDataSet(); 

見: http://weka.sourceforge.net/doc.dev/weka/core/converters/CSVLoader.html

+1

現在似乎有一個簡寫,'loader.setNoHeaderRowPresent(true)'。請參閱:http://weka.sourceforge.net/doc.dev/weka/core/converters/CSVLoader.html#setNoHeaderRowPresent(boolean) – 2015-12-19 04:27:24