【Python大数据+AI毕设实战】上海餐饮数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学

58 阅读9分钟

🍊作者:计算机毕设匠心工作室

🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。

擅长:按照需求定制化开发项目、 源码、对代码进行完整讲解、文档撰写、ppt制作。

🍊心愿:点赞 👍 收藏 ⭐评论 📝

👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~

Java实战项目

Python实战项目

微信小程序|安卓实战项目

大数据实战项目

PHP|C#.NET|Golang实战项目

🍅 ↓↓文末获取源码联系↓↓🍅

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

本《上海餐饮数据可视化分析系统》是一个集数据处理、智能分析与前端可视化于一体的综合性大数据实战项目,旨在运用Python技术栈深度挖掘上海餐饮市场的海量数据,并通过AI算法揭示其内在商业规律。系统后端采用Django框架构建,负责处理业务逻辑与API接口;数据处理核心则完全交由强大的Apache Spark框架,通过PySpark接口实现对存储在Hadoop HDFS中原始餐饮数据的分布式计算与分析。整个数据处理流程涵盖了数据清洗(如去重、处理缺失值与异常坐标)、特征工程以及多维度聚合分析。在AI应用方面,系统特别集成了K-Means聚类算法,能够基于商户的地理坐标自动识别并划分出上海的核心餐饮商圈,实现对市场格局的智能洞察。前端界面基于Vue.js和ElementUI开发,调用Echarts图表库,将后端通过Spark SQL等工具分析出的复杂数据结果,如图表、热力图、词云等,以直观、动态、可交互的形式呈现给用户。从技术实现上看,本项目完整贯穿了从数据采集、分布式存储、并行计算、智能分析到最终可视化呈现的大数据处理全链路,不仅验证了大数据技术在商业分析领域的应用价值,也为计算机专业学生提供了一个兼具技术深度与业务广度的毕业设计典范。

基于大数据的上海餐饮数据可视化分析系统-选题背景意义

选题背景 在上海这样一座国际化大都市里,餐饮行业的竞争可以说是相当激烈。随着移动互联网的发展,大家吃饭前都习惯性地打开手机看看点评、查查推荐,这就产生了海量的用户数据,比如哪家店好吃、环境怎么样、服务好不好、人均消费多少等等。这些数据对于想开餐厅的创业者或者正在经营的店家来说,简直就是一座金矿。但问题是,数据量太大了,而且很杂乱,光靠人工去翻看、去统计,根本不现实,也看不出什么深层次的门道。你想想看,全上海几十万家餐厅,每天都在产生新的数据,怎么才能知道哪个区最适合开火锅店?哪个地段的日料店已经饱和了?消费者的口味趋势又是什么?这些问题都迫切需要一种更高效、更科学的方法来解决。说白了,这个课题的背景就是,在餐饮行业数字化转型的浪潮中,如何利用大数据技术,把这些看似零散的数据变成能指导决策的、有价值的信息,已经成了一个非常实际且有挑战性的需求。 选题意义 这个课题的意义其实可以从几个方面来看,但咱们谦虚点说,它主要还是一个学习和实践的尝试。对于我们计算机专业的学生来说,最大的意义在于它是一个非常完整的大数据项目实践。平时我们学的Hadoop、Spark这些技术都比较理论,这个项目能让我们亲手把数据从存储(HDFS)、处理(Spark)、分析(Spark SQL、K-Means)到最后用网页展示出来(Django + Vue + Echarts)的全过程跑一遍,这个经验比单纯做个增删改查的管理系统要宝贵得多。换个角度看,这个系统也确实有一定的实际参考价值。比如,一个想在上海开店的人,可以通过我们的可视化分析,直观地看到各个区的餐饮热力图、不同菜系的受欢迎程度和平均消费水平,这能帮他做出更靠谱的选址和定位决策,减少一些盲目性。对于普通消费者,像“性价比指数分析”这样的功能,也能提供一个有趣的新视角,去发现那些物美价廉的好店。说到底,这个项目虽然只是一个毕业设计,但它尝试着用技术手段去解决一个真实世界的问题,这个过程本身就非常有意义,也能让我们对数据分析和商业洞察有更深的理解。

