
简介这是一套面向高校学生与Python初学者编写的电商平台数据分析系统完整源码可作为课程设计、期末大作业或自学练手项目使用。系统围绕电商业务场景展开涵盖销售趋势分析、复购率统计、用户行为分析、渠道来源分析及RFM用户价值分层等典型模块代码结构清晰、注释详尽新手也能快速理解并部署运行。资源包共30个文件包含7个Python脚本、19张png可视化结果图、3个pyc缓存文件及1份md说明文档整体约1.68MB图片直观呈现各分析模块的运行效果文档则对项目结构与使用方式作出说明。目前已有1249人学习下载读者可借此掌握数据清洗、指标计算与可视化呈现的完整流程并直接将其作为大作业提交或二次开发的基础模板。1. 电商数据分析系统源码拆解从订单表到可视化看板这套 Python 项目能跑通什么很多做 Python 期末大作业或者课程设计的人卡住的地方往往不是写不出代码而是拿到一份源码之后不知道数据从哪来、表之间怎么关联、跑起来为什么报错。这套基于 Python 的电商平台数据分析系统核心就是解决「有一份能直接跑、能改、能讲清楚原理的完整项目」这个问题。它把电商场景里最常见的订单、用户、商品、地区几个维度串成一条分析链路从数据生成或导入到清洗、聚合再到图表输出整个流程是闭环的。适合两类人一类是需要交课程设计、期末大作业的学生另一类是想拿一个真实业务场景练手 Pandas 和可视化的初学者。源码包里带了文档说明意味着你不用从零猜每个文件干什么但文档不会替你踩坑下面我把这套东西拆开讲。2. 环境搭建与依赖安装把 Python 版本和库版本先对齐2.1 为什么版本对不齐是第一个翻车点电商数据分析系统这类项目依赖的核心库无非是 pandas、numpy、matplotlib、seaborn有的还会带 flask 或 streamlit 做展示层。听起来简单但实际翻车最多的就是版本问题。比如 pandas 2.x 之后废弃了一批旧写法append方法没了inplace参数行为也变了matplotlib 新版对中文显示的处理和旧版不一样。你如果直接pip install pandas拉最新版跑一份两年前写的源码大概率在数据拼接那一步就报AttributeError。常见做法是先看源码目录里有没有requirements.txt有就照着装没有就看 import 部分把用到的库列出来然后锁一个稳定版本组合。我一般会建议用 Python 3.8 到 3.10 这个区间太新的 3.12 有时候某些库的 wheel 还没跟上装起来会编译报错。2.2 虚拟环境创建与依赖安装的完整命令# 创建虚拟环境避免污染全局 Python python -m venv venv # Windows 激活 venv\Scripts\activate # macOS / Linux 激活 source venv/bin/activate # 安装核心依赖版本锁在兼容区间 pip install pandas1.5.3 numpy1.24.3 matplotlib3.7.1 seaborn0.12.2 # 如果有 Web 展示层按需补装 pip install flask2.3.2这段命令的逻辑是先隔离环境再装库。pandas1.5.3这个版本对旧写法兼容性好numpy对应 1.24 系列不会和 pandas 冲突。matplotlib 选 3.7 是因为中文支持和 seaborn 0.12 搭配稳定。如果你拿到源码后发现 import 里有openpyxl那是读 Excel 用的补一句pip install openpyxl就行。提示装完之后用pip list核对一遍版本别装完就不管了。版本号对不上后面报错你根本分不清是代码问题还是环境问题。2.3 目录结构怎么读一份典型的电商数据分析系统源码目录大概长这样data/放原始数据或生成脚本src/或根目录放分析主逻辑output/放图表结果docs/放文档说明。你拿到手第一件事不是急着跑main.py而是先看data/里有没有现成的 csv 或 Excel。如果没有通常源码里会带一个generate_data.py之类的脚本用随机数模拟订单数据。这个脚本要先跑不然主程序读不到数据会直接报FileNotFoundError。3. 数据加载与清洗Pandas 读订单表时那几个必须处理的字段3.1 电商数据的典型字段和脏数据形态电商订单数据一般包含这些列订单编号、用户 ID、商品名称、商品类别、单价、数量、订单金额、下单时间、收货地区。模拟数据或者爬来的数据脏的地方很集中时间字段是字符串不是 datetime、金额字段混了空值或负值、地区字段有前后空格、商品类别大小写不统一。你如果不清洗直接 groupby结果要么报类型错误要么聚合出来的数字对不上。我一般会按「先看再改」的顺序来先df.info()和df.head()看字段类型和前几行再df.isnull().sum()看空值分布最后才动手改。这样你心里有数改的时候知道影响范围。3.2 加载与清洗的代码实现import pandas as pd import numpy as np # 读取订单数据注意编码中文 csv 常见 gbk 或 utf-8-sig df pd.read_csv(data/orders.csv, encodingutf-8-sig) # 查看基本信息确认字段类型和空值 print(df.info()) print(df.isnull().sum()) # 时间字段转 datetimeerrorscoerce 把无法解析的变成 NaT df[下单时间] pd.to_datetime(df[下单时间], errorscoerce) # 金额字段转数值空值填 0负值按业务逻辑剔除或取绝对值 df[订单金额] pd.to_numeric(df[订单金额], errorscoerce).fillna(0) df df[df[订单金额] 0] # 地区字段去空格类别字段统一小写 df[收货地区] df[收货地区].str.strip() df[商品类别] df[商品类别].str.strip().str.lower() # 剔除时间解析失败的行 df df.dropna(subset[下单时间]) print(f清洗后剩余 {len(df)} 条订单)这段代码的关键点有三个。第一encodingutf-8-sig是为了处理带 BOM 的中文 csv用默认 utf-8 读出来第一列名会带隐藏字符后面按列名取值会 KeyError。第二errorscoerce是保命参数遇到脏数据不直接抛异常而是转成 NaT 或 NaN你后面统一处理。第三负值订单在真实业务里可能是退款但在课程设计场景里通常直接剔除避免聚合结果被拉低。参数怎么改如果你的数据源是 Excel把read_csv换成read_excel编码参数去掉。3.3 清洗后先做一次描述性统计清洗完别急着画图先跑一句df.describe()和df.groupby(商品类别)[订单金额].sum()看看金额分布有没有离谱的极值。这一步能帮你提前发现数据生成脚本里的 bug比如随机数范围设错了导致所有订单金额都是同一个值。这种问题不先查后面图表出来你以为是可视化代码写错了其实是数据源头就歪了。4. 核心分析逻辑用 groupby 和 pivot_table 把订单拆成四个维度4.1 为什么选 groupby 而不是写循环新手容易犯的一个错是想算每个类别的总销售额写个 for 循环遍历所有行累加。数据量小的时候能跑几千行以上就慢得明显而且代码冗长容易出错。Pandas 的groupby底层是向量化操作同样的逻辑一行搞定性能差几十倍。这套源码里核心分析部分基本都靠groupby和pivot_table你读懂这两个整个分析链路就通了。4.2 四个维度的分析代码# 维度一各商品类别的销售额和订单量 category_analysis df.groupby(商品类别).agg( 总销售额(订单金额, sum), 订单量(订单编号, count), 平均客单价(订单金额, mean) ).sort_values(总销售额, ascendingFalse) # 维度二按月统计销售趋势 df[月份] df[下单时间].dt.to_period(M) monthly_trend df.groupby(月份)[订单金额].sum() # 维度三各地区销售分布 region_analysis df.groupby(收货地区)[订单金额].sum().sort_values(ascendingFalse) # 维度四用户消费分层用 pivot_table 做交叉 df[消费层级] pd.cut(df[订单金额], bins[0, 100, 500, 2000, np.inf], labels[低, 中, 高, 超高]) user_level df.pivot_table(index消费层级, values订单金额, aggfunc[count, sum]) print(category_analysis) print(monthly_trend.head())逻辑说明agg里用字典形式给不同列指定不同聚合函数订单金额求和求均值订单编号计数这样一次 groupby 出三个指标。dt.to_period(M)把时间转成月份周期比用字符串切片稳。pd.cut做分箱bins 的边界你可以按实际业务改比如把 2000 改成 1000分层就更细。pivot_table的aggfunc传列表能同时出计数和求和两列。参数怎么改如果你的订单表里没有「订单编号」列计数那行换成(用户ID, count)也行但要注意一个用户多单的情况语义上不如订单编号准。sort_values默认升序加ascendingFalse才是从大到小这个参数忘了加排行榜就是反的。4.3 分析结果怎么验证对不对跑完聚合拿一个类别手动核对筛出该类别所有行把金额加一遍看和 groupby 出来的数是否一致。不一致通常是两个原因一是清洗时漏了空值处理NaN 在求和时被跳过但计数时算进去了二是 groupby 的列里有隐藏空格导致同一个类别被拆成两组。这种核对习惯能帮你在画图之前就发现问题不然图出来你还在怀疑 matplotlib。5. 可视化输出与文档说明图表能看、文档能讲才算交付5.1 中文乱码和图表保存的坑matplotlib 默认字体不支持中文你不设置直接画标题和轴标签全是方框。这是血泪经验里出现频率最高的一个。解决办法是在画图前统一设置字体Windows 用 SimHeimacOS 用 Arial Unicode MSLinux 看系统装了什么中文字体。import matplotlib.pyplot as plt import matplotlib # 设置中文字体按系统选一个能用的 matplotlib.rcParams[font.sans-serif] [SimHei] # Windows matplotlib.rcParams[axes.unicode_minus] False # 负号正常显示 # 画类别销售额柱状图 fig, ax plt.subplots(figsize(10, 6)) category_analysis[总销售额].plot(kindbar, axax, colorsteelblue) ax.set_title(各商品类别销售额分布) ax.set_xlabel(商品类别) ax.set_ylabel(销售额) plt.tight_layout() plt.savefig(output/category_sales.png, dpi150) plt.show()axes.unicode_minus False这行是防止负号变成方框很多人只设了字体没设这个结果坐标轴上的负号还是乱码。dpi150是输出分辨率课程设计报告里插图够清晰了设太高文件会很大。tight_layout()自动调整边距避免标签被裁掉。5.2 文档说明里真正有用的部分源码包里的文档说明价值不在它写了多少页而在它有没有把「数据字段含义」「各脚本执行顺序」「依赖清单」讲清楚。你拿到文档先翻这三块字段表告诉你每列是什么执行顺序告诉你先跑哪个后跑哪个依赖清单告诉你装什么库。如果文档里只写了项目背景和功能列表那实际落地还得靠你自己读代码。常见做法是把文档里的字段表和源码里的列名对一遍对不上的地方就是你要改的地方。5.3 交付前跑一遍完整流程从数据生成到图表输出完整跑一遍中间不要跳步。跑完检查output/目录里图有没有生成、文件名和文档里写的是否一致。如果源码带了 Web 展示层启动服务后打开页面看图表能不能正常渲染。这一步是交付前的最后一道关很多人代码写完了但没完整跑过答辩的时候现场翻车。6. 避坑与常见问题排查这五条踩坑记录帮你省半天6.1 现象运行主程序报 FileNotFoundError找不到 csv原因数据文件没生成或者路径写的是相对路径但你在别的目录下执行。源码里pd.read_csv(data/orders.csv)这种写法依赖你从项目根目录运行。解决先确认data/目录下有没有文件没有就先跑数据生成脚本有文件就检查你当前终端的工作目录是不是项目根目录用pwd或cd确认。6.2 现象groupby 之后结果里同一个类别出现两次原因类别字段有前后空格或大小写不一致电子产品和电子产品 被当成两个值。解决在清洗阶段统一做str.strip()和str.lower()别等到 groupby 之后才发现。已经跑完的回去补清洗再重跑。6.3 现象图表中文全是方框原因matplotlib 没设中文字体或者设了字体但系统里没装那个字体。解决先确认系统字体列表里有没有 SimHei 或 Arial Unicode MS没有就换一个已装的。设置代码要放在所有画图操作之前放后面不生效。6.4 现象pandas 报 AttributeError提示某方法不存在原因源码用的旧版 pandas 写法你装的是新版方法被废弃或改名了。解决要么降 pandas 版本到源码兼容的区间要么按新版 API 改代码。常见的是append改concatinplace参数行为变化。改之前先查一下新版文档对应写法。6.5 现象时间字段转 datetime 后大量 NaT原因原始时间格式不统一有的带秒有的不带有的用斜杠有的用横杠。解决pd.to_datetime加format参数指定格式或者用errorscoerce先转再看有多少失败失败的单独拿出来看原始值长什么样再决定怎么处理。别直接 dropna 把数据删没了。7. 进阶技巧把分析结果导出成 Excel 多 Sheet 报告课程设计或者实际交付光有图不够很多时候要一份 Excel 报告每个分析维度一个 Sheet。Pandas 的ExcelWriter能一次写多个 Sheet配合openpyxl引擎格式也稳。这个技巧能让你的交付物从「几张图」变成「一份可翻阅的报告」答辩或者汇报的时候加分明显。# 把四个维度的分析结果写进一个 Excel每个维度一个 Sheet with pd.ExcelWriter(output/analysis_report.xlsx, engineopenpyxl) as writer: category_analysis.to_excel(writer, sheet_name类别分析) monthly_trend.to_frame().to_excel(writer, sheet_name月度趋势) region_analysis.to_frame().to_excel(writer, sheet_name地区分布) user_level.to_excel(writer, sheet_name用户分层) print(报告已导出到 output/analysis_report.xlsx)这里有个细节monthly_trend是 Series直接to_excel会报错或者格式不对要先.to_frame()转成 DataFrame。engineopenpyxl要提前装好不装会提示找不到引擎。Sheet 名用中文没问题但别超过 31 个字符Excel 有限制。导出之后打开文件核对一遍看每个 Sheet 的表头和数据行数对不对。我一般会顺手把列宽调一下虽然 Pandas 不直接支持但可以在to_excel之后用 openpyxl 读回来设置或者干脆在 Excel 里手动调。从那以后我每次交付这类分析项目都强制走一遍「清洗核对 → 聚合核对 → 图表核对 → 导出核对」四步少一步后面就可能返工。希望帮到你。本文还有配套的精品资源点击获取