Python 数据分析实战课程
通过10个真实项目,从零基础掌握Python数据分析核心技能。每个项目都配有交互式代码编辑器,边学边练,即学即用。
学习路径
快速开始
- 选择项目 — 从左侧导航栏选择一个项目开始学习
- 阅读知识点 — 了解每个项目涉及的Python语法和数据分析方法
- 运行代码 — 使用内置代码编辑器,点击"运行代码"查看结果
- 修改实验 — 自由修改代码参数,观察输出变化
- 完成挑战 — 尝试进阶挑战,巩固所学知识
- 标记完成 — 完成学习后点击底部按钮标记进度
销售记录清洗器
学习使用Python基础数据结构处理真实业务中的脏数据,掌握缺失值识别和异常值过滤的核心方法。
🎯 学习目标
- 掌握Python列表和字典的基本操作
- 学会使用for循环遍历数据
- 理解if条件判断在数据清洗中的应用
- 能够识别和处理None(缺失值)和负数(异常值)
- 输出清洗后的数据统计报告
📚 知识储备
- Python基础语法:变量赋值、print输出
- 数据类型:了解int、float、str、None的基本概念
- 简单逻辑:理解"如果...那么..."的条件判断思路
🔑 核心知识点
1. 字典(Dictionary)
字典是Python中存储"键值对"的数据结构,类似现实中的名片——通过名字(键)查找电话(值)。例如 {"name": "张三", "age": 25},用 dict["name"] 就能获取"张三"。
2. 列表(List)
列表是有序的数据集合,用方括号 [] 表示。可以存放多个元素,通过索引(从0开始)访问。例如 [1, 2, 3][0] 得到 1。
3. for循环
for循环用于遍历序列中的每个元素。在数据分析中,我们经常用for循环逐条检查数据记录。
4. None与缺失值
None表示"没有值",在数据分析中代表缺失数据。处理时需要用 is None 来判断,而不能用 == None。
💻 项目实战
📊 运行结果
🏆 进阶挑战
挑战1:多条件过滤
在清洗的基础上,过滤掉数量为0的订单(如A004显示器),并计算过滤后的总金额变化。
挑战2:数据修复
对于价格为None的订单,尝试用同类商品的平均价格进行填充,而不是直接删除。
挑战3:分类统计
将有效订单按金额分为"高(>1000)"、"中(100-1000)"、"低(<100)"三档,统计各档订单数量。
📖 拓展资源
成绩统计小工具
学习从文本数据中提取信息,使用Python内置函数完成描述性统计分析,计算均值、中位数等关键指标。
🎯 学习目标
- 学会使用split()方法解析CSV格式文本数据
- 掌握max()、min()、sum()、len()等内置函数
- 理解并手动实现均值和中位数的计算
- 能够计算及格率和各科最高/最低分
- 输出格式化的统计报告
📚 知识储备
- 字符串操作:了解字符串的基本概念
- 数学运算:理解加减乘除和平均值的概念
- 排序概念:知道什么是从小到大排列
🔑 核心知识点
1. split() 字符串分割
split(",") 将字符串按逗号分割成列表。这是解析CSV数据最常用的方法,类似Excel中按分隔符分列。
2. 列表推导式
[int(x) for x in list] 可以快速将字符串列表转换为整数列表,比写循环更简洁高效。
3. 中位数计算
将数据排序后,如果数据个数是奇数取中间值,偶数取中间两个数的平均值。中位数比均值更抗极端值影响。
💻 项目实战
📊 运行结果
🏆 进阶挑战
挑战1:标准差计算
手动实现标准差公式:先求每个值与均值之差的平方,再求平均,最后开平方根(使用 **0.5)。
挑战2:成绩等级
将每科成绩转换为等级:90-100为A,80-89为B,70-79为C,60-69为D,60以下为F。统计各等级人数。
挑战3:偏科检测
找出各科成绩差异最大的学生(最高分与最低分之差最大),标记为"偏科"。
📖 拓展资源
用户行为分类器
学习使用字典嵌套、多条件分支和集合去重,实现用户活跃度分层,是用户运营分析的基础技能。
🎯 学习目标
- 掌握字典的嵌套使用和多层访问
- 学会使用if-elif-else多条件分支
- 理解集合(set)去重的原理和应用
- 能够根据多维度指标对用户进行分层
- 输出用户分层统计报告
📚 知识储备
- 字典基础:了解字典的创建和基本访问
- if-else语句:理解条件判断的基本语法
- 业务概念:了解"用户活跃度"的基本含义
🔑 核心知识点
1. 字典嵌套
字典的值可以是另一个字典,形成嵌套结构。例如 result["高活跃"]["用户列表"] 可以访问两层嵌套的数据,适合组织多层级分类结果。
2. if-elif-else 多分支
当需要判断多个互斥条件时,使用elif链。Python会从上到下依次检查,一旦某个条件为True就执行对应代码块,跳过后续判断。
3. 集合(set)去重
集合是不允许重复元素的数据结构。将列表转为集合 set(list) 即可自动去重,常用于统计不重复的用户数、类别数等。
💻 项目实战
📊 运行结果
🏆 进阶挑战
挑战1:RFM简易版
在现有分层基础上,增加"最近登录天数"维度,将用户分为8个类别(每个维度高/低两个级别)。
挑战2:用户画像标签
为每个用户生成画像标签,如"高频低消"、"低频高消"等,并统计各标签人数。
📖 拓展资源
电商订单聚合分析
学习列表推导式、lambda匿名函数和排序,实现按用户维度聚合订单数据,是电商数据分析的核心操作。
🎯 学习目标
- 掌握列表推导式的写法和应用场景
- 理解lambda匿名函数的语法和用途
- 学会使用sort()和sorted()进行自定义排序
- 实现按用户ID分组聚合计算订单总额
- 输出Top N用户排名
📚 知识储备
- 列表基础:了解列表的创建和遍历
- 字典操作:了解字典的键值对操作
- 函数概念:初步理解函数的定义和调用
🔑 核心知识点
1. 列表推导式
[表达式 for 变量 in 序列 if 条件] 是Python的特色语法,一行代码完成"筛选+转换"。比传统for循环更简洁,执行效率也更高。
2. lambda匿名函数
lambda x: x["amount"] 定义了一个没有名字的简单函数。常配合sorted()使用,指定按字典中某个字段排序。
3. 分组聚合思路
使用字典实现分组:遍历订单列表,以user_id为键累加金额。这是SQL中GROUP BY的Python实现方式。
💻 项目实战
📊 运行结果
🏆 进阶挑战
挑战1:二八分析
计算排名前20%的用户贡献了多少比例的总消费额,验证"二八定律"是否成立。
挑战2:客单价分析
计算每个用户的平均客单价(总额/订单数),找出"高客单价低频次"的潜力用户。
挑战3:消费等级划分
使用分位数将用户分为VIP、高级、普通三个等级,并输出各等级的用户列表。
📖 拓展资源
气温异常检测
学习使用NumPy进行数值计算,掌握3σ原则和Z-score异常检测方法,是数据质量监控的核心技能。
🎯 学习目标
- 学会创建和操作NumPy数组
- 掌握NumPy的统计函数:mean、std、argmax等
- 理解布尔索引的原理和使用
- 掌握3σ原则和Z-score异常值检测方法
- 能够检测时间序列数据中的异常点
📚 知识储备
- Python基础:完成前4个项目
- 数学概念:了解均值和标准差的含义
- 统计概念:初步了解正态分布的概念
🔑 核心知识点
1. NumPy数组
NumPy数组是Python数值计算的基础。与列表不同,NumPy数组支持向量化运算——对整个数组执行数学操作,无需写循环,速度更快。
2. 布尔索引
arr[arr > threshold] 使用条件表达式生成布尔数组,直接筛选出满足条件的元素。这是NumPy最强大的特性之一。
3. Z-score标准化
Z-score = (x - 均值) / 标准差。Z-score的绝对值越大,说明数据点离均值越远。通常|Z| > 2被认为是异常值。
💻 项目实战
📊 运行结果
🏆 进阶挑战
挑战1:滑动窗口异常检测
使用7天滑动窗口计算局部均值和标准差,检测局部异常(而非全局异常),提高检测灵敏度。
挑战2:IQR方法
使用四分位距(IQR)方法检测异常值:低于Q1-1.5*IQR或高于Q3+1.5*IQR的为异常值,对比与Z-score方法的差异。
挑战3:异常值修复
将检测到的异常温度替换为前后7天的平均值,输出修复前后的对比。
📖 拓展资源
销售趋势滑动窗口
学习切片操作、自定义函数和列表累积,实现移动平均计算和趋势平滑,是时间序列分析的基础技术。
🎯 学习目标
- 掌握Python切片操作的高级用法
- 学会定义和使用自定义函数
- 理解移动平均的原理和计算方法
- 能够使用累积方法计算趋势指标
- 对比原始数据与平滑数据的差异
📚 知识储备
- NumPy基础:完成项目五
- 函数概念:了解def定义函数的基本语法
- 数学概念:理解平均值的计算方法
🔑 核心知识点
1. 切片操作
data[i:i+n] 从第i个位置取n个元素。切片是Python处理序列数据的利器,结合循环可以实现滑动窗口效果。
2. 自定义函数
def moving_average(data, window): 将重复逻辑封装为函数。好的函数应该有清晰的参数和返回值,便于复用。
3. 移动平均
移动平均用窗口内数据的平均值代替中心点的值,可以平滑短期波动,揭示长期趋势。窗口越大越平滑,但滞后也越大。
💻 项目实战
📊 运行结果
🏆 进阶挑战
挑战1:加权移动平均
实现加权移动平均:越近的数据权重越大(如权重为[1,2,3,4,5,6,7]),对比与简单移动平均的效果差异。
挑战2:趋势拐点检测
检测移动平均线的"拐点"(从上升到下降或反之),标记趋势变化的时间点。
挑战3:多窗口对比
同时计算3日、7日、14日移动平均,输出不同窗口下波动范围的对比表格。
📖 拓展资源
多表关联分析
学习字典映射、列表合并和异常处理,实现类似SQL JOIN的多表关联,发现数据一致性问题。
🎯 学习目标
- 掌握使用字典实现表关联的方法
- 学会try-except异常处理机制
- 理解左连接、内连接的区别
- 能够检测和报告数据一致性问题
- 输出关联后的完整数据报告
📚 知识储备
- 字典操作:完成项目一和项目三
- 列表遍历:熟练使用for循环
- 业务概念:了解"主表"和"从表"的关系
🔑 核心知识点
1. 字典映射实现JOIN
将主表存为字典(以关联键为key),遍历从表时通过key查找匹配记录。这等价于SQL中的LEFT JOIN,是Python中最常用的关联方式。
2. try-except异常处理
try: ... except KeyError: ... 当字典中不存在某个key时,程序不会崩溃,而是执行except中的处理逻辑。这在数据清洗中非常实用。
3. 数据一致性检查
关联分析的核心价值之一是发现"孤儿数据"——从表中有记录但主表中找不到对应信息。这些往往是数据质量问题的重要线索。
💻 项目实战
📊 运行结果
🏆 进阶挑战
挑战1:内连接实现
修改代码实现INNER JOIN(只保留关联成功的记录),并对比LEFT JOIN的结果差异。
挑战2:多表聚合
在关联基础上,按城市统计订单总额和平均客单价,找出消费力最强的城市。
挑战3:反向检查
检查用户表中是否有"从未下单的用户"(在订单表中找不到记录),这类用户可能需要激活。
📖 拓展资源
RFM用户价值模型
学习datetime日期处理、排序和字典聚合,实现经典的RFM用户价值分层模型,是用户运营的核心分析框架。
🎯 学习目标
- 掌握datetime模块的日期计算方法
- 学会使用timedelta进行日期加减
- 理解RFM模型的三个维度含义
- 掌握分位数划分的实现方法
- 能够将用户分为8个RFM价值层级
📚 知识储备
- Python基础:完成前7个项目
- 字典聚合:掌握项目四的分组方法
- 业务概念:了解"用户生命周期价值"的概念
🔑 核心知识点
1. datetime日期处理
datetime(2024,12,31) - timedelta(days=30) 可以计算30天前的日期。在RFM模型中,R(Recency)需要计算最近一次消费距今的天数。
2. RFM模型
Recency(最近消费时间):越小越好。Frequency(消费频率):越大越好。Monetary(消费金额):越大越好。三个维度各分高低,组合成8个用户群体。
3. 分位数划分
将数据排序后按位置分为高低两组。中位数是最简单的二分位方式。高于中位数的标记为"高",低于的标记为"低"。
💻 项目实战
📊 运行结果
🏆 进阶挑战
挑战1:RFM评分制
将每个维度按分位数分为1-5分(而非简单的高低),计算RFM总分,实现更精细的用户分层。
挑战2:动态阈值
使用四分位数(Q1、Q2、Q3)将每个维度分为"低、中、高"三档,实现27个更细粒度的用户群体。
挑战3:趋势分析
将时间分为两个半年,分别计算RFM,观察用户在不同维度的变化趋势(上升/稳定/下降)。
📖 拓展资源
A/B测试快速分析
学习随机抽样、条件聚合和函数封装,实现A/B测试的转化率对比和效果评估,是产品决策的核心分析方法。
🎯 学习目标
- 理解A/B测试的基本原理和应用场景
- 学会使用random模块生成模拟数据
- 掌握转化率的计算和对比方法
- 理解置信区间的基本概念和计算
- 能够做出"是否拒绝原假设"的判断
📚 知识储备
- Python基础:完成前8个项目
- 统计概念:了解概率、均值的基本概念
- 业务概念:了解"转化率"、"对照组/实验组"的含义
🔑 核心知识点
1. A/B测试原理
将用户随机分为两组:对照组(A组)使用原有方案,实验组(B组)使用新方案。通过对比两组的关键指标(如转化率),判断新方案是否显著优于原方案。
2. 转化率计算
转化率 = 转化人数 / 总人数。在代码中,sum(group) / len(group) 即可计算(1代表转化,0代表未转化)。
3. 置信区间
95%置信区间 = 转化率 +/- 1.96 * 标准误差。如果两组的置信区间不重叠,说明差异显著。标准误差 = sqrt(p*(1-p)/n)。
💻 项目实战
📊 运行结果
🏆 进阶挑战
挑战1:多指标分析
除了点击转化率,同时分析"注册转化率"和"付费转化率"两个指标,综合评估实验效果。
挑战2:样本量计算
编写函数,输入基准转化率、最小可检测效应和显著性水平,计算所需的样本量。
挑战3:分层分析
将用户按"新用户/老用户"分层,分别计算各层的转化率,检查实验效果是否在不同用户群体间一致。
📖 拓展资源
销售预测数据流水线
综合运用函数模块化、特征工程和简单线性回归,构建完整的"清洗-特征-训练-预测"数据流水线。
🎯 学习目标
- 掌握函数模块化编程的最佳实践
- 理解滞后特征(lag feature)的构造方法
- 学会使用assert进行数据验证
- 了解简单线性回归的原理和实现
- 能够构建完整的数据处理流水线
📚 知识储备
- 全部前9个项目:需要综合运用所学知识
- NumPy操作:掌握数组运算和统计函数
- 函数定义:熟练使用def定义和调用函数
🔑 核心知识点
1. 数据流水线思想
将数据处理分为多个步骤:数据加载 -> 清洗 -> 特征工程 -> 模型训练 -> 预测 -> 评估。每个步骤封装为独立函数,便于调试和维护。
2. 滞后特征
将前一天的销售额作为今天的特征(lag_1),前两天的作为lag_2。这样模型就可以利用历史数据预测未来,是时间序列预测的基础特征。
3. 简单线性回归
找到一条直线 y = ax + b,使预测值与真实值的误差最小。这里用最小二乘法实现,a = 协方差/方差,b = 均值_y - a*均值_x。
💻 项目实战
📊 运行结果
🏆 进阶挑战
挑战1:多特征回归
使用lag_1、lag_2、lag_3三个特征进行多元线性回归,对比单特征模型的预测精度提升。
挑战2:训练集/测试集划分
将数据按时间划分为训练集(前80%)和测试集(后20%),在测试集上评估模型表现,避免"过拟合"。
挑战3:完整流水线封装
将所有步骤封装为一个类(class),包含fit()、predict()、evaluate()方法,实现可复用的预测流水线。