序幕:推开数据世界的大门
第 1 章 序幕:推开数据世界的大门
推开这扇门之前,我想先问你三个问题。Why Python? Why data science? And can I really learn this? 这三个问题看起来简单,却几乎决定了你接下来这本书能读多深、走多远。我会在这一章里逐一回答它们,更重要的是,我会让你在读完本章时,亲手敲出人生中第一段"会做事的代码"——一段能画出真实图表的代码,而不是只会打印 `Hello World` 的玩具程序。
我们先从一个真实的故事开始。
---
1.1 小李的那顿晚饭
小李是某省会城市一家快消品公司的市场专员(marketing specialist),工作内容你也许很熟悉:写文案、做 PPT、追热点、催设计、开会、写周报。她的日常和"数据"的关系,大概就是 Excel 里的几列数字,加几个 `SUM` 求和,做一张柱状图,贴在月报里。
2019 年夏天,公司换了一位新 CMO(Chief Marketing Officer,首席营销官)。新官上任第一件事,不是改策略,而是把市场部十几个人叫进会议室,抛出来一句让所有人沉默的话:
> "我们公司去年在抖音上投了 1200 万广告费。Can anyone here, with data, tell me which 200 万 actually worked?"
会议室安静得能听见空调声。小李后来跟我说,她当时脑子里飞快地闪过了几个数字——播放量、点赞数、转化率——但它们像散落的拼图,怎么也拼不成一张完整的图。她甚至说不清,公司投的到底是品牌广告还是效果广告,更说不清这 1200 万到底换回了多少真正的"客户"。
那天晚饭,小李破例没刷短视频。她打开笔记本电脑,第一次在搜索框里敲下了一个她以前觉得"和我无关"的关键词:Python。
三个月后,小李交出了一份报告。她用 Python 抓取了公司过去 18 个月在抖音、小红书、微信视频号上的所有投放数据,结合电商后台的真实成交数据,做了一张清晰无比的"投放 ROI 热力图"。图上清楚地显示:在 25–34 岁女性用户群体中,小红书种草视频的每一块钱投入,能换来 4.2 元的首单成交;而公司重金投入的开机广告,ROI 只有 0.6——也就是说,每一块钱投进去,反而在亏钱。
CMO 在高管会上用了 40 分钟讲这份报告。会上当场决定:砍掉 30% 的低效投放,把省下来的钱全部转入小红书种草。
小李后来说,这件事改变了她对"工作"的理解。她说:
> "以前我觉得市场就是写文案、做创意。Now I realize, the real creativity is in asking the right question — and data is the only honest answer."
这个故事不是编的。它是过去五年里,在中国无数个行业、无数个办公室里反复发生的事。从银行到药店,从幼儿园到养殖场,从政府机关到街边的奶茶店——数据正在重塑每一个行业,不管你喜不喜欢,不管你准没准备好。
这一章的任务,就是回答小李在那个夜晚问自己的三个问题。让我把它们拆开来。
---
1.2 数据科学不是黑魔法,而是"新读写能力"
很多人一听"数据科学"(data science)就头大。脑海里浮现的是:数学天才、MIT 博士、黑底绿字的终端屏幕、神秘的神经网络图。这种印象一半是真相,一半是错觉。
真相是:数据科学确实需要数学、需要编程、需要统计知识。 错觉是:你不做"数据科学家",就不需要懂数据。
让我们用历史的眼光看这件事。
150 年前,一个普通英国人不需要会读书写字。记账、写合同、读书信,那是"文书"和"牧师"的活儿,普通老百姓只要会种地、会做工就行。然后,1870 年《福斯特法案》(Foster Act)颁布,英国推行义务教育。今天,如果一个英国成年人不识字,他几乎无法在现代社会正常生活——填不了银行表单、读不懂合同、看不懂处方签。
识字能力(literacy)从一项专业技能,变成了每个人的基本生存能力。
The same thing is happening with data.
请想象一下 10 年后的工作场景:
- 你打开一份销售报表,要能立刻看出"哪条产品线在下滑",而不是等领导问;
- 你看了一篇新闻报道,要能判断"作者引用的数据有没有问题",而不是被动相信;
- 你做了一个决策,要能用数据支持自己的论点,而不是凭感觉;
- 你甚至可以用一个简单的脚本,让电脑替你做那些重复的、枯燥的 Excel 表格工作。
这些事情,今天听起来还有点"高大上",但 10 年后,它们会和识字、开车、说英语一样,成为每个人简历上的"默认配置"。
Data literacy, 数据读写能力,正在成为 21 世纪的"新读写能力"。
这本书不会把你培养成一名数据科学家(data scientist)。但它会让你具备"数据读写能力":能看懂数据、能用 Python 处理数据、能用图表表达数据、能用 Scikit-learn 这种工具让数据替你做判断。
这些能力,今天你不需要读 PhD 也能学会。
1.2.1 一个反直觉的判断
很多人以为:"学数据科学 = 学高数 + 学统计学 + 学算法。" 这个等号其实画歪了。
真正决定你能不能"用"数据科学做事的,不是你懂多少公式,而是你能不能把一个真实问题,翻译成一个可以用数据回答的问题。
我把它叫做 "问题翻译能力"(problem translation)。它的训练方法是大量的"小项目"——一个真实的、你自己关心的小问题,用 30 行代码解决它。
举个例子:
- 你想知道"双 11 哪类商品折扣最大"→ 抓取电商数据 → 用 Pandas 做分组聚合 → 用 Matplotlib 画柱状图;
- 你想知道"我们小区房价这几年涨了多少"→ 抓取房产网站 → 用 NumPy 计算年化收益率 → 用 Matplotlib 画趋势线;
- 你想知道"我每天刷短视频的时间是不是变长了"→ 写一个简单的屏幕使用时间统计脚本。
每一个这样的小项目,都比你在课堂上做的任何习题更"真实",也更有动力。
所以,请你在读这本书之前,先在心里给自己找一个"小目标"——一个你真的想知道答案的问题。读完之后,你要能用 Python 自己回答它。
---
1.3 为什么是 Python?四把瑞士军刀的故事
假设你已经接受了"我要学一点数据科学"。下一个问题自然就是:用什么工具?
工具市场上能选的其实不少:
| 工具 | 优点 | 缺点 | 适用人群 | |------|------|------|---------| | Excel | 入门门槛低,所见即所得 | 数据量超过 10 万行就卡,只能做简单分析 | 完全的初学者,做小数据 | | R 语言 | 统计分析的"老炮",学术圈很认 | 学习曲线陡,生态偏窄,工业界用得少 | 统计学专业,学术研究 | | MATLAB | 工程和数学计算的工业标准 | 商业软件要收费,闭源 | 工程师、信号处理、控制系统 | | Python | 生态最广,免费开源,从业者最多 | 看似简单其实"水很深" | 几乎所有人 |
为什么 Python 成了赢家?
三个原因,按重要性排序:
第一,生态(ecosystem)。 Python 不是单独一门语言,它更像一个"超级市场"。在数据科学这个领域,它有 NumPy、Pandas、Matplotlib、Scikit-learn 这一整套工具链,覆盖了从数据清洗到机器学习的几乎所有环节。其它工具要么缺这个、要么少那个。
第二,从业者人数。 截至 2024 年,全球 Python 数据科学从业者数量遥遥领先。这意味着——你遇到任何问题,搜一下几乎都有答案;你招人,市场上能招到;你看教程,网上铺天盖地。
第三,免费且开源(open source)。 Excel 要买,MATLAB 要买,SPSS 要买。Python 完全免费,源代码对所有人开放。这不仅意味着省钱,更意味着——它的发展是由全球开发者共同推动的,每天都在进步。
1.3.1 四大天王的角色分工
如果说 Python 是一个"数据科学的厨房",那下面这四个库(library)就是厨房里最常用的四件工具。在接下来的 15 章里,我们会逐一深入学习它们。
让我先用最形象的方式介绍一下:
🔪 NumPy——厨房里的"切菜刀" NumPy 是 Numerical Python 的缩写,1995 年由 Travis Oliphant 发布。它做的事情很基础:高效地处理数字数组(array)。为什么这很重要?因为现实中的数据——股票价格、温度、销售量、图片像素——本质都是数字。NumPy 提供了对这些数字进行批量计算的能力,速度比 Python 原生的列表快几十倍甚至上百倍。你可以把 NumPy 理解为"Python 的数学加速器"。在第 2、3、4 章,我们会和它打交道。
📋 Pandas——厨房里的"记账本" Pandas(名字来自 Panel Data,计量经济学术语)2008 年由 Wes McKinney 发布。它解决的是数据科学里最头疼的问题:杂乱的表格数据。Excel 你会用吧?Pandas 就是 Python 版的"超级 Excel"。它能轻松读取 CSV、Excel、SQL 数据库里的数据,能筛选、合并、分组、透视,做数据清洗(data cleaning)的效率比 Excel 高一个数量级。在第 5、6、7 章,我们会深入 Pandas。
📊 Matplotlib——厨房里的"摆盘艺术" Matplotlib(Matrix Plotting Library)2003 年由 John D. Hunter 发布。数据处理完了,你总得把结果画出来给老板看吧?Matplotlib 就是干这个的。它能画折线图、柱状图、散点图、饼图、热力图……基本你能想到的图表都能画。在第 8、9、10 章,我们会专门讲它。
🤖 Scikit-learn——厨房里的"智能烤箱" Scikit-learn(Machine Learning in Python)2007 年由 David Cournapeau 发起。它是 Python 生态里最成熟、最友好的机器学习(machine learning)库。它把常用的机器学习算法——线性回归、决策树、随机森林、K 近邻、支持向量机……全部包装成了"开箱即用"的函数。你不用懂底层数学,也能用 3 行代码训练一个分类器。在第 11、12、13 章,我们会用它。
最后,第 14、15 章是综合实战,你会把四把工具组合起来,端出几道"硬菜"。
🧂 总结一句: > NumPy 处理数字,Pandas 处理表格,Matplotlib 负责展示,Scikit-learn 负责学习。这四个库覆盖了数据科学 80% 的日常工作。
掌握它们,你就不再是"Excel 用户",而是真正的"数据工作者"。
---
1.4 中英双语学习的独特优势
这本书有一个特别的设计:中英双语(bilingual)。所有关键术语,我都同时给出中文和英文,并且尽量在英文语境里讲清楚它的含义。
为什么要这么麻烦?
因为数据科学的发源地是美国。它的官方语言是英语。
让我说几个残酷的现实:
- 所有 Scikit-learn、Pandas、Matplotlib 的官方文档(documentation)都是英文的,最新最权威;
- 所有顶级的数据科学教材、课程、论文,几乎都是英文的;
- 当你遇到一个 bug,搜索解决方案时,英文搜索结果的数量通常是中文的 10 倍以上;
- 未来你如果想找一份数据相关的工作,**英文简历和英文技术面是标配**。
学技术英语,不是为了"装",而是为了"活"下去。
1.4.1 一种被低估的学习方法
我观察过几百个程序员的成长路径,发现一个有意思的现象:
> 那些英语好的程序员,成长速度普遍比英语不好的快 2–3 倍。
原因很简单:英语好的程序员能直接读 Stack Overflow 上的高质量答案、能直接看 GitHub 上的开源项目源码、能直接看国外大牛的博客和 YouTube 教程。这些"原始资料"(primary source)的中文翻译,要么滞后好几年,要么根本不存在,要么翻译得让你看不懂。
而英语差的程序员,只能依赖中文教程。中文教程的水平参差不齐,有些甚至是错的——按错误的教程学,越学越偏。
所以,在本书中,我鼓励你每遇到一个新术语,都同时记住它的中英文。 比如:
- 数组 → array
- 数据框 → DataFrame
- 折线图 → line plot
- 训练集 → training set
- 准确率 → accuracy
- 特征工程 → feature engineering
这种"双语编码"(bilingual encoding)会让你的大脑建立两套神经通路,记得更牢,提取也更快。一年后你会发现,你看 Pandas 文档就像看中文一样自然。
1.4.2 编程思维的训练
学 Python 的过程,其实是在训练一种特定的思维方式——编程思维(computational thinking)。
编程思维的核心有四块:
1. 分解(decomposition):把一个大问题拆成小问题; 2. 模式识别(pattern recognition):在重复中找规律; 3. 抽象(abstraction):忽略细节,抓住本质; 4. 算法(algorithm):设计一步步的解决方案。
这四种能力,不只是写程序需要,做任何工作都需要。会写 Python 的人,处理复杂项目的能力普遍更强——因为他们习惯了"先把问题拆开,再一个一个解决"。
所以,即使你最后没有成为程序员,学 Python 这件事本身,就已经值回票价了。
---
1.5 本书的探险地图:15 章的学习路线图
在正式开始第一章的代码之前,我想给你看一眼接下来 15 章的"探险地图"。这样你心里有数,知道自己要去哪。
```mermaid flowchart TD A[第1章: 序幕 - 推开数据世界的大门] --> B[第2章: NumPy基础 - 数组的诞生] B --> C[第3章: NumPy进阶 - 广播与向量化] C --> D[第4章: NumPy实战 - 真实数据的计算] D --> E[第5章: Pandas入门 - DataFrame的诞生] E --> F[第6章: Pandas进阶 - 数据的清洗与变形] F --> G[第7章: Pandas实战 - 真实业务场景] G --> H[第8章: Matplotlib入门 - 第一张图表] H --> I[第9章: Matplotlib进阶 - 美化与定制] I --> J[第10章: Matplotlib实战 - 商业级可视化] J --> K[第11章: Scikit-learn入门 - 机器学习的第一步] K --> L[第12章: Scikit-learn进阶 - 分类与回归] L --> M[第13章: Scikit-learn实战 - 端到端项目] M --> N[第14章: 综合实战 - 端到端数据项目一] N --> O[第15章: 综合实战 - 端到端数据项目二] ```
这是一条精心设计的学习路径。每四章一个台阶:
- **台阶一(第 1–4 章)**:NumPy,打下坚实的数值计算基础;
- **台阶二(第 5–7 章)**:Pandas,掌握表格数据的处理;
- **台阶三(第 8–10 章)**:Matplotlib,让数据"看得见";
- **台阶四(第 11–13 章)**:Scikit-learn,让数据"会思考";
- **终极挑战(第 14–15 章)**:两个完整的真实项目,把四大工具组合起来。
注意:第 1、5、8、11 章是"入门章",难度最低。 如果你时间紧张,可以先只读这四章,就已经掌握了 80% 的核心能力。第 14、15 章是"毕业设计", 需要你把整本书的工具都串起来。
1.5.1 学习路径的三个建议
在开始之前,给三条建议:
建议一:不要跳读。 这本书的章节是递进的。第 5 章 Pandas 用到的很多概念,是第 2–4 章 NumPy 铺垫好的。跳读会让你卡壳。
建议二:每章都要敲代码。 看懂了不等于会了。Programming is a skill, not a knowledge. It's learned by doing. 每个代码示例,请你在自己的电脑上亲手敲一遍、改一遍、出错一遍、改对一遍。
建议三:找一个"私人项目"。 边读边想:"我能不能用这一章的工具,解决我自己工作/生活中的一个问题?" 这种动机,会让你学得快 10 倍。
---
1.6 你的第一段代码:Hello, Data!
好了,说了这么多,是时候让你亲手写一段代码了。
本章我们要做的,不是一个简单的 `print("Hello World")`,而是一个真正能画出图来的程序。我们要用 Matplotlib 画一张柱状图(bar chart),展示一个虚拟的"小李月销售额"。
1.6.1 准备环境
在写代码之前,你需要确保电脑上装了 Python 和 Matplotlib。如果你还没装,按下面的步骤来(一次性投入 30 分钟,后面 14 章都不用再装):
第一步:安装 Anaconda。 打开浏览器,访问 Anaconda 官网(anaconda.com),下载对应你操作系统的安装包。Anaconda 是一个"Python 科学计算全家桶",自带 Python、Jupyter Notebook、NumPy、Pandas、Matplotlib、Scikit-learn 所有东西。
第二步:启动 Jupyter Notebook。 安装完 Anaconda 后,在开始菜单找到 "Jupyter Notebook" 并点击。浏览器会自动打开一个网页,地址是 `http://localhost:8888`。这就是你接下来 15 章的主要工作台。
第三步:新建一个 Notebook。 在 Jupyter 页面右上角点 "N