← Back to skills
extension
Category: Data & AnalyticsNo API key required

visidata - 终端电子表格

基于 visidata (saulpw/visidata) 的终端交互式电子表格技能,支持 CSV/TSV/Excel/JSON/SQLite/Parquet,提供透视表、频数分布、快速绘图、多表连接

personAuthor: user_8170ea13hubcommunity

visidata - 终端电子表格

技能脚本入口

本技能附带两套等价包装脚本(Unix .sh + Windows PowerShell .ps1),提供友好子命令入口与安装自检,免去记忆原始参数。

macOS / Linux(bash):

bash scripts/visidata-skill.sh <subcommand> [args...]
# 查看完整用法与示例
bash scripts/visidata-skill.sh help

Windows(PowerShell):

.\scripts\visidata-skill.ps1 <subcommand> [args...]
# 若被执行策略拦截,用下面这种调用绕过:
powershell -ExecutionPolicy Bypass -File scripts\visidata-skill.ps1 <subcommand> [args...]

可用子命令: open、stdin、python、sheet-help

脚本选择规则: macOS / Linux 用 .sh;Windows 用 .ps1。两者子命令完全一致。

脚本仅作便捷封装,最终调用系统的 visidata 二进制;运行前请确保已安装对应工具(安装方式见下文各节)。说明:SkillHub 不支持 .cmd / .bat 文件类型,故不附带 Windows cmd 版;无 PowerShell 的环境可用 Git Bash 运行 .sh 版。个别依赖 Unix 管道工具的子命令(如 gron 的 sed / fzf)在 Windows 下建议用 Git Bash 运行 .sh 版。

这是什么

visidata (saulpw/visidata, 8.5k ⭐) 是一个交互式终端电子表格多功能工具。支持 CSV、TSV、Excel (.xlsx/.xls)、JSON、JSONL、SQLite、Parquet、HDF5 等格式。提供类 Excel 的交互界面:透视表、频数分布、列统计、快速绘图、列类型转换、行过滤、正则搜索、多表连接等。

  • GitHub: https://github.com/saulpw/visidata
  • 文档: https://visidata.org/docs/
  • Python 编写,单命令 vd 启动,键盘驱动,无鼠标依赖

何时使用我

当用户出现以下意图时加载此技能:

  • "visidata"、"vd 命令"、"终端电子表格"、"终端看 CSV/Excel"
  • "交互式数据探索"、"透视表"、"频数分布"、"列统计"
  • "CSV/Excel 快速绘图"、"终端画图"、"数据可视化"
  • "多文件对比/连接"、"Sheet 间跳转"
  • "列类型转换"、"数据清洗预览"
  • "正则搜索/过滤行"、"大文件分页浏览"
  • "JSON/JSONL 展平查看"、"SQLite 表浏览"
  • "不想装 Excel/Jupyter 只想快速看数据"

核心能力

1. 启动与基础导航

# 打开各种格式
vd data.csv
vd data.xlsx
vd data.json
vd data.jsonl
vd data.sqlite
vd data.parquet

# 打开多文件 (每个文件一个 sheet)
vd file1.csv file2.csv file3.xlsx

# 从 stdin 读取
cat data.csv | vd -
curl -s api.example.com/data.csv | vd -

# 启动时指定分隔符/编码
vd -d ';' data.csv      # 分号分隔
vd -e utf-16 data.csv   # 编码

2. 界面与导航 (键盘驱动)

┌─────────────────────────────────────────────┐
│ Sheet 名称  │  行号  │  列类型  │  数据预览  │
├─────────────────────────────────────────────┤
│ 键盘操作:                                    │
│  ↑↓←→ / j/k/h/l    移动光标                    │
│  Ctrl+F / /        搜索 (正则支持)             │
│  n / N             下一个/上一个匹配           │
│  g / G             跳转首行/末行               │
│  数字 + g          跳转指定行                  │
│  Space             选中/取消选中行             │
│  Ctrl+A            全选                        │
│  q / Ctrl+C        退出 / 强制退出             │
└─────────────────────────────────────────────┘

3. 列操作 (核心功能)

