首页 / 数据分析学习笔记


Copyright ©2025 luckyxi的学习日志 | All Rights Reserved

粤ICP备2025495461号-1

粤公网安备44060402003071号

 # 数据分析学习笔记

> 学习时间:2025年12月  
> 适用对象:具备基础Python与统计学知识的初/中级学习者  
> 核心目标:系统梳理数据分析全流程关键知识点,建立结构化知识框架

---

## 一、什么是数据分析?

数据分析(Data Analysis)是指通过统计、可视化与建模等手段,从原始数据中提取有价值信息、发现规律、支持决策的过程。它不是单一技术,而是一套**端到端的思维与方法体系**,涵盖:

- **数据获取与清洗**  
- **探索性数据分析(EDA)**  
- **特征工程与建模**  
- **结果解释与可视化呈现**

其核心价值不在于工具使用,而在于**提出正确问题 → 设计合理分析路径 → 得出可行动的洞见**。

---

## 二、数据分析全流程(CRISP-DM模型)

业界广泛采用 **CRISP-DM(Cross-Industry Standard Process for Data Mining)** 作为标准流程框架:

| 阶段 | 核心任务 | 关键产出 |
|------|---------|---------|
| 1. 业务理解 | 明确分析目标、定义成功指标 | 《分析需求说明书》 |
| 2. 数据理解 | 收集数据、初步探查分布与质量 | 数据字典、缺失/异常报告 |
| 3. 数据准备 | 清洗、转换、集成、采样 | 清洁、结构化的分析数据集 |
| 4. 建模 | 选择算法、训练、验证模型 | 多个候选模型及评估结果 |
| 5. 评估 | 对比模型表现 vs 业务目标 | 模型推荐报告 |
| 6. 部署 | 生成报告/仪表盘/API服务 | 可交付成果(如BI看板) |

> ✅ 提示:现实项目中流程常迭代往复——例如建模后发现某特征缺失严重,需回到“数据准备”重新处理。

---

## 三、核心技能模块详解

### 1. 工具栈(Python为主)

| 类别 | 常用库 | 用途说明 |
|------|--------|---------|
| **基础计算** | `NumPy`, `pandas` | 数组运算、数据框操作(`groupby`, `merge`, `pivot`) |
| **可视化** | `matplotlib`, `seaborn`, `plotly` | 静态/交互式图表;`seaborn`擅长统计图形(箱线图、热力图) |
| **统计建模** | `scipy.stats`, `statsmodels` | 假设检验、回归、时间序列分析 |
| **机器学习** | `scikit-learn` | 预处理(`StandardScaler`)、分类/回归/聚类(`RandomForest`, `LogisticRegression`, `KMeans`) |
| **大数据扩展** | `Polars`, `Dask` | 超大规模数据集处理(替代pandas) |

> 📌 建议:先精通 `pandas + seaborn + sklearn` 组合,再拓展其他工具。

---

### 2. 数据清洗(占项目60%时间!)

#### 常见问题与对策:

| 问题类型 | 检测方法 | 处理策略 |
|---------|---------|---------|
| **缺失值** | `df.isnull().sum()` | 删除(`dropna`)、填充(均值/中位数/众数/模型预测)、标记为新类别 |
| **重复值** | `df.duplicated().sum()` | `drop_duplicates()`,注意业务逻辑(如用户多次下单非重复) |
| **异常值** | 箱线图(IQR)、Z-score | 分析是否录入错误?是否业务真实(如高净值客户)?→ 保留/修正/分箱处理 |
| **格式不一致** | `df['col'].unique()` | 正则清洗(如电话号码)、映射标准化(如“男/Male/♂”→“Male”) |
| **量纲差异** | 各特征范围差异极大 | 标准化(Z-score)或归一化(Min-Max),尤其影响距离类算法(KNN、聚类) |

> 💡 经验:**不要盲目删除异常值**!先可视化分布,结合业务判断。

---

### 3. 探索性数据分析(EDA)

EDA目标:理解数据分布、变量关系、潜在模式,为建模提供依据。

#### 关键步骤:
1. **单变量分析**  
   - 数值型:直方图、箱线图 → 观察偏态、峰度、离群点  
   - 类别型:频次统计、条形图 → 检查类别不平衡(如99%正常 vs 1%欺诈)

2. **双变量/多变量分析**  
   - 数值 vs 数值:散点图 + 相关系数(`df.corr()`)  
   - 数值 vs 类别:分组箱线图(如不同城市收入分布)  
   - 类别 vs 类别:交叉表 + 卡方检验  

