Pregunta

Tengo un problema al importar un archivo CSV con RapidMiner. Los valores de coma flotante se escriben con comas en lugar del punto de separación entre los valores enteros y decimales.

¿Alguien sabe cómo importar correctamente los valores formateados de esta manera?

datos de muestra:

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 en realidad lo interpreta como "polinomio".Forzarlo a "real" solo conduce a una interpretación correcta del valor "0".

gracias

¿Fue útil?

Solución

Utilice punto y coma como delimitador.Puede utilizar java.util.Scanner para leer cada línea.String.split() para dividir en punto y coma.Cuando obtiene un token con una coma, puede usar String.replace() para cambiar la coma a un decimal.Entonces puedes usar Float.parseFloat()

Espero que esto responda a su pregunta.

Otros consejos

Esta parece ser una solicitud muy antigua.No estoy seguro de si esto le ayudará, pero puede ayudar a otras personas con una situación similar.

Paso 1: en el operador "Leer CSV", en "Asistente de configuración de importación", asegúrese de seleccionar "Punto y coma" como separador

Paso 2: utilice el operador "Adivinar tipos".Tipo de filtro de atributo -> Subconjunto, seleccione Atributos -> seleccione los atributos 8, 9 y 16 (según el ejemplo anterior), cambie el "carácter de punto decimal" por un "" y debería estar listo.

Espero que esto ayude (¡alguien!)

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).
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top