💖💖作者:计算机毕业设计小明哥
💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💜💜
💕💕文末获取源码
上海餐饮数据可视化分析系统-系统功能
基于大数据的上海餐饮数据可视化分析系统是一个综合运用Hadoop分布式文件系统、Spark大数据处理框架以及现代Web开发技术的数据分析平台。本系统采用Python作为主要开发语言,后端框架使用Django进行API开发,前端采用Vue框架结合ElementUI组件库和Echarts图表库构建用户界面,数据存储依托MySQL数据库,通过HDFS进行大数据文件管理。系统核心功能围绕上海餐饮业展开四大维度分析:餐饮业总体分布特征分析涵盖各行政区商户数量分布、餐饮类型占比统计、地理热力图展示等;消费水平分析包括各区域人均消费对比、不同餐饮类型价格分析、消费档次分布等;服务质量评价分析通过口味、环境、服务三个维度进行综合评估;市场竞争格局分析运用K-Means聚类算法识别核心商圈并进行商圈画像分析。系统利用Spark SQL进行高效数据查询处理,结合Pandas和NumPy进行数据预处理和统计计算,最终通过可视化图表为用户提供直观的数据洞察,助力餐饮行业从业者、投资者以及消费者做出更加科学的决策。
上海餐饮数据可视化分析系统-技术选型
大数据框架: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
上海餐饮数据可视化分析系统-背景意义
选题背景 随着移动互联网和O2O模式的快速发展,餐饮行业已经成为数字化转型的重要领域。上海作为国际化大都市,其餐饮市场呈现出高度多样化和复杂化的特征,各类菜系、不同档次的餐厅在全市范围内广泛分布,形成了独特的餐饮生态格局。在这样的背景下,传统的市场调研方式已经难以满足对餐饮行业深度分析的需求。与此同时,大数据技术的成熟为餐饮行业数据分析提供了新的技术路径,Hadoop和Spark等分布式计算框架能够有效处理海量的餐饮相关数据。点评网站、地图应用等平台积累了丰富的餐饮商户信息,包括地理位置、用户评价、消费水平等多维度数据,这些数据蕴含着巨大的商业价值。然而,如何运用大数据技术对这些分散的、异构的餐饮数据进行有效整合和深度挖掘,从而为餐饮行业的经营决策提供科学依据,成为了一个值得探索的技术问题。 选题意义 开发基于大数据的上海餐饮数据可视化分析系统具有多方面的实际价值。对于餐饮从业者来说,通过系统提供的市场分析能够更好地了解不同区域的竞争格局和消费特点,有助于选择合适的开店位置和制定经营策略。对于投资者而言,系统的数据分析结果可以作为餐饮项目投资决策的重要参考,降低投资风险。普通消费者也能从中获益,通过系统的服务质量分析和性价比评估,能够更便捷地发现符合自己需求的餐厅。从技术角度来看,本系统的开发过程也是对大数据技术栈的一次综合实践,涵盖了数据采集、存储、处理、分析和可视化的完整流程。当然,作为一个毕业设计项目,本系统的主要意义还是在于技术学习和能力培养,通过实际项目开发来加深对大数据技术的理解和掌握。同时,选择餐饮这个贴近生活的应用场景,也让技术学习变得更加有趣和有意义,虽然系统规模和复杂度相对有限,但依然能够为后续的技术发展奠定良好基础。
上海餐饮数据可视化分析系统-演示视频
上海餐饮数据可视化分析系统-演示图片
上海餐饮数据可视化分析系统-代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, count, avg, sum, when, isnan, isnull, round
from pyspark.ml.clustering import KMeans
from pyspark.ml.feature import VectorAssembler
import pandas as pd
spark = SparkSession.builder.appName("ShanghaiCateringAnalysis").config("spark.sql.adaptive.enabled", "true").getOrCreate()
def analyze_district_distribution():
df = spark.read.csv("hdfs://localhost:9000/catering/ShanghaiCateringData.csv", header=True, inferSchema=True)
cleaned_df = df.filter(col("行政区").isNotNull() & (col("行政区") != ""))
district_stats = cleaned_df.groupBy("行政区").agg(
count("*").alias("商户数量"),
avg("人均消费").alias("平均消费"),
avg("口味").alias("平均口味评分"),
avg("环境").alias("平均环境评分"),
avg("服务").alias("平均服务评分")
).orderBy(col("商户数量").desc())
district_stats = district_stats.withColumn("平均消费", round(col("平均消费"), 2))
district_stats = district_stats.withColumn("平均口味评分", round(col("平均口味评分"), 2))
district_stats = district_stats.withColumn("平均环境评分", round(col("平均环境评分"), 2))
district_stats = district_stats.withColumn("平均服务评分", round(col("平均服务评分"), 2))
total_count = cleaned_df.count()
district_stats = district_stats.withColumn("占比", round((col("商户数量") / total_count) * 100, 2))
result_df = district_stats.toPandas()
result_df.to_csv("district_distribution_analysis.csv", index=False, encoding='utf-8')
return result_df
def analyze_consumption_level():
df = spark.read.csv("hdfs://localhost:9000/catering/ShanghaiCateringData.csv", header=True, inferSchema=True)
valid_df = df.filter((col("人均消费") > 0) & col("人均消费").isNotNull())
consumption_ranges = valid_df.withColumn("消费档次",
when(col("人均消费") <= 50, "低消费")
.when((col("人均消费") > 50) & (col("人均消费") <= 150), "中等消费")
.otherwise("高消费")
)
category_consumption = consumption_ranges.groupBy("类别").agg(
count("*").alias("商户总数"),
avg("人均消费").alias("平均消费"),
sum(when(col("消费档次") == "低消费", 1).otherwise(0)).alias("低消费数量"),
sum(when(col("消费档次") == "中等消费", 1).otherwise(0)).alias("中等消费数量"),
sum(when(col("消费档次") == "高消费", 1).otherwise(0)).alias("高消费数量")
).orderBy(col("平均消费").desc())
category_consumption = category_consumption.withColumn("平均消费", round(col("平均消费"), 2))
category_consumption = category_consumption.withColumn("低消费占比", round((col("低消费数量") / col("商户总数")) * 100, 2))
category_consumption = category_consumption.withColumn("中等消费占比", round((col("中等消费数量") / col("商户总数")) * 100, 2))
category_consumption = category_consumption.withColumn("高消费占比", round((col("高消费数量") / col("商户总数")) * 100, 2))
result_df = category_consumption.toPandas()
result_df.to_csv("consumption_level_analysis.csv", index=False, encoding='utf-8')
return result_df
def analyze_service_quality():
df = spark.read.csv("hdfs://localhost:9000/catering/ShanghaiCateringData.csv", header=True, inferSchema=True)
valid_df = df.filter((col("口味") > 0) & (col("环境") > 0) & (col("服务") > 0))
quality_df = valid_df.withColumn("综合评分", round((col("口味") + col("环境") + col("服务")) / 3, 2))
quality_df = quality_df.withColumn("服务等级",
when(col("综合评分") >= 9.0, "优秀")
.when((col("综合评分") >= 8.0) & (col("综合评分") < 9.0), "良好")
.when((col("综合评分") >= 7.0) & (col("综合评分") < 8.0), "一般")
.otherwise("待改善")
)
district_quality = quality_df.groupBy("行政区").agg(
count("*").alias("有效评价商户数"),
avg("口味").alias("平均口味"),
avg("环境").alias("平均环境"),
avg("服务").alias("平均服务"),
avg("综合评分").alias("平均综合评分"),
sum(when(col("服务等级") == "优秀", 1).otherwise(0)).alias("优秀商户数"),
sum(when(col("服务等级") == "良好", 1).otherwise(0)).alias("良好商户数")
).orderBy(col("平均综合评分").desc())
district_quality = district_quality.withColumn("平均口味", round(col("平均口味"), 2))
district_quality = district_quality.withColumn("平均环境", round(col("平均环境"), 2))
district_quality = district_quality.withColumn("平均服务", round(col("平均服务"), 2))
district_quality = district_quality.withColumn("优秀商户占比", round((col("优秀商户数") / col("有效评价商户数")) * 100, 2))
district_quality = district_quality.withColumn("良好商户占比", round((col("良好商户数") / col("有效评价商户数")) * 100, 2))
result_df = district_quality.toPandas()
result_df.to_csv("service_quality_analysis.csv", index=False, encoding='utf-8')
return result_df
上海餐饮数据可视化分析系统-结语
💕💕
💟💟如果大家有任何疑虑,欢迎在下方位置详细交流,也可以在主页联系我。