数据分析CLI数据可视化【免费下载链接】visidataA terminal spreadsheet multitool for discovering and arranging data项目地址https://gitcode.com/gh_mirrors/vi/visidata点击查看免费下载本文围绕 VisiData 的PivotSheet机制讲解如何把频率表Frequency Table扩展为真正的数据透视表以关键列分组、以当前列为列头、按聚合器汇总每个单元格。读者将掌握!key-col、aggregate-col、ShiftWpivot的完整操作链路理解默认count聚合与自定义聚合的替换规则并能通过Enter下钻到每个单元格背后的原始行。Pivot Table 的本质带更多列的频率表在 VisiData 中Pivot Table 就是分组方式更多、汇总维度更丰富的 Frequency Table。二者共享同一套分组与聚合心智模型频率表Frequency Table把行按某个列的值分成若干组bin并为带聚合器的源列生成汇总列参见 FrequencyTable.md透视表Pivot Table在此基础上再把当前列的不同取值变成列头于是每个单元格都对应某个分组 × 某个取值下的聚合结果。从源码看透视表由PivotSheet实现pivot.py其行类型为PivotGroupRow一个行代表一个分组内部记录PivotGroupRow (discrete_keys, numeric_key, sourcerows, pivotrows)其中discrete_keys是该分组的关键列取值列表numeric_key是数值分箱后的区间sourcerows是落入该分组的全部源行而pivotrows是一个{透视取值: 源行列表}的字典正是它支撑了每个单元格链接到原始行的能力pivot.py。创建透视表的命令定义在 pivot.pySheet.addCommand(W, pivot, vd.push(makePivot(sheet, keyCols, [cursorCol])), open Pivot Table: group rows by key column and summarize current column)也就是说按所有关键列keyCols分组把光标所在列作为透视列生成并压入一个PivotSheet。若需要逆操作把宽格式透视表还原为长格式参见 MeltGuide。创建透视表的四步操作1. 设置关键列key column用!命令名key-col把主列设为关键列。该列的值将出现在透视表左侧作为行标题数据集将按这些值分组。多个关键列可同时生效Shift!批量设置分组顺序与关键列顺序一致。该命令定义于 sheets.py!实际是一个切换开关依据cursorCol.keycol在key-col-onsetKeys([cursorCol])与key-col-off之间切换光标列标题前会出现标识。2.可选为列添加聚合器透视表单元格的默认聚合方法是count。若要汇总数值需在构建透视表之前用命令名aggregate-col为源列添加聚合器。每添加一个聚合器就会为每一个透视列生成一列聚合结果。命令定义于 aggregators.pySheet.addCommand(, aggregate-col, addAggregators([cursorCol], chooseAggregators()), Add aggregator to current column)按下后会弹出聚合器选择面板chooseAggregators支持 Tab 高亮、空格多选、数字快捷选择见 aggregators.py。当前仓库内置的聚合器包括聚合器说明返回类型min/max最小值 / 最大值继承源列sum求和继承源列avg/mean算术平均数值median/mode中位数 / 众数数值 / 继承源列stdev标准差浮点distinct去重后数量vlencount值的数量intlist值列表每行一个值继承源列q3/q4/q5/q10分位数族数值p10…p99各百分位数值keymin/keymax极值所在行的关键列值任意聚合器清单定义于 aggregators.py。注意任何自定义聚合器都会替换默认的count聚合——一旦某个透视列带上了自定义聚合器该列的count列就不会再生成。务必先设置合适的列类型数值列默认可能被推断为字符串类型聚合求和会得到错误结果。用%命令名type-float定义于 sheets.py或#type-intsheets.py为聚合目标列设置类型再执行。3. 移动光标到透视值列把光标移到需要对其每个取值做聚合的列上。该列的每个不同取值将成为透视表的列头。4. 创建透视表按ShiftW命令名pivot在当前列上创建透视表。透视表自动以源表名 _pivot_ 透视列名命名见 pivot.py 的命名逻辑并以异步线程加载大表也能保持界面响应pivot.py 将addAggregateCols与groupRows并行执行。完整操作序列对应官方示例步骤按键命令作用1!key-col在date列上设为关键列2ShiftWpivot在color列上创建透视表3qquit-sheet返回原 sales 表sheets.py4#type-float把price列类型设为 float5aggregate-col为price添加sum聚合6aggregate-col为price添加avg聚合7ShiftWpivot在color列上再次创建透视表官方示例逐步演示假设源表sales内容如下date color price ---------- ----- ----- 2024-09-01 R 30 2024-09-02 B 28 2024-09-03 R 100 2024-09-03 B 33 2024-09-03 B 99示例 A仅用默认 count 聚合在date列按!设为关键列光标移到color列按ShiftW创建透视表。得到按date分组、对color各取值计数的结果date R B ---------- - - 2024-09-01 1 0 2024-09-02 0 1 2024-09-03 1 2每个单元格的数字即该分组内该颜色的行数——这正是默认count聚合的体现。示例 B添加 sum 与 avg 聚合按q返回 sales 表在price列按#type-float设置类型按添加sum再按添加avg光标移到color列按ShiftW。每个聚合器都会为所有透视列各生成一列且自定义聚合替换默认 countdate sum_R avg_R sum_B avg_B ---------- ------ ------ ------ ----- 2024-09-01 30.00 30.00 0.00 2024-09-02 0.00 28.00 28.00 2024-09-03 100.00 100.00 132.00 66.00验证2024-09-03 的 B 色 price 为 33 与 99sum_B132、avg_B66R 色只有 100sum_Ravg_R100。透视表的列名生成规则从 pivot.py 的addAggregateCols可以看出列名由三个因素组合而成透视列数量只有一个透视列时列名为取值本身如R、B多个透视列时变为透视列名_取值如color_R聚合器与聚合列数量只有一个聚合列且只有一个聚合器时列名直接用聚合器名或取值否则用源列名_聚合器名_取值的组合例如price_sum_R聚合结果类型Column的类型取aggregator.type or aggcol.type即聚合器自带类型优先否则继承源列类型pivot.py。加载完成后所有AggrColumn会自动启用缓存重复查看单元格不会重复计算pivot.py。透视表与源行的双向关系透视表单元格与频率表一样每个单元格都链接到其背后的源行在透视表某行按Enteropen-row打开包含该分组全部源行的子表即row.sourcerows实现见 pivot.py在某单元格按zEnteropen-cell只打开该单元格对应取值下的源行即row.pivotrows.get(col.aggvalue)pivot.py。这在审计聚合结果、排查数据异常时非常实用任何一个汇总数字都能一键下钻还原成明细。数值分箱与相关选项透视表还支持把连续数值列分箱后再分组受以下选项控制定义于 freqtbl.pynumeric_binning默认False开启后数值型关键列不再按离散值分组而是按区间分组如0 - 10、10 - 20对应RangeColumn与formatRange实现pivot.pyhistogram_bins默认0数值分箱的区间数量为0时自动取行数平方根int(len(rows)**(1./2))pivot.pydisp_histogram默认■频率表直方图的绘制字符。注意透视表分组时只允许一个数值列参与分箱否则会报错only one numeric column can be binnedpivot.py。若所有取值相同区间宽度为 0或整数取值个数小于分箱数会自动退化为按离散值分箱degenerateBinning分支pivot.py。从透视到熔解Melt宽表还原为长表透视表把数据从长格式压成宽格式而Melt熔解就是它的逆操作——unpivot。在透视表上按ShiftM命令名melt定义于 features/melt.py会把所有非关键列收缩为Variable与Value两列透视表的每一格变成一行date Variable Value ---------- -------- ----- 2024-09-01 sum_R 30 2024-09-01 mean_R 30 2024-09-01 sum_B 0 ...若只想熔解部分列可按gShiftM并用正则如(\w)_(\w)把列名拆成聚合器与取值两部分实现部分熔解。完整的正反操作对照见 MeltGuide。常用命令速查按键命令名作用!key-col切换当前列为关键列aggregate-col为当前列添加聚合器ShiftWpivot在当前列上创建透视表Ffreq-col在当前列上创建频率表freqtbl.pygFfreq-keys按全部关键列创建频率表freqtbl.pyEnteropen-row打开当前行分组的源行子表pyobj.pyzEnteropen-cell打开当前单元格的源行子表pyobj.pyShiftMmelt熔解透视表还原为长格式features/melt.py测试用例与进一步探索仓库测试目录提供了可直接对照的透视操作回放脚本tests/pivot.vdj完整演示open-file→key-col→type-int→aggregate-col sum→aggregate-col mean→pivot的六步流程其期望输出见 tests/golden/pivot.tsvtests/pivot-noaggr.vd验证未添加聚合器时仅使用默认count的行为tests/pivot-error.vd 与 tests/aggregators-errors.vd覆盖聚合错误场景的容错。更深入的主题可继续阅读 FrequencyTable.md分组与聚合器机制、MeltGuide宽长格式互转以及聚合器源码 aggregators.py。赞分享数据分析CLI数据可视化【免费下载链接】visidataA terminal spreadsheet multitool for discovering and arranging data项目地址https://gitcode.com/gh_mirrors/vi/visidata点击查看免费下载相关推荐VisiData 频率表Frequency Table完全指南从分组计数到聚合透视的实战解析VisiData 频率表Frequency Table完全指南从分组计数到聚合透视的实战解析 导读 频率表Frequency Table是 Visi数据分析CLI数据可视化vxe-table数据透视表功能多维度数据分析工具vxe table数据透视表功能多维度数据分析工具 数据透视表Pivot Table企业级数据可视化的核心引擎 你是否还在为复杂报表开发效率低下而困扰前端UI组件用了九年的老Mac居然还能装新版macOS不到3步走通的0元实操用了九年的老Mac居然还能装新版macOS不到3步走通的0元实操 2015 年以前的 Mac 被官方升级名单除名了系统更新按钮直接消失。用 OpenCore操作系统固件驱动开发上一篇3个关键问题为什么你的旧Mac值得用OpenCore Legacy Patcher重获新生下一篇VMware macOS解锁工具Unlocker V3.1.1完整使用指南免费实现Windows/Linux系统运行macOS虚拟机创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Python安装全流程:版本选择、PATH配置、pip镜像源与虚拟环境 先说个实在话。你搜“Python安装”大概率是被标题里“2026最新版”“一键安装”“永久使用”这几个词吸引进来的,但作为我这种常年给新电脑、新同事配环境的人,我必须告诉你:Python官方本来就是开源免费的,不存在“激活”“破解”… · 2026/9/25 5:59:38
Tomcat线程模型与OOM问题深度解析 1. 问题背景与现象分析最近在排查一个线上服务异常时,遇到了一个典型的OOM(OutOfMemoryError)问题。这个案例非常有意思,因为它不仅涉及到内存溢出本身,还引发了Tomcat线程模型的异常表现,最终导致服务不可… · 2026/9/25 6:22:58
基于LLM与Django的智能旅游路线推荐系统设计与实现 1. 项目概述:当旅游规划遇上AI大模型去年帮朋友公司做旅游路线推荐系统时,我深刻体会到传统推荐算法的局限性。用户抱怨"推荐的路线都差不多""根本不考虑我的体力状况",这促使我开始尝试将LLM大模型与路线规划结合。这个… · 2026/9/25 6:22:58
Android Studio Chipmunk Canary 2 实战与避坑指南 简介:Android Studio Chipmunk Canary 2(android-studio-2021.2.1.2)是2021年10月发布的Windows版预览IDE压缩包,适合Android开发者尝鲜新版、验证项目兼容性或学习构建工具链变化。包体总计2000个文件,主要包括637个j… · 2026/9/25 6:22:58
Java学生火车票订票系统:JSP+Servlet+JDBC实现与并发控制 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 6:22:58
Python字典底层原理:哈希表如何实现O(1)性能 1. 为什么说“Python之哈希表”不是讲数据结构,而是讲你每天都在用的底层引擎“Python之哈希表”这个标题乍看像是一堂枯燥的数据结构课,但如果你真这么理解,就错过了它最硬核的价值——它根本不是在教你怎么手写一个散列表,而是在… · 2026/9/25 6:22:52
ESP32-S3串口避坑指南:UART0陷阱与UART1/UART2实战配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 6:22:52
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37