列光标下操作:
  ^ (Shift+6)        切换列类型: int/float/str/date/bool/decimal
  &                  列统计摘要 (均值、标准差、唯一值数等)
  |                  频数分布 (值计数、条形图)
  _                  列重命名
  } / {              列右移/左移
  -                  隐藏列
  =                  显示所有隐藏列
  #                  显示列号

行光标下操作:
  !                  反选行
  d                  删除选中行
  y                  复制选中行到新 sheet
  s                  排序 (当前列)
  S                  反向排序

4. 透视表 (Pivot Table) - 杀手级功能

在行光标下:
  ^ (Shift+6)        将当前列设为行标签
  &                  将当前列设为值字段 (聚合)
  |                  将当前列设为列标签

组合示例:
  1. 光标选 "region" 列,按 ^ 设为行标签
  2. 光标选 "product" 列,按 | 设为列标签
  3. 光标选 "sales" 列,按 & 设为值 (默认求和)
  4. 自动生成透视表新 sheet!
  
聚合函数切换 (值字段光标下):
  a  - sum (求和)
  m  - mean (平均)
  n  - count (计数)
  v  - variance (方差)
  d  - stddev (标准差)
  i  - min (最小)
  x  - max (最大)
  u  - unique (唯一值数)

5. 频数分布与快速绘图

列光标下:
  |                  频数分布表 (值、计数、百分比、累积%)
  
  在频数分布 sheet 中:
  g                  绘制条形图 (ASCII/Unicode)
  G                  绘制直方图 (数值列)
  p                  绘制饼图
  
数值列直接绘图:
  g                  直方图
  G                  箱线图

6. 多 Sheet 管理

:                    命令模式
  :open file.csv     打开新文件为新 sheet
  :sheet 0           切换到 sheet 0
  :sheet name        按名切换
  :sheets            列出所有 sheet
  :join other_sheet  连接当前 sheet 与另一个 sheet
  :save output.csv   保存当前 sheet
  :saveall           保存所有 sheet
  :quit              退出

7. 行过滤与变换

  |                  过滤器模式 (类 SQL WHERE)
    输入表达式如:age > 30 and status == "active"
    支持: == != < > <= >= in not in and or not ( ) 正则 =~
  
  z                  撤销上一步操作
  Z                  重做
  
  列光标下按 =        计算新列 (表达式)
    如:total = price * qty
    如:full_name = first + " " + last

8. 数据导出

  :save file.csv           保存为 CSV
  :save file.xlsx          保存为 Excel
  :save file.json          保存为 JSON
  :save file.jsonl         保存为 JSON Lines
  :save file.sqlite        保存为 SQLite (建表)
  :save file.parquet       保存为 Parquet
  :save file.tsv           保存为 TSV
  :save file.html          保存为 HTML 表格
  
  选中行导出:
  选中行 → y (复制到新 sheet) → :save selected.csv

9. 连接多表 (Join)

# 在 sheet A 中:
:join sheetB
# 交互式选择:
#   - 左键 (当前 sheet)
#   - 右键 (目标 sheet)
#   - 连接键列
#   - 连接类型: inner/left/right/outer
# 生成新 sheet

10. Python API (脚本化)

import visidata as vd

# 编程式加载
sheet = vd.open_source('data.csv')

# 操作列
sheet.columns['price'].type = vd.FloatType
sheet.columns['date'].type = vd.DateType('%Y-%m-%d')

# 透视表
pivot = sheet.pivot(
    rows=['region'],
    cols=['product'],
    vals=['sales'],
    aggfuncs={'sales': 'sum'}
)

# 导出
pivot.save('pivot.csv')

典型工作流示例

场景 1:销售数据快速分析 (5 分钟出报告)

# 1. 打开数据
vd sales_2024.csv

# 2. 看列统计 (光标在任意列按 &)
#    看到:总行数、唯一值、空值、均值、标准差、最小/最大

# 3. 按区域+产品透视销售额
#    选 region 列 -> ^ (行标签)
#    选 product 列 -> | (列标签)
#    选 amount 列 -> & (值,求和)
#    自动生成透视表!

# 4. 画直方图看分布
#    在透视表中选 amount 列 -> g (直方图)

# 5. 导出透视表给老板
#    :save pivot_report.xlsx

场景 2:脏数据清洗预览

# 1. 打开脏数据
vd dirty_export.csv

# 2. 看每列类型和异常 (按 & 看统计)
#    发现:price 列有 "N/A"、"-" 字符串混在数字里

# 3. 过滤异常行
#    | (过滤器) -> price =~ "^[0-9.]+$"
#    只保留纯数字价格行

# 4. 转换列类型
#    选 price 列 -> ^ -> 选 float

# 5. 保存清洗后数据
#    :save clean_data.csv

场景 3:多源数据对比 (CSV + Excel + JSON)

# 1. 一次打开多文件
vd actuals.csv budget.xlsx forecast.json

# 2. 在各 sheet 间切换
#    :sheets 列出所有
#    :sheet 0/1/2 切换

# 3. 连接对比
#    在 actuals sheet: :join budget
#    选连接键 (如 department)
#    生成对比 sheet

# 4. 算差异列
#    在对比 sheet 选空列 -> = -> 表达式: actual - budget

场景 4:日志/时序数据探索

# 1. 打开 JSON Lines 日志
vd app.log.jsonl

# 2. 展平嵌套 JSON (自动处理)
#    复杂嵌套自动展开为多列

# 3. 按时间排序
#    选 timestamp 列 -> s (排序)

# 4. 筛选错误
#    | (过滤器) -> level == "ERROR"

# 5. 按小时聚合
#    选 timestamp 列 -> ^ (行标签,自动按小时分组)
#    选 level 列 -> | (列标签)
#    选任意列 -> & (计数)

场景 5:SQLite 数据库浏览

# 1. 直接打开数据库
vd analytics.db

# 2. 列出所有表 (每个表一个 sheet)
#    :sheets 看到: users, orders, products, events...

# 3. 进入 orders 表
#    :sheet orders

# 4. 连接 users 表查询用户名
#    :join users
#    连接键: user_id

# 5. 导出查询结果
#    :save user_orders.csv

快捷键速查表

| 类别 | 按键 | 功能 | |------|------|------| | 导航 | ↑↓←→ / j k h l | 移动光标 | | | g / G | 首行/末行 | | | 数字+g | 跳转行号 | | | / / Ctrl+F | 搜索 (正则) | | 选中 | Space | 选中/取消行 | | | Ctrl+A | 全选 | | | ! | 反选 | | 列操作 | ^ | 切换类型/设为行标签 | | | & | 列统计/设为值字段 | | | | | 频数分布/设为列标签/过滤器 | | | _ | 重命名列 | | | } / { | 列右移/左移 | | | - / = | 隐藏/显示列 | | 行操作 | s / S | 升序/降序排序 | | | d | 删除选中行 | | | y | 复制选中行到新 sheet | | | z / Z | 撤销/重做 | | Sheet | : | 命令模式 | | | :sheet N | 切换 sheet | | | :join | 连接表 | | | :save | 保存 | | | q | 退出 |

安装方式

# pip (推荐,最新版)
pip install visidata
# 或隔离环境
pipx install visidata

# macOS (Homebrew)
brew install visidata

# Linux (发行版包可能较旧)
apt install visidata    # Debian/Ubuntu
dnf install visidata    # Fedora
pacman -S visidata      # Arch

# Docker
docker run --rm -it -v "${PWD}":/data saulpw/visidata data.csv

进阶配置

# 配置文件 ~/.visidatarc (Python 语法)
# 示例:
options.default_floating_type = 'decimal'  # 金融数据用 Decimal
options.precision = 4                       # 默认小数位
options.theme = 'dark'                      # 主题

# 自定义命令
def my_custom_command(vd, sheet):
    sheet.add_column('checksum', lambda row: hash(str(row)))
vd.bindkey('c', 'my_custom_command')

故障排查

| 问题 | 解决方案 | |------|----------| | "command not found: vd" | pipx install visidata 或检查 PATH | | 启动慢/内存爆 | 大文件先用 xsv sample 10000 big.csv | vd - 采样预览 | | 编码乱码 | vd -e gbk file.csv 指定编码 | | 列类型识别错 | 手动按 ^ 切换类型,或预处理 xsv cast | | 透视表生成慢 | 先采样或筛选减少行数,再透视 | | 绘图显示方块 | 终端需支持 Unicode,设置 LANG=en_US.UTF-8 | | JSON 嵌套太深 | visidata 自动展平,深层用 dasel/jq 先提取 |

相关技能

  • xsv - 非交互式极速 CSV 统计/切片/连接 (管道友好)
  • miller - awk 风格命名索引数据处理 (脚本化转换)
  • sqlite-utils - CSV 导入 SQLite 做复杂 SQL
  • dasel - 统一选择器跨格式查询
  • fx - JSON 交互式探索 (visidata 也能看 JSON)
  • yq - 格式转换 (visidata 导出前可先转格式)

技能版本: 1.0.0 | 作者: asdw741111 | 适用平台: OpenCode, Claude Code, Cursor, Codex CLI, Windsurf, Gemini CLI