باستخدام رمز 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.