创建一个简单的 DataSet 类,其中包含如下成员:
public class DataSet {
private List<Column> columns = new ArrayList<Column>();
private List<Row> rows = new ArrayList<Row>();
public void parse( File file ) {
// routines to read CSV data into this class
}
}
public class Row {
private Object[] data;
public void parse( String row, List<Column> columns ) {
String[] row = data.split(",");
data = new Object[row.length];
int i = 0;
for( Column column : columns ) {
data[i] = column.convert(row[i]);
i++;
}
}
}
public class Column {
private String name;
private int index;
private DataType type;
public Object convert( String data ) {
if( type == DataType.NUMERIC ) {
return Double.parseDouble( data );
} else {
return data;
}
}
}
public enum DataType {
CATEGORICAL, NUMERIC
}
这将处理您希望使用的任何数据集。唯一的问题是用户必须通过将列及其各自的数据类型定义到 DataSet 来定义数据集。您可以在代码中执行此操作,也可以从文件中读取任何您认为更容易的方法。您可能可以默认很多配置数据(例如 CATEGORICAL),或者尝试解析该字段,如果失败,它必须是 CATEGORICAL 否则它的数字。通常,该文件包含一个标题,您可以解析以查找列的名称,然后您只需通过查看该列中的数据来确定数据类型。猜测数据类型的简单算法对您有很大帮助。本质上,这是每个其他包用于此类数据的完全相同的数据结构(例如 R、Weka 等)。