Быстрый майнер: CSV с реальными числами с запятыми вместо точек - PullRequest
0 голосов
/ 04 мая 2011

У меня проблема с импортом файла CSV с RapidMiner.Значения с плавающей запятой пишутся с запятыми вместо разделяющей точки между целым и десятичным значениями.

Кто-нибудь знает, как правильно импортировать значения, отформатированные таким образом?

пример данных:

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

Быстрый майнер фактически интерпретирует его как «полином».Принудительное приведение к «реальному» приводит только к правильной интерпретации значения «0».

спасибо

Ответы [ 3 ]

3 голосов
/ 05 декабря 2012

Это, кажется, очень старый запрос. Не уверен, поможет ли это вам, но это может помочь другим в аналогичной ситуации.

Шаг 1: в операторе «Чтение CSV» в разделе «Мастер импорта конфигурации» убедитесь, что в качестве разделителя выбран «Точка с запятой»

Шаг 2: используйте оператор «Угадай типы». Тип фильтра атрибутов -> Подмножество, Выбрать атрибуты -> выберите атрибуты 8, 9 и 16 (на основе вашего примера выше), измените «символ десятичной точки» на «,», и все должно быть установлено.

Надеюсь, это поможет (кому-то!)

0 голосов
/ 05 мая 2011
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).
    }
}
0 голосов
/ 05 мая 2011

Используйте точку с запятой в качестве разделителя.Вы можете использовать java.util.Scanner для чтения каждой строки.String.split() разделить на точку с запятой.Когда вы получаете токен с запятой, вы можете использовать String.replace(), чтобы изменить запятую на десятичную.Тогда вы можете использовать Float.parseFloat()

Надеюсь, что это ответит на ваш вопрос.

...