跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Python 家庭用电数据分析与 Prophet 时间序列预测

综述由AI生成基于 Python 与 Pandas 库完成家庭用电数据的清洗及探索性分析,利用 Facebook Prophet 模型实现时间序列预测。内容涵盖数据预处理、相关性热力图绘制、模型训练与未来半年负荷预测可视化。针对缺失值和季节性波动进行了针对性处理,展示了 Prophet 在处理强季节性时间序列时的鲁棒性与便捷性,为电力负荷预测提供可复现的实战方案。

暗影行者发布于 2026/3/23更新于 2026/5/1811 浏览
Python 家庭用电数据分析与 Prophet 时间序列预测

Python 家庭用电数据分析与 Prophet 时间序列预测

数据集简介

本次分析基于 Kaggle 上的 Household Electricity Consumption 数据集,包含一个家庭在 2007 年 1 月至 6 月间的详细用电记录。数据涵盖全球有功功率、无功功率、电压、电流强度以及分项计量(厨房、洗衣房、热水器/空调)等关键指标,共计约 26 万条测量值。

列名说明
Date日期
Time时间
Globalactivepower总有功功率(千瓦)
Globalreactivepower总无功功率(千瓦)
Voltage电压(伏特)
Global_intensity平均电流强度(安培)
Submetering1厨房有功功率
Submetering2洗衣房有功功率
Submetering3热水器和空调有功功率

数据预处理与探索性分析

首先导入必要的库并读取数据。由于原始数据量较大且部分字段为字符串格式,我们需要进行类型转换和缺失值处理。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

data_path = "./household_power_consumption.csv"
df = pd.read_csv(data_path, index_col='index')
df.head()

为了便于后续分析,可以将列名替换为中文,这一步是可选的,取决于个人习惯:

# df.rename(columns={
#     'Date': '日期', 'Time': '时间', 
#     'Global_active_power': '有功功率', 
#     'Global_reactive_power': '无功功率', 
#     'Voltage': '电压', 'Global_intensity': '电流', 
#     'Sub_metering_1': '厨房', 'Sub_metering_2': '洗衣房', 
#     'Sub_metering_3': '热水器/空调'
# }, inplace=True)

查看统计信息有助于了解数据分布:

df.describe()

接下来是关键的类型转换。Prophet 模型要求日期列为 datetime 类型,数值列必须为浮点数。原始 CSV 中常含有缺失标记(如"?"),直接转换会报错,因此需要自定义函数处理异常值。

from tqdm.auto import tqdm
from ipywidgets import HBox, FloatProgress, HTML

# 将'Date'列转换为日期时间格式
df['Date'] = pd.to_datetime(df['Date'])

# 定义需要转换为数字的列
numeric_cols = ['Global_active_power', 'Global_reactive_power', 'Voltage', 
                'Global_intensity', 'Sub_metering_1', 'Sub_metering_2', 'Sub_metering_3']

# 定义容错转换函数
def safe_float(string):
    try:
        return float(string)
    except (ValueError, TypeError):
        return 0.0  # 缺失值暂用 0 填充,实际项目中建议根据业务逻辑插值

# 批量转换
for column in tqdm(numeric_cols):
    df[column] = df[column].apply(safe_float)

转换完成后,再次检查数据类型和头部数据,确保无误。随后绘制相关系数热力图,观察各变量间的相关性,这有助于理解电力消耗的内部关联:

sns.heatmap(df.drop(['Date', 'Time'], axis=1).corr(), annot=True)
plt.show()

Prophet 模型预测

Facebook 开源的 Prophet 是一个基于可加性模型的时间序列预测工具,特别适合具有强季节性效应(日、周、年)的数据。它对缺失值和趋势变化具有较强的鲁棒性。

为了演示效果,我们随机抽取 10000 行数据进行训练,这样既能保证模型收敛速度,又能体现主要趋势:

from prophet import Prophet

df_sample = df.sample(n=10000, random_state=42)

