快速挖掘器:带有逗号而不是点的实数的CSV

时间:2011-05-04 19:59:57

标签: csv floating-point machine-learning data-mining rapidminer

使用RapidMiner导入CSV文件时出现问题。 浮点值用逗号写,而不是整数和小数值之间的分隔点。

任何人都知道如何正确导入以这种方式格式化的值?

示例数据:

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”值的正确解释。

感谢

3 个答案:

答案 0 :(得分:3)

这似乎是一个非常古老的要求。不确定这是否会对您有所帮助,但这可能有助于处于类似情况的其他人。

步骤1:在“读取CSV”操作符的“导入配置向导”下,确保选择“分号”作为分隔符

步骤2:使用“Guess Types”运算符。属性过滤器类型 - >子集,选择属性 - >选择属性8,9和16(基于上面的示例),将“小数点字符”更改为“,”,您应该全部设置。

希望这有帮助(有人!)

答案 1 :(得分:0)

使用分号作为分隔符。您可以使用java.util.Scanner读取每一行。 String.split()分裂分号。当您获得带逗号的令牌时,可以使用String.replace()将逗号更改为小数。然后,您可以使用Float.parseFloat()

希望这能回答你的问题。

答案 2 :(得分:0)

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