三者的关系:地基、车间调度台、展厅
一、NumPy 是地基,也是机床
NumPy 提供高效的多维数组对象 ndarray,以及整套基础数学运算能力。数据进入分析流程时可能有各种来源和形态:Excel、数据库、爬虫、日志;但无论来自哪里,最终都可以统一处理成同一种结构:同质、连续、可批量运算的数组。
NumPy 的核心价值有两个:数据结构的统一 和计算效率。向量化、广播、底层 C 实现的运算,都发生在这一层,所以它不只是"地基",也是真正出力干活的"机床"。
这里要澄清一个常见误解:Pandas 的聚合、统计底层同样调用 NumPy,并不是每次分析前都必须手动转成数组 。真正需要显式回到 NumPy 的场景是:矩阵运算、线性代数,或交给只接受 ndarray 的第三方库(如 scikit-learn)。
NumPy 的短板是没有语义:它只知道第几行第几列,不知道哪一列是"销售额"、哪一行是"用户 ID"。这正是 Pandas 登场的理由。
二、Pandas 是车间调度台
Pandas 构建在 NumPy 之上,引入两个核心结构:Series(一维带标签数组)和 DataFrame(二维表格)。列有列名,行有索引(日期、ID、订单号)。
Pandas 真正强大的地方,是把数据变成可以对话的对象:按列名取数、按条件筛选、分组聚合、处理缺失值、合并多张表。绝大多数数据清洗、整理和探索性分析(EDA)都在 DataFrame 中完成,它是处理和分析数据的主要场所。
但分工要讲清:Pandas 负责调度,不负责出力 。它决定"算哪一列、按什么分组、先过滤还是先聚合",而逐元素的运算最终仍下沉到 ndarray 完成。所以"车间"更准确的说法是车间调度台,而不是机床本身。
三、Matplotlib 是展厅
分析得出结论后,如何让别人(或未来的自己)一眼看懂?这就需要可视化。
Matplotlib 工作在绘图原语 这一层:Figure 是整张画布,Axes 是其中一个坐标系,所有图形元素都是挂在 Axes 上的 Artist。它的核心动作是视觉编码:把数值映射成位置、长度、角度、颜色。
Pandas 内置的 df.plot() 只是 Matplotlib 的快捷方式 ,返回的仍是 Axes 对象;想做深度定制,还得回到 Matplotlib API。
可视化的目的不是让图表"好看",而是让数据中的模式、趋势、异常直观呈现,最终支撑判断。
依赖方向
text
Matplotlib(展厅) ← 只读取数据,不回写
↑
Pandas(车间调度台) ← 依赖 NumPy,逐元素计算下沉
↑
NumPy(地基 + 机床) ← 不依赖上面两者
注意:Matplotlib 不依赖 Pandas ,可以直接画 ndarray、列表甚至 Python 元组;Pandas 则离不开 NumPy。因此,三者并非平级,从上到下依次依赖下层。
一张表看清边界
| NumPy | Pandas | Matplotlib | |
|---|---|---|---|
| 角色 | 地基 + 机床 | 车间调度台 | 展厅 |
| 对象 | ndarray |
Series / DataFrame |
Figure / Axes |
| 管什么 | 算 | 管 | 看 |
| 典型动作 | 向量化、广播、矩阵运算 | 筛选、分组、合并、缺失值 | 折线、柱状、散点、子图 |
| 不做什么 | 不管标签与混合类型 | 不直接渲染图形 | 不做任何计算 |
一句话总结
NumPy 保证算得快,Pandas 保证说得清,Matplotlib 保证看得见。
同一份数据要经历三次变化:
ndarray(裸数字)→DataFrame(有名字的数据)→Figure(一眼看懂的图形)。