Tidy.js核心功能速览:10个必备函数解决80%数据清洗难题
2026/7/4 5:53:01 网站建设 项目流程

Tidy.js核心功能速览:10个必备函数解决80%数据清洗难题

【免费下载链接】tidyTidy up your data with JavaScript, inspired by dplyr and the tidyverse项目地址: https://gitcode.com/gh_mirrors/ti/tidy

Tidy.js是一个强大的JavaScript数据清洗库,灵感来源于R语言的dplyr和tidyverse,它能让你的数据清洗工作变得简单高效。对于JavaScript和TypeScript开发者来说,Tidy.js提供了标准化的数据处理动词,让你用更少的代码完成80%的数据清洗任务。🚀

为什么选择Tidy.js进行数据清洗?

在数据科学和前端开发中,数据清洗是必不可少但常常繁琐的环节。Tidy.js通过以下优势让你事半功倍:

  • 代码可读性强:函数式编程风格让数据转换逻辑一目了然
  • 无依赖对象包装:直接处理普通JavaScript对象数组
  • 类型安全:完整的TypeScript支持,提供优秀的开发体验
  • 丰富的函数库:提供50+数据处理函数,覆盖常见场景

10个核心函数快速上手

1. tidy() - 数据流水线入口

tidy()是Tidy.js的核心函数,所有数据操作都从这里开始。它接受一个数据数组和一系列处理函数,按顺序执行数据转换:

import { tidy, mutate, arrange, desc } from '@tidyjs/tidy' const results = tidy( data, mutate({ total: d => d.price * d.quantity }), arrange(desc('total')) )

2. mutate() - 创建新列

mutate()用于添加新列或修改现有列,是最常用的数据转换函数:

tidy(data, mutate({ totalPrice: d => d.price * d.quantity, discountPrice: d => d.price * 0.9, category: d => d.type.toUpperCase() }) )

3. arrange() - 数据排序

使用arrange()对数据进行排序,支持升序(asc)和降序(desc):

tidy(data, arrange(desc('score'), asc('name')) // 先按分数降序,再按姓名升序 )

4. filter() - 数据筛选

filter()用于根据条件筛选数据行:

tidy(data, filter(d => d.age > 18 && d.score >= 60) )

5. select() - 列选择

select()帮助你选择需要的列,支持列名数组或选择器函数:

tidy(data, select(['id', 'name', 'score']) // 只保留这三列 )

6. summarize() - 数据聚合

summarize()用于数据聚合计算,常与groupBy()配合使用:

tidy(data, groupBy('department', [ summarize({ avgSalary: mean('salary'), totalEmployees: n(), maxScore: max('score') }) ]) )

7. groupBy() - 数据分组

groupBy()是Tidy.js的强大功能之一,支持多层次数据分组和多种输出格式:

tidy(data, groupBy(['year', 'month'], [ summarize({ total: sum('sales') }) ], groupBy.object({ single: true })) )

8. pivotWider() - 宽表转换

pivotWider()将长格式数据转换为宽格式,适合制作数据透视表:

tidy(longData, pivotWider({ namesFrom: 'month', valuesFrom: 'sales' }) )

9. pivotLonger() - 长表转换

pivotLonger()pivotWider()的逆操作,将宽格式数据转换为长格式:

tidy(wideData, pivotLonger({ cols: ['Jan', 'Feb', 'Mar'], namesTo: 'month', valuesTo: 'sales' }) )

10. join系列 - 数据合并

Tidy.js提供多种数据合并函数,满足不同场景需求:

  • innerJoin():内连接,只保留匹配的行
  • leftJoin():左连接,保留左表所有行
  • fullJoin():全连接,保留所有行
tidy(customers, leftJoin(orders, { by: 'customerId' }), mutate({ total: d => d.price * d.quantity }) )

实用数据处理技巧

处理缺失值

Tidy.js提供专门的函数处理缺失值:

tidy(data, replaceNully({ age: 0, score: d => d.age > 18 ? 60 : 0 }), fill({ direction: 'down', columns: ['department'] }) )

时间序列处理

对于时间序列数据,Tidy.js提供了强大的向量函数:

tidy(timeSeriesData, mutate({ movingAvg: roll('value', { window: 7, partial: true }), lagValue: lag('value', 1), leadValue: lead('value', 1), cumulativeSum: cumsum('value') }) )

数据完整性检查

使用complete()确保数据完整性:

tidy(data, complete({ year: fullSeq('year'), month: fullSeqDate('month', { period: 'month' }) }) )

实际应用场景

电商数据分析

// 分析用户购买行为 const userAnalysis = tidy(purchaseData, groupBy('userId', [ summarize({ totalSpent: sum('amount'), purchaseCount: n(), avgOrderValue: mean('amount'), firstPurchase: first('purchaseDate'), lastPurchase: last('purchaseDate') }) ]), arrange(desc('totalSpent')) )

销售报表生成

// 生成月度销售报表 const monthlyReport = tidy(salesData, mutate({ month: d => d.date.substring(0, 7), revenue: d => d.price * d.quantity }), groupBy(['region', 'month'], [ summarize({ totalRevenue: sum('revenue'), avgOrderValue: mean('revenue'), customerCount: nDistinct('customerId') }) ]), pivotWider({ namesFrom: 'month', valuesFrom: 'totalRevenue' }) )

性能优化建议

  1. 链式操作:Tidy.js的流水线设计天然支持链式操作,减少中间变量
  2. 尽早筛选:使用filter()select()尽早减少数据量
  3. 合理分组:在groupBy()之前完成必要的数据筛选
  4. 利用索引:对于大数据集,考虑先建立索引再处理

学习资源

  • 官方文档:website/docs/getting_started.md
  • API参考:packages/tidy/src/index.ts 查看所有可用函数
  • 示例代码:website/docs/examples/moving_average_example.mdx

总结

Tidy.js通过10个核心函数解决了80%的数据清洗难题,让JavaScript数据处理变得简单而强大。无论你是数据分析师、前端开发者还是全栈工程师,掌握这些核心函数都能显著提升你的工作效率。🎯

记住这个简单的安装命令开始你的Tidy.js之旅:

npm install @tidyjs/tidy # 或 yarn add @tidyjs/tidy

现在就开始使用Tidy.js,让你的数据清洗工作变得更加轻松愉快吧!💪

【免费下载链接】tidyTidy up your data with JavaScript, inspired by dplyr and the tidyverse项目地址: https://gitcode.com/gh_mirrors/ti/tidy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询