首页/新闻资讯/正文详情

Python校园消费分析实战:从数据清洗到聚类建模的完整课设链路

发布时间:2026/9/24 22:01:26 来源:云帆数科 栏目:资讯中心
Python校园消费分析实战:从数据清洗到聚类建模的完整课设链路
简介这是一套面向高校学生与数据分析初学者的Python校园消费行为分析完整项目适用于毕业设计、期末大作业与课程设计场景帮助读者从零完成数据采集、清洗、分析与可视化全流程。资源包共21个文件约18.93MB以7个ipynb交互式笔记为主体配合3个py脚本、7张jpg可视化结果图以及docx分析报告、md说明文档和txt补充材料覆盖食堂三餐占比、就餐峰值、不同性别消费对比等分析维度代码注释详尽新手也能顺利部署运行。目前已有334人学习下载。项目完整呈现了消费偏好、消费习惯与消费趋势的分析思路并涉及聚类分析、关联规则与预测模型等消费行为建模方法读者可直接获得可复用的源码、数据集与结果集快速掌握Python数据处理与可视化技巧并参考报告撰写与结果展示方式为答辩与项目汇报提供有力支撑。1. 从一份 98 分课设拆开看Python 校园消费分析到底能跑出什么期末周前两周实验室里最常见的一幕是选题定了「学生校园消费行为分析」Python 环境也装了pandas 也 import 了可打开数据一看——几千行刷卡流水字段一堆完全不知道从哪下手。这份基于 Python 的学生校园消费行为分析资源就是冲着这个卡点来的它把源码、数据、结果集和一份写好的分析报告打包在一起notebook 按 task 编号拆开从清洗到可视化再到建模每一步都有注释新手照着跑也能出图。它解决的不是「教你 Python 语法」而是「给你一条能交差的完整链路」食堂三餐占比、就餐峰值、不同性别消费对比这些图报告里直接能用聚类、关联规则、预测模型这些消费行为模型也留了可改的入口。适合谁做期末大作业、课程设计、毕业设计的同学以及想拿一份真实消费流水练 pandas matplotlib sklearn 的入门者。下面我按自己拆包复现的顺序把这份资源讲透。2. 拆包先看结构notebook 分工、数据字段与运行环境2.1 目录里每个文件对应哪一步分析拿到压缩包解压后根目录大致是这样几类东西task1_1.ipynb到task3_3.ipynb这一串 notebook 是主线数据及代码v2.1是数据与代码的归档目录appendix_张钊彬.txt/.zip是附录学生校园消费行为分析报告.docx是成稿报告剩下那一堆.jpg食堂占比、就餐峰值、money 等是已经跑出来的结果图。README.md 负责说明整体流程。我一般先不急着跑代码而是把 notebook 按编号排一遍判断它的分析节奏文件大致职责依赖重点task1_x数据读取、字段探查、缺失与异常处理pandas、numpytask2_x分组统计、三餐占比、峰值时段pandas groupby、matplotlibtask3_x消费行为建模聚类/关联/预测sklearn、scipy报告 docx结论与图表汇总无阅读用结果 jpg已生成的图表无对照用这个分工是典型的课设结构先清洗、再描述性统计、最后建模。你完全可以只跑 task1 task2 交一份描述性分析也可以把 task3 的模型接上冲高分。先看清哪块是「必跑」、哪块是「加分」比一上来就全量执行要省时间。2.2 数据字段与清洗口径消费流水类数据核心字段通常跑不出这几类学号/卡号、消费时间、消费金额、消费地点食堂/超市/其他、性别或院系等属性。这份资源的数据放在数据及代码v2.1里notebook 开头会先read_csv或read_excel读进来然后做字段类型转换。清洗这一步是整份代码里最容易被跳过、又最影响结果的部分。常见做法是时间列转datetime金额列转float剔除金额为 0 或负数的记录可能是退款或刷卡异常再按消费地点归类。下面是我复现时用的清洗骨架逻辑和资源里的思路一致import pandas as pd import numpy as np # 读取原始流水注意编码中文数据常见 utf-8 或 gbk df pd.read_csv(数据及代码v2.1/consume.csv, encodingutf-8) # 时间列统一转 datetime方便后面按小时/餐段切分 df[消费时间] pd.to_datetime(df[消费时间], errorscoerce) # 金额转数值非法值变 NaN 后剔除 df[消费金额] pd.to_numeric(df[消费金额], errorscoerce) df df.dropna(subset[消费时间, 消费金额]) # 去掉 0 元和负数退款/异常刷卡 df df[df[消费金额] 0] # 按小时打餐段标签用于三餐占比分析 def meal_tag(h): if 6 h 10: return 早餐 elif 10 h 15: return 午餐 elif 15 h 21: return 晚餐 else: return 其他 df[餐段] df[消费时间].dt.hour.map(meal_tag) print(df.shape, df[餐段].value_counts())逻辑说明errorscoerce是关键参数遇到脏数据不会直接抛异常而是转成 NaT/NaN后面统一 drop避免中途崩。餐段划分的边界6/10/15/21不是死的不同学校作息不一样改这几个数字就能适配。dt.hour取小时再 map比写一堆 apply 快得多。参数上要留意两点一是编码中文 CSV 用 utf-8 读出来乱码就换 gbk二是金额阈值如果数据里有大额充值记录混进来 0不够得再加一个上限过滤否则均值会被拉飞。2.3 环境依赖与版本这份代码是纯 Python 数据分析栈不需要 GPU也不需要复杂框架。我一般会建一个干净虚拟环境再装python -m venv venv source venv/bin/activate # Windows 用 venv\Scripts\activate pip install pandas numpy matplotlib seaborn scikit-learn jupyter jupyter notebook版本上pandas 1.x 和 2.x 在groupby默认行为和部分 API 上有差异如果 notebook 里出现FutureWarning或append报错多半是版本问题。稳妥做法是看 README 里有没有写版本没有就装较新的稳定版遇到具体报错再针对性降级。matplotlib 中文显示是另一个高频坑后面避坑章节单独说。3. 三餐占比与就餐峰值groupby 加可视化的落地写法3.1 三餐占比怎么算、怎么画食堂早餐/午餐/晚餐占比本质是按餐段分组计数再算比例。资源里那几张食堂早餐占比.jpg、食堂午餐占比.jpg就是这么来的。核心就一行groupby但要让图能直接放进报告细节不少。import matplotlib.pyplot as plt # 中文字体Windows 用 SimHeiMac 用 Arial Unicode MS plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False # 按餐段统计消费笔数 meal_count df[df[餐段] ! 其他][餐段].value_counts() # 算占比 meal_ratio meal_count / meal_count.sum() # 画饼图autopct 显示百分比 plt.figure(figsize(6, 6)) plt.pie(meal_ratio, labelsmeal_ratio.index, autopct%1.1f%%, startangle90) plt.title(食堂三餐消费占比) plt.savefig(食堂三餐占比.png, dpi300, bbox_inchestight) plt.show()逻辑说明先过滤掉「其他」餐段否则饼图里会多出一块非正餐的干扰项。value_counts()默认按数量降序饼图顺序会跟着变想固定顺序就加reindex([早餐,午餐,晚餐])。autopct%1.1f%%控制百分比保留一位小数startangle90让第一块从正上方开始视觉上更规整。参数上dpi300是给报告用的屏幕看 100 就够bbox_inchestight防止标题或标签被裁掉。如果饼图标签重叠改成柱状图更清楚课设报告里柱状图其实更常见。3.2 就餐峰值时段怎么定位就餐峰值是另一个高频考点找出一天中消费笔数最多的小时。做法是按小时分组计数画折线或柱状峰值自然就出来了。# 按小时统计消费笔数 hour_count df.groupby(df[消费时间].dt.hour).size() plt.figure(figsize(10, 5)) plt.plot(hour_count.index, hour_count.values, markero) plt.xlabel(小时) plt.ylabel(消费笔数) plt.title(校园消费时段分布) plt.xticks(range(0, 24)) plt.grid(alpha0.3) plt.savefig(就餐峰值.png, dpi300, bbox_inchestight) plt.show() # 直接打印峰值小时 peak_hour hour_count.idxmax() print(消费峰值时段, peak_hour, 点笔数, hour_count.max())逻辑说明groupby(df[消费时间].dt.hour)直接按小时聚合.size()统计每组的行数笔数。idxmax()返回最大值对应的索引也就是峰值小时比肉眼看图更准。xticks(range(0,24))保证 x 轴 0 到 23 点都标出来不然 matplotlib 会自动跳着标报告里看着不专业。这里有个容易翻车的点如果数据跨多天按小时聚合会把所有天叠在一起得到的是「平均一天」的分布这通常正是想要的但如果你想看某一天的峰值得先按日期过滤。资源里的峰值图是全天叠加口径报告里也按这个解释。3.3 不同性别消费对比18连锁经营专业不同性别消费对比图.jpg这张图说明数据里带了性别或专业属性。对比分析一般是分组求均值或总额再画分组柱状图。# 按性别分组算人均消费和总消费 gender_stat df.groupby(性别)[消费金额].agg([mean, sum, count]) print(gender_stat) # 分组柱状图 gender_stat[mean].plot(kindbar, figsize(6, 4), color[#4C72B0, #DD8452]) plt.ylabel(人均消费金额) plt.title(不同性别消费对比) plt.xticks(rotation0) plt.savefig(性别消费对比.png, dpi300, bbox_inchestight) plt.show()逻辑说明agg([mean,sum,count])一次拿到均值、总额、笔数三个指标比分开算省事。均值反映消费水平总额反映群体规模报告里两个都值得写。rotation0让 x 轴标签横着放中文标签竖着容易挤。如果数据里性别字段是编码比如 1/2记得先 map 成中文再画图否则图例看不懂。这一步在 notebook 里通常有但换数据时容易漏。4. 消费行为建模聚类、关联规则与预测怎么接4.1 用 KMeans 给学生消费分层描述性统计只能告诉你「平均花了多少」建模才能回答「学生能分成几类」。资源里 task3 系列涉及聚类、关联规则和预测聚类是最容易上手、也最容易在报告里出彩的一块。思路是把每个学生的消费特征总消费、笔均、就餐时段偏好等聚成几类。from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler # 按学号聚合出每个学生的特征 stu df.groupby(学号).agg( 总消费(消费金额, sum), 笔均(消费金额, mean), 消费笔数(消费金额, count) ).reset_index() # 标准化聚类对量纲敏感 X stu[[总消费, 笔均, 消费笔数]] X_scaled StandardScaler().fit_transform(X) # K3分成高/中/低消费三档 kmeans KMeans(n_clusters3, random_state42, n_init10) stu[类别] kmeans.fit_predict(X_scaled) print(stu.groupby(类别)[[总消费, 笔均, 消费笔数]].mean())逻辑说明聚类前必须标准化否则「总消费」数值远大于「笔均」会主导距离计算结果全被总消费带偏。random_state42固定随机种子保证每次跑结果一致报告可复现。n_init10是 sklearn 新版默认跑 10 次取最优避免陷入局部最优。K 值选 3 是课设常用档位对应高/中/低消费。想更严谨可以用肘部法inertia 随 K 变化曲线选 K但报告里 K3 解释起来最直观。聚类结果出来后用groupby(类别).mean()看每类特征给类别起名字如「高频低额」「低频高额」报告立刻有内容。4.2 关联规则看消费组合关联规则Apriori用来找「买了 A 也常买 B」的组合比如早餐常和某类商品一起出现。这块比聚类重数据要转成交易格式。from mlxtend.frequent_patterns import apriori, association_rules # 构造「学生-消费地点」的 0/1 矩阵 basket df.groupby([学号, 消费地点])[消费金额].sum().unstack().fillna(0) basket basket.applymap(lambda x: 1 if x 0 else 0) # 找频繁项集min_support 控制最低支持度 freq apriori(basket, min_support0.05, use_colnamesTrue) rules association_rules(freq, metriclift, min_threshold1.0) print(rules[[antecedents, consequents, support, confidence, lift]].head())逻辑说明unstack()把长表转成「学号 × 消费地点」的宽表applymap把金额转成 0/1表示有没有在该地点消费过。min_support0.05表示至少 5% 的学生有该组合太低会出一堆无意义规则太高又筛没了0.05 到 0.1 之间试。lift 1表示正相关lift 越大关联越强。注意applymap在 pandas 2.1 之后被标记弃用新版用basket.map(...)。跑之前确认 pandas 版本报AttributeError就换map。4.3 预测模型的接入位置预测部分通常是按时间预测消费额或消费趋势属于加分项。常见做法是用历史每日总消费做时间序列或按学生特征做回归。资源里 task3 有对应 notebook接的时候注意预测需要时间维度连续如果数据只有几天预测意义不大报告里要说明样本限制别硬吹模型精度。我一般会先看数据覆盖多少天少于两周就不做预测把精力放在聚类和关联上。这不是偷懒是避免报告里出现「用 5 天数据预测下月消费」这种经不起问的结论。5. 避坑与排查中文乱码、路径、版本这三类翻车最多5.1 图表中文变方块现象matplotlib 画出来的标题、标签全是方框英文正常。原因默认字体不含中文且没关掉 unicode 负号。解决在画图前统一设置plt.rcParams[font.sans-serif] [SimHei]Windows或[Arial Unicode MS]Mac并加plt.rcParams[axes.unicode_minus] False。如果 SimHei 没装去系统字体目录确认或换Microsoft YaHei。这一步放在所有画图代码之前放后面不生效。5.2 读文件报路径或编码错误现象FileNotFoundError或读出来乱码。原因notebook 里的相对路径是相对启动目录的不是相对 notebook 文件中文 CSV 编码可能是 gbk。解决用os.getcwd()确认当前目录路径统一用相对项目根目录的写法编码先试 utf-8乱码换 gbk还不行用chardet探测。别用绝对路径换台机器就废。5.3 pandas 版本导致的 API 报错现象DataFrame.append报AttributeError或applymap警告。原因pandas 2.x 移除了append弃用了applymap。解决append改用pd.concat([df1, df2])applymap改用df.map(...)。如果不想改代码就降级到 pandas 1.5但新项目建议直接适配新版。5.4 聚类结果每次跑都不一样现象KMeans 每次运行分类结果变。原因没固定随机种子且初始质心随机。解决KMeans(n_clusters3, random_state42, n_init10)random_state固定种子n_init多跑几次取最优。报告里要写清参数否则复现不出来。5.5 金额均值被异常值拉飞现象人均消费算出来几百上千明显不合理。原因数据里混了充值、退款或大额记录。解决清洗阶段加金额上限过滤比如df df[df[消费金额] 100]阈值按学校实际定同时检查是否有重复记录drop_duplicates()去重。均值异常先看分布别急着下结论。6. 把结果集用起来报告复用与二次分析的几个技巧跑通代码只是第一步这份资源真正的价值在「结果集 报告」能直接复用。我的习惯是先拿现成的 jpg 和 docx 对照确认自己的输出和它一致再动手改。下面几个技巧是我反复用下来最省事的。第一图表命名和报告对齐。资源里的图名食堂早餐占比、就餐峰值、性别消费对比就是报告里的小标题你重新生成时保持同名替换 docx 里的图就不用改文字。第二报告里的结论句要能被数据支撑比如「午餐占比最高」对应饼图「峰值在 12 点」对应折线图别写图里看不出来的话。第三二次分析时优先改餐段边界和聚类 K 值这两个参数它们对结果影响最大也最容易讲出新东西。验证方法上我一般做两件事一是把清洗前后的行数打印出来确认丢了多少数据、为什么丢二是把聚类每类的样本数和均值打出来确认没有某一类只有几个人那说明 K 选大了。这两步做完报告里的数字才站得住。# 清洗前后对比确认数据损失合理 print(清洗前, raw.shape[0], 清洗后, df.shape[0]) print(损失比例, 1 - df.shape[0] / raw.shape[0]) # 聚类各类样本数防止空类或极小类 print(stu[类别].value_counts())参数说明损失比例一般控制在 10% 以内算正常超过就得回头看清洗条件是不是太狠。聚类各类样本数如果出现个位数把 K 调小或换特征。从那以后我每次拿到这类消费分析资源都强制先跑一遍清洗前后对比和聚类样本分布再动报告——这两步能挡掉大部分「图好看但结论错」的翻车。希望帮到你。本文还有配套的精品资源点击获取

