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