Search in sources :

Example 16 with ColumnType

use of tech.tablesaw.api.ColumnType in project symja_android_library by axkr.

the class ASTDataset method select.

@Override
public IExpr select(IAST ast) {
    IExpr row = ast.arg1();
    IExpr column = ast.arg2();
    IExpr[] part = new IExpr[ast.size() - 3];
    IExpr result = select(row, column);
    if (part.length == 0) {
        return result;
    }
    if (result.isDataset()) {
        for (int i = 0; i < part.length; i++) {
            part[i] = ast.get(i + 3);
        }
        EvalEngine engine = EvalEngine.get();
        ASTDataset dataset = (ASTDataset) result;
        Table table = dataset.fTable;
        final List<String> names = table.columnNames();
        if (names.size() > 0) {
            Table resultTable = Table.create();
            Column<?>[] cols = new Column<?>[names.size()];
            for (int i = 0; i < names.size(); i++) {
                cols[i] = ExprColumn.create(names.get(i));
            }
            resultTable.addColumns(cols);
            for (int i = 0; i < table.rowCount(); i++) {
                Row currentRow = table.row(i);
                Row resultRow = resultTable.appendRow();
                for (int j = 0; j < table.columnCount(); j++) {
                    String columnName = names.get(j);
                    ColumnType t = currentRow.getColumnType(columnName);
                    IExpr arg = dataToExpr(table.get(i, j), t);
                    IExpr value = S.Part.of1(engine, arg, part);
                    if (value.isAST(S.Part) || !value.isPresent()) {
                        IASTAppendable missing = F.ast(S.Missing);
                        missing.append(F.$str("PartAbsent"));
                        missing.appendAll(part, 0, part.length);
                        value = missing;
                    }
                    resultRow.setExpr(columnName, value);
                }
            }
            return ASTDataset.newTablesawTable(resultTable);
        }
    }
    return F.NIL;
}
Also used : IASTDataset(org.matheclipse.core.interfaces.IASTDataset) Table(tech.tablesaw.api.Table) ColumnType(tech.tablesaw.api.ColumnType) IASTAppendable(org.matheclipse.core.interfaces.IASTAppendable) Column(tech.tablesaw.columns.Column) ExprColumn(tech.tablesaw.api.ExprColumn) EvalEngine(org.matheclipse.core.eval.EvalEngine) IExpr(org.matheclipse.core.interfaces.IExpr) Row(tech.tablesaw.api.Row)

Example 17 with ColumnType

use of tech.tablesaw.api.ColumnType in project symja_android_library by axkr.

the class Summarizer method apply.

/**
 * Returns the result of applying to the functions to all the values in the appropriate column
 * TODO add a test that uses a non numeric return type with apply
 */
@SuppressWarnings({ "unchecked", "rawtypes" })
public Table apply() {
    if (groupColumnNames.length > 0) {
        TableSliceGroup group = StandardTableSliceGroup.create(temp, groupColumnNames);
        return summarize(group);
    } else {
        List<Table> results = new ArrayList<>();
        ArrayListMultimap<String, AggregateFunction<?, ?>> reductionMultimap = getAggregateFunctionMultimap();
        for (String name : reductionMultimap.keys()) {
            List<AggregateFunction<?, ?>> reductions = reductionMultimap.get(name);
            Table table = TableSliceGroup.summaryTableName(temp);
            for (AggregateFunction function : reductions) {
                Column column = temp.column(name);
                Object result = function.summarize(column);
                ColumnType type = function.returnType();
                Column newColumn = type.create(TableSliceGroup.aggregateColumnName(name, function.functionName()));
                if (result instanceof Number) {
                    Number number = (Number) result;
                    newColumn.append(number.doubleValue());
                } else {
                    newColumn.append(result);
                }
                table.addColumns(newColumn);
            }
            results.add(table);
        }
        return (combineTables(results));
    }
}
Also used : Table(tech.tablesaw.api.Table) ColumnType(tech.tablesaw.api.ColumnType) QuerySupport.numberColumn(tech.tablesaw.api.QuerySupport.numberColumn) Column(tech.tablesaw.columns.Column) CategoricalColumn(tech.tablesaw.api.CategoricalColumn) IntColumn(tech.tablesaw.api.IntColumn) ArrayList(java.util.ArrayList) StandardTableSliceGroup(tech.tablesaw.table.StandardTableSliceGroup) TableSliceGroup(tech.tablesaw.table.TableSliceGroup)

Aggregations

ColumnType (tech.tablesaw.api.ColumnType)17 Table (tech.tablesaw.api.Table)7 ArrayList (java.util.ArrayList)6 Column (tech.tablesaw.columns.Column)6 List (java.util.List)3 IExpr (org.matheclipse.core.interfaces.IExpr)3 Reader (java.io.Reader)2 Map (java.util.Map)2 NoSuchElementException (java.util.NoSuchElementException)2 IASTAppendable (org.matheclipse.core.interfaces.IASTAppendable)2 DoubleColumn (tech.tablesaw.api.DoubleColumn)2 IntColumn (tech.tablesaw.api.IntColumn)2 LongColumn (tech.tablesaw.api.LongColumn)2 Row (tech.tablesaw.api.Row)2 Objects (com.google.common.base.Objects)1 Strings (com.google.common.base.Strings)1 Lists (com.google.common.collect.Lists)1 Streams (com.google.common.collect.Streams)1 AbstractParser (com.univocity.parsers.common.AbstractParser)1 ResultSetMetaData (java.sql.ResultSetMetaData)1