我正在使用Java从UCI Machine Learning Repository读取和处理一些数据集。 我开始为每个数据集创建一个类并使用特定的类文件。数据集中的每个属性都由所需类型的类中的相应数据成员表示。这种方法很好,直到没有。归因于< 10-15。我只是增加或减少了类的数据成员,并更改了它们的类型以建模新的数据集。我还对功能进行了必要的更改。
问题: 我现在必须处理大量数据集。具有> 20-30属性的那些属于以这种方式工作的繁琐乏味。我不需要查询。我的数据离散化算法只需要对数据进行4次扫描即可将其离散化。我的工作在离散化之后就结束了。这里有什么有效的策略?
我希望我能够清楚地陈述我的问题。
答案 0 :(得分:3)
一些选项:
Object
或String
的数组中,并根据需要进行投射。答案 1 :(得分:1)
创建一个包含如下所示成员的简单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等)。
答案 2 :(得分:0)
我在我的一个项目中做过类似的事情;很多可变数据,在我的情况下,我从互联网上获取数据。由于我需要查询,排序等,我花了一些时间设计数据库以适应数据的所有变化(并非所有条目具有相同数量的属性)。它确实需要一段时间,但最后我使用相同的代码来获取任何条目的数据(在我的情况下使用JPA)。我的IDE(NetBeans)使用数据库模式直接创建了大部分代码。
根据您的问题,您不清楚计划如何使用数据,因此我会根据个人经验回答。