Использование кода Java Weka — как преобразовать 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, чтобы понять это, но я не мог понять это :-(


person Greg    schedule 18.08.2010    source источник


Ответы (3)


Короткий ответ: вы не можете присваивать имена атрибутам после чтения файла.

CSVLoader предполагает, что первая строка CSV является заголовком. Если это экземпляр, он будет использовать данные этого экземпляра в качестве строки заголовка, а не в качестве данных экземпляра, что определенно не то, что вам нужно.

Перед приведенным выше кодом вам нужно прочитать файл, написать строку заголовка и снова сохранить файл.

См. мой ответ на ваш вопрос в списке рассылки weka. .

person michaeltwofish    schedule 19.08.2010
comment
Спасибо. Я попробую это. Я предположил, что мой вопрос к списку рассылки затерялся в перетасовке :-( - person Greg; 19.08.2010
comment
Не беспокойтесь, спрашивать по разным каналам - хорошая идея :) - person michaeltwofish; 19.08.2010

Вы можете использовать опцию -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

person maledr53    schedule 10.04.2014
comment
Кажется, теперь есть стенография, loader.setNoHeaderRowPresent(true). См.: weka.sourceforge.net/doc .dev/weka/core/converters/ - person Ricardo Magalhães Cruz; 19.12.2015

Мое решение:

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-файла.

person Community    schedule 20.11.2013
comment
Это решение кажется немного неуместным, но ладно. - person demongolem; 23.12.2016