Question

J'ai un problème à importer un fichier CSV avec RapidMiner. Les valeurs de points flottants sont écrites avec des virgules au lieu du point séparant entre les valeurs entières et décimales.

Quelqu'un sait-il comment importer correctement les valeurs formatées de cette manière?

Exemples de données:

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

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

Merci

Était-ce utile?

La solution

Utilisez le semi-colon comme délimiteur. Vous pouvez utiliser java.util.Scanner pour lire chaque ligne. String.split() se séparer sur le demi-colon. Lorsque vous obtenez un jeton avec une virgule, vous pouvez utiliser String.replace() Pour changer la virgule en décimal. Alors vous pouvez utiliser Float.parseFloat()

J'espère que cela vous répond.

Autres conseils

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

Étape 1: Dans l'opérateur "Read CSV", sous "Assistant d'importation de configuration", assurez-vous de sélectionner "Semicolon" comme séparateur

Étape 2: Utilisez l'opérateur "Guess Types". Type de filtre d'attribut -> Sous-ensemble, sélectionnez Attributs -> Sélectionnez les attributs 8, 9 et 16 (en fonction de votre exemple ci-dessus), modifiez le "caractères de point décimal" en "," et vous devez être tous définis.

J'espère que cela aide (quelqu'un!)

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).
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top