基于大数据的上海餐饮数据可视化分析系统-技术选型

大数据框架:Hadoop+Spark(本次没用Hive,支持定制) 开发语言:Python+Java(两个版本都支持) 后端框架:Django+Spring Boot(Spring+SpringMVC+Mybatis)(两个版本都支持) 前端:Vue+ElementUI+Echarts+HTML+CSS+JavaScript+jQuery 详细技术点:Hadoop、HDFS、Spark、Spark SQL、Pandas、NumPy 数据库:MySQL

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

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

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

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

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

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, avg, when, lit
from pyspark.ml.feature import VectorAssembler, StandardScaler
from pyspark.ml import Pipeline
from pyspark.ml.clustering import KMeans
import pandas as pd
# 初始化SparkSession,这是所有Spark应用的入口
spark = SparkSession.builder \
    .appName("ShanghaiCateringAnalysis") \
    .master("local[*]") \
    .getOrCreate()
# 假设数据已上传至HDFS的指定路径
HDFS_DATA_PATH = "hdfs://localhost:9000/shanghai_catering/ShanghaiCateringData.csv"
def generate_geographical_heatmap_data():
    """
    核心功能一:生成上海餐饮商户地理热力图所需的数据。
    该功能负责从HDFS读取原始数据,进行必要的清洗和筛选,
    特别是针对地理坐标的有效性进行过滤,最终提取出用于生成热力图的经纬度数据。
    这是所有空间分布分析的基础。
    """
    print("Executing: Generating geographical heatmap data...")
    # 从HDFS读取CSV数据,并自动推断表头和数据类型
    df = spark.read.csv(HDFS_DATA_PATH, header=True, inferSchema=True)
    # 过滤掉经纬度为空或异常的数据
    # 上海市经度范围大约在 120.8°E 到 122.2°E
    # 上海市纬度范围大约在 30.6°N 到 31.9°N
    filtered_df = df.filter(
        (col("Lng").isNotNull()) &
        (col("Lat").isNotNull()) &
        (col("Lng") >= 120.8) & (col("Lng") <= 122.2) &
        (col("Lat") >= 30.6) & (col("Lat") <= 31.9)
    )
    # 选择经度(Lng)、纬度(Lat)以及点评数作为热力图的权重
    # 点评数可以反映该点的热度,数值越大,热力图上颜色越深
    heatmap_data_df = filtered_df.select(col("Lng").alias("lng"), col("Lat").alias("lat"), col("点评数").alias("count"))
    # 将结果转换为Pandas DataFrame以便于后续处理或直接保存为单个CSV文件
    # toPandas()会将所有分区的数据收集到Driver节点,适用于结果集不大的情况
    pandas_df = heatmap_data_df.toPandas()
    # 将处理好的数据保存到本地,前端可直接请求该文件
    pandas_df.to_csv("heatmap_analysis.csv", index=False)
    print("Heatmap data generation complete.")
    return pandas_df
