【spark+hadoop】基于大数据的城镇居民食品消费量数据分析与可视化系统

30 阅读9分钟

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

💕💕文末获取源码

@TOC

【spark+hadoop】基于大数据的城镇居民食品消费量数据分析与可视化系统-系统功能介绍

基于大数据的城镇居民食品消费量数据分析与可视化系统以 Hadoop+Spark 为核心技术架构,支持 Python+Django 或 Java+Spring Boot 双开发版本,前端采用 Vue+ElementUI+ECharts 实现可视化展示,依托 MySQL 数据库存储和管理 2015-2021 年全国 31 个省份城镇居民食品消费数据。系统围绕时间、空间、食品类别、消费者行为四大核心维度,提供年度消费趋势分析、省级分布可视化、饮食结构演变、消费差异对比等多样化分析功能,不仅能精准呈现各类食品消费的时间波动规律、区域分布特征和结构变化趋势,还能通过聚类算法、相关性分析等技术挖掘食品消费潜在关联,同时针对性分析 2020 年疫情对食品消费的影响,为相关研究和决策提供数据支撑。系统充分发挥 HDFS 的数据存储优势和 Spark SQL、Pandas 的高效分析能力,实现了海量食品消费数据的快速处理与多维度可视化呈现,操作便捷、功能全面,非常适合作为计算机专业大数据方向的毕业设计项目。

【spark+hadoop】基于大数据的城镇居民食品消费量数据分析与可视化系统-系统技术介绍

大数据框架: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

【spark+hadoop】基于大数据的城镇居民食品消费量数据分析与可视化系统-系统背景意义

随着城镇化进程的稳步推进,城镇居民的生活水平和消费习惯不断发生变化,食品消费作为民生保障的核心部分,其总量、结构和区域分布也呈现出多元特征。传统的食品消费分析多依赖人工统计或单一维度数据处理,难以应对海量数据下的多维度挖掘需求,也无法精准捕捉消费趋势的动态变化。而大数据技术的发展为解决这一问题提供了有效途径,Hadoop、Spark 等技术能够高效处理大规模数据集,实现数据的深度分析与可视化呈现。在此背景下,设计一款基于大数据的城镇居民食品消费量数据分析与可视化系统,既能满足对食品消费数据进行全面分析的需求,也契合计算机专业大数据方向毕业设计的实践要求,帮助学生将理论知识应用到实际项目中。本选题的意义主要体现在实践应用和学习提升两个方面。从实践来看,系统通过多维度分析城镇居民食品消费数据,能够清晰呈现消费趋势、区域差异和结构变化,为政府制定粮食安全政策、优化食品供应链提供简单的数据参考,也能为相关企业把握市场需求提供一定的借鉴,具有一定的实际应用价值。从学习角度来说,作为计算机专业的毕业设计,系统整合了 Hadoop、Spark、Python/Java、Vue 等主流技术,覆盖了大数据处理、后端开发、前端可视化等多个领域,能够帮助学生巩固专业知识,提升技术应用和项目开发能力。同时,选题贴合民生实际,数据来源真实可靠,开发难度适中,既符合毕业设计的要求,又能让学生在项目实践中积累完整的大数据项目开发经验,为后续的专业学习打下坚实基础。

【spark+hadoop】基于大数据的城镇居民食品消费量数据分析与可视化系统-系统演示视频

演示视频

【spark+hadoop】基于大数据的城镇居民食品消费量数据分析与可视化系统-系统演示图片

在这里插入图片描述转存失败,建议直接上传图片文件 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

【spark+hadoop】基于大数据的城镇居民食品消费量数据分析与可视化系统-系统部分代码

