跳到主要内容Python 数据科学工具链实战:NumPy、Pandas 与 Matplotlib 入门 | 极客日志PythonAI算法
Python 数据科学工具链实战:NumPy、Pandas 与 Matplotlib 入门
综述由AI生成Python 数据科学工具链的核心组件 NumPy、Pandas 和 Matplotlib/Seaborn 的实战用法。内容涵盖环境搭建、数组与表格数据处理、缺失值清洗、特征工程及可视化分析。通过泰坦尼克号数据集的完整案例,演示了从数据加载到洞察发现的流程,并总结了常见陷阱与最佳实践,帮助读者建立扎实的数据分析基础。
蓝绿部署11 浏览 Python 数据科学工具链实战:NumPy、Pandas 与 Matplotlib 入门
在机器学习的世界里,算法是'菜谱',而 NumPy、Pandas、Matplotlib 就是你的'刀、秤、锅'——它们构成了现代数据科学工作的基础设施。
很多初学者一上来就急着学神经网络或梯度提升,却连如何读取一个 CSV 文件都磕磕绊绊。结果是想法很丰满,代码跑不动。本文的目标很明确:让你在短时间内掌握三大核心库的基础用法,能独立完成数据加载、清洗、探索到可视化的完整流程,为后续所有机器学习项目打下坚实工具基础。
环境准备:搭建你的数据实验室
推荐方式:使用 Anaconda(最省心)
- 访问官网下载对应操作系统的安装包(Windows / macOS / Linux)
- 安装时勾选 Add to PATH(Windows 用户注意)
- 安装完成后,打开 Anaconda Prompt(Windows)或终端(macOS/Linux)
Anaconda 自带 Python、NumPy、Pandas、Matplotlib、Jupyter 等几乎所有你需要的库,避免依赖冲突。
验证安装:
python --version
应显示 Python 3.9+。
然后启动 Jupyter Notebook(推荐交互式开发环境):
jupyter notebook
浏览器会自动打开一个文件管理界面——这就是你的数据实验室。
替代方案:如果你已用 pip 管理 Python,可手动安装:pip install numpy pandas matplotlib seaborn
NumPy:高效数值计算的基石
为什么需要 NumPy?
Python 原生的 list 虽然灵活,但在科学计算中存在两大问题:速度慢(每个元素都是 Python 对象,内存开销大);不支持向量化运算(无法直接对整个数组做加减乘除)。
而 NumPy(Numerical Python)提供了 ndarray(高效的多维数组对象)、广播机制(Broadcasting)以及 C 语言底层实现,比纯 Python 快 10–100 倍。记住:几乎所有数据科学库(Pandas、scikit-learn、TensorFlow)都基于 NumPy 构建。
创建数组
import numpy as np
arr = np.array([1, 2, 3, 4])
print(arr)
zeros = np.zeros(5)
ones = np.ones((2, 3))
linspace = np.linspace(0, 10, 5)
rand = np.random.rand(3, 2)
数组属性与形状操作
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("形状:", arr.shape)
print("维度:", arr.ndim)
print("元素总数:", arr.size)
print("数据类型:", arr.dtype)
reshaped = arr.reshape(3, 2)
print(reshaped)
flat = arr.flatten()
向量化运算(无需 for 循环!)
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)
print(a * b)
print(a ** 2)
print(np.sin(a))
print(a[a > 1])
关键优势在于这些操作在 C 层面并行执行,速度极快。
常用数学函数
arr = np.array([1, 2, 3, 4, 5])
print("均值:", np.mean(arr))
print("标准差:", np.std(arr))
print("最大值:", np.max(arr))
print("索引最大值:", np.argmax(arr))
print("求和:", np.sum(arr))
Pandas:让数据处理像 Excel 一样直观
如果说 NumPy 是引擎,那么 Pandas 就是驾驶舱——它提供了更贴近人类思维的数据结构。
| 结构 | 维度 | 类比 |
|---|
| Series | 1D | 带标签的一列数据 |
| DataFrame | 2D | 表格 |
创建 DataFrame
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'city': ['NYC', 'LA', 'Chicago']
}
df = pd.DataFrame(data)
print(df)
读取真实数据
我们将使用经典的泰坦尼克号乘客数据集(titanic.csv),可从 Kaggle 下载,或使用 seaborn 内置版本:
import seaborn as sns
titanic = sns.load_dataset('titanic')
print("前 5 行:")
print(titanic.head())
print("\n基本信息:")
print(titanic.info())
注意:age 和 embarked 有缺失值(Non-Null Count < 891)——这是真实数据的常态!
基础探索:了解你的数据
print("形状:", titanic.shape)
print(titanic.describe())
print(titanic['sex'].value_counts())
print(titanic.isnull().sum())
数据筛选与索引
ages = titanic['age']
subset = titanic[['name', 'age', 'fare']]
survived_females = titanic[(titanic['survived'] == 1) & (titanic['sex'] == 'female')]
first_row = titanic.loc[0, ['name', 'age']]
first_three = titanic.iloc[:3, :5]
注意:& 代替 and,| 代替 or,且条件要用括号包围。
处理缺失值(数据清洗第一步)
titanic_clean1 = titanic.dropna()
titanic['age'].fillna(titanic['age'].mean(), inplace=True)
mode_embarked = titanic['embarked'].mode()[0]
titanic['embarked'].fillna(mode_embarked, inplace=True)
print(titanic[['age', 'embarked']].isnull().sum())
最佳实践:记录你做了什么处理,因为这直接影响模型效果。
特征工程初探(为 ML 做准备)
titanic['family_size'] = titanic['sibsp'] + titanic['parch'] + 1
titanic['age_group'] = pd.cut(
titanic['age'], bins=[0, 18, 65, 100], labels=['Child', 'Adult', 'Senior']
)
titanic['sex_encoded'] = titanic['sex'].map({'male': 0, 'female': 1})
print(titanic[['age', 'age_group', 'sex', 'sex_encoded']].head())
Matplotlib 与 Seaborn:用图表讲好数据故事
一图胜千言——在数据科学中,可视化是理解、沟通、发现的关键。
Matplotlib:基础绘图库
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(8, 5))
plt.hist(titanic['age'], bins=20, color='skyblue', edgecolor='black')
plt.title('泰坦尼克号乘客年龄分布')
plt.xlabel('年龄')
plt.ylabel('人数')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()
Seaborn:统计可视化利器
Seaborn 提供更高层次的接口,一行代码即可生成精美图表。
import seaborn as sns
plt.figure(figsize=(6, 4))
sns.barplot(x='sex', y='survived', data=titanic)
plt.title('不同性别的生存率')
plt.ylabel('生存概率')
plt.show()
散点图:探索变量关系
plt.figure(figsize=(8, 6))
sns.scatterplot(
x='age', y='fare', hue='survived', data=titanic, alpha=0.7
)
plt.title('年龄与票价的关系(按生存状态着色)')
plt.show()
热力图:查看相关性
numeric_cols = titanic.select_dtypes(include=['number']).columns
corr_matrix = titanic[numeric_cols].corr()
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', center=0)
plt.title('数值特征相关性热力图')
plt.show()
你会发现 pclass(舱位等级)与 fare(票价)高度负相关——头等舱票价高,等级数字小。
端到端实战:从原始数据到洞察
步骤 1:加载与清洗
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('titanic')
df['age'].fillna(df['age'].median(), inplace=True)
df.drop(columns=['deck', 'embark_town'], inplace=True)
df.dropna(subset=['embarked'], inplace=True)
步骤 2:创建新特征
df['family_size'] = df['sibsp'] + df['parch'] + 1
df['is_alone'] = (df['family_size'] == 1).astype(int)
步骤 3:可视化关键发现
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
sns.barplot(x='pclass', y='survived', data=df, ax=axes[0, 0])
axes[0, 0].set_title('舱位等级与生存率')
sns.barplot(x='is_alone', y='survived', data=df, ax=axes[0, 1])
axes[0, 1].set_title('独自旅行与生存率')
axes[0, 1].set_xticklabels(['否', '是'])
df[df['survived'] == 1]['age'].hist(alpha=0.7, label='生存', ax=axes[1, 0])
df[df['survived'] == 0]['age'].hist(alpha=0.7, label='遇难', ax=axes[1, 0])
axes[1, 0].set_title('年龄分布对比')
axes[1, 0].legend()
df.boxplot(column='fare', by='survived', ax=axes[1, 1])
axes[1, 1].set_yscale('log')
axes[1, 1].set_title('票价分布(对数尺度)')
plt.tight_layout()
plt.show()
- 头等舱(pclass=1)生存率最高;
- 结伴旅行者生存率更高;
- 儿童(<10 岁)生存率明显提升;
- 高票价乘客更可能生存(可能与舱位相关)。
这些洞察可直接用于后续的机器学习建模——例如,pclass、is_alone、age 都是强预测特征。
常见陷阱与最佳实践
1. 不要滥用 inplace=True
虽然 df.dropna(inplace=True) 看似方便,但它会直接修改原数据,难以回溯。建议显式创建新对象:
2. 避免链式索引(Chained Indexing)
df[df['age'] > 30]['fare'] = 100
df.loc[df['age'] > 30, 'fare'] = 100
3. 可视化前先检查数据分布
- 对长尾分布(如票价)使用对数尺度;
- 对分类变量确保类别不多(否则图表混乱);
- 添加标题、坐标轴标签、图例——否则别人看不懂。
4. 保持代码可复现
- 设置随机种子:np.random.seed(42)
- 记录 Pandas/NumPy 版本(不同版本行为可能不同)
下一步:为机器学习做准备
- 用 NumPy 高效处理数值;
- 用 Pandas 清洗、转换、探索表格数据;
- 用 Matplotlib/Seaborn 可视化发现规律。
接下来可以进一步学习数据质量的五大维度、更高级的缺失值处理策略、异常值检测与处理、特征缩放(标准化、归一化)的必要性。这些内容将直接决定你未来模型的上限。
动手运行本文所有代码,尝试用 Pandas 分析你自己的数据,将代码归档到版本控制系统中。记住:工具的价值不在知道,而在用过。你敲下的每一行代码,都在为未来的智能系统铺路。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online