当前位置: 首页 > news >正文

基于Hadoop的餐饮大数据分析系统的设计与实现

文章目录

    • ==有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主==
      • 项目介绍
      • 项目展示
      • 数仓的结构介绍
    • 数据仓库的几层结构
      • ① 数据源层(ODS:Operational Data Store)
      • ② 数据清洗层 / 数据整合层(DWD:Data Warehouse Detail)
      • ③ 数据汇总层 / 轻度加工层(DWS:Data Warehouse Summary)
      • ④ 数据应用层(ADS:Application Data Store)
    • 数据存储层
      • 项目中的数据仓库分层示意
      • 系统展示
      • 项目总结
      • 每文一语

有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主

项目介绍

本项目旨在构建一个从数据采集、存储、清洗、分析到可视化的一体化餐饮大数据分析系统。系统以爬取知名美食网站【豆果美食】的菜谱数据为数据源,通过多种大数据技术实现对菜谱信息的高效存储与分析,最终借助可视化工具为用户提供直观的数据洞察,支持餐饮行业的数据决策。

在这里插入图片描述

项目的第一步是数据采集。我们使用 Python 结合 Requests 库、lxml 库,对豆果美食网站进行了网页爬虫开发。爬虫采用模拟登录与持久会话的方式,通过设置 Cookie、Header,避开简单的反爬虫机制。爬虫主要采集了菜谱的标题、链接、配料、评分、收藏人数、发布用户、图片链接等字段。针对不同菜系(如西葫芦、家常菜、川菜等),爬虫遍历多页结果,形成菜谱信息的完整数据集,并将结果保存为本地 CSV 文件。
在这里插入图片描述

数据爬取完成后,我们利用 Pandas 对采集到的 CSV 数据进行清洗和处理。首先,通过正则表达式提取如评分、收藏人数等包含单位的字段信息,将“万”、“千”等汉字单位统一换算为数值,确保数据在后续分析中的可用性。其次,对文本数据进行了规范化处理,比如替换字符串中的逗号、空格、特殊字符,确保字段统一、规范。此外,我们还对菜谱的配料字段进行了处理,统计每道菜谱的配料数量,并生成二值化特征“是否包含肉类”,为后续分析奠定基础。

在这里插入图片描述

清洗后的数据首先被存储至本地 Excel 和 CSV 文件,并进一步导入到 MySQL 数据库,方便后续数据查询和可视化。数据库设计中,我们建立了菜谱信息表、菜谱统计表、用户统计表等多张表,用于记录菜谱出现次数、平均收藏、平均评分、配料数量等多维度指标。

然而,为了支撑更大规模的数据分析和挖掘,本项目不局限于单机的数据库操作,而是引入了大数据处理技术。首先,通过 Hadoop 生态的 Flume,我们实现了对本地 CSV 数据的实时采集,将数据流式传输至 Hive 数据仓库。Hive 提供了类 SQL 的查询能力,使我们能够基于 HDFS 上的大数据进行快速统计、分组、筛选等操作,同时 HiveSQL 底层调用 MapReduce 实现分布式计算,显著提高了处理效率。对于数据体量较大的多维分析场景,Hive 能够轻松完成如菜系分布、菜谱收藏数分布、用户活跃度分析等任务。

完成在 Hive 中的数据分析后,我们借助 Sqoop,将 Hive 分析得到的结果表批量导出至 MySQL 数据库。这不仅保证了数据分析的高效,也为可视化展示提供了便利的数据接口。

在可视化层面,我们选用了 Python 的 Pyecharts 库,结合生成的 MySQL 数据,设计了丰富的图表。包括柱状图、折线图、饼图、词云等多种类型,全面展现了菜谱出现次数、平均收藏数、平均评分、用户活跃度、配料数量分布等多维信息。可视化结果被渲染为 HTML 文件,并通过 Draggable Page Layout 布局构建多个可交互的大屏可视化页面。用户可以根据需求,自由拖拽、排布各类图表,以直观、灵活的方式探索数据背后的规律与趋势。