def perform_kmeans_for_business_districts(k=10):
    """
    核心功能二:利用K-Means聚类算法识别核心餐饮商圈(AI功能)。
    这是本项目的AI核心,通过对商户的地理位置进行无监督学习,
    自动发现数据中的聚集模式,即识别出餐饮业高度集中的区域,
    并为每个商户打上所属商圈的标签。
    """
    print(f"Executing: Performing K-Means clustering with k={k}...")
    df = spark.read.csv(HDFS_DATA_PATH, header=True, inferSchema=True)
    # 数据预处理:同样需要过滤无效的地理坐标
    location_df = df.filter(
        (col("Lng").isNotNull()) &
        (col("Lat").isNotNull()) &
        (col("Lng") >= 120.8) & (col("Lng") <= 122.2) &
        (col("Lat") >= 30.6) & (col("Lat") <= 31.9)
    ).select("Lng", "Lat", "类别", "人均消费", "点评数")
    # K-Means对特征的尺度很敏感,需要进行标准化处理
    # 步骤1: 将经纬度合并为特征向量
    vec_assembler = VectorAssembler(inputCols=["Lng", "Lat"], outputCol="features_vec")
    # 步骤2: 对特征向量进行标准化
    scaler = StandardScaler(inputCol="features_vec", outputCol="scaled_features", withStd=True, withMean=False)
    # 步骤3: 定义K-Means模型
    kmeans = KMeans(featuresCol="scaled_features", k=k, seed=1)
    # 使用Pipeline将上述步骤串联起来
    pipeline = Pipeline(stages=[vec_assembler, scaler, kmeans])
    # 训练模型
    pipeline_model = pipeline.fit(location_df)
    # 进行预测,为每条数据打上簇标签
    clustered_df = pipeline_model.transform(location_df)
    # 选择需要的字段,并将结果保存
    result_df = clustered_df.select("Lng", "Lat", "类别", "人均消费", "点评数", col("prediction").alias("cluster_id"))
    pandas_df = result_df.toPandas()
    pandas_df.to_csv("kmeans_cluster_analysis.csv", index=False)
    print("K-Means clustering complete.")
    return pandas_df
def calculate_cost_effectiveness_by_district():
    """
    核心功能三:按行政区分析餐饮业的“性价比”指数。
    该功能综合了口味、环境、服务三个评分维度和人均消费,
    构建一个自定义的业务指标(性价比指数),用以衡量不同区域的餐饮消费价值。
    这体现了从原始数据中提炼高级业务洞察的能力。
    """
    print("Executing: Calculating cost-effectiveness index by district...")
    df = spark.read.csv(HDFS_DATA_PATH, header=True, inferSchema=True)
    # 数据清洗:过滤掉评分和人均消费为0或空的数据,这些数据对计算性价比无意义
    filtered_df = df.filter(
        (col("口味") > 0) &
        (col("环境") > 0) &
        (col("服务") > 0) &
        (col("人均消费") > 0) &
        (col("行政区").isNotNull())
    )
    # 创建新的列:综合评分 和 性价比指数
    # 性价比指数 = (口味+环境+服务)/3 / 人均消费 * 100 (乘以100使数值更直观)
    analysis_df = filtered_df.withColumn(
        "综合评分",
        (col("口味") + col("环境") + col("服务")) / 3
    ).withColumn(
        "性价比指数",
        ( (col("口味") + col("环境") + col("服务")) / 3 / col("人均消费") ) * 100
    )
    # 按行政区进行分组,计算每个区的平均性价比指数和平均综合评分
    district_analysis = analysis_df.groupBy("行政区") \
        .agg(
            avg("性价比指数").alias("avg_cost_effectiveness"),
            avg("综合评分").alias("avg_overall_score"),
            avg("人均消费").alias("avg_consumption")
        ).orderBy(col("avg_cost_effectiveness").desc()) # 按性价比降序排序
    # 格式化输出,保留两位小数
    result_df = district_analysis.select(
        col("行政区"),
        col("avg_cost_effectiveness").cast("decimal(10,2)"),
        col("avg_overall_score").cast("decimal(10,2)"),
        col("avg_consumption").cast("decimal(10,2)")
    )
    pandas_df = result_df.toPandas()
    pandas_df.to_csv("district_cost_effectiveness_analysis.csv", index=False)
    print("Cost-effectiveness analysis complete.")
    return pandas_df
# 可以在这里调用函数进行测试
# generate_geographical_heatmap_data()
# perform_kmeans_for_business_districts()
# calculate_cost_effectiveness_by_district()
# 关闭SparkSession
spark.stop()

基于大数据的上海餐饮数据可视化分析系统-结语

👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~

Java实战项目

Python实战项目

微信小程序|安卓实战项目

大数据实战项目

PHP|C#.NET|Golang实战项目

🍅 主页获取源码联系🍅