Rapid Miner: CSV mit reellen Zahlen mit Kommas anstelle von Punkten
-
28-10-2019 - |
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
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).
}
}