Frage

Ich habe ein Problem beim Importieren einer CSV-Datei mit RapidMiner. Gleitkommawerte werden mit Kommas anstelle des Trennpunkts zwischen Ganzzahl- und Dezimalwerten geschrieben.

Weiß jemand, wie man die auf diese Weise formatierten Werte korrekt importiert?

Beispieldaten:

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 interpretiert es tatsächlich als "Polynom".Das Erzwingen auf "real" führt nur zu einer korrekten Interpretation des Werts "0".

danke

War es hilfreich?

Lösung

Verwenden Sie ein Semikolon als Trennzeichen.Sie können java.util.Scanner verwenden, um jede Zeile zu lesen.String.split() zum Aufteilen auf das Semikolon.Wenn Sie ein Token mit einem Komma erhalten, können Sie String.replace() verwenden, um das Komma in eine Dezimalzahl zu ändern.Dann können Sie Float.parseFloat() verwenden

Hoffe, dies beantwortet Ihre Frage.

Andere Tipps

Dies scheint eine sehr alte Anfrage zu sein.Ich bin mir nicht sicher, ob dies Ihnen helfen wird, aber dies kann anderen in einer ähnlichen Situation helfen.

Schritt 1: Stellen Sie im Operator "CSV lesen" unter "Konfigurationsassistent importieren" sicher, dass Sie "Semikolon" als Trennzeichen auswählen

Schritt 2: Verwenden Sie den Operator "Guess Types".Attributfiltertyp -> Teilmenge, Attribute auswählen -> Attribute 8, 9 und 16 auswählen (basierend auf Ihrem obigen Beispiel), "Dezimalpunktzeichen" in "" ändern, und Sie sollten alle festgelegt sein.

Hoffe das hilft (jemandem!)

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).
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top