公司动态
基于Python+爬虫+数据可视化的外卖用户消费行为分析系统设计与实现
博主介绍✌全网粉丝20W,CSDN全栈领域优质创作者博客之星、掘金/华为云/阿里云等平台优质作者,计算机毕设实战导师。目前专注于大学生项目实战开发,讲解,毕业答疑辅导欢迎高校老师/同行前辈交流合作✌主要服务内容免费功能设计、选题定题、开题报告、任务书、程序开发、论文编写和辅导、论文降重、程序讲解、答辩辅导等欢迎咨询~ 精彩专栏 推荐订阅计算机毕业设计精品项目案例持续更新值得收藏✅2026-2027年计算机毕业设计选题推荐计算机专业毕业设计题目大全✅全网最全计算机毕业设计选题推荐计算机毕设选题指导及避坑指南✅文末获取源码数据库文档感兴趣的可以先收藏起来还有大家在毕设选题项目以及论文编写等相关问题都可以和学长沟通希望帮助更多的人文章目录一.项目概述二.开发技术栈2.1 基础环境2.2 核心技术架构三.系统分析3.1 需求分析与角色划分3.1.1 总体功能需求3.1.2 角色划分3.1.3 各角色细分功能需求3.2 用例设计3.3 系统功能模块设计四.数据采集与预处理4.3.1 数据读取与预处理4.3.2 模型选择与训练4.3.3 预测结果与图表展示五.部分效果展示5.1 用户功能实现5.1.1 首页消费数据推荐5.1.2 消费数据5.1.3 预测数据5.1.4 系统公告列表5.1.5 可视化看板5.2 管理员功能实现5.2.1 用户管理5.2.2 消费数据管理5.2.3 预测数据管理5.2.4 系统公告管理5.2.5 系统日志管理六.部分代码实现6.1 项目开发核心技术难点说明6.2 基于 Scrapy Requests 实现数据采集核心代码源码及文档获取一.项目概述针对外卖行业用户消费数据繁杂、消费规律难以挖掘、运营决策缺乏数据支撑等问题本文设计并实现了一款基于Python的外卖用户消费行为分析系统。系统采用前后端分离架构通过Python爬虫技术完成外卖订单、用户行为、商品交易等多源数据采集依托Pandas工具实现数据去重、缺失值处理、类别编码等标准化预处理操作构建高质量消费数据集。系统区分普通用户与管理员双角色权限体系用户端实现消费数据查阅、个性化数据推荐、自助消费预测、多维度可视化看板展示等功能可完成商品销售、区域分布、用户画像、商品关联等消费行为分析管理员端支持用户管理、消费数据维护、预测任务管理、系统公告与日志运维等功能。系统基于随机森林回归算法实现订单数量、单笔消费金额的多目标消费趋势预测结合VueECharts实现分析结果可视化展示。二.开发技术栈2.1 基础环境开发语言后端 Python前端 Vue数据库MySQL 5.7保障数据存储与版本兼容性项目构建工具Python pip、前端 npm开发工具PyCharm、VS Code、Navicat2.2 核心技术架构前端框架采用 Vue 开发页面实现交互展示与功能操作。数据采集层基于 Requests、Scrapy 编写爬虫自动化采集网络数据。数据处理层依托 Python、Pandas、NumPy 完成数据清洗、运算与规整。服务应用层后端使用 Flask 搭建 Web 服务提供接口支撑前端调用。数据存储层采用 MySQL 5.7 持久化存储采集、加工后的业务数据。三.系统分析3.1 需求分析与角色划分3.1.1 总体功能需求本系统采用前后端分离架构围绕外卖消费数据全生命周期处理流程实现外卖数据采集、数据清洗预处理、多维度消费行为挖掘、消费趋势预测、可视化展示与系统运维管理一体化能力。系统划分为**用户端业务分析端与管理员端系统运维端**两大业务场景设置分级权限管控不同角色访问对应功能模块。系统整体业务流程通过Python爬虫完成外卖原始消费数据采集依托Pandas开展数据清洗、去重、缺失值处理形成标准化数据集在此基础上开展商品销售、订单履约、区域消费、用户画像、商品关联规则多维度分析支持机器学习算法完成消费趋势预测基于VueECharts搭建可视化交互大屏将分析指标图形化展示配套公告交互、数据收藏、任务管理功能管理员负责账号权限管控、原始消费数据维护、公告发布、系统日志审计保障数据安全与系统稳定运行。系统要求实现权限隔离所有功能操作均需登录鉴权支持数据检索、批量导入导出、图表交互下钻、自定义预测任务兼顾业务人员自助数据分析需求与运维人员后台管控需求为外卖平台运营策略、商品选品、用户精细化运营提供数据支撑。3.1.2 角色划分结合系统业务场景、目标使用人群与业务权限边界系统划分两类核心角色普通用户数据分析/业务人员、系统管理员。两类角色权限相互隔离各司其职覆盖数据分析使用、系统运维、数据管理、安全审计全场景。1.普通用户面向外卖业务分析人员主要使用数据查询、消费行为分析、可视化看板、自助消费预测、公告浏览、信息收藏等业务功能仅可操作自身创建的预测任务无法修改底层原始消费数据、管理系统账号。2.系统管理员面向系统运维管理人员拥有最高操作权限负责账号管理、原始消费数据维护、公告发布、系统操作日志管理、全局预测任务管控承担系统安全、数据维护、系统信息通知工作。3.1.3 各角色细分功能需求1管理员功能需求管理员完成登录鉴权后启用全部后台管理功能具体需求如下1.用户管理支持系统所有注册用户信息列表查看、列表刷新、多条件检索新增用户账号并配置角色权限查看、编辑用户资料删除过期、违规账号基于角色实现普通用户、管理员权限分配完整记录用户登录、数据操作、分析任务操作日志满足安全审计追溯要求。2.消费数据管理查看全量外卖消费数据支持刷新、条件检索支持手动新增消费记录查看、修改消费信息删除无效、重复数据支持历史消费数据批量导入支持消费记录导出为本地报表文件统一管理底层原始数据集。3.消费行为预测管理查看全部消费行为预测任务列表支持刷新、精准查询配置算法参数新增全局预测任务查看、编辑、删除预测记录手动调用机器学习算法执行消费趋势预测查看预测可视化图表掌握消费数据变化趋势。4.系统公告管理发布系统维护通知、业务规则更新、数据更新公告公告列表刷新、条件检索编辑已有公告正文删除过期历史公告实现系统信息统一推送。5.系统日志管理查看系统后台审计日志刷新获取最新操作记录查看每条日志详细操作信息清理冗余历史日志完成系统运维维护。2普通用户功能需求普通用户登录系统后可使用业务分析相关功能无后台数据管理权限具体需求如下1.首页个性化数据推荐首页基于推荐算法展示个性化外卖消费数据列表快速获取重点关注数据。2.消费数据查阅与收藏分页浏览海量外卖消费记录点击查看单条消费数据深度特征详情将感兴趣的消费记录添加至个人收藏夹。3.自助消费预测任务通过设置筛选条件查询个人创建的预测记录自定义消费特征参数新建预测任务查看、修改、删除本人创建的预测任务调用底层算法完成测算查看消费趋势预测图表。4.系统公告浏览交互浏览管理员发布的系统公告、业务提醒支持对公告进行点赞、收藏、评论互动。5.可视化数据分析看板访问可视化大屏模块查看宏观数据分析结果浏览商品销量、销售趋势、订单分布、区域消费占比、用户行为指标等统计图表支持按照时间、地区、商品分类筛选数据实现图表联动、下钻交互。3.2 用例设计结合业务需求绘制管理员用例图、用户用例图清晰定义各角色可执行操作3.3 系统功能模块设计功能模块设计以权限划分为主线前台侧围绕信息浏览与互动参与组织模块后台侧围绕数据维护与内容治理组织模块。为了使模块关系更清晰系统总体结构以数据采集层—数据处理层—存储结构层—业务服务层—展示交互层的思路组织并以看板作为展示交互层的重要组成。系统总体结构图如图所示。四.数据采集与预处理4.3.1 数据读取与预处理预测模块依托系统消费行为数据集数据源取自消费数据管理模块维护的消费记录表consumptiondata。系统提取城市等级、餐品类型偏好作为输入特征订单总数量、单笔订单消费金额作为模型预测目标。系统通过SQL读取原始数据调用dropna()剔除缺失样本消除空值对模型训练的干扰。城市等级、餐品类型偏好为文本分类特征采用LabelEncoder完成数值编码针对预测阶段出现的训练集未包含的陌生类别分配专用数值规避程序报错。数据预处理完成后按照测试集占比0.2划分训练集与测试集设置随机种子22保证数据集划分结果可复现便于实验对比。预测模块数据处理流程如下图所示。4.3.2 模型选择与训练本系统选用随机森林回归算法构建预测模型。该算法依托多决策树捕捉特征与消费指标间的非线性关系相比线性回归抗异常值能力更强相较于神经网络训练难度更低、数据量要求更小适配本系统消费数据规模。采用RandomForestRegressor搭建多目标回归模型输入特征为城市等级、餐品类型偏好同时预测订单总数量、单笔订单消费金额。模型关键参数决策树数量n_estimators100模型随机种子42数据集划分随机种子22。随机森林模型参数配置如下所示参数名称参数值说明n_estimators100随机森林决策树数量random_state42模型训练随机种子test_size0.2测试集样本占比train_test_split random_state22数据集划分随机种子输入特征城市等级、餐品类型偏好模型自变量输出目标订单总数量、单笔订单消费金额预测目标指标4.3.3 预测结果与图表展示模型训练完成后接收用户输入的城市等级、餐品类型偏好开展预测。输出结果规范化处理订单总数量转为整型单笔消费金额保留两位小数。系统区分两种存储逻辑存在对应预测记录时执行数据更新无对应记录则新增一条预测数据。后端基于SQLAlchemy实现数据库交互将预测结果持久化至consumptiondataforecast预测表同时支撑管理员与普通用户两端的预测任务管理。系统可视化输出实际值与预测值散点图、特征重要性图直观展示模型预测效果与特征影响权重如下图所示。五.部分效果展示5.1 用户功能实现5.1.1 首页消费数据推荐首页消费数据推荐模块为普通用户提供个性化数据展示。未登录状态下系统依据点击时间降序展示消费数据用户登录后结合个人收藏记录生成个性化推荐列表优先推送匹配用户偏好的数据。首页消费数据推荐界面如下图所示。5.1.2 消费数据消费数据模块支持普通用户分页浏览外卖消费行为记录点击数据条目可查看城市等级、用户等级、订单数量、餐品偏好等完整详情。用户可收藏感兴趣的数据收藏信息持久保存至收藏数据表。消费数据界面如下图所示。5.1.3 预测数据预测数据模块面向普通用户管理个人消费预测任务。用户可完成条件检索、新建、查看、修改、删除预测记录执行预测运算并查看可视化图表。系统通过登录用户ID进行数据权限过滤保证用户仅能操作自身创建的预测任务。预测数据界面如下图所示。5.1.4 系统公告列表系统公告列表用于展示管理员发布的平台通知。用户可浏览公告标题、封面、发布时间与简介支持跳转详情页面查看完整公告内容及时获取系统维护、业务更新相关信息。系统公告列表界面如下图所示。5.1.5 可视化看板可视化看板展示外卖消费行为多维度统计结果。系统提取年龄、用户等级、下单时段、订单状态、餐品偏好、优惠类型等消费字段进行聚合统计前端通过各类图表直观呈现消费分布、销售趋势等指标支撑业务分析。可视化看板界面如下图所示。5.2 管理员功能实现5.2.1 用户管理用户管理模块实现系统账号统一维护。管理员能够刷新列表、条件检索、新增账号、查看、编辑与删除用户信息完成普通用户与管理员角色权限分配。系统通过分页接口读取用户数据表并向前端反馈数据。用户管理界面如下图所示。5.2.2 消费数据管理消费数据管理模块负责底层外卖消费数据集维护涵盖用户等级、城市等级、订单金额、餐品偏好等核心字段为数据分析、预测、可视化提供基础数据源。管理员可执行数据查询、新增、修改、删除、批量导入与报表导出操作。消费数据管理界面如下图所示。5.2.3 预测数据管理预测数据管理模块统一管理系统生成的消费预测结果。管理员支持列表刷新、条件查询、新增、编辑、删除预测任务可调用随机森林回归模型完成消费预测并查看预测可视化图表。系统以城市等级、餐品类型偏好作为输入特征预测订单总量与单笔消费金额并将结果存入预测数据表。预测数据管理界面如下图所示。5.2.4 系统公告管理系统公告管理用于管理员发布与维护平台公告支持公告信息查询、新增、编辑、删除。公告内容包含标题、封面、发布时间、简介与正文发布后普通用户可在前台公告列表进行浏览。系统公告管理界面如下图所示。5.2.5 系统日志管理系统日志模块自动记录用户新增、修改、删除、批量导入等关键操作留存操作账号、访问IP、请求参数、操作耗时等审计信息。管理员可刷新日志列表、查看操作详情清理冗余历史日志实现操作行为全程可追溯。系统日志管理界面下图所示。六.部分代码实现6.1 项目开发核心技术难点说明难点 1外卖多源消费行为数据采集与标准化清洗处理基于 Python 爬虫采集外卖订单、用户行为、商品交易等多源异构数据各类原始数据字段缺失、格式混乱、重复记录较多。系统采用 Pandas 开展批量数据清洗完成重复订单剔除、缺失值处理借助 LabelEncoder 实现文本类别特征数值转换搭配异常样本过滤机制提纯数据集。同时规范数据入库规则解决外网原始消费数据噪声多、字段不统一的问题保证数据集质量支撑后续消费分析与预测模型训练。难点 2外卖消费多维度交互可视化大屏搭建系统需要对商品销量、区域订单分布、时段消费趋势、用户画像、品类占比等海量消费指标进行聚合统计。基于 VueECharts 构建可视化交互大屏处理多维度数据联动、图表下钻筛选等需求。有效解决消费数据维度繁多、统计指标复杂、大批量数据渲染卡顿问题实现各类消费分析结果动态直观展示支撑运营决策。难点 3随机森林多目标消费预测模型构建与调优外卖消费特征与消费结果具备非线性关联需要同时预测订单总量、单笔消费金额属于多目标回归任务。有限样本下特征类别分散还存在预测阶段未知类别输入造成模型报错的问题。通过类别编码优化、数据集固定随机划分、模型参数调试优化随机森林回归模型解决特征映射复杂、泛化能力不足的问题提升外卖消费趋势预测准确度。6.2 基于 Scrapy Requests 实现数据采集核心代码# 导入所需第三方库与模块importreimportrandomimportplatformimportjsonimportosimporttimeimportemojiimportrequestsimportpymysqlimportpymssqlfromurllib.parseimporturlparseimportscrapy# 导入当前爬虫项目的数据实体类from..itemsimportxiangmuItemclassXiangmuSpider(scrapy.Spider): 房源数据爬虫 功能爬取列表页房源基础信息再进入详情页抓取作者等信息 支持 MySQL / SQL Server 双数据库适配、数据表存在性校验、URL 补全、HTML 标签过滤 # 爬虫唯一标识名称启动爬虫命令scrapy crawl xiangmuSpidernamexiangmuSpider# 多起始地址用分号 ; 分隔自动拆分spider_urlhttps://url网址start_urlsspider_url.split(;)# 全局变量协议头、域名用于补全相对路径URLprotocolhostnamedef__init__(self,*args,**kwargs): 爬虫初始化构造方法 super().__init__(*args,**kwargs)defparse(self,response): 列表页解析入口 1. 解析域名与协议用于拼接完整URL 2. 数据库校验若数据表已存在则直接终止本次爬取 3. 遍历列表数据提取基础字段并跳转详情页 :param response: 列表页响应对象 :return: 详情页请求对象 # 解析起始URL拆分协议、主机名url_parse_resulturlparse(self.spider_url)self.protocolurl_parse_result.scheme self.hostnameurl_parse_result.netloc# 根据操作系统判断执行逻辑sys_platformplatform.system().lower()ifsys_platformin(linux,windows):# 建立数据库连接db_connself.db_connect()db_cursordb_conn.cursor()# 校验目标数据表是否已存在ifself.table_exists(db_cursor,xiangmu)1:# 表已存在关闭数据库资源执行临时数据逻辑并终止爬取db_cursor.close()db_conn.close()self.temp_data()return# 定位列表页所有房源节点item_listresponse.css(ul.subject-list li.subject-item)# 遍历每一条房源数据fornodeinitem_list:# 实例化Item对象用于封装爬取字段itemxiangmuItem()# 1. 抓取来源链接source_urlnode.css(div.pic a.nbg::attr(href)).extract_first()# 去除HTML标签与空白字符item[laiyuan]self.remove_html(source_url)# 补全相对URL为完整可访问地址item[laiyuan]self.complete_url(item[laiyuan])# 2. 抓取封面图地址cover_imgnode.css(div.pic a.nbg img::attr(src)).extract_first()item[fengmian]self.remove_html(cover_img)# 3. 抓取房源简短名称/标题titlenode.css(div.info h2 a::attr(title)).extract_first()item[xiaoshuoming]self.remove_html(title)# 详情页URL处理detail_urlnode.css(div.pic a.nbg::attr(href)).extract_first()detail_urlself.complete_url(detail_url)# 同步更新来源地址为详情页地址item[laiyuan]detail_url# 发起详情页请求将当前已抓取字段通过meta传递到详情解析函数yieldscrapy.Request(urldetail_url,meta{fields:item},callbackself.detail_parse,dont_filterTrue# 关闭去重保证正常抓取)defdetail_parse(self,response): 详情页解析函数 抓取作者信息整合所有字段后交付Pipeline入库 :param response: 详情页响应对象 :return: 封装完成的Item数据 # 接收列表页传递过来的Item数据itemresponse.meta[fields]try:# 抓取作者信息author_textresponse.css(div#info span a::text).extract_first()# 清洗HTML、空格、特殊符号item[zuozhe]self.remove_html(author_text)exceptExceptionase:# 异常捕获作者字段抓取失败则置空不中断整体爬取self.logger.warning(f作者信息抓取异常:{str(e)})item[zuozhe]# 将完整Item交给Scrapy管道进行数据持久化yielditemdefremove_html(self,html_str): 工具方法清除HTML标签、首尾空白字符 :param html_str: 原始带标签字符串 :return: 纯文本内容 ifnothtml_str:return# 正则匹配所有HTML标签并替换为空html_patternre.compile(r[^],re.S)clean_texthtml_pattern.sub(,html_str)# 去除首尾空格、换行returnclean_text.strip()defcomplete_url(self,raw_url): 工具方法统一补全相对URL为完整URL修复原代码重复拼接逻辑 :param raw_url: 原始相对链接 :return: 完整HTTP/HTTPS链接 ifnotraw_url:return# 已为完整链接直接返回ifraw_url.startswith((http://,https://)):returnraw_url# 协议相对链接 //xxx.comifraw_url.startswith(//):returnf{self.protocol}:{raw_url}# 站点内相对链接 /xxx/xxxifraw_url.startswith(/):returnf{self.protocol}://{self.hostname}{raw_url}# 其他情况直接返回原字符串returnraw_urldefdb_connect(self): 数据库连接方法 读取Scrapy配置文件参数支持 MySQL / SQL Server 两种数据库 :return: 数据库连接对象 # 读取配置文件中的数据库类型、地址、端口、账号、密码db_typeself.settings.get(TYPE,mysql)hostself.settings.get(HOST,localhost)portint(self.settings.get(PORT,3306))userself.settings.get(USER,root)passwordself.settings.get(PASSWORD,123456)# 优先读取实例传参的数据库名无则读取配置文件try:db_nameself.databaseNameexceptAttributeError:db_nameself.settings.get(DATABASE,)# 根据数据库类型创建连接ifdb_typemysql:connpymysql.connect(hosthost,portport,dbdb_name,useruser,passwdpassword,charsetutf8)else:connpymssql.connect(hosthost,useruser,passwordpassword,databasedb_name)returnconndeftable_exists(self,cursor,table_name): 工具方法判断数据库中指定数据表是否存在 :param cursor: 数据库游标对象 :param table_name: 待校验表名 :return: 1表存在 0表不存在 # 查询当前库下所有数据表cursor.execute(SHOW TABLES;)# 提取所有表名all_tablescursor.fetchall()table_listre.findall(r(.*?),str(all_tables))table_list[t.replace(,)fortintable_list]return1iftable_nameintable_listelse0deftemp_data(self): 临时数据处理逻辑原代码预留方法业务自定义 数据表已存在时执行此方法可自行扩展逻辑 self.logger.info(目标数据表已存在跳过新一轮爬取执行临时数据逻辑)源码及文档获取文章下方名片联系我即可~大家点赞、收藏、关注、评论啦 、查看获取联系方式精彩专栏推荐订阅在下方专栏最新计算机毕业设计选题篇-选题推荐小程序毕业设计精品项目案例-200套Java毕业设计精品项目案例-200套Python毕业设计精品项目案例-200套大数据毕业设计精品项目案例-200套如果大家有任何疑虑欢迎在下方位置详细交流。