Python 数据分析实战:4 个经典项目案例
前言
数据分析是大数据技术的重要应用领域。本文将基于4个典型实战案例,系统讲解Python在数据挖掘四大核心任务中的应用:关联规则分析、分类预测、回归建模和聚类分析。案例涵盖电影类型关联挖掘、心脏病诊断预测、大学录取率分析和NBA球员聚类等实际场景,完整呈现pandas数据处理、scikit-learn模型构建以及matplotlib可视化等关键技术要点。特别适合数据分析初学者作为实践参考。
项目一:电影类型关联规则挖掘(Apriori算法)
项目目标:
通过挖掘电影类型间的潜在关联关系,发现强关联规则,为电影推荐和类型组合决策提供数据支持。
实施步骤:
- 读取电影数据文件
- 过滤无类型标签的记录
- 将类型字符串转换为列表格式
代码实现:
import pandas as pd from collections import defaultdict # 数据加载与清洗 df = pd.read_csv('movies.csv') df = df[df['genres']!='(no genres listed)']# 过滤无效记录 df['genres_list']= df['genres'].apply(lambda x: x.split('|'))# 类型转换 total_movies =len(df)# 统计有效电影数量频繁项集挖掘流程:
- 计算各单项类型的支持度,筛选出满足最小支持度阈值(0.02)的频繁单项集
- 生成类型组合对,计算项集支持度,筛选出频繁二项集
- 关联规则生成:设置最小置信度(0.3),计算置信度和提升度(Lift>1表示正相关),最终筛选出强关联规则
核心分析结果:
Top10 强关联规则:
| 前项 | 后项 | 支持度 | 置信度 | 提升度 |
|---|---|---|---|---|
| Animation | Children | 0.0311 | 0.4943 | 7.2265 |
| Children | Fantasy | 0.0215 | 0.3148 | 3.9226 |
| Mystery | Thriller | 0.0365 | 0.6178 | 3.1666 |
关键发现:
- **动画类型(Animation)与儿童类型(Children)**展现出最强的关联性,提升度高达7.23。数据分析显示,动画电影有49.43%的概率属于儿童片类型。
- **悬疑片(Mystery)与惊悚片(Thriller)**的组合具有最高的置信度(61.78%),这与电影类型搭配的市场惯例高度吻合。
- **动作片(Action)**与冒险片(Adventure)、惊悚片(Thriller)之间均存在显著的正相关关系。
项目二:心脏病诊断分类预测
项目目标
基于患者生理指标数据构建分类模型,预测心脏病患病风险,并对比不同算法的性能表现。
数据处理与建模流程
数据预处理:
- 缺失值处理:将"?"替换为NaN,采用中位数填充
- 数据类型转换:确保所有列转换为数值型
- 目标变量处理:进行二值化转换(>0为1,否则为0)
import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.metrics import accuracy_score, classification_report # 数据加载与清洗 data = pd.read_csv('Heart_Disease.csv') data.replace('?', np.nan, inplace=True)for col in data.columns: data[col]= pd.to_numeric(data[col], errors='coerce')# 缺失值填充from sklearn.impute import SimpleImputer imputer = SimpleImputer(strategy='median') data = pd.DataFrame(imputer.fit_transform(data), columns=data.columns) data['target']= data['target'].apply(lambda x:1if x >0else0)特征工程:
- 划分特征集与目标变量
- 数据集拆分(训练集70%,测试集30%)
- 特征标准化处理
模型构建:
实现并对比三种分类算法:
- 逻辑回归
- 决策树
- 随机森林
# 逻辑回归 lr = LogisticRegression(max_iter=1000, random_state=42) lr.fit(X_train_scaled, y_train)# 决策树 dt = DecisionTreeClassifier(max_depth=5, random_state=42) dt.fit(X_train, y_train)# 随机森林 rf = RandomForestClassifier(n_estimators=100, random_state=42) rf.fit(X_train, y_train)模型性能对比
| 模型 | 准确率 |
|---|---|
| 逻辑回归 | 0.8462 |
| 决策树 | 0.7143 |
| 随机森林 | 0.8462 |
最优模型(逻辑回归)评估报告:
- 精确率(Precision):
- 阴性:0.89
- 阳性:0.81
- 召回率(Recall):
- 阴性:0.81
- 阳性:0.88
- F1分数:
- 阴性:0.85
- 阳性:0.84
关键结论
- 逻辑回归与随机森林表现最佳,准确率均达到84.62%
- 模型对阳性病例(患病)的识别能力突出(召回率88%),适合用于初步筛查
- 决策树性能相对欠佳,可能需通过调整参数复杂度来优化
项目三:大学录取率预测模型
项目目标
基于申请者的GRE、TOEFL等标准化考试成绩,构建线性回归模型预测录取概率。
核心实现步骤
- 数据预处理
- 读取录取预测数据集
- 移除无关字段(序列号)
- 规范化列名格式
import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.preprocessing import StandardScaler from sklearn.metrics import mean_squared_error, r2_score # 中文显示配置 plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False# 数据加载与清洗 data = pd.read_csv('Admission_Predict.csv') data = data.drop('Serial No.', axis=1) data.columns = data.columns.str.strip()- 模型构建
- 划分训练集/测试集(80%/20%)
- 标准化特征数据
- 训练线性回归模型
- 模型评估
- 计算MSE和R²评估指标
- 可视化真实值与预测值对比
# 模型预测与评估 y_test_pred = lr_model.predict(X_test_scaled) mse = mean_squared_error(y_test, y_test_pred) r2 = r2_score(y_test, y_test_pred)print(f"均方误差(MSE):{mse:.4f}")print(f"决定系数(R²):{r2:.4f}")# 结果可视化 plt.figure(figsize=(6,4)) plt.scatter(y_test, y_test_pred, alpha=0.6) plt.plot([y_test.min(), y_test.max()],[y_test.min(), y_test.max()],'r--') plt.xlabel('真实录取率') plt.ylabel('预测录取率') plt.title('真实值 vs 预测值对比') plt.grid(alpha=0.3) plt.show()模型表现
- 均方误差:0.0047(理想范围)
- 决定系数:0.7956(解释力良好)
预测案例
申请者档案:
- GRE 325 | TOEFL 110 | GPA 8.9 | 有研究经历
预测录取概率:80.09%
核心发现
- 模型预测效果良好(R²=79.56%),预测值与实际值分布吻合
- 关键影响因素:
- 标准化考试成绩(GRE/TOEFL)
- 本科GPA
- 科研经历
项目四:NBA球员聚类分析
项目目标
基于球员比赛统计数据,运用聚类算法对NBA球员进行分类,挖掘不同类型球员的特征表现。
实现流程
- 数据预处理
- 处理重复球员数据(保留TOT汇总记录)
- 缺失值处理:
- 命中率相关字段填充0
- 其他数值型字段填充均值
import pandas as pd import numpy as np from sklearn.cluster import KMeans, AgglomerativeClustering, DBSCAN from sklearn.preprocessing import StandardScaler from sklearn.metrics import silhouette_score, davies_bouldin_score # 数据读取与预处理 df = pd.read_csv('NBA_Player_Statistics.csv')# 处理重复球员if'Tm'in df.columns: df['is_tot']= df['Tm']=='TOT' df = df.sort_values(['Player','is_tot'], ascending=[True,False]) df = df.drop_duplicates('Player', keep='first').drop('is_tot', axis=1)# 缺失值填充 fill_0_cols =['FG%','3P%','FT%']for col in fill_0_cols:if col in df.columns: df[col].fillna(0, inplace=True) numeric_cols = df.select_dtypes(include=np.number).columns for col in numeric_cols: df[col].fillna(df[col].mean(), inplace=True)- 特征选择
- 选取10个核心比赛指标(上场时间、得分、命中率、助攻、篮板等)
- 聚类算法实现
- 对比K-Means、层次聚类、DBSCAN三种算法
- 聚类评估
- 使用轮廓系数(越大越好)和DB指数(越小越好)评估效果
算法性能对比
| 算法 | 轮廓系数 | DB指数 |
|---|---|---|
| K-Means | 0.2094 | 1.3460 |
| 层次聚类 | 0.1969 | 1.3129 |
| DBSCAN | 0.2000 | 0.8222 |
K-Means聚类结果(5类球员)
| 类别 | 上场时间 | 得分 | 命中率 | 三分命中率 | 助攻 | 篮板 | 特点总结 |
|---|---|---|---|---|---|---|---|
| 0 | 24.64 | 11.34 | 0.58 | 0.20 | 1.51 | 7.60 | 内线型球员,篮板突出 |
| 1 | 26.59 | 11.73 | 0.46 | 0.37 | 2.75 | 3.96 | 外线射手,三分能力强 |
| 2 | 6.78 | 1.91 | 0.31 | 0.18 | 0.66 | 1.06 | 边缘球员,出场时间少 |
| 3 | 33.90 | 21.46 | 0.48 | 0.35 | 5.82 | 5.89 | 核心球员,全能表现 |
| 4 | 14.08 | 5.33 | 0.48 | 0.34 | 1.03 | 2.40 | 替补球员,角色明确 |
关键结论
- DBSCAN的DB指数最低(0.8222),聚类紧凑性最佳
- K-Means轮廓系数最高,聚类分离度最优
- NBA球员可分为5类:核心球员、内线球员、外线射手、替补球员和边缘球员
- 核心球员各项指标表现突出,上场时间最长
技术栈总结
- 数据处理:pandas、numpy
- 建模算法:scikit-learn
- 可视化:matplotlib
- 数据挖掘:关联规则挖掘、聚类分析
项目收获
- 掌握数据分析全流程:数据预处理→特征工程→模型构建→评估优化
- 理解算法适用场景:
- 关联规则:变量关系挖掘
- 分类算法:离散标签预测
- 回归分析:连续值预测
- 聚类分析:无监督分组
- 掌握多种模型评估指标:轮廓系数、DB指数、准确率、R²等
改进方向
- 优化特征工程:增加特征交叉、特征选择
- 超参数调优:使用GridSearchCV优化参数
- 算法扩展:尝试神经网络等深度学习模型
- 增强可视化:PCA降维展示聚类结果,丰富数据洞察图表
结语
数据分析的核心价值在于从海量原始数据中提炼出可落地的商业洞察与科学规律。本文通过四个典型案例,系统展示了数据挖掘的四大核心任务:
- 关联规则挖掘(电影类型关联分析):
- 应用Apriori算法揭示"看过A类电影的观众偏好B类"的关联规则
- 典型场景:视频推荐系统、商品组合营销
- 分类预测(心脏病诊断预测):
- 采用逻辑回归、随机森林等算法构建疾病风险评估模型
- 核心指标:准确率、召回率、AUC值
- 医疗应用:早期筛查、个性化治疗
- 回归分析(大学录取率预测):
- 建立多元线性回归模型量化影响因素
- 可解释性分析:标准化系数对比、P值检验
- 教育应用:招生政策优化、资源调配
- 聚类分析(NBA球员特征聚类):
- 运用K-means算法识别球员技术特征群体
- 关键处理:数据标准化、PCA降维
- 体育应用:人才选拔、战术制定
这些案例彰显了Python数据分析生态的强大优势:
- 数据处理:pandas高效完成数据清洗与转换
- 特征工程:scikit-learn预处理工具实现特征优化
- 建模分析:scikit-learn统一API支持快速迭代
- 可视化:matplotlib/seaborn生成专业图表
- 部署应用:Flask/Django实现分析结果服务化
从数据获取到模型部署,这套完整分析流程可有效解决商业智能、医疗健康、教育管理、体育分析等领域的实际问题。随着数据规模扩大和技术进步,数据挖掘将在更多场景创造实际价值。