Pergunta

Tenho um problema ao importar um arquivo CSV com RapidMiner. Os valores de vírgula flutuante são escritos com vírgulas em vez do ponto de separação entre os valores inteiros e decimais.

Alguém sabe importar corretamente os valores formatados desta forma?

amostra de dados:

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

O minerador rápido na verdade o interpreta como "polinomial".Forçar para "real" leva apenas a uma interpretação correta do valor "0".

obrigado

Foi útil?

Solução

Use ponto-e-vírgula como delimitador.Você pode usar java.util.Scanner para ler cada linha.String.split() para dividir no ponto e vírgula.Quando você obtém um token com uma vírgula, pode usar String.replace() para alterar a vírgula para um decimal.Então você pode usar Float.parseFloat()

Espero que isso responda sua pergunta.

Outras dicas

Este parece ser um pedido muito antigo.Não tenho certeza se isso irá ajudá-lo, mas pode ajudar outras pessoas com uma situação semelhante.

Etapa 1: no operador "Ler CSV", em "assistente de configuração de importação", certifique-se de selecionar "Ponto e vírgula" como separador

Etapa 2: use o operador "Tipos de suposição".Tipo de Filtro de Atributo -> Subconjunto, Selecionar Atributos -> selecione os atributos 8, 9 e 16 (com base em seu exemplo acima), altere "caractere de ponto decimal" para "e" estará tudo pronto.

Espero que ajude (alguém!)

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top