/** * Created by michaelbessey on 8/31/16. */ // declare let d3; // import {ascending as d3_ascending, sum as d3_sum, min as d3_min, median as d3_median, // mean as d3_mean, max as d3_max, extent as d3_extent, // range as d3_range, histogram as d3_histogram, quantile as d3_quantile} from 'd3-array'; // import {nest as d3_nest} from 'd3-collection'; // import {pie as d3_pie, stack as d3_stack} from 'd3-shape'; import * as d3 from "d3"; import { createAggregateGroupTransform, createCategorizeNestedTransform, createConvertTransform, createFilterTransform, createOperateEachTransform, createSortTransform, createSortByValueTransform, transformCategorizeNested, transformConvert, transformOperateEach, transformSortByValue } from "./transform"; import { createBinModel, createBoxModel, createPieModel, createStackModel } from "./model"; import { scrapeTable } from "./utils"; export class DataOperator { dataArray; constructor(data = []) { this.dataArray = data; } newOperation(){ return new DataOperator(this.dataArray); } clone(){ return new DataOperator(JSON.parse(JSON.stringify(this.dataArray))); } categorizeNestedDataArray(){ return transformCategorizeNested(this.dataArray); } convert(conversionMap): DataOperator { transformConvert(this.dataArray, conversionMap); return this; } filter(dFilter: Function): DataOperator { return new DataOperator(this.dataArray.filter(dFilter)); } operate(operation: Function): DataOperator { return new DataOperator(operation(this.dataArray)); } operateEach(operation: Function): DataOperator { return new DataOperator(transformOperateEach(this.dataArray, operation)); } aggregateGroup(groupKeyArray: string[], valueKey, operation): DataOperator { this.dataArray = createAggregateGroupTransform(groupKeyArray, valueKey, operation)(this.dataArray); return this; } aggregate(groupKey, valueKey, operation): DataOperator { return this.aggregateGroup([groupKey], valueKey, operation); } sort(comparator: Function): DataOperator{ this.dataArray = createSortTransform(comparator)(this.dataArray); return this; } sortByValue(valueMap: Function): DataOperator { this.dataArray = transformSortByValue(this.dataArray, valueMap); return this; } binData(valueMap: Function, binWidth: number){ return createBinModel(this.dataArray, valueMap, binWidth) } boxData(valueMap: Function) { return createBoxModel(this.dataArray, valueMap); } pieData(valueMap: Function) { return createPieModel(this.dataArray, valueMap); } stackData(mapper) { return createStackModel(this.dataArray, mapper); } logHead(lines: number = 10): DataOperator { let i = 0; if (this.dataArray) { for (i = 0; i < lines; i++) { console.log(this.dataArray[i]); } } return this; } tableScraper(tableSelector: string): DataOperator { this.dataArray = scrapeTable(tableSelector); return this; } }