3. **时间维度分析**(若含时间戳)  
   - 趋势分解(趋势项、季节项、残差)  
   - 移动平均、同比/环比计算  

> 📊 工具提示:  
> ```python
> import seaborn as sns
> sns.pairplot(df, hue='target')  # 快速查看多变量关系
> sns.heatmap(df.corr(), annot=True)  # 相关性矩阵热力图
> ```

---

### 4. 特征工程 —— 模型性能的“放大器”

> “数据和特征决定了机器学习的上限,模型和算法只是逼近这个上限而已。” —— 吴恩达

#### 常用技术:
- **编码转换**  
  - 标签编码(`LabelEncoder`):有序类别(如“低/中/高”)  
  - 独热编码(`pd.get_dummies` 或 `OneHotEncoder`):无序类别(如“北京/上海/广州”)  
  - 目标编码(Target Encoding):用类别对应的目标均值替代(防过拟合需交叉验证)

- **特征衍生**  
  - 时间特征:提取“星期几”、“是否周末”、“距离节假日天数”  
  - 组合特征:`收入 / 家庭人数`(人均负担)、`点击率 = 点击数 / 曝光数`  
  - 分箱(Binning):将连续变量离散化(如年龄分段:0-18, 19-35, 36-60)

- **降维**  
  - PCA(主成分分析):保留最大方差方向,用于可视化或去噪  
  - 特征选择:基于统计检验(卡方、互信息)、模型重要性(`feature_importances_`)

---

### 5. 模型评估与选择

#### 分类任务指标:
| 指标 | 公式 | 适用场景 |
|------|------|---------|
| 准确率(Accuracy) | (TP+TN)/Total | 类别均衡时可用 |
| 精确率(Precision) | TP/(TP+FP) | 关注“预测为正的有多少真为正”(如垃圾邮件拦截) |
| 召回率(Recall) | TP/(TP+FN) | 关注“实际为正的有多少被找出”(如疾病筛查) |
| F1-score | 2×(P×R)/(P+R) | Precision与Recall的调和平均,综合指标 |
| AUC-ROC | ROC曲线下面积 | 衡量模型整体排序能力,不受阈值影响 |

#### 回归任务指标:
- **MAE**(Mean Absolute Error):直观,单位与目标一致  
- **MSE/RMSE**:对大误差更敏感,利于优化(可导)  
- **R²**:解释方差比例,越接近1越好(可能为负!)

> ⚠️ 警惕:**永远使用交叉验证(如`cross_val_score`)** 避免过拟合训练集。

---

## 四、常见误区与最佳实践

| 误区 | 正确做法 |
|------|---------|
| “模型越复杂越好” | 优先尝试简单模型(线性回归、决策树)作为baseline |
| 忽略业务背景强行建模 | 与业务方对齐:**这个分析结果将如何影响决策?** |
| 仅用准确率评估不平衡数据 | 用混淆矩阵 + Precision/Recall/F1/AUC 全面评估 |
| 特征工程后未重新标准化 | 对训练集fit scaler → transform训练/测试集(防数据泄露) |
| 可视化只追求美观 | 先保证**准确、清晰、无误导**,再考虑美化 |

---

## 五、学习资源推荐

- **书籍**  
  - 《Python for Data Analysis》(Wes McKinney,pandas作者)  
  - 《统计学习导论》(ISLR)—— 理论扎实,R/Python双代码  
- **在线课程**  
  - Coursera:*Applied Data Science with Python*(密歇根大学)  
  - Kaggle Learn:短小精悍的实战微课程  
- **实战平台**  
  - Kaggle(竞赛+数据集)  
  - Tianchi(阿里天池,中文友好)

---

## 结语:数据分析 = 技术 × 业务 × 沟通

工具会更新,算法会演进,但**核心能力**不变:

1. **问题定义能力**:把模糊业务需求转化为可分析问题  
2. **批判性思维**:质疑数据质量、检验假设合理性  
3. **故事叙述能力**:用图表+语言讲清“所以呢?”(So What?)

开始行动建议:  
✅ 选一个公开数据集(如Titanic、House Prices)  
✅ 按CRISP-DM走一遍全流程  
✅ 输出一份包含代码、图表、结论的Jupyter Notebook报告  

> 数据不会说话——除非你问对问题,并用心倾听。

---