ch-0005 Chapter 4: Clean Up Messy Data
- 原书章节: Chapter 4 Clean Up Messy Data(pp. 89–110)
- 输入来源: 本地 pdf(HandsOnDataViz.pdf)
摘要
"More often than not, raw data looks messy."——缺值、日期格式不一、数字列混入文本、 同一格塞多项、同一名称多种拼写。本章按工具从易到难给出清洗路径:先 Google Sheets 做 基础清理,再用 Tabula 把 PDF 里的表格"解放"出来,最后用 OpenRefine 处理最脏的数据。
- Google Sheets Smart Cleanup:自动给出清理建议(统一拼写、去重),一键采纳
- 查找与替换为空:把占位符(如
N/A、-)批量清成真正空格 - Transpose(转置):行与列互换,适合数据横竖排布错误
- Split / Combine:按分隔符把一列拆多列(如"城市, 州"),或用
CONCATENATE合并 - Tabula:免费开源工具,从文本型 PDF 中框选表格并导出为 CSV/Excel,是数据记者 从报告、开支表里提取数据的常用工具(仅限文本 PDF,扫描件需 OCR 先行)
- OpenRefine:功能强大的开源清洗工具,适合几十万行级脏数据;核心是聚类 (clustering)——把"同一事物、不同写法"的单元格归组:
key collision(按键碰撞, 快速粗聚类)与nearest neighbor(近邻,更精确但更慢),配合faceting(分面筛选) 逐个审查合并
要点归纳
- 清洗数据花的时间往往比分析与可视化还多——这是常态,不是意外
- 清洗优先级:统一格式 → 去重 → 修正错拼 → 拆分/合并列 → 导出干净 CSV
- 文本型 PDF 里的表用 Tabula 提取;扫描件要先 OCR,超出本书范围
- OpenRefine 聚类能自动发现"同一实体的不同写法",是手工逐格清洗的利器
- 同一数据集往往要轮番使用多个工具才能洗到可分析的程度
术语 / 概念
- messy data(脏数据) — 存在缺值、格式不一、错拼、重复等问题的原始数据
- Smart Cleanup — Google Sheets 的自动清理建议功能
- transpose(转置) — 行列互换
- Tabula — 从 PDF 提取表格的免费开源工具
- OpenRefine — 面向大表/脏数据的开源清洗工具
- clustering(聚类) — 把相似写法归组;
key collision快速、nearest neighbor精细 - faceting(分面) — OpenRefine 中按某列/某模式筛选查看数据的方式
原句摘录
Don't be surprised if you find yourself spending more time cleaning up data than you do analyzing and visualizing it.
The more clean-up tools and techniques you know, the more able and adaptable you become to tackle more complex cases.
疑问 / 待查
- OpenRefine 的 GREL 表达式语言未深入,属进阶内容(可查官方文档)
- 后续章节(如 ch-0013)会再次提醒 Google Sheets 里的空行会弄坏在线地图
Backlinks (1)
flowchart LR
n0["ch-0001 凶案、侦探与母亲的信(第 2–163 章)"]
n1["ch-0002 坦白、出逃与和解(第 163–233 章)"]
n2["The Curious Incident of the Dog in the Night-Time 人物"]
n3["The Curious Incident of the Dog in the Night-Time(整理完成)"]
n4["The Curious Incident of the Dog in the Night-Time 笔记"]
n5["The Curious Incident of the Dog in the Night-Time 故事线"]
n6["E-Commerce Bench(整理完成)"]
n7["E-Commerce Bench 笔记"]
n8["part-0001 摘要与引言:一年期电商运营基准(Abstract + §1)"]
n9["part-0002 相关工作与定位:continuing 任务谱系(Table 1 + §2)"]
n10["part-0003 基准设计:四层架构与确定性经济(§3 主体)"]
n11["part-0004 实验结果:18 模型的多维画像(Table 2 + §4)"]
n12["part-0005 结论与参考文献(§5 + References)"]
n13["part-0006 工具集与 agent harness:18 工具与上下文管理(Table 3 + Appendix A)"]
n14["part-0007 数据层:类目、店型、日历与供应商(Appendix B)"]
n15["part-0008 经济引擎:13 步结算与需求/退货/成本公式(Table 7 + Appendix C)"]
n16["part-0009 确定性谈判内核:决策函数与骗局目录(Appendix D)"]
n17["part-0010 评测指标定义:六个维度与统计口径(Appendix E)"]
n18["part-0011 每维度结果导览与模型/实验设置(Table 10 + Appendix F)"]
n19["part-0012 失败案例研究:骗局实录与一次破产(Appendix G)"]
n20["part-0013 失败模式规则表与提示词设计(Table 18 + Appendix H)"]
n21["The End of Software Engineering(整理完成)"]
n22["The End of Software Engineering 笔记"]
n23["part-0001 摘要与引言:范式重构的宣告(Abstract + §1 前段)"]
n24["part-0002 第一性原理:传统软件与 Agent 系统的形式化模型(§1 后段 + §2)"]
n25["part-0003 三代交付史与 AI→Software→Result 的失败(§3.1–3.2)"]
n26["part-0004 Agent→Result 与 Agentic Engineering 学科(§3.3 + §4)"]
n27["part-0005 实证证据与 EvoClaw 落差(§5)"]
n28["part-0006 四阶段演进路线图(前段:表 3 + Stage I–III)"]
n29["part-0007 路线图后段与建议:实践者与研究者(§6.3 后段 + §6.4 + §7.1–7.2)"]
n30["ch-0001 Introduction(为什么做数据可视化)"]
n31["ch-0002 选工具讲你的数据故事(Ch 1)"]
n32["ch-0003 强化电子表格技能(Ch 2)"]
n33["ch-0004 找到并质询你的数据(Ch 3)"]
n34["ch-0005 清洗脏数据(Ch 4)"]
n35["ch-0006 做有意义的比较(Ch 5)"]
n36["ch-0007 图表化你的数据(Ch 6)"]
n37["ch-0008 地图化你的数据(Ch 7)"]
n38["ch-0009 表格化你的数据(Ch 8)"]
n39["ch-0010 嵌入网页(Ch 9)"]
n40["ch-0011 用 GitHub 编辑与托管代码(Ch 10)"]
n41["ch-0012 Chart.js 与 Highcharts 模板(Ch 11)"]
n42["ch-0013 Leaflet 地图模板(Ch 12)"]
n43["ch-0014 转换你的地图数据(Ch 13)"]
n44["ch-0015 识别谎言、减少偏差(Ch 14)"]
n45["ch-0016 讲述并展示你的数据故事(Ch 15)"]
n46["ch-0017 附录 A 排查常见问题"]
n47["Hands-On Data Visualization(整理完成)"]
n48["Hands-On Data Visualization 笔记"]
n49["Reading"]
n0 --> n4
n3 --> n0
n3 --> n1
n3 --> n2
n3 --> n4
n3 --> n5
n5 --> n3
n6 --> n7
n6 --> n8
n6 --> n9
n6 --> n10
n6 --> n11
n6 --> n12
n6 --> n13
n6 --> n14
n6 --> n15
n6 --> n16
n6 --> n17
n6 --> n18
n6 --> n19
n6 --> n20
n21 --> n22
n21 --> n23
n21 --> n24
n21 --> n25
n21 --> n26
n21 --> n27
n21 --> n28
n21 --> n29
n22 --> n21
n47 --> n30
n47 --> n31
n47 --> n32
n47 --> n33
n47 --> n34
n47 --> n35
n47 --> n36
n47 --> n37
n47 --> n38
n47 --> n39
n47 --> n40
n47 --> n41
n47 --> n42
n47 --> n43
n47 --> n44
n47 --> n45
n47 --> n46
n47 --> n48
n49 --> n3
n49 --> n6
n49 --> n21
n49 --> n47
click n0 "../../curious-incident/ch-0001/" "ch-0001 凶案、侦探与母亲的信(第 2–163 章)"
click n1 "../../curious-incident/ch-0002/" "ch-0002 坦白、出逃与和解(第 163–233 章)"
click n2 "../../curious-incident/characters/" "The Curious Incident of the Dog in the Night-Time 人物"
click n3 "../../curious-incident/" "The Curious Incident of the Dog in the Night-Time(整理完成)"
click n4 "../../curious-incident/notes/" "The Curious Incident of the Dog in the Night-Time 笔记"
click n5 "../../curious-incident/storyline/" "The Curious Incident of the Dog in the Night-Time 故事线"
click n6 "../../e-commerce-bench/" "E-Commerce Bench(整理完成)"
click n7 "../../e-commerce-bench/notes/" "E-Commerce Bench 笔记"
click n8 "../../e-commerce-bench/part-0001/" "part-0001 摘要与引言:一年期电商运营基准(Abstract + §1)"
click n9 "../../e-commerce-bench/part-0002/" "part-0002 相关工作与定位:continuing 任务谱系(Table 1 + §2)"
click n10 "../../e-commerce-bench/part-0003/" "part-0003 基准设计:四层架构与确定性经济(§3 主体)"
click n11 "../../e-commerce-bench/part-0004/" "part-0004 实验结果:18 模型的多维画像(Table 2 + §4)"
click n12 "../../e-commerce-bench/part-0005/" "part-0005 结论与参考文献(§5 + References)"
click n13 "../../e-commerce-bench/part-0006/" "part-0006 工具集与 agent harness:18 工具与上下文管理(Table 3 + Appendix A)"
click n14 "../../e-commerce-bench/part-0007/" "part-0007 数据层:类目、店型、日历与供应商(Appendix B)"
click n15 "../../e-commerce-bench/part-0008/" "part-0008 经济引擎:13 步结算与需求/退货/成本公式(Table 7 + Appendix C)"
click n16 "../../e-commerce-bench/part-0009/" "part-0009 确定性谈判内核:决策函数与骗局目录(Appendix D)"
click n17 "../../e-commerce-bench/part-0010/" "part-0010 评测指标定义:六个维度与统计口径(Appendix E)"
click n18 "../../e-commerce-bench/part-0011/" "part-0011 每维度结果导览与模型/实验设置(Table 10 + Appendix F)"
click n19 "../../e-commerce-bench/part-0012/" "part-0012 失败案例研究:骗局实录与一次破产(Appendix G)"
click n20 "../../e-commerce-bench/part-0013/" "part-0013 失败模式规则表与提示词设计(Table 18 + Appendix H)"
click n21 "../../end-of-software-engineering/" "The End of Software Engineering(整理完成)"
click n22 "../../end-of-software-engineering/notes/" "The End of Software Engineering 笔记"
click n23 "../../end-of-software-engineering/part-0001/" "part-0001 摘要与引言:范式重构的宣告(Abstract + §1 前段)"
click n24 "../../end-of-software-engineering/part-0002/" "part-0002 第一性原理:传统软件与 Agent 系统的形式化模型(§1 后段 + §2)"
click n25 "../../end-of-software-engineering/part-0003/" "part-0003 三代交付史与 AI→Software→Result 的失败(§3.1–3.2)"
click n26 "../../end-of-software-engineering/part-0004/" "part-0004 Agent→Result 与 Agentic Engineering 学科(§3.3 + §4)"
click n27 "../../end-of-software-engineering/part-0005/" "part-0005 实证证据与 EvoClaw 落差(§5)"
click n28 "../../end-of-software-engineering/part-0006/" "part-0006 四阶段演进路线图(前段:表 3 + Stage I–III)"
click n29 "../../end-of-software-engineering/part-0007/" "part-0007 路线图后段与建议:实践者与研究者(§6.3 后段 + §6.4 + §7.1–7.2)"
click n30 "../ch-0001/" "ch-0001 Introduction(为什么做数据可视化)"
click n31 "../ch-0002/" "ch-0002 选工具讲你的数据故事(Ch 1)"
click n32 "../ch-0003/" "ch-0003 强化电子表格技能(Ch 2)"
click n33 "../ch-0004/" "ch-0004 找到并质询你的数据(Ch 3)"
click n34 "./" "ch-0005 清洗脏数据(Ch 4)"
click n35 "../ch-0006/" "ch-0006 做有意义的比较(Ch 5)"
click n36 "../ch-0007/" "ch-0007 图表化你的数据(Ch 6)"
click n37 "../ch-0008/" "ch-0008 地图化你的数据(Ch 7)"
click n38 "../ch-0009/" "ch-0009 表格化你的数据(Ch 8)"
click n39 "../ch-0010/" "ch-0010 嵌入网页(Ch 9)"
click n40 "../ch-0011/" "ch-0011 用 GitHub 编辑与托管代码(Ch 10)"
click n41 "../ch-0012/" "ch-0012 Chart.js 与 Highcharts 模板(Ch 11)"
click n42 "../ch-0013/" "ch-0013 Leaflet 地图模板(Ch 12)"
click n43 "../ch-0014/" "ch-0014 转换你的地图数据(Ch 13)"
click n44 "../ch-0015/" "ch-0015 识别谎言、减少偏差(Ch 14)"
click n45 "../ch-0016/" "ch-0016 讲述并展示你的数据故事(Ch 15)"
click n46 "../ch-0017/" "ch-0017 附录 A 排查常见问题"
click n47 "../" "Hands-On Data Visualization(整理完成)"
click n48 "../notes/" "Hands-On Data Visualization 笔记"
click n49 "../../" "Reading"