【数据分析】基于大数据的上海餐饮数据分析与可视化系统 | 大数据毕设选题推荐 大数据实战项目 可视化分析大屏 Hadoop SPark Django java

66 阅读6分钟

💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目

基于大数据的上海餐饮数据分析与可视化系统介绍

本系统全称为《基于大数据的上海餐饮数据分析与可视化系统》,它是一个整合了后端数据处理、业务应用服务与前端动态可视化的全栈毕业设计项目。项目的核心亮点在于其大数据技术栈的应用,旨在模拟真实世界中数据驱动决策的业务场景,而非停留在传统增删改查的旧技术层面。在数据处理层,我们采用Hadoop的HDFS作为分布式文件存储的基石,用以存放海量的原始餐饮数据;计算引擎则选择了业界主流的Apache Spark,通过其内存计算的强大能力,利用Spark SQL、Pandas和NumPy等工具库对数据进行高效的ETL(抽取、转换、加载)、聚合分析与深度挖掘。在后端服务层,我们提供了两种主流实现方案以供选择:其一是基于Python语言和Django框架的敏捷开发方案,其二是基于Java语言和SpringBoot全家桶(Spring、SpringMVC、Mybatis)的稳定企业级方案,两者均通过RESTful API接口为前端提供标准化的数据服务。前端展现层则采用了现代化的技术栈,以Vue作为核心MVVM框架,结合ElementUI组件库快速构建美观、统一的后台管理界面,并深度集成Echarts图表库,将后端分析出的复杂数据,如市场宏观趋势、商户口碑热度、消费者行为模式、餐厅地理空间分布以及潜在客群画像等,转化为直观、可交互的动态图表,最终为用户呈现一个功能完善、技术新颖、具有实际分析价值的数据产品。

基于大数据的上海餐饮数据分析与可视化系统演示视频

演示视频

基于大数据的上海餐饮数据分析与可视化系统演示图片

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

基于大数据的上海餐饮数据分析与可视化系统代码展示

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, avg, count, round, expr
import pandas as pd
def get_spark_session():
    # ① 初始化SparkSession,这是所有Spark应用的入口
    spark = SparkSession.builder.appName("ShanghaiCateringAnalysis").master("local[*]").getOrCreate()
    return spark
def perform_market_macro_analysis(spark, data_path='hdfs:///shanghai/catering.csv'):
    # 功能一:市场宏观分析
    # 读取存储在HDFS上的餐饮数据
    df = spark.read.option("header", "true").option("inferSchema", "true").csv(data_path)
    # 计算餐厅总数
    total_restaurants = df.count()
    # 按菜系(category)分组,统计各菜系餐厅数量和平均评分(avg_rating)
    category_distribution = df.groupBy("category").agg(
        count("restaurant_id").alias("count"),
        round(avg("rating"), 2).alias("average_rating")
    ).orderBy(col("count").desc())
    # 统计价格区间(price_level)分布
    price_level_distribution = df.groupBy("price_level").agg(
        count("restaurant_id").alias("count")
    ).orderBy(col("price_level").asc())
    # 计算整体市场的平均评分
    overall_avg_rating = df.select(avg("rating")).first()[0]
    # 将Spark DataFrame转换为Pandas DataFrame,方便后续API返回JSON
    category_pd = category_distribution.toPandas()
    price_level_pd = price_level_distribution.toPandas()
    # 准备返回给前端的数据结构
    result = {
        "total_restaurants": total_restaurants,
        "overall_average_rating": round(overall_avg_rating, 2),
        "category_distribution": category_pd.to_dict('records'),
        "price_level_distribution": price_level_pd.to_dict('records')
    }
    # 在实际Django项目中,这里会 return JsonResponse(result)
    print("市场宏观分析完成")
    return result
def perform_reputation_analysis(spark, data_path='hdfs:///shanghai/catering.csv'):
    # 功能二:口碑分析
    # 重新读取数据或复用DataFrame
    df = spark.read.option("header", "true").option("inferSchema", "true").csv(data_path)
    # 筛选出评论数大于某个阈值(例如50)的餐厅,使分析更有代表性
    df_filtered = df.filter(col("comment_count") > 50)
    # 计算每个菜系的平均评论数和加权平均分(评分 * 评论数)
    # 这样可以避免评论少的餐厅对高分榜的干扰
    reputation_df = df_filtered.groupBy("category").agg(
        round(avg("rating"), 2).alias("average_rating"),
        round(avg("taste_score"), 2).alias("avg_taste_score"),
        round(avg("service_score"), 2).alias("avg_service_score"),
        round(avg("env_score"), 2).alias("avg_env_score"),
        sum("comment_count").alias("total_comments")
    ).orderBy(col("average_rating").desc())
    # 找出评分最高的Top 10餐厅
    top_10_restaurants = df.orderBy(col("rating").desc(), col("comment_count").desc()).limit(10)
    # 将结果转换为Pandas以便序列化
    reputation_pd = reputation_df.toPandas()
    top_10_pd = top_10_restaurants.select("name", "category", "rating", "comment_count").toPandas()
    # 组装返回结果
    result = {
        "category_reputation": reputation_pd.to_dict('records'),
        "top_10_restaurants": top_10_pd.to_dict('records')
    }
    print("口碑分析完成")
    return result
def perform_spatial_analysis(spark, data_path='hdfs:///shanghai/catering.csv'):
    # 功能三:地理空间分析
    # 读取数据,确保包含经纬度(longitude, latitude)和行政区(district)字段
    df = spark.read.option("header", "true").option("inferSchema", "true").csv(data_path)
    # 过滤掉无效的地理位置数据
    df_geo = df.filter(col("longitude").isNotNull() & col("latitude").isNotNull())
    # 按行政区统计餐厅密度
    district_density = df_geo.groupBy("district").agg(
        count("restaurant_id").alias("restaurant_count")
    ).orderBy(col("restaurant_count").desc())
    # 获取所有餐厅的经纬度,用于在地图上生成热力图
    # 为避免数据量过大,可以进行抽样或只返回Top N区域的数据
    # 这里我们返回所有数据点给前端,由Echarts处理热力图渲染
    heat_map_data = df_geo.select("longitude", "latitude", "rating").collect()
    # Spark collect()返回Row对象列表,需转换为字典列表
    heat_map_list = [{"lng": row.longitude, "lat": row.latitude, "count": row.rating} for row in heat_map_data]
    # 将行政区密度统计结果转为Pandas
    district_density_pd = district_density.toPandas()
    # 组装最终结果
    result = {
        "district_density": district_density_pd.to_dict('records'),
        "heat_map_data": heat_map_list
    }
    print("地理空间分析完成")
    return result
# 主逻辑入口(模拟调用)
if __name__ == '__main__':
    spark_session = get_spark_session()
    # 依次执行三个核心分析功能
    macro_results = perform_market_macro_analysis(spark_session)
    reputation_results = perform_reputation_analysis(spark_session)
    spatial_results = perform_spatial_analysis(spark_session)
    spark_session.stop() # 关闭SparkSession释放资源

基于大数据的上海餐饮数据分析与可视化系统文档展示

在这里插入图片描述

💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目