相关推荐

从Demo到生产:FDE在客服Agent项目中的全套评审实战
从Demo到生产:FDE在客服Agent项目中的全套评审实战

FDE这个角色,很多人第一次听会愣一下。FDE,Forward Deployed Engineer,也有人叫解决方案工程师、交付工程师,用一句大白话说就是:把产品搬到客户现场,并且让它真的跑起来的人。我做客服Agent项目这几年&… · 2026/9/24 22:01:26

喷码缺陷检测实战:从数据标注到模型量化部署的完整链路
喷码缺陷检测实战:从数据标注到模型量化部署的完整链路

简介:这份资源是面向高校学生与机器学习入门者的喷码缺陷检测完整项目源码,可直接用于毕业设计、课程设计或期末大作业。项目以Python实现,围绕工业喷码字符的缺陷识别展开,涵盖数据预处理、模型训练与评估等环节,适合… · 2026/9/24 22:01:14

OpenClaw国产化部署实战:模型替换、飞书接入与高频报错排查
OpenClaw国产化部署实战:模型替换、飞书接入与高频报错排查

先说结论:OpenClaw 能跑,但离“开箱即用”还有一段距离。过去两周我集中调研了 OpenClaw 在国内的真实使用情况,从部署安装、模型配置到消息渠道接入,前后翻了几十份 issue 和配置案例,也找了几位正在跑生产环境的朋友… · 2026/9/24 22:01:14

