Использование кода 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, чтобы выяснить это, но я не мог сделать его головы или хвосты :-(
Решение
Краткий ответ: вы не можете назначить имена атрибутов после Вы читаете в файле.
CSVLoader предполагает, что первая строка CSV является заголовком. Если это экземпляр, он будет использовать данные этого экземпляра в качестве строки заголовка, а не как данные экземпляра, что определенно не то, что вы хотите.
Перед приведенным выше кодом вам необходимо прочитать файл, записать строку заголовка и сохранить файл снова.
Другие советы
Вы можете использовать опцию -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
Мое решение:
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.