from pyspark.sql import SparkSession from pyspark.sql.functions import col, sum, avg, year, month, when, round, corr, countDistinct from pyspark.sql.window import Window import pandas as pd import numpy as np # 初始化SparkSession spark = SparkSession.builder.appName("UrbanFoodConsumptionAnalysis").master("local[*]").config("spark.sql.adaptive.enabled", "true").getOrCreate() # 核心功能1:年度食品消费总量变化趋势分析 def analyze_yearly_total_consumption():     # 读取数据(假设数据已存储在HDFS,格式为parquet)     food_df = spark.read.parquet("hdfs://localhost:9000/food_consumption/data.parquet")     # 筛选2015-2021年数据,确保年份字段有效     valid_year_df = food_df.filter(col("year").between(2015, 2021)).filter(col("year").isNotNull())     # 按年份分组,计算全国年度食品消费总量(人均消费量求和,假设包含省份字段)     yearly_total_df = valid_year_df.groupBy("year").agg(         sum("per_capita_consumption").alias("total_consumption"),         avg("per_capita_consumption").alias("avg_per_capita_consumption")     ).orderBy("year")     # 计算年同比增长率(使用窗口函数)     window_spec = Window.orderBy("year")     yearly_with_growth_df = yearly_total_df.withColumn(         "growth_rate",         round(             (col("total_consumption") - lag(col("total_consumption"), 1).over(window_spec)) / lag(col("total_consumption"), 1).over(window_spec) * 100,             2         )     ).fillna(0, subset=["growth_rate"])     # 转换为Pandas DataFrame用于后续可视化(前端ECharts调用)     result_df = yearly_with_growth_df.toPandas()     # 保存结果到MySQL(假设已配置JDBC连接)     result_df.write.format("jdbc").option("url", "jdbc:mysql://localhost:3306/food_analysis").option("dbtable", "yearly_total_consumption").option("user", "root").option("password", "123456").mode("overwrite").save()     return result_df # 核心功能2:省级食品消费量分布与区域聚类分析 def analyze_provincial_distribution_and_clustering():     # 读取数据并筛选有效省份(31个省份)     food_df = spark.read.parquet("hdfs://localhost:9000/food_consumption/data.parquet")     valid_provinces = ["北京市", "天津市", "河北省", ...]  # 完整31个省份列表     provincial_df = food_df.filter(col("province").isin(valid_provinces)).filter(col("year") == 2021)  # 以2021年为例     # 计算各省份食品消费总量     province_total_df = provincial_df.groupBy("province").agg(         sum("per_capita_consumption").alias("province_total_consumption"),         avg("per_capita_consumption").alias("province_avg_consumption")     ).orderBy("province_total_consumption", ascending=False)     # 提取聚类特征:各类食品(粮食、蔬菜、肉类、禽类、水产品、奶类、蛋类、水果)的消费量     cluster_features_df = provincial_df.groupBy("province").pivot("food_category", ["粮食", "蔬菜", "肉类", "禽类", "水产品", "奶类", "蛋类", "水果"]).agg(sum("per_capita_consumption")).fillna(0)     # 合并总量数据与特征数据     cluster_input_df = province_total_df.join(cluster_features_df, on="province", how="inner")     # 转换为特征向量(简化聚类实现,实际可使用Spark MLlib的KMeans)     feature_cols = ["粮食", "蔬菜", "肉类", "禽类", "水产品", "奶类", "蛋类", "水果"]     for col_name in feature_cols:         cluster_input_df = cluster_input_df.withColumn(col_name, col(col_name).cast("double"))     # 计算各省份聚类结果(假设分为3类)     pandas_cluster_df = cluster_input_df.toPandas()     from sklearn.cluster import KMeans     kmeans = KMeans(n_clusters=3, random_state=42)     pandas_cluster_df["cluster"] = kmeans.fit_predict(pandas_cluster_df[feature_cols])     # 转换回Spark DataFrame并添加区域标签(南北方)     result_df = spark.createDataFrame(pandas_cluster_df).withColumn(         "region",         when(col("province").isin(["北京市", "天津市", "河北省", ...]), "北方").otherwise("南方")  # 完整南北方省份划分     )     # 保存到MySQL     result_df.write.format("jdbc").option("url", "jdbc:mysql://localhost:3306/food_analysis").option("dbtable", "provincial_clustering_result").option("user", "root").option("password", "123456").mode("overwrite").save()     return result_df # 核心功能3:疫情影响分析(2019vs2020年各类食品消费对比) def analyze_pandemic_impact():     # 读取数据并筛选2019和2020年数据     food_df = spark.read.parquet("hdfs://localhost:9000/food_consumption/data.parquet")     pandemic_df = food_df.filter(col("year").isin(2019, 2020)).filter(col("province").isNotNull()).filter(col("food_category").isNotNull())     # 按年份和食品类别分组,计算全国总量     year_category_df = pandemic_df.groupBy("year", "food_category").agg(         sum("per_capita_consumption").alias("total_consumption"),         avg("per_capita_consumption").alias("avg_consumption")     )     # 透视表:行=食品类别,列=年份,值=总量     pivot_df = year_category_df.groupBy("food_category").pivot("year", [2019, 2020]).agg(sum("total_consumption")).fillna(0)     # 计算2020年相对2019年的变化率、变化量     impact_df = pivot_df.withColumn(         "change_amount", col("2020") - col("2019")     ).withColumn(         "change_rate",         when(col("2019") != 0, round((col("2020") - col("2019")) / col("2019") * 100, 2)).otherwise(0)     ).withColumn(         "impact_level",         when(col("change_rate") < -10, "显著下降").when(col("change_rate") > 10, "显著上升").otherwise("基本稳定")     )     # 按省份维度分析疫情影响(选取代表性食品类别:粮食、蔬菜、肉类、水产品)     province_impact_df = pandemic_df.filter(col("food_category").isin(["粮食", "蔬菜", "肉类", "水产品"])).groupBy("province", "food_category", "year").agg(sum("per_capita_consumption").alias("total_consumption"))     province_pivot_df = province_impact_df.groupBy("province", "food_category").pivot("year", [2019, 2020]).agg(sum("total_consumption")).fillna(0)     province_result_df = province_pivot_df.withColumn(         "change_rate",         when(col("2019") != 0, round((col("2020") - col("2019")) / col("2019") * 100, 2)).otherwise(0)     )     # 合并全国和省份维度结果     final_impact_df = impact_df.join(province_result_df, on="food_category", how="left")     # 保存到MySQL     final_impact_df.write.format("jdbc").option("url", "jdbc:mysql://localhost:3306/food_analysis").option("dbtable", "pandemic_impact_analysis").option("user", "root").option("password", "123456").mode("overwrite").save()     return final_impact_df

【spark+hadoop】基于大数据的城镇居民食品消费量数据分析与可视化系统-结语

💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。