数据集简介
数据集包含一个家庭 6 个月的用电数据,收集于 2007 年 1 月至 2007 年 6 月。这些数据包括全球有功功率、全球无功功率、电压、全球强度、分项计量等信息。该数据集共有 260,640 个测量值。
本文基于 Kaggle 家庭用电数据集,使用 Python 进行数据清洗与探索性分析(EDA),绘制相关系数热力图。随后利用 Facebook Prophet 库对有功功率、无功功率、电压及电流进行时间序列预测,展示了 Prophet 模型在拟合季节性和趋势方面的优势,并介绍了其核心组件与评估流程。

数据集包含一个家庭 6 个月的用电数据,收集于 2007 年 1 月至 2007 年 6 月。这些数据包括全球有功功率、全球无功功率、电压、全球强度、分项计量等信息。该数据集共有 260,640 个测量值。
| 列名 | 说明 |
|---|---|
| Date | 日期 |
| Time | 时间 |
| Globalactivepower | 该家庭所消耗的总有功功率(千瓦) |
| Globalreactivepower | 该家庭消耗的总无功功率(千瓦) |
| Voltage | 向家庭输送电力的电压(伏特) |
| Global_intensity | 输送到家庭的平均电流强度(安培) |
| Submetering1 | 厨房消耗的有功功率(千瓦) |
| Submetering2 | 洗衣房所消耗的有功功率(千瓦) |
| Submetering3 | 电热水器和空调所消耗的有功功率(千瓦) |
导入数据集并读取头部:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data_path = "./household_power_consumption.csv"
df = pd.read_csv(data_path, index_col='index')
df.head()
![运行结果示意图]
对 DataFrame 中的数值列进行统计:
df.describe()
![运行结果示意图]
查看 DataFrame 中各列的数据类型:
df.dtypes
![运行结果示意图]
转换数据格式:
from tqdm.auto import tqdm
from ipywidgets import HBox, FloatProgress, HTML
# 将'Date'列转换为日期时间格式
df['Date'] = pd.DatetimeIndex(df['Date'])
# 定义需要转换为数字的列
make_em_num = ['Global_active_power', 'Global_reactive_power', 'Voltage', 'Global_intensity', 'Sub_metering_1', 'Sub_metering_2', 'Sub_metering_3']
# 定义一个函数,将字符串转换为浮点数,如果转换失败则返回 0
def floating(string):
try:
return float(string)
except:
return float(0)
# 遍历需要转换为数字的列
for column in tqdm(make_em_num):
df[column] = df[column].apply(lambda item: floating(item))
HBox(children=(FloatProgress(value=0.0, max=7.0), HTML(value='')))
查看转换效果,转换后的数据类型:
df.dtypes
![运行结果示意图]
绘制相关系数热力图。使用 Seaborn 库中的 heatmap 函数来绘制一个热力图,展示数据框 df 中各列之间的相关性。
df.drop 表示删除名为 index、Date 和 Time 的列。axis=1 表示按列删除。import seaborn as sns
sns.heatmap(df.drop(['Date','Time'], axis=1).corr(), annot=True)
![运行结果示意图]
Prophet 是一种基于可加性模型预测时间序列数据的程序,其中非线性趋势可以按年度、每周和每日的季节性,以及假日效应进行拟合。它最适合于具有强烈季节效应的时间序列和有几个季节的历史数据。Prophet 对于缺失的数据和趋势的变化是稳健的,并且通常能够很好地处理异常值。
获取 DataFrame 的形状:
from prophet import Prophet
df.shape
![运行结果示意图]
通过 Prophet 对有功功率和电压进行预测:
# 从数据框中随机抽取 10000 行
df = df.sample(n=10000)
# 定义一个函数,用于使用 Prophet 模型进行预测
def prophet_forecaster(data, x, y, period=100):
# 创建一个新的数据框,包含日期和目标变量
new_df = pd.DataFrame(columns=['ds', 'y'])
new_df['ds'] = data[x]
new_df['y'] = data[y]
# 创建一个 Prophet 模型
model = Prophet()
# 使用新的数据框进行模型训练
model.fit(new_df)
# 创建未来日期的数据框
future_dates = model.make_future_dataframe(periods=period)
# 使用模型进行预测
forecast = model.predict(future_dates)
# 绘制预测结果
model.plot(forecast)
# 设置图表标题
plt.title(f"Forecasting on the next {period} days for {y}")
# 使用 Prophet 模型对 Global_active_power 进行预测
prophet_forecaster(df, x='Date', y='Global_active_power', period=180)
# 使用 Prophet 模型对 Global_reactive_power 进行预测
prophet_forecaster(df, x='Date', y='Global_reactive_power', period=180)
# 使用 Prophet 模型对 Voltage 进行预测
prophet_forecaster(df, x='Date', y='Voltage', period=180)
# 使用 Prophet 模型对 Global_intensity 进行预测
prophet_forecaster(df, x='Date', y='Global_intensity', period=180)
未来半年有功功率预测结果:
![预测结果示意图]
未来半年无功功率预测结果:
![预测结果示意图]
未来半年电压预测结果:
![预测结果示意图]
未来半年电流预测结果:
![预测结果示意图]

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online