Rapid miner: CSV с действительными числами с запятыми вместо точек

#csv #floating-point #machine-learning #data-mining #rapidminer

#csv #с плавающей запятой #машинное обучение #интеллектуальный анализ данных #rapidminer

Вопрос:

У меня проблема с импортом 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

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

Спасибо

Комментарии:

1. Можете ли вы показать нам пару строк CSV, чтобы мы могли протестировать решения, которые мы могли бы предложить, и не обнаруживать позже, что они были неправильными?

Ответ №1:

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

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

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

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

Ответ №2:

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

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

Комментарии:

1. Спасибо за ответ. К сожалению, я только начал изучать RapidMiner, используя только графический интерфейс. Нет ли какого-нибудь простого способа сделать это с помощью графического интерфейса?

2. Извините. Я не знаком с RapidMiner. Удачи.

Ответ №3:

 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).
    }
}