Gadgets Workshop 前端工程规范:基于 Kumo 与 TanStack Router 的 React SPA 架构与编码约定
Gadgets Workshop 前端工程规范:基于 Kumo 与 TanStack Router 的 React SPA 架构与编码约定

人工智能AI 应用AI AgentAgent 沙箱AI 安全治理 【免费下载链接】cloudflare-os Agent workspace built on Cloudflare Workers for creating documents, building apps, and running agents with your company’s context and systems. 项目地址: https://gitcode.… · 2026/9/24 23:45:14

SAP OBYC会计科目自动分配配置指南:评估类与评估修改核心解析
SAP OBYC会计科目自动分配配置指南:评估类与评估修改核心解析

简介:《SAP会计科目自动分配配置大全》以SAP FICO中最核心的自动科目分配为主线,面向SAP FICO顾问、内部支持人员及希望深入理解后台配置逻辑的初学者,系统讲解从维护会计配置(FBKP)到自动过帐科目设置(OBY… · 2026/9/24 23:45:14

STM32F103RCT6最小系统设计:四通道温控项目从原理图到PCB全攻略
STM32F103RCT6最小系统设计:四通道温控项目从原理图到PCB全攻略

1. 从零吃透STM32F103RCT6最小系统:为什么这块板子决定了整个温控项目的成败做四通道智能温控系统,第一步不是写代码,而是把最小系统原理图画对。我见过太多人一上来就急着调PID、接传感器,结果板子打回来发现晶振不起振、复位电平… · 2026/9/24 23:45:08

2026年软著申请全攻略:企业自己准备材料的关键细节与自查清单
2026年软著申请全攻略:企业自己准备材料的关键细节与自查清单

1. 2026年审核风向:为什么企业自己准备反而更靠谱软件著作权(软著)一直是企业资质申报里的硬通货。高新技术企业认定、双软评估、软件产品增值税即征即退、科技项目申报,全都绕不开这张证书。进入2026年,版权中心在材料… · 2026/9/24 23:45:08

车辆维修保养报销系统:微信小程序+Spring Boot全栈开发实践
车辆维修保养报销系统:微信小程序+Spring Boot全栈开发实践

1. 这类系统到底在管什么——先把业务边界画清楚很多做毕业设计或者公司内部工具的朋友,一上来就急着建表、写接口,结果做到一半发现需求根本说不清。“车辆维修保养报销”这几个字看着简单,实际拆开之后,里面至少藏着三套完全不同… · 2026/9/24 23:45:08

AI时代人机协作新范式:从代码评审到内容去AI味的四大开源实践
AI时代人机协作新范式:从代码评审到内容去AI味的四大开源实践

1. 这期周刊里真正值得花时间看的四件事Github周刊2026W38这一期,信息密度比前几期明显高了一截。四个条目分别落在四个完全不同的方向上:阿里把内部用了多年的代码评审工具开源了、有人做了一套对ADHD(注意力缺陷多动障碍)人群友… · 2026/9/24 23:45:08

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码