次のようなメンバーを含む単純な 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 など) に使用するのとまったく同じデータ構造です。