Python 课程大作业:办公室 A4 复印纸采购优化师。项目围绕“谁是金牌采购员”这一情境,完成从电商历史价格采集、数据清洗与可视化、价格预测,到年度采购策略制定的完整数据处理流程。
本仓库已包含课程三个阶段的代码、数据、图表和报告文档。部分脚本运行后会在当前目录生成新的 CSV、图片、HTML 或文本文件,复现前请先确认工作目录和输出文件名。
在年度预算、初始库存、月度消耗和仓库容量限制下,尽可能提高 A4 复印纸全年采购数量,并保证采购过程不超预算、不超仓储上限、不断供。
项目主要完成:
- 从慢慢买等价格平台获取 A4 复印纸历史价格数据
- 对价格数据进行清洗、统计分析和可视化
- 使用时间序列特征和 XGBoost 模型预测未来 30 天价格
- 基于历史价格分位数、促销期、库存安全线和预算约束生成采购决策
.
├── python大作业要求/
│ ├── PythonCourse assignment.docx
│ └── Python课程作业:办公室复印纸采购优化师2.docx
├── stage1_web_scraping/
│ ├── 2025337621180_spider.py
│ ├── 2025337621180_preprocess.py
│ ├── 2025337621180_岳玥_Crawler Report.docx
│ └── PK1/
│ ├── 2025337621180_spiderPK.py
│ ├── 2025337621180_result.csv
│ └── PK Race 1要求.docx
├── stage2_analysis_prediction/
│ ├── stage2/
│ │ ├── 2025337621180_visual.py
│ │ ├── 2025337621180_result.csv
│ │ ├── 2025337621180_predict.csv
│ │ ├── 2025337621180_岳玥_Analysis Report.docx
│ │ ├── result/
│ │ └── predict/
│ │ ├── 2025337621180_model.py
│ │ └── *.csv
│ └── PK2/
│ ├── 2025337621180_predict.py
│ ├── *.csv
│ ├── result/
│ └── PK race2要求.docx
└── stage3_procurement_optimization/
├── 2025337621180_decision1.py
├── 2025337621180_decision2.py
├── 2025337621180_decision3.py
├── product_stats.csv
├── brand_stats.csv
├── export.sqlite
└── 2025337621180_岳玥_DecisionReport.docx
stage1_web_scraping/2025337621180_spider.py 使用 requests 调用慢慢买历史价格接口,对预设商品链接进行价格数据抓取,解析接口返回的 jiagequshi 字段,输出包含日期、价格、备注、商品名和商品链接的 CSV 文件。
stage1_web_scraping/2025337621180_preprocess.py 用于读取单个 CSV,完成日期和价格类型转换、缺失值清理、按时间排序、基础统计分析、价格趋势图绘制,并生成清洗后的 CSV 与文本报告。
stage1_web_scraping/PK1/2025337621180_spiderPK.py 是第一阶段 PK 版脚本,固定采集 5 个 A4 复印纸商品,并统一输出字段:
商品品牌, 规格, 来源网站, 来源店铺, 类型, 时间, 价格
stage2_analysis_prediction/stage2/2025337621180_visual.py 对汇总价格数据进行统计和可视化,输出品牌价格趋势、均价对比、箱线图、月度趋势、热力图、散点图、相关性图和 Plotly 动态趋势图。
主要可视化结果保存在:
stage2_analysis_prediction/stage2/result/
stage2_analysis_prediction/stage2/predict/2025337621180_model.py 使用多个商品价格序列训练 XGBoost 回归模型。脚本包含:
- 价格字段清洗与异常值过滤
- 商品和平台编码
- 时间特征、节假日/促销特征
- 滞后特征、差分特征、7 日滚动统计特征
- 训练集/测试集切分
- MAE、RMSE 模型评估
- 未来 30 天递推预测
- 基于预算、趋势、品牌和平台筛选的交互式采购推荐
预测结果字段为:
产品, 来源网站, 时间, 价格, trend
其中 trend 表示价格趋势:-1 为下降,0 为稳定,1 为上涨。
stage2_analysis_prediction/PK2/2025337621180_predict.py 是第二阶段 PK 版预测脚本,重点输出 10 个价格序列未来 30 天预测结果。
第三阶段围绕全年动态采购决策展开,约束包括:
- 初始预算:20000 元
- 初始库存:40 箱
- 仓库容量上限:150 箱
- 月度消耗量:1、2、7、8 月各 10 箱,其余月份各 20 箱
- 4 月 30 日结束时需要保留库存
product_stats.csv 和 brand_stats.csv 分别提供商品级和品牌级统计参考,包括均价、最低价、最高价、中位数、标准差、样本数、Q25、Q75、低价阈值和高价阈值。
export.sqlite 中包含 Goods 表,共 57,988 条历史商品价格记录,字段包括:
ID, Name, Price, Date, Platform, Link
2025337621180_decision1.py、2025337621180_decision2.py、2025337621180_decision3.py 是不同版本的采购决策程序。它们都会根据输入的日期、价格和商品名称,动态更新库存与预算,并输出建议购买数量。
交互输入格式示例:
6.20,82,齐心 白云海
常用命令:
reset 重置预算和库存
debug on 开启调试信息
debug off 关闭调试信息
exit 结束并输出最终状态
建议使用 Python 3.9 及以上版本。
pip install pandas numpy matplotlib seaborn plotly requests scikit-learn xgboost如果图表中的中文显示异常,需要确保本机安装了支持中文的字体,例如 SimHei。
请在对应脚本所在目录运行脚本,因为部分代码使用相对路径读取输入文件或写入输出文件。例如:
cd stage2_analysis_prediction/stage2
python 2025337621180_visual.pycd stage2_analysis_prediction/stage2/predict
python 2025337621180_model.pycd stage3_procurement_optimization
python 2025337621180_decision3.py注意:
- 爬虫脚本依赖外部接口,接口可用性和返回格式可能随时间变化。
- 部分脚本会生成或覆盖同名结果文件,运行前建议先备份重要输出。
- 中文 CSV 可能存在
utf-8-sig或系统默认编码差异,若读取乱码,可尝试切换编码。 - 本项目保留了课程报告、PK 要求、已有数据和结果文件,便于完整展示课程作业过程。
- 学校:浙江理工大学
- 学号:2025337621180
- 姓名:岳玥