Skip to content

Commit

Permalink
date stats
Browse files Browse the repository at this point in the history
  • Loading branch information
sgratzl committed Dec 2, 2018
1 parent 0c61e05 commit 92182c9
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 10 deletions.
6 changes: 4 additions & 2 deletions src/internal/math.ts
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ function computeGranularity(min: Date | null, max: Date | null) {
return {hist, histGranularity: EDateHistogramGranularity.MONTH};
}

export function computeDateState(arr: ISequence<Date | null>): IDateStatistics {
export function computeDateState(arr: ISequence<Date | null>, template?: IDateStatistics): IDateStatistics {
// filter out NaN
let min: Date | null = null;
let max: Date | null = null;
Expand All @@ -368,7 +368,9 @@ export function computeDateState(arr: ISequence<Date | null>): IDateStatistics {
byDay.set(key, (byDay.get(key) || 0) + 1);
});

const {histGranularity, hist} = computeGranularity(min, max);
const {histGranularity, hist} = template ? {
histGranularity: template.histGranularity, hist: template.hist.map((d) => Object.assign({}, d, {count: 0}))
} : computeGranularity(min, max);

return {
min,
Expand Down
6 changes: 3 additions & 3 deletions src/provider/ADataProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import {isSupportType} from '../model/annotations';
import {IEventListener} from '../internal/AEventDispatcher';
import {IDataProviderDump, IColumnDump, IRankingDump, SCHEMA_REF} from './interfaces';
import {ISequence} from '../internal/interable';
import {IStatistics, ICategoricalStatistics} from '../internal';
import {IStatistics, ICategoricalStatistics, IDateStatistics} from '../internal';

export {IExportOptions} from './utils';

Expand Down Expand Up @@ -119,12 +119,12 @@ abstract class ADataProvider extends AEventDispatcher implements IDataProvider {
/**
* stats caches Map<column id, stats> for the whole dataset
*/
private readonly dataStats = new Map<string, Promise<IStatistics | ICategoricalStatistics>>();
private readonly dataStats = new Map<string, Promise<IStatistics | ICategoricalStatistics | IDateStatistics>>();

/**
* stats caches Map<column id, stats> for a column in a ranking
*/
private readonly rankingStats = new Map<string, Promise<IStatistics | ICategoricalStatistics>>();
private readonly rankingStats = new Map<string, Promise<IStatistics | ICategoricalStatistics | IDateStatistics>>();

/**
* the current selected indices
Expand Down
8 changes: 5 additions & 3 deletions src/provider/LocalDataProvider.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import {computeHist, computeNormalizedStats} from '../internal';
import {computeHist, computeNormalizedStats, computeDateState, IDateStatistics} from '../internal';
import Column, {
defaultGroup, IColumnDesc, IDataRow, IGroup, INumberColumn,
IOrderedGroup,
IndicesArray,
mapIndices,
IGroupMeta,
ISetColumn
ISetColumn,
IDateColumn
} from '../model';
import Ranking, {EDirtyReason} from '../model/Ranking';
import ACommonDataProvider from './ACommonDataProvider';
Expand Down Expand Up @@ -295,7 +296,8 @@ export default class LocalDataProvider extends ACommonDataProvider {

return {
stats: (col: INumberColumn, numberOfBins?: number) => computeNormalizedStats(getData().map((d) => col.getNumber(d)), numberOfBins),
hist: (col: ISetColumn) => computeHist(getData().map((d) => col.getSet(d)), col.categories)
hist: (col: ISetColumn) => computeHist(getData().map((d) => col.getSet(d)), col.categories),
dateStats: (col: IDateColumn, template?: IDateStatistics) => computeDateState(getData().map((d) => col.getDate(d)), template)
};
}

Expand Down
6 changes: 4 additions & 2 deletions src/provider/interfaces.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {ICategoricalStatistics, IStatistics} from '../internal';
import {ICategoricalStatistics, IStatistics, IDateStatistics} from '../internal';
import AEventDispatcher from '../internal/AEventDispatcher';
import {Column, IColumnDesc, IGroup, INumberColumn, IndicesArray, ISetColumn} from '../model';
import {Column, IColumnDesc, IGroup, INumberColumn, IndicesArray, ISetColumn, IDateColumn} from '../model';
import Ranking from '../model/Ranking';
import '!file-loader?name=schema.4.0.0.json!./schema.json';
import {ISequence} from '../internal/interable';
Expand All @@ -10,6 +10,8 @@ export interface IStatsBuilder {
stats(col: INumberColumn, bins?: number): Promise<IStatistics> | IStatistics;

hist(col: ISetColumn): Promise<ICategoricalStatistics> | ICategoricalStatistics;

dateStats(col: IDateColumn, template?: IDateStatistics): Promise<IDateStatistics> | IDateStatistics;
}

export interface IDataProviderOptions {
Expand Down

0 comments on commit 92182c9

Please sign in to comment.