例如,通过柱状图展示了不同菜系的出现频次,帮助理解市场上用户的偏好;通过折线图分析不同菜系的平均收藏数及评分,辅助判断菜系的受欢迎程度和品质;词云分析了菜谱配料,洞察热门食材和烹饪趋势;饼图展示了是否包含肉类的菜谱占比,便于针对素食或肉食市场做出分析。这些可视化成果不仅提升了数据解读的效率,也为餐饮行业提供了数据驱动的决策参考。

总体而言,本项目从爬虫到数据清洗,从大数据分析到可视化,实现了餐饮行业数据的全流程处理与价值挖掘。它不仅积累了丰富的美食数据资源,也为后续开展菜谱推荐、用户画像分析、市场趋势预测等更深入的业务分析提供了坚实的技术基础。

项目展示

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
通过Hadoop分析出的结果,将其传输存储在关系型数据库MySQL中进行可视化数据准备。

数仓的结构介绍

在这里需要给大家普及一下数据仓库的几个层:

下面介绍一下数据仓库的几个层次,以及你提到的数据存储层(常常也叫数据仓库分层或者分区存储层次),这是数据仓库设计中非常重要的概念。


数据仓库的几层结构

在现代数据仓库架构中,数据通常不是直接从数据源写入到用于分析的最终表,而是分层存储、逐步加工。这种分层的目的是:

  • 解耦数据结构(避免数据源变动影响分析层)
  • 提升性能
  • 提高数据质量
  • 便于管理和维护

不同公司或项目叫法略有差异,但典型的数据仓库分层一般包括以下几层:


① 数据源层(ODS:Operational Data Store)

  • 全称:操作数据存储层

  • 作用:原始数据的存放区,是对业务系统数据的“原样搬运”

  • 特点

    • 存储最原始、最详细、未加工的数据
    • 一般保留数据的原始字段名和格式
    • 用于备份、恢复,也用于数据溯源
  • 常见数据

    • 日志数据
    • 交易明细
    • 系统表快照

举例:

从 MySQL、CSV、日志文件采集过来的原始菜谱爬虫数据,就属于 ODS 层。


② 数据清洗层 / 数据整合层(DWD:Data Warehouse Detail)

  • 全称:数据仓库明细层

  • 作用:对 ODS 层原始数据进行清洗、转换、规范化

  • 特点

    • 去重、去噪、空值处理
    • 格式转换(如时间格式统一、金额单位换算)
    • 标准化字段命名
    • 保留明细粒度的数据
  • 常见用途

    • 为后续宽表建模、主题建模提供干净、标准化的数据

举例:

将爬虫中爬取的“收藏人数”字段,从“1.5万”统一转换成整数 15000,并将菜谱 ID、用户 ID 统一成整型,这就是 DWD 层的任务。


③ 数据汇总层 / 轻度加工层(DWS:Data Warehouse Summary)

  • 全称:数据仓库汇总层(或者宽表层)

  • 作用:基于 DWD 层,做轻度的统计、聚合

  • 特点

    • 产生宽表,方便查询
    • 减少 Join 操作,提高查询效率
    • 存储业务常用维度组合的结果
  • 常见用途

    • 日志明细汇总到用户粒度
    • 交易明细按天、按月做聚合

举例:

统计每种菜系的平均收藏次数、平均评分,这类业务常用统计表就是 DWS 层。


④ 数据应用层(ADS:Application Data Store)

  • 全称:应用数据层

  • 作用:面向具体业务需求、报表、可视化的最终数据层

  • 特点

    • 粒度更粗
    • 面向特定分析场景
    • 表结构相对稳定
  • 常见用途

    • BI 报表
    • 大屏可视化
    • API 接口
    • 数据导出到第三方系统(如 MySQL)

举例:

在项目里,通过 HiveSQL 分析得到“收藏次数最多的10道菜谱”,再通过 Sqoop 导出到 MySQL,用 Pyecharts 制作柱状图,这就是典型的 ADS 层数据。


数据存储层

你提到的“数据存储层”,通常指的是整个数据仓库的物理落地存储方案。这并不是一层,而是所有层的数据都需要“落地存储”。它包含:

  • 存储介质

    • HDFS(Hadoop 分布式文件系统)
    • 云对象存储(例如阿里云 OSS、Amazon S3)
    • 关系型数据库(MySQL、PostgreSQL)
    • 列式存储(如 ClickHouse)
  • 数据格式

    • Text、CSV、JSON(最原始的)
    • ORC、Parquet、Avro(大数据常用,高压缩率,高效查询)
  • 分区与分桶

    • 分区(Partition):按日期、地区等划分目录,加速查询
    • 分桶(Bucket):对分区内数据做哈希分散,优化 join 性能

