资讯详情

资讯详情

Dataset.js 派生数据集实战:groupBy、countBy 与 movingAverage 让数据变换更智能

【免费下载链接】datasetJavaScript library that makes managing the data behind client-side visualisations easy项目地址https://gitcode.com/gh_mirrors/datas/dataset点击查看免费下载Dataset.jsMiso.Dataset是一个帮助前端开发者轻松管理可视化数据的 JavaScript 库负责数据的加载、解析、排序、过滤与查询。其中最实用的能力之一是派生数据集Derived Dataset通过groupBy、countBy和movingAverage三个方法你可以从原始数据一键生成汇总统计、频次计数和滑动平均并且原始数据更新时结果会自动重算。本文带你快速上手这三项数据变换功能。什么是派生数据集派生数据集本质上是一个计算出来的子数据集。它保持对父数据集的引用记录生成它的方法拥有独立的_id主键和_oids列保存参与计算的原行 id行为和普通数据集完全一样可以继续用where、rows、toJSON等 DataView 接口查询核心实现位于 src/derived.js所有派生方法都挂载在Dataset.DataView原型上所以 Dataset 和 Derived 都能调用。准备工作创建并加载一个数据集下面的示例基于项目测试用例 test/unit/derived.js 中的数据var ds new Miso.Dataset({ data : { columns : [ { name : state, type : string, data : [AZ, AZ, AZ, MA, MA, MA] }, { name : count, type : number, data : [1, 2, 3, 4, 5, 6] }, { name : anothercount, type : number, data : [10, 20, 30, 40, 50, 60] } ] }, strict: true }); _.when(ds.fetch()).then(function () { // 数据集就绪可以开始变换 });fetch是异步的变换操作请放在success回调或 Promise 回调中执行。groupBy按列分组并自动汇总groupBy(byColumn, columns, options)按指定列把行分箱并对指定列做聚合。参数说明参数作用byColumn分组依据的列名如statecolumns需要聚合的列名数组options.method聚合函数默认求和可传入任意function(arr)options.preprocess分组值归一化函数适合时间分箱等非精确相等的分组基本用法——按州汇总两列数值var grouped ds.groupBy(state, [count, anothercount]); // state: [AZ, MA] // count: [6, 15] // 123 / 456 // anothercount: [60, 150] // 102030 / 405060官方示例见 examples/api/dataview/group-by.js。自定义聚合方法默认求和不够用传入自己的method即可比如求乘积var grouped ds.groupBy(state, [count], { method: function (arr) { return _.reduce(arr, function (memo, num) { return memo * num; }, 1); } });preprocess按派生值分组当分组键需要先做转换比如把日期归到某一年可以用preprocess对每个分组值做归一化ds.groupBy(state, [count], { preprocess: function (state) { return state state; } // 分组结果变为 [AZAZ, MAMA] });这一技巧常用于按时间粒度年/月/周对时间戳列分箱统计。countBy一行代码统计取值频次countBy(byColumn)会返回一个包含两列的派生数据集原列 count列直接给出每个取值出现的次数。以测试数据[a,b,a,a,c,c,null,a,b,c]为例var counted ds.countBy(category); // category: [a, b, null, c] // count: [4, 2, 1, 2]它的亮点✅ 能统计任意类型包括null、对象、数组测试用例 counting a mess✅ 时间列会被正确解析后比较同一天的两条记录会合并计数✅ 结果仍是数据集可继续rows/where筛选完整示例见 examples/api/dataview/count-by.js。做词频、类别分布图时这一步省去了大量手写循环。movingAverage滑动平均抹平波动movingAverage(columns, size, options)对指定列计算滑动平均窗口大小为sizevar ds new Miso.Dataset({ data : { columns : [ { name : A, data : [1,2,3,4,5,6,7,8,9,10], type : numeric }, { name : B, data : [10,9,8,7,6,5,4,3,2,1], type : numeric } ] }, strict : true }); _.when(ds.fetch()).then(function () { var ma this.movingAverage([A], 3); // A: [2, 3, 4, 5, 6, 7, 8, 9] 每行是连续 3 个值的平均 // ma.length 10 - 3 1 8 });几个关键行为来自 test/unit/derived.js 中的 Moving Average 模块 结果行数 原行数 −size 1因为前size-1行凑不满窗口未参与平均的列会被原样保留如B、C列直接复制方便对照绘图 默认聚合函数是mean也可通过options.method换成方差等如{ method : _.variance } 不能对 id 列求滑动平均否则直接抛出错误_oids列保存了每个窗口对应的原行 id 数组便于回溯股票 K 线加均线、传感器数据平滑、销量趋势分析——都是它的典型场景。真正的杀手锏派生结果自动同步如果父数据集开启了实时同步sync: true派生数据集会自动重新计算无需手动刷新var ds new Miso.Dataset({ data : getData(), strict : true, sync : true }); _.when(ds.fetch()).then(function () { var grouped ds.groupBy(state, [count, anothercount]); ds.add({ state : MN, count : 100, anothercount : 100 }); // grouped 立刻变为 [AZ, MA, MN]无需任何手动操作 });测试用例覆盖了完整的实时场景add新类别 → 新增分组行update修改分组键 → 该行自动迁移到新分组remove删除行 → 汇总值即时扣减movingAverage在源数据update后同样自动重算实现原理很简单派生数据集在父数据集上subscribe(change, ...)事件触发时重新执行生成它的func并广播change见 src/derived.js 中Dataset.Derived构造函数与_sync方法。做实时看板时你只需把派生数据集接到图表上数据变了图就变了。小结三种变换各适合什么场景方法一句话定位适用场景groupBy分组 聚合默认求和可自定义分类汇总、按时间分箱统计countBy统计每列取值频次词频、类别分布、饼图数据movingAverage窗口滑动平均趋势平滑、均线叠加三者的共同优势结果是标准数据集可继续用where、sort、toJSON二次加工开启sync后还能实时联动。相关功能入口汇总核心实现src/derived.js官方示例examples/api/dataview/group-by.js、examples/api/dataview/count-by.js单元测试含完整用法test/unit/derived.js项目说明README.md掌握groupBy、countBy和movingAverage你就能用 Dataset.js 把原始数据变换成图表直接可用的形态——数据管理从此更智能。赞分享【免费下载链接】datasetJavaScript library that makes managing the data behind client-side visualisations easy项目地址https://gitcode.com/gh_mirrors/datas/dataset点击查看免费下载相关推荐ModelMapper智能对象映射让数据转换变得更简单ModelMapper智能对象映射让数据转换变得更简单 是一个强大的 Java 库专为简化对象之间的映射过程而设计。在软件开发中尤其是在处理数据模型时lodash集合统计countBy与sumBy数据聚合lodash集合统计countBy与sumBy数据聚合 在日常开发中我们经常需要对数组或对象集合进行统计分析比如计算不同类别的数量分布、汇总特定字段的数值前端后端Dolt数据版的Git让数据库管理更智能Dolt数据版的Git让数据库管理更智能 项目介绍 Dolt 是一款革命性的 SQL 数据库它将 Git 的版本控制功能与 MySQL 的数据管理能力完美数据库关系型数据库后端CLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →