/* * RapidMiner * * Copyright (C) 2001-2008 by Rapid-I and the contributors * * Complete list of developers available at our web site: * * http://rapid-i.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.datatable; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import com.rapidminer.Process; import com.rapidminer.report.Tableable; /** * A data table that contains Object arrays that record process results, data, etc. * Instances of this class are automatically created by * {@link Process#getDataTables()} and are used mainly by the * {@link com.rapidminer.operator.visualization.ProcessLogOperator}. On the other hand, * also {@link com.rapidminer.example.ExampleSet}s can also be used as an data table object. * * @author Ingo Mierswa * @version $Id: DataTable.java,v 1.6 2008/07/07 10:52:20 ingomierswa Exp $ */ public interface DataTable extends Iterable<DataTableRow>, Tableable { /** Indicates if the column with the given index is nominal. For numerical or date columns, the value false * should be returned. */ public boolean isNominal(int index); /** Indicates if the column with the given index is nominal. For numerical or date columns, the value false * should be returned. */ public boolean isTime(int index); /** Indicates if the column with the given index is nominal. For numerical or date columns, the value false * should be returned. */ public boolean isDate(int index); /** Indicates if the column with the given index is nominal. For numerical or date columns, the value false * should be returned. */ public boolean isDateTime(int index); /** Indicates if the column with the given index is nominal. For numerical or date columns, the value false * should be returned. */ public boolean isNumerical(int index); /** If a column is nominal, the index value must be mapped to the nominal value by this method. * If the given column is not nominal, this method might throw a {@link NullPointerException}. */ public String mapIndex(int column, int index); /** If a column is nominal, the nominal value must be mapped to a (new) index by this method. * If the given column is not nominal, this method might throw a {@link NullPointerException}. */ public int mapString(int column, String value); /** Returns the name of the i-th column. */ public String getColumnName(int i); /** Returns the column index of the column with the given name. */ public int getColumnIndex(String name); /** Returns the weight of the column or Double.NaN if no weight is available. */ public double getColumnWeight(int i); /** Returns true if this data table is supporting column weights. */ public boolean isSupportingColumnWeights(); /** Returns the total number of columns. */ public int getNumberOfColumns(); /** Returns the total number of special columns. Please note that these columns do not need to be * in an ordered sequence. In order to make sure that a column is a special column the method * {@link #isSpecial(int)} should be used. */ public int getNumberOfSpecialColumns(); /** Returns true if this column is a special column which might usually not be used for some plotters, * for example weights or labels. */ public boolean isSpecial(int column); /** Returns an array of all column names. */ public String[] getColumnNames(); /** Returns the name of this data table. */ public String getName(); /** Sets the name of the data table. */ public void setName(String name); /** Adds the given {@link DataTableRow} to the table. */ public void add(DataTableRow row); /** Returns an iterator over all {@link DataTableRow}s. */ public Iterator<DataTableRow> iterator(); /** Returns the data table row with the given index. Please note that this method is not guaranteed to * be efficiently implemented. If you want to scan the complete data table you should use the iterator() * method instead. */ public DataTableRow getRow(int index); /** Returns the total number of rows. */ public int getNumberOfRows(); /** Returns the number of different values for the i-th column. Might return -1 or throw an * exception if the specific column is not nominal. */ public int getNumberOfValues(int column); /** Must deliver the proper value as string, i.e. the mapped value for nominal columns. */ public String getValueAsString(DataTableRow row, int column); /** Adds a table listener listening for data changes. */ public void addDataTableListener(DataTableListener dataTableListener); /** Removes the given listener from the list of data change listeners. */ public void removeDataTableListener(DataTableListener dataTableListener); /** Writes the table into the given writer. */ public void write(PrintWriter out) throws IOException; /** Performs a sampling of this data table. Following operations should only work on the sample. */ public void sample(int newSize); /** Returns true if this data table contains missing values. */ public boolean containsMissingValues(); }