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

文章目录

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

项目介绍

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

项目的第一步是数据采集。我们使用 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进行全流程的大数据分析步骤,包含可视化应用,以及系统搭建,设计到多用户的管理和展示,具有较强的可塑造性。

每文一语

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

相关推荐
XueminXu27 分钟前
Hive使用Tez引擎出现OOM的解决方法
hive·oom·tez·datagrip·container·outofmemory
Rhys..7 小时前
python + Flask模块学习 1 基础用法
python·学习·前端框架·flask
zzu123zsw8 小时前
01-Hadoop简介与生态系统
hadoop
鸿儒之观8 小时前
hadoop 框架 jar下载
大数据·hadoop·jar
2302_799525748 小时前
【Hadoop】Hadoop集群安装中出现的问题
linux·hadoop
IT研究室10 小时前
大数据毕业设计选题推荐-基于大数据的分化型甲状腺癌复发数据可视化分析系统-Spark-Hadoop-Bigdata
大数据·hadoop·信息可视化·spark·毕业设计·源码·bigdata
计算机编程小央姐10 小时前
数据安全成焦点:基于Hadoop+Spark的信用卡诈骗分析系统实战教程
大数据·hadoop·python·spark·毕业设计·课程设计·dash
BYSJMG12 小时前
大数据毕业设计推荐:基于Spark的零售时尚精品店销售数据分析系统【Hadoop+python+spark】
大数据·hadoop·python·spark·django·课程设计
一杯敬朝阳 一杯敬月光17 小时前
记录下chatgpt的openai 开发过程
python·chatgpt·flask
云天徽上17 小时前
【数据可视化-106】华为2025上半年财报分析:用Python和Pyecharts打造炫酷可视化大屏
开发语言·python·华为·信息可视化·数据分析·pyecharts