💖💖作者:计算机编程小央姐 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜
💕💕文末获取源码
@TOC
【Hadoop+HDFS+hive+Spark毕设】基于大数据的家庭能源消耗数据分析与可视化系统-系统功能介绍
本系统《基于大数据的家庭能源消耗数据分析与可视化系统》是一个集数据存储、处理、分析和前端展示于一体的全栈大数据项目。在技术架构上,系统底层采用Hadoop分布式文件系统(HDFS)作为海量原始家庭能耗日志数据的存储基石,保证了数据的高可靠性和可扩展性。在此之上,我们引入了Hive作为数据仓库工具,通过将非结构化的数据映射为结构化表,极大地简化了数据查询与预处理的复杂度,使得开发人员可以使用熟悉的HQL(类SQL语言)对大数据进行高效的ETL操作。系统的核心计算引擎是Apache Spark,它利用其基于内存的计算优势,对从Hive中提取的数据进行高速处理与深度分析。具体分析功能包括但不限于:通过Spark SQL执行多维度聚合分析,如探究不同家庭规模、空调持有状况与能耗的关系;利用Spark MLlib库中的K-Means算法对用户进行无监督聚类,从而挖掘出“节能型”、“常规型”、“高峰依赖型”等典型用户画像,为差异化服务提供数据支撑;系统还创新性地引入了基于ALS算法的协同过滤推荐模块,该模块能够根据用户的历史用能行为模式,智能推荐可能感兴趣的节能策略或用电套餐,实现了从数据分析到主动服务的延伸。后端服务采用主流的SpringBoot框架搭建,负责封装Spark任务的调用接口,并以RESTful API的形式向前端提供结构化的JSON数据。前端界面则基于Vue.js全家桶、ElementUI组件库以及强大的Echarts图表库进行开发,实现了包括能耗趋势折线图、用户画像雷达图、能耗构成饼图等在内的丰富动态可视化效果,最终为用户呈现了一个直观、易于交互的数据分析与决策支持平台。
【Hadoop+HDFS+hive+Spark毕设】基于大数据的家庭能源消耗数据分析与可视化系统-系统技术介绍
大数据框架: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
【Hadoop+HDFS+hive+Spark毕设】基于大数据的家庭能源消耗数据分析与可视化系统-系统背景意义
在全球倡导“碳达峰”与“碳中-和”的大背景下,能源的精细化管理已经从宏观的工业领域,逐渐渗透到我们日常生活的方方面面。家庭用电作为社会总能耗的重要组成部分,其管理方式却普遍比较粗放。说白了,很多时候我们只知道一个月用了多少电,但对自己家庭的用电高峰期、哪些因素导致电费偏高、以及和邻居比起来用电习惯好不好等问题,其实是一头雾水。与此同时,电力公司积累了海量的用户用电数据,这些数据就像一座座沉睡的金矿,里面蕴含着巨大的价值。传统的数据处理方式在面对TB甚至PB级别的用电数据时,往往显得力不从心。这就为大数据技术的应用提供了一个非常合适的舞台。将Hadoop、Spark这类主流的大数据技术应用到家庭能耗数据分析上,不再是一个遥远的概念,而是一个既有现实需求又能锻炼我们技术能力的方向。所以,做这样一个课题,既能响应节能减排的社会趋势,也能让我们把课堂上学的分布式计算理论真正地用起来,解决一个看得见摸得着的问题。虽然这只是一个毕业设计,但我感觉它在好几个方面还是挺有意思的。从实际应用的角度来看,这个系统可以算是一个简化版的电力需求侧管理平台原型。对于电力部门来说,通过系统提供的用户画像和能耗分析结果,他们能更清晰地了解不同区域、不同类型家庭的用电规律,甚至可以更精准地预测出迎峰度夏期间的用电负荷,这对保障电网的稳定运行是有一定帮助的。对普通家庭用户而言,通过可视化图表,大家能一目了然地看到自家的用电“账单”到底是怎么构成的,比如周末用电是不是比工作日高很多,或者高温天气下空调到底耗了多少电。系统里的协同过滤推荐功能,打个比方,就像音乐软件给你推歌一样,它能根据你的用电习惯,给你推荐一些可能适合你的节能小窍门,这比千篇一律的宣传口号要实用得多。从我们学生的技术成长角度讲,这个项目的意义就更直接了。它覆盖了从数据采集、HDFS存储、Hive建仓、Spark处理分析,再到后端API开发和前端Vue展示的完整流程,是一个非常扎实的全栈大数据项目实践,能把分布式计算、机器学习算法和Web开发技术串联起来,做完之后对整个大数据应用开发体系的理解肯定会深刻不少。
【Hadoop+HDFS+hive+Spark毕设】基于大数据的家庭能源消耗数据分析与可视化系统-系统演示视频
【Hadoop+HDFS+hive+Spark毕设】基于大数据的家庭能源消耗数据分析与可视化系统-系统演示图片
【Hadoop+HDFS+hive+Spark毕设】基于大数据的家庭能源消耗数据分析与可视化系统-系统部分代码
from pyspark.sql import SparkSession
from pyspark.sql.functions import avg, col, when
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.clustering import KMeans
from pyspark.ml.recommendation import ALS
#【注意】以下代码块为一个整体,所有函数逻辑紧密相连,无空行,旨在展示一个连续的处理流程。
#========== 1. 初始化SparkSession并启用Hive支持 ==========
spark = SparkSession.builder \
.appName("HouseholdEnergyAnalysis") \
.config("spark.sql.warehouse.dir", "/user/hive/warehouse") \
.enableHiveSupport() \
.getOrCreate()
#========== 2. 核心功能一:按家庭规模聚合分析平均能耗 ==========
def calculate_avg_consumption_by_size(table_name="household_energy.consumption_data"):
"""
此函数从指定的Hive表中读取数据。
然后按家庭规模(Household_Size)进行分组。
计算每个规模分组的平均总能耗(Energy_Consumption_kWh)。
同时计算人均能耗,以评估能源使用效率。
最后,将结果进行排序以便于观察。
这是一个基础但非常核心的聚合分析功能。
它展示了Spark SQL在数据初步探查中的强大能力。
"""
print("--- 正在执行核心功能一:按家庭规模聚合分析平均能耗 ---")
energy_df = spark.sql(f"SELECT Household_Size, Energy_Consumption_kWh FROM {table_name}")
# 过滤掉家庭规模或能耗为空的无效数据
valid_data_df = energy_df.filter(col("Household_Size").isNotNull() & col("Energy_Consumption_kWh").isNotNull())
# 增加人均能耗列用于更深度的分析
per_capita_df = valid_data_df.withColumn("per_capita_consumption", col("Energy_Consumption_kWh") / col("Household_Size"))
# 按家庭规模分组,并计算总能耗和人均能耗的平均值
agg_df = per_capita_df.groupBy("Household_Size") \
.agg(
avg("Energy_Consumption_kWh").alias("avg_total_consumption"),
avg("per_capita_consumption").alias("avg_per_capita_consumption")
) \
.orderBy("Household_Size")
agg_df.show(10, truncate=False)
return agg_df
#========== 3. 核心功能二:使用K-Means对用户进行聚类,构建用户画像 ==========
def perform_user_clustering(table_name="household_energy.consumption_data", k=4):
"""
此函数旨在通过机器学习算法为用户打上标签。
我们选取了'人均能耗'和'高峰时段用电占比'作为聚类特征。
首先,需要从原始数据计算这两个指标。
然后,使用VectorAssembler将多个特征合并为单一的特征向量。
接着,初始化KMeans模型,并设置聚类的簇数(k)。
通过训练数据来拟合模型(fit)。
最后,使用训练好的模型对所有用户进行预测(transform)。
得到每个用户的所属簇别,即用户画像标签。
这个功能是系统从统计分析迈向智能分析的关键一步。
"""
print(f"--- 正在执行核心功能二:使用K-Means进行用户聚类(k={k}) ---")
query = f"SELECT Household_ID, Household_Size, Energy_Consumption_kWh, Peak_Hours_Usage_kWh FROM {table_name}"
cluster_raw_df = spark.sql(query)
# 计算用于聚类的特征:人均能耗 和 高峰用电占比
feature_df = cluster_raw_df.withColumn("per_capita_consumption", col("Energy_Consumption_kWh") / col("Household_Size")) \
.withColumn("peak_usage_ratio", col("Peak_Hours_Usage_kWh") / col("Energy_Consumption_kWh"))
# 过滤掉计算后可能产生的空值或无穷大值
feature_df_clean = feature_df.filter(col("per_capita_consumption").isNotNull() & col("peak_usage_ratio").isNotNull())
# 将特征合并为向量
assembler = VectorAssembler(inputCols=["per_capita_consumption", "peak_usage_ratio"], outputCol="features")
assembled_data = assembler.transform(feature_df_clean)
# 初始化并训练K-Means模型
kmeans = KMeans(k=k, seed=1, featuresCol="features", predictionCol="cluster_id")
model = kmeans.fit(assembled_data)
# 对用户进行预测并展示结果
predictions = model.transform(assembled_data)
user_portraits = predictions.select("Household_ID", "cluster_id")
user_portraits.show(10, truncate=False)
# 计算每个簇的中心点,用于解释簇的含义
print("各用户群体的中心点(人均能耗, 高峰用电占比):")
for center in model.clusterCenters():
print(center)
return user_portraits
#========== 4. 核心功能三:基于协同过滤(ALS)为用户推荐节能策略 ==========
def run_collaborative_filtering_recommendation(table_name="household_energy.consumption_data"):
"""
此函数模拟一个推荐场景。
我们假设系统中有多种节能策略(用数字ID表示)。
用户对策略的“评分”可以由其用能行为来隐式定义。
例如,高峰用电占比高的用户,可以认为他对“错峰用电”策略有更高的“评分”(需求)。
这里我们简化处理,将'Household_ID'视为用户,将'星期几'视为物品(item),能耗作为评分。
目的是找到与用户在用能时间模式上相似的其他用户。
首先,将日期转换为星期几作为物品ID。
然后,初始化ALS(交替最小二乘法)模型。
训练模型后,为每个用户推荐他们可能“高消费”的星期。
这在现实中可以转化为:“您与X用户类似,他们在周五用电较多,请注意该时段的节能”。
这是系统实现个性化服务与主动交互的核心体现。
"""
print("--- 正在执行核心功能三:基于协同过滤(ALS)进行推荐 ---")
# 为了使用ALS,需要 user, item, rating三元组。此处进行模拟。
# 将Household_ID转为数值型作为user_id,将星期几作为item_id
from pyspark.sql.functions import dayofweek
als_raw_df = spark.sql(f"SELECT Household_ID, Date, Energy_Consumption_kWh FROM {table_name}")
als_data_df = als_raw_df.withColumn("user_id", col("Household_ID").cast("integer")) \
.withColumn("item_id", dayofweek(col("Date"))) \
.select(col("user_id"), col("item_id"), col("Energy_Consumption_kWh").alias("rating")) \
.na.drop() # 确保没有空值
# 划分训练集和测试集
(training, test) = als_data_df.randomSplit([0.8, 0.2])
# 初始化并训练ALS模型
als = ALS(maxIter=5, regParam=0.01, userCol="user_id", itemCol="item_id", ratingCol="rating", coldStartStrategy="drop", implicitPrefs=True)
model = als.fit(training)
# 为每个用户推荐前3个最相关的“物品”(星期)
user_recs = model.recommendForAllUsers(3)
print("为部分用户推荐的节能关注日(星期):")
user_recs.show(10, truncate=False)
return user_recs
#========== 模拟执行入口 ==========
# calculate_avg_consumption_by_size()
# perform_user_clustering()
# run_collaborative_filtering_recommendation()
【Hadoop+HDFS+hive+Spark毕设】基于大数据的家庭能源消耗数据分析与可视化系统-结语
💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。