Taoの小窝
首页项目博客照片墙音乐技能栈说说杂谈友链关于
封面

从零开始的数据分析学习项目:清洗、探索、可视化与机器学习入门

写作时间:2025-08-15 10:00:00
# 数据分析
# Python
# 学习笔记
# 机器学习

一个零基础友好的 Python 数据分析实践项目,覆盖数据清洗、探索性分析、可视化与机器学习入门四大模块。


项目概览

项目属性 内容
项目名称 Data Analysis Learning Project
项目路径 DataAnalysis/Data_Analysis_Practice_Project
技术栈 Python 3.8+、Jupyter Notebook、Pandas、NumPy、Matplotlib、Seaborn、scikit-learn、openpyxl
核心目标 通过真实案例掌握 Python 数据分析全链路技能
项目规模 64 个文件、45 个代码文件、约 11,843 行代码
开源协议 MIT

为什么做这个项目?

数据分析是当今技术岗位的通用能力,但对于初学者来说,最大的困惑往往是:

  • 学了很多函数,却不知道如何串联成完整项目;
  • 面对真实数据时,不知道从哪里下手;
  • 清洗、分析、可视化、建模各学各的,缺乏系统性实践。

为了解决这个问题,我搭建了这个零基础友好的数据分析学习项目。它不是一个简单的教程集合,而是一个按照真实工作流组织的、可运行的完整项目:从拿到原始数据开始,经过清洗、探索、可视化,最终尝试简单的机器学习建模。


项目结构

Data_Analysis_Practice_Project/
├── data/                          # 原始数据集
│   ├── sample_sales.csv
│   ├── housing_data.csv
│   └── iris_data.csv
├── notebooks/                     # Jupyter Notebook 交互分析
│   ├── 01_EDA_Exploration.ipynb
│   ├── 02_Visualization.ipynb
│   ├── 01_linear_regression.ipynb
│   └── 02_classification.ipynb
├── scripts/                       # 可复用 Python 脚本
│   └── data_cleaning.py
├── 03_machine_learning/           # 机器学习入门模块
│   ├── README.md
│   ├── data/
│   └── notebooks/
├── requirements.txt
├── LICENSE
└── README.md

这个结构的设计思路是:

  • notebooks/ 适合交互式学习和探索;
  • scripts/ 适合沉淀可复用的数据处理逻辑;
  • data/ 集中管理所有数据集;
  • 03_machine_learning/ 单独作为一个进阶模块。

技术栈详解

工具/库 用途 为什么选择它
Python 3.8+ 主语言 数据分析领域的事实标准
Pandas 数据清洗、聚合、统计 DataFrame 结构让表格数据处理非常直观
NumPy 数值计算、数组操作 为 Pandas 和 scikit-learn 提供底层支持
Matplotlib 基础可视化 灵活、可控,适合学习底层绘图原理
Seaborn 高级统计可视化 基于 Matplotlib,一行代码生成美观图表
scikit-learn 机器学习 接口统一、文档完善,非常适合入门
Jupyter Notebook 交互式分析 边写代码边查看结果,适合探索性分析
openpyxl Excel 导出 便于将分析结果交付给非技术同事

requirements.txt 内容:

numpy>=1.24.0
pandas>=2.0.0
matplotlib>=3.7.0
seaborn>=0.12.0
scikit-learn>=1.3.0
jupyter>=1.0.0
jupyterlab>=3.6.0
openpyxl>=3.1.0

模块一:数据清洗

1.1 清洗步骤

数据清洗占据了数据分析工作 60%~80% 的时间。本项目设计了完整的清洗流程:

  1. 加载数据:使用 pd.read_csv() 读取 CSV 文件;
  2. 处理缺失值:识别空值,根据场景选择删除或填充;
  3. 转换数据类型:将字符串日期转换为 datetime,将类别字段转换为 category;
  4. 处理异常值:使用统计方法识别并处理异常;
  5. 特征工程:提取月份、星期、季节等新特征。

1.2 示例数据

date       | sales | region | customer_type | sales_level
2023-01-01 | 150   | East   | Regular       | Low
2023-01-02 | 200   | West   | Premium       | High
2023-01-03 | 175   | North  | Regular       | Low
2023-01-04 | 190   | South  | Premium       | High

1.3 典型清洗代码

import pandas as pd

# 加载数据
df = pd.read_csv('data/sample_sales.csv')

# 转换日期类型
df['date'] = pd.to_datetime(df['date'])

# 提取时间特征
df['month'] = df['date'].dt.month
df['week_day'] = df['date'].dt.dayofweek

# 查看缺失值
print(df.isnull().sum())

# 删除缺失值较少的行
df = df.dropna(subset=['sales', 'region'])

模块二:探索性数据分析(EDA)

2.1 统计描述

使用 df.describe() 快速了解数值型特征的分布:

df.describe()

