Skip to content

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 Introduction(为什么做数据可视化)"]
  n1["ch-0002 选工具讲你的数据故事(Ch 1)"]
  n2["ch-0003 强化电子表格技能(Ch 2)"]
  n3["ch-0004 找到并质询你的数据(Ch 3)"]
  n4["ch-0005 清洗脏数据(Ch 4)"]
  n5["ch-0006 做有意义的比较(Ch 5)"]
  n6["ch-0007 图表化你的数据(Ch 6)"]
  n7["ch-0008 地图化你的数据(Ch 7)"]
  n8["ch-0009 表格化你的数据(Ch 8)"]
  n9["ch-0010 嵌入网页(Ch 9)"]
  n10["ch-0011 用 GitHub 编辑与托管代码(Ch 10)"]
  n11["ch-0012 Chart.js 与 Highcharts 模板(Ch 11)"]
  n12["ch-0013 Leaflet 地图模板(Ch 12)"]
  n13["ch-0014 转换你的地图数据(Ch 13)"]
  n14["ch-0015 识别谎言、减少偏差(Ch 14)"]
  n15["ch-0016 讲述并展示你的数据故事(Ch 15)"]
  n16["ch-0017 附录 A 排查常见问题"]
  n17["Hands-On Data Visualization(整理完成)"]
  n18["Hands-On Data Visualization 笔记"]
  n19["Reading"]
  n17 --> n0
  n17 --> n1
  n17 --> n2
  n17 --> n3
  n17 --> n4
  n17 --> n5
  n17 --> n6
  n17 --> n7
  n17 --> n8
  n17 --> n9
  n17 --> n10
  n17 --> n11
  n17 --> n12
  n17 --> n13
  n17 --> n14
  n17 --> n15
  n17 --> n16
  n17 --> n18
  n19 --> n17
  click n0 "../ch-0001/" "ch-0001 Introduction(为什么做数据可视化)"
  click n1 "../ch-0002/" "ch-0002 选工具讲你的数据故事(Ch 1)"
  click n2 "../ch-0003/" "ch-0003 强化电子表格技能(Ch 2)"
  click n3 "../ch-0004/" "ch-0004 找到并质询你的数据(Ch 3)"
  click n4 "./" "ch-0005 清洗脏数据(Ch 4)"
  click n5 "../ch-0006/" "ch-0006 做有意义的比较(Ch 5)"
  click n6 "../ch-0007/" "ch-0007 图表化你的数据(Ch 6)"
  click n7 "../ch-0008/" "ch-0008 地图化你的数据(Ch 7)"
  click n8 "../ch-0009/" "ch-0009 表格化你的数据(Ch 8)"
  click n9 "../ch-0010/" "ch-0010 嵌入网页(Ch 9)"
  click n10 "../ch-0011/" "ch-0011 用 GitHub 编辑与托管代码(Ch 10)"
  click n11 "../ch-0012/" "ch-0012 Chart.js 与 Highcharts 模板(Ch 11)"
  click n12 "../ch-0013/" "ch-0013 Leaflet 地图模板(Ch 12)"
  click n13 "../ch-0014/" "ch-0014 转换你的地图数据(Ch 13)"
  click n14 "../ch-0015/" "ch-0015 识别谎言、减少偏差(Ch 14)"
  click n15 "../ch-0016/" "ch-0016 讲述并展示你的数据故事(Ch 15)"
  click n16 "../ch-0017/" "ch-0017 附录 A 排查常见问题"
  click n17 "../" "Hands-On Data Visualization(整理完成)"
  click n18 "../notes/" "Hands-On Data Visualization 笔记"
  click n19 "../../" "Reading"