例如:

  • 你采集的爬虫 CSV 文件 → 存在本地磁盘
  • Flume 采集后 → 存到 HDFS(可能是 Parquet 格式)
  • Hive 建表时 → 用 ORC 或 Parquet 存储,并按 caipu、日期分区
  • Sqoop 把分析结果导出 → 存到 MySQL,用于 Pyecharts 可视化

因此,数据仓库的“存储层”并不是单独的一层,而是贯穿 ODS → DWD → DWS → ADS 全流程的存储设计。


项目中的数据仓库分层示意

结合你的项目,流程可以这样看:

爬虫数据(CSV文件)↓
Flume采集 → ODS层(HDFS原始表)↓
HiveSQL清洗 → DWD层(标准化、格式化数据)↓
HiveSQL汇总 → DWS层(统计表)↓
HiveSQL分析结果 → ADS层(面向可视化)↓
Sqoop导出 → MySQL↓
Pyecharts 可视化

总结

数据仓库分层设计,是数据工程中非常核心的思想。它帮助我们:

  • 保证数据质量
  • 降低耦合
  • 提高分析效率
  • 为不同需求(报表、分析、机器学习)提供合适的数据形态

系统展示

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

项目总结

本项目是一个标准且复杂的大数据项目,适合做毕业设计类的项目,从数据采集、数据清洗、以及在Hadoop进行全流程的大数据分析步骤,包含可视化应用,以及系统搭建,设计到多用户的管理和展示,具有较强的可塑造性。

每文一语

好记性不如烂笔头、多回顾、多记忆、时间是经验的老师

http://www.lryc.cn/news/579582.html

相关文章:

  • 刷卡登入数据获取
  • 纯前端批量下载
  • CPT204-Advanced OO Programming: Sorting排序
  • 扣子空间PPT生产力升级:AI智能生成与多模态创作新时代
  • JS模块导出导入笔记 —— 默认导出 具名导出
  • 行波进位加法器 (Carry-Propagate Adder)
  • UE5 瞄准偏移(AimOffset)功能详解
  • 独立开发者软件出海:如何用Semrush高效洞察与增长
  • RJ45 连接器(水晶头)的引脚定义
  • 贪心专题练习
  • 强实时运动控制内核MotionRT750(一):驱动安装、内核配置与使用
  • 马斯克脑机接口(Neuralink)技术进展,已经实现瘫痪患者通过BCI控制电脑、玩视频游戏、学习编程,未来盲人也能恢复视力了
  • OpenEuler 24.03 用 Ansible 一键完成 SSH 互信 —— 从踩坑到最终方案
  • 站在 Java 程序员的角度如何学习和使用 AI?从 MVC 到智能体,范式变了!
  • 渗透测试中 phpinfo() 的信息利用分析
  • Part 0:射影几何,变换与估计-第三章:3D射影几何与变换
  • 工作中用到过哪些设计模式?是怎么实现的?
  • Robot---能打羽毛球的机器人
  • Linux操作系统之文件(二):重定向
  • 物联网MQTT协议与实践:从零到精通的硬核指南
  • 【王阳明代数】基于Perplexica二次开发的道装资源标识符与重定向知识路由系统
  • 使用HAProxy搭建Web群集:原理、步骤与实战总结
  • Node.js特训专栏-实战进阶:12. 数据库事务处理与并发控制
  • 基于 alpine 构建 .net 的基础镜像
  • 基于MATLAB的风力发电机无人机巡检路径优化研究
  • 利用人名语言分类案例演示RNN、LSTM和GRU的区别(基于PyTorch)
  • Go调度器的抢占机制:从协作式到异步抢占的演进之路|Go语言进阶(7)
  • Android Profiler 丢帧分析教程及案例
  • WPF学习笔记(22)项面板模板ltemsPanelTemplate与三种模板总结
  • 【Git】同时在本地使用多个github账号进行github仓库管理