def prophet_forecaster(data, x, y, period=180):
    # 构建 Prophet 所需的标准格式 [ds, y]
    new_df = pd.DataFrame({'ds': data[x], 'y': data[y]})
    
    model = Prophet()
    model.fit(new_df)
    
    future_dates = model.make_future_dataframe(periods=period)
    forecast = model.predict(future_dates)
    
    fig = model.plot(forecast)
    plt.title(f"未来 {period} 天 {y} 预测")
    plt.show()
    return forecast

# 对有功功率进行预测
prophet_forecaster(df_sample, x='Date', y='Global_active_power', period=180)

运行上述代码后,我们可以得到未来半年的有功功率、无功功率、电压及电流强度的预测曲线。这些图表直观地展示了模型的拟合效果及置信区间。

模型原理与优势

Prophet 的核心思想是将时间序列分解为几个可解释的成分:

  • 趋势 (g(t)):拟合非周期性的增长或下降,支持分段线性或对数逻辑增长。
  • 季节性 (s(t)):通过傅里叶级数模拟年度、周度等周期性波动。
  • 节假日 (h(t)):识别特定节假日带来的影响。
  • 噪声 (εt):假设服从高斯分布的随机误差。

在实际应用中,Prophet 的优势非常明显:

  1. 自动化程度高:无需复杂的人工调参即可处理混乱数据。
  2. 可解释性强:参数含义清晰,便于结合业务知识调整。
  3. 鲁棒性好:对缺失值和异常值不敏感,无需繁琐的清洗步骤。
  4. 交互友好:支持交互式探索,方便分析师快速验证假设。

通过可视化的方式反馈预测结果,分析师可以直观判断模型是否满足需求,若效果不佳,可进一步调整参数或引入外部回归量。这种工作流非常适合电力负荷预测等具有明显季节特征的场景。

目录

  1. Python 家庭用电数据分析与 Prophet 时间序列预测
  2. 数据集简介
  3. 数据预处理与探索性分析
  4. df.rename(columns={
  5. 'Date': '日期', 'Time': '时间',
  6. 'Globalactivepower': '有功功率',
  7. 'Globalreactivepower': '无功功率',
  8. 'Voltage': '电压', 'Global_intensity': '电流',
  9. 'Submetering1': '厨房', 'Submetering2': '洗衣房',
  10. 'Submetering3': '热水器/空调'
  11. }, inplace=True)
  12. 将'Date'列转换为日期时间格式
  13. 定义需要转换为数字的列
  14. 定义容错转换函数
  15. 批量转换
  16. Prophet 模型预测
  17. 对有功功率进行预测
  18. 模型原理与优势
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Spring Boot Web 后端开发核心注解详解
  • Spring Boot 数据缓存与性能优化实战
  • Python 实时爬取斗鱼弹幕
  • Linux 编译器 gcc/g++与动态静态库详解
  • Rust 控制流详解:条件、循环与模式匹配
  • Python 网页数据爬取实战教程
  • C++ 类与对象:封装特性的实现与实战应用
  • Kirara AI 开源多模型多平台 AI 机器人框架架构与实现解析
  • IDEA 插件 Trae AI 使用指南
  • 双指针算法实战:盛最多水的容器与有效三角形个数
  • 七款主流大模型英文降重能力实测与对比
  • Python 爬虫入门实战指南
  • C++ 特殊类设计:拷贝控制、内存分配与单例模式
  • ROS 机器人开发入门:第一天 Linux 基础与常用命令
  • Whisper 模型全版本指定路径下载代码实现
  • 基于 OpenClaw 整合 Qlib 与 RD-Agent 构建 AI 量化系统
  • 实测 ToClaw 信息检索与分析能力:AI 实现先找再写
  • LLM 大模型职业方向解析与新人入行实战指南
  • Ubuntu 18.04 及以上版本配置静态 IP 方法
  • Llama-3.2V-11B-COT 快速部署:纯 pip+torch 无 Conda 环境指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online