UNPKG

dataframe-js

Version:

Immutable and functional data structure for datascientists and developpers

184 lines (167 loc) 6.29 kB
import tape from "tape"; import GroupedDataFrame from "../src/groupedDataframe"; import DataFrame from "../src/dataframe"; import { tryCatch } from "./utils"; const test = tape; test("GroupedDataFrame can be ", assert => { const df = new DataFrame( [ { column1: 1, column2: "On the road", column3: undefined }, { column1: 3, column2: "again", column3: undefined }, { column1: 1, column2: "again", column3: NaN }, { column1: 3, column2: "On the road", column3: undefined }, { column1: 1, column2: "On the road", column3: NaN }, { column1: 2, column2: "again", column3: undefined } ], ["column1", "column2", "column3"] ); assert.deepEqual( [...new GroupedDataFrame(df, "column3")].map(({ group }) => group.toCollection() )[0], [ { column1: 1, column2: "On the road", column3: undefined }, { column1: 3, column2: "again", column3: undefined }, { column1: 3, column2: "On the road", column3: undefined }, { column1: 2, column2: "again", column3: undefined } ], "created on a column." ); assert.deepEqual( [...new GroupedDataFrame(df, "column3", "column2")].map(({ group }) => group.toCollection() )[0], [ { column1: 1, column2: "On the road", column3: undefined }, { column1: 3, column2: "On the road", column3: undefined } ], "created on multiple columns." ); assert.deepEqual( new GroupedDataFrame(df, "column1") .toCollection() .map(x => Object.keys(x)), [ ["groupKey", "hash", "group"], ["groupKey", "hash", "group"], ["groupKey", "hash", "group"] ], "converted into a collection of dictionnaries containing each group." ); assert.deepEqual( [...new GroupedDataFrame(df, "column1")].map(x => Object.keys(x)), [ ["groupKey", "hash", "group"], ["groupKey", "hash", "group"], ["groupKey", "hash", "group"] ], "converted into a collection of dictionnaries containing each group when destructured." ); assert.deepEqual( new GroupedDataFrame(df, "column1", "column3").show(true), [ '--\n[{"column1":1}]\n--', "| column1 | column2 | column3 |", "------------------------------------", "| 1 | On the... | undefined |", '--\n[{"column1":3}]\n--', "| column1 | column2 | column3 |", "------------------------------------", "| 3 | again | undefined |", "| 3 | On the... | undefined |", '--\n[{"column1":1,"column3":null}]\n--', "| column1 | column2 | column3 |", "------------------------------------", "| 1 | again | NaN |", "| 1 | On the... | NaN |", '--\n[{"column1":2}]\n--', "| column1 | column2 | column3 |", "------------------------------------", "| 2 | again | undefined |" ].join("\n"), "showed as a String." ); assert.deepEqual( new GroupedDataFrame(df, "column1") .map((row, i) => row.set("idx", i)) .drop("column3") .toCollection(), [ { column1: 1, column2: "On the road", idx: 0 }, { column1: 1, column2: "again", idx: 1 }, { column1: 1, column2: "On the road", idx: 2 }, { column1: 3, column2: "again", idx: 0 }, { column1: 3, column2: "On the road", idx: 1 }, { column1: 2, column2: "again", idx: 0 } ], "mapped with row index" ); assert.deepEqual( new GroupedDataFrame(df, "column1") .filter((row, i) => i === 0) .drop("column3") .toCollection(), [ { column1: 1, column2: "On the road" }, { column1: 3, column2: "again" }, { column1: 2, column2: "again" } ], "filtered based on index" ); assert.deepEqual( new GroupedDataFrame(df, "column1") .chain( (row, i) => i === 0, row => row.set("column4", row.get("column1") * 2) ) .drop("column3") .toCollection(), [ { column1: 1, column2: "On the road", column4: 2 }, { column1: 3, column2: "again", column4: 6 }, { column1: 2, column2: "again", column4: 4 } ], "filtered based on index" ); assert.end(); }); test("GroupedDataFrame can't be ", assert => { assert.equal( tryCatch(() => new GroupedDataFrame()).name, "ArgumentTypeError", "created without DataFrame." ); assert.end(); }); test("GroupedDataFrame groups can be ", assert => { const df = new DataFrame( [ { column1: 1, column2: "On the road", column3: undefined }, { column1: 3, column2: "again", column3: undefined }, { column1: 1, column2: "again", column3: NaN }, { column1: 3, column2: "On the road", column3: undefined }, { column1: 1, column2: "On the road", column3: NaN }, { column1: 2, column2: "again", column3: undefined } ], ["column1", "column2", "column3"] ); assert.deepEqual( new GroupedDataFrame(df, "column1", "column2").listGroups(), [ { column1: 1, column2: "On the road" }, { column1: 3, column2: "again" }, { column1: 1, column2: "again" }, { column1: 3, column2: "On the road" }, { column1: 2, column2: "again" } ], "listed." ); assert.deepEqual( new GroupedDataFrame(df, "column3", "column2") .aggregate(group => group.count()) .toCollection()[0], { column3: undefined, column2: "On the road", aggregation: 2 }, "aggregated, rendering a DataFrame with a column aggregation." ); assert.end(); });