باستخدام رمز Weka Java - كيف تحويل CSV (بدون صف رأس) إلى تنسيق ARFF؟

StackOverflow https://stackoverflow.com/questions/3517186

  •  29-09-2019
  •  | 
  •  

سؤال

أنا أستخدم مكتبة 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 هو الرأس. إذا كان هذا مثيلًا ، فسيستخدم بيانات المثيل هذه كصف رأس وليس كبيانات مثيل ، وهو بالتأكيد ليس ما تريده.

قبل الرمز أعلاه ، تحتاج إلى قراءة الملف في ، واكتب صف رأس ، وحفظ الملف مرة أخرى.

نرى إجابتي على سؤالك في قائمة Weka البريدية.

نصائح أخرى

يمكنك استخدام الخيار -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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top