0

J'ai un problème lors de l'importation d'un fichier CSV avec RapidMiner. Les valeurs de virgule flottante sont écrites avec des virgules au lieu du point de séparation entre les valeurs entières et décimales.Mineur rapide: CSV avec des nombres réels avec des virgules au lieu de points

Quelqu'un sait comment importer correctement les valeurs formatées de cette façon?

données

exemple:

BMI;1;0;1;1;1;blue;-0,138812155;0,520378909;5;0;50;107;0;9;0;other;good;2011 BMI;1;0;1;1;1;pink;-0,624654696;;8;0;73;120;1;3;0,882638889;other;good;2011

mineur rapide, il interprète en fait comme "polynôme". Le forcer à "réel" ne conduit qu'à une interprétation correcte de la valeur "0".

merci

+1

Pouvez-vous nous montrer un couple de lignes du CSV afin que nous puissions tester les solutions que nous pourrions venir avec et ne pas trouver plus tard, ils ont eu tort? –

+0

Oui. Je viens de le faire. – fstab

Répondre

0

Utilisez le point-virgule comme délimiteur. Vous pouvez utiliser java.util.Scanner pour lire chaque ligne. String.split() pour diviser sur le point-virgule. Lorsque vous obtenez un jeton avec une virgule, vous pouvez utiliser String.replace() pour remplacer la virgule par une virgule. Ensuite, vous pouvez utiliser Float.parseFloat()

Espérons que cela répond à votre question.

+0

Merci pour la réponse. Malheureusement, je viens de commencer à apprendre RapidMiner, en utilisant seulement l'interface graphique. N'y a-t-il pas un moyen simple de le faire avec l'interface graphique? – fstab

+0

Désolé. Je ne connais pas RapidMiner. Bonne chance. – JustinKSU

0
public static void main(String args){ 
    BufferedReader br = new BufferedReader(new FileReader("c:\\path\\semicolons and numbers and commas.csv")); 
    try { 
     for(String line; (line=br.readLine()) != null);) { 
      //Variable line now has a single line from the file. This code will execute for each line. 
      String array = line.split(";");// Split on the semicolon. Beware of changing this. This uses regex which means that some characters mean something like . means anything, not just dots. 
      double firstDouble = Double.parseDouble(array[7].replace(',','.')); // Get field 7 (the eighth field) and turn it into a double (high precision floating point). Replace , with . so it will not make an error 
      System.err.println("Have a number " + firstDouble); 
      System.err.println("Can play with it " + (firstDouble * 2.0)); 
     } 
    }finally{ 
     br.close(); // Free resources (and unlock file on Windows). 
    } 
} 
3

Cela semble être une très vieille demande. Je ne sais pas si cela vous aidera, mais cela peut aider d'autres personnes dans une situation similaire.

Étape 1: dans le « Lire CSV » opérateur, sous « Assistant de configuration d'importation », assurez-vous que vous sélectionnez « Point-virgule » comme séparateur

Etape 2: Opérateur du « Types Devinez ». Attribute Filter Type -> Sous-ensemble, Select Attributes -> sélectionnez les attributs 8, 9 et 16 (en fonction de votre exemple ci-dessus), changez le "caractère point décimal" en un "," et vous devriez tous être définis.

Hope this helps (quelqu'un!)

Questions connexes