📋 数据分析完整流程
一个标准的 Python 数据分析项目遵循以下 6 个核心阶段
数据获取
CSV · API · 数据库
数据清洗
缺失值 · 异常值
探索分析
EDA · 统计描述
数据可视化
图表 · 仪表盘
建模分析
ML · 统计模型
报告输出
结论 · 洞察
📥数据获取pandas.read_csv()🧹数据清洗dropna() / fillna()🔍探索分析describe() / corr()📊可视化plt.plot() / sns🤖建模分析sklearn / statsmodelsCSV/Excel/SQL/API缺失/重复/格式化分布/相关/分组折线/柱状/散点/热图回归/分类/聚类迭代优化
📦 核心库详解
Python 数据分析生态系统由以下六大核心库构成
N
NumPy
Numerical Python · v1.26+
Python 科学计算的基础库,提供高效的 N 维数组 (ndarray) 对象,支持向量化运算、广播机制和线性代数操作,是所有数值计算库的底层依赖。
运算速度95%
使用频率99%
数组运算线性代数傅里叶变换随机数
P
Pandas
Panel Data · v2.1+
数据分析的核心工具,提供 DataFrame 和 Series 数据结构,支持数据读取、清洗、合并、分组聚合、时序分析等全流程操作,被誉为"数据科学的瑞士军刀"。
数据处理98%
易用性90%
DataFrame数据清洗分组聚合时序
M
Matplotlib
可视化基础 · v3.8+
Python 最成熟的绘图库,提供类似 MATLAB 的绘图接口。支持折线图、散点图、柱状图、饼图等 数十种图表类型,可精细控制每一个图形元素。
图表种类92%
定制灵活度95%
折线图散点图子图3D绘图
S
Seaborn
统计可视化 · v0.13+
基于 Matplotlib 的高层次统计可视化库,内置 美观的配色方案,几行代码即可绘制热力图、箱线图、violin 图、回归图等,专为探索性数据分析设计。
美观度96%
代码简洁度94%
热力图箱线图回归图分布图
SK
Scikit-learn
机器学习 · v1.4+
Python 机器学习的标准库,提供分类、回归、聚类、降维等 数百种算法,统一的 fit/predict 接口让模型切换极为便捷,也包含完整的评估与交叉验证工具。
算法覆盖97%
生产稳定性98%
分类回归聚类降维
🟠
Jupyter Notebook
交互式开发环境
数据科学家首选的 交互式开发环境,支持在单元格中混合执行代码、展示图表、编写 Markdown 文档,方便探索和分享数据分析过程。
交互性99%
可分享性96%
交互执行Markdown图表内嵌nbconvert
💻 实战代码示例
从数据读取到可视化的完整代码演示
① 数据读取 & 基础探索
01_load_and_explore.py
import pandas as pd
import numpy as np
# 读取 CSV 数据
df = pd.read_csv('students.csv')
# 查看基本信息
print(df.shape) # (行数, 列数)
print(df.dtypes) # 每列数据类型
print(df.head(5)) # 前5行
# 统计摘要
print(df.describe())
# 检查缺失值
print(df.isnull().sum())
# 各科均值
avg = df[['数学', '英语', '语文']].mean()
print(avg)
📌 关键 API 速查
| 方法 | 作用 |
|---|---|
read_csv() |
读取 CSV 文件 |
df.shape |
返回 (行, 列) 元组 |
df.describe() |
数值列统计摘要 |
df.isnull() |
检测缺失值 |
df.dtypes |
每列数据类型 |
df.head(n) |
查看前 n 行 |
② 数据清洗 & 预处理
02_data_cleaning.py
# 填充缺失值
df['成绩'].fillna(df['成绩'].mean(), inplace=True)
# 删除含缺失值的行
df.dropna(subset=['姓名', '班级'], inplace=True)
# 删除重复行
df.drop_duplicates(inplace=True)
# 数据类型转换
df['成绩'] = df['成绩'].astype(float)
df['日期'] = pd.to_datetime(df['日期'])
# 过滤异常值(Z-score法)
z = (df['成绩'] - df['成绩'].mean()) / df['成绩'].std()
df = df[z.abs() <= 3]
# 重命名列
df.rename(columns={'score': '成绩'}, inplace=True)
⚠️ 缺失值处理策略
• 均值/中位数填充:适合数值型数据,保留样本
• 众数填充:适合分类型数据
• 前向/后向填充:适合时序数据
• 直接删除:缺失率低且随机缺失时
💡 异常值检测方法
• Z-score法:|z| > 3 视为异常(正态分布)
• IQR法:超出 Q1-1.5×IQR 或 Q3+1.5×IQR
• 业务规则:如成绩必须在 0~100
③ 数据可视化代码
03_visualization.py
import matplotlib.pyplot as plt
import seaborn as sns
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 1. 折线图(趋势)
plt.plot(df['月份'], df['销售额'],
marker='o', color='#3b82f6')
plt.title('月度销售趋势')
# 2. 热力图(相关性)
corr = df.corr()
sns.heatmap(corr, annot=True,
cmap='coolwarm', center=0)
# 3. 箱线图(分布)
sns.boxplot(x='班级', y='成绩', data=df,
palette='Set2')
# 4. 散点回归图
sns.regplot(x='学习时长', y='成绩',
data=df, scatter_kws={'alpha':0.5})
plt.tight_layout()
plt.savefig('analysis.png', dpi=150)
📊 常见图表选择指南
| 数据目的 | 推荐图表 | 函数 |
|---|---|---|
| 时间趋势 | 折线图 | plt.plot() |
| 类别比较 | 柱状图 | plt.bar() |
| 分布形状 | 直方图 | plt.hist() |
| 相关关系 | 散点图 | plt.scatter() |
| 变量相关 | 热力图 | sns.heatmap() |
| 离群值 | 箱线图 | sns.boxplot() |
| 占比构成 | 饼图 | plt.pie() |
📈 可视化图表图解
常用 Python 数据可视化图表类型演示
语文数学英语物理化学8291769588各科平均分对比
柱状图 (Bar Chart)
用于比较不同类别的数值大小,适合展示各组之间的对比关系。代码:plt.bar()
1月2月3月4月5月今年去年月度销售趋势
折线图 (Line Chart)
展示数据随时间的变化趋势,支持多系列对比。代码:plt.plot()
异常值学习时长 (小时)成绩R²=0.87学习时长 vs 成绩散点图
散点图 + 回归线 (Scatter + Regression)
展示两个变量之间的相关关系,回归线显示趋势,R² 值衡量拟合度。代码:sns.regplot()
语文数学英语物理化学语文数学英语物理化学1.01.01.01.01.00.320.450.320.710.68
热力图 (Heatmap)
用颜色深浅表示变量间的相关系数,快速发现强相关特征对。代码:sns.heatmap(df.corr())
🤖 从数据到模型
Scikit-learn 标准机器学习工作流详解
04_machine_learning.py
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, r2_score
# ① 准备特征和标签
X = df[['学习时长', '出勤率', '作业完成率']]
y = df['是否优秀']
# ② 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42)
# ③ 特征标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# ④ 训练模型
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)
# ⑤ 预测与评估
y_pred = model.predict(X_test)
print(accuracy_score(y_test, y_pred)) # 0.92
🔵 监督学习算法
📈
线性回归 --- 连续值预测,可解释性强
🌲
随机森林 --- 分类/回归,抗过拟合
🎯
SVM --- 高维数据,效果稳定
🧠
XGBoost --- 竞赛利器,效果卓越
🟢 无监督学习算法
🔵
K-Means --- 聚类分析,简单高效
📉
PCA --- 降维,去除冗余特征
🕸️
DBSCAN --- 密度聚类,检测异常
🗺️
t-SNE --- 高维可视化降维
📐 模型评估指标速查
分类任务
• 准确率 accuracy_score
• 精确率 precision_score
• 召回率 recall_score
• F1 f1_score
回归任务
• R² r2_score
• MAE mean_absolute_error
• MSE mean_squared_error
• RMSE √MSE
验证方法
• Hold-out 简单划分
• K-fold CV 交叉验证
• Learning curve 诊断偏差/方差
• 混淆矩阵 分类详情
🗺️ 学习路径建议
从零基础到数据分析工程师的系统学习路线
1
Python 基础语法(2-4周)
变量与数据类型、列表/字典/元组、函数与类、文件读写、异常处理。推荐资源:《Python编程:从入门到实践》
2
NumPy 与 Pandas 基础(2-3周)
数组操作、DataFrame 增删改查、数据合并(merge/concat)、分组聚合(groupby)、时间序列处理。
3
数据可视化(1-2周)
Matplotlib 基础绘图、Seaborn 统计图表、图表美化技巧、交互式图表(Plotly/Pyecharts)。
4
统计分析基础(2-3周)
描述统计、概率分布、假设检验、相关分析、方差分析。工具:SciPy、Statsmodels。
5
机器学习入门(4-6周)
Scikit-learn 工作流、线性模型/树模型/集成模型、特征工程、模型选择与调参。推荐:Kaggle 入门竞赛练习。
6
实战项目(持续)
完成 2-3 个端到端项目(销售分析、用户画像、预测模型),整理到 GitHub,参加 Kaggle 竞赛。
📋 Pandas 常用操作速查
日常数据分析中最常用的 Pandas 操作汇总
| 操作类型 | 代码示例 | 说明 |
|---|---|---|
| 读取数据 | pd.read_csv('f.csv', encoding='utf-8') |
读取 CSV,指定编码 |
| 选择列 | df[['A','B']] |
选取多列 |
| 条件过滤 | df[df['成绩'] > 80] |
按条件筛选行 |
| 新增列 | df['总分'] = df['数学'] + df['语文'] |
通过计算新增列 |
| 分组聚合 | df.groupby('班级')['成绩'].mean() |
按班级求均值 |
| 数据合并 | pd.merge(df1, df2, on='学号') |
按学号内连接 |
| 透视表 | df.pivot_table(values='成绩', index='班级', columns='科目', aggfunc='mean') |
多维聚合 |
| 排序 | df.sort_values('成绩', ascending=False) |
按成绩降序 |
| 应用函数 | df['等级'] = df['成绩'].apply(lambda x: '优' if x>=90 else '良') |
自定义映射 |
| 导出数据 | df.to_excel('result.xlsx', index=False) |
导出 Excel |