重点关注:均值、中位数、标准差、最小值、最大值、四分位数。

2.2 相关性分析

import seaborn as sns
import matplotlib.pyplot as plt

# 计算相关系数矩阵
corr = df.corr(numeric_only=True)

# 热力图
plt.figure(figsize=(8, 6))
sns.heatmap(corr, annot=True, cmap='coolwarm', center=0)
plt.title('特征相关性热力图')
plt.show()

2.3 分组聚合

# 按区域统计销售额
region_sales = df.groupby('region')['sales'].sum().reset_index()
print(region_sales)

模块三:数据可视化

3.1 可视化目标

  • 展示销售趋势;
  • 对比不同区域/客户类型的销售表现;
  • 发现数据中的模式和异常。

3.2 常用图表

图表类型 用途 实现库
折线图 时间序列趋势 Matplotlib / Seaborn
柱状图 类别对比 Matplotlib / Seaborn
箱线图 分布和异常值 Seaborn
散点图 相关性 Seaborn
热力图 相关性矩阵 Seaborn

3.3 示例:区域销售额对比

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(10, 6))
sns.barplot(data=df, x='region', y='sales', estimator='mean')
plt.title('各区域平均销售额对比')
plt.xlabel('区域')
plt.ylabel('平均销售额')
plt.show()

模块四:机器学习入门

4.1 线性回归:房价预测

数据:housing_data.csv

字段 含义
area 房屋面积(平方米)
bedrooms 卧室数量
age 房龄(年)
price 房价(万元)

代码示例:

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import pandas as pd

# 加载数据
df = pd.read_csv('data/housing_data.csv')

# 特征和目标
X = df[['area', 'bedrooms', 'age']]
y = df['price']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估
print(f'R² Score: {r2_score(y_test, y_pred):.4f}')
print(f'RMSE: {mean_squared_error(y_test, y_pred, squared=False):.4f}')

4.2 分类算法:鸢尾花数据集

数据:经典的 iris_data.csv

算法:

  • 逻辑回归(Logistic Regression)
  • K-近邻(K-Nearest Neighbors)

评估指标:

  • 准确率(Accuracy)
  • 精确率(Precision)
  • 召回率(Recall)
  • F1 分数(F1 Score)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

# 加载数据
iris = load_iris()
X, y = iris.data, iris.target

# 划分数据
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# 训练分类器
clf = LogisticRegression(max_iter=200)
clf.fit(X_train, y_train)

# 预测与评估
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred, target_names=iris.target_names))

项目成果

模块 完成度 产出
数据清洗 100% 可复用的清洗脚本
探索性分析 100% 多份 Jupyter Notebook
可视化 100% 多种类型图表
机器学习入门 70% 线性回归 + 分类模型
项目文档 100% 详细 README

遇到的问题与解决方案

问题 1:Pandas 读取日期时类型错误

现象:date 列被识别为字符串,无法按时间排序。

解决:使用 pd.to_datetime() 显式转换。

问题 2:Matplotlib 中文乱码

现象:图表中的中文标题显示为方框。

解决:配置中文字体:

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

问题 3:scikit-learn 模型收敛警告

现象:逻辑回归出现 ConvergenceWarning。

解决:增大 max_iter 参数,或进行特征缩放。


学习心得

  1. 数据清洗是基础:再复杂的模型,也经不起脏数据的折腾。
  2. 可视化是沟通工具:好的图表能让非技术决策者快速理解数据。
  3. 从简单模型开始:不要一上来就用深度学习,线性回归和 KNN 已经能解决很多问题。
  4. 项目化学习最有效:把知识组织成可运行的项目,比零散学习效果好得多。

后续规划

  • 完成机器学习模型评估章节;
  • 增加真实数据集(如 Kaggle 竞赛数据);
  • 补充特征工程专题;
  • 增加模型保存与部署的示例。

总结

这个项目是我数据分析学习之路上的第一个完整实践。它让我从"会用几个 Pandas 函数"进阶到"能够独立完成一个数据分析项目"。更重要的是,它建立了一个可扩展的项目模板,后续我可以不断往里面添加新的分析案例和模型。

如果你也是数据分析初学者,建议从 notebooks/01_EDA_Exploration.ipynb 开始,边运行边修改数据,观察结果变化。数据分析最好的老师,就是真实的数据。

avatar

Tao

在数据与代码间探索的普通人 / 数据科学与大数据技术专业大三学生,坐标陕西西安。热爱技术实践与数据分析,正在找测试、数据分析方向的实习。

RECOMMENDED

Python + Pytest + Requests 接口自动化测试框架:从零搭建可维护的分层式测试工程

2025-12-20 12:00:00

数据分析入门:从数据清洗到可视化

2025-09-15 10:00:00

电商订单数据质量测试:用 Python + Pandas 构建自动化数据校验体系

2026-01-15 13:00:00

Table of Contents