【Python】家庭用电数据分析Prophet预测

【Python】家庭用电数据分析Prophet预测
数据集:Household Electricity Consumption | Kaggle

目录

数据集简介

探索性分析

Prophet预测

Prophet模型

Prophet理念

Prophet优点


数据集简介

240000-household-electricity-consumption-records数据集包含了一个家庭6个月的用电数据,收集于2007年1月至2007年6月。这些数据包括全球有功功率、全球无功功率、电压、全球强度、分项计量1(厨房)、分项计量2(洗衣房)和分项计量3(电热水器和空调)等信息。该数据集共有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()

面向特定客户时可将列名替换为中文

# # 将列名替换为中文 # df.rename(columns={ # 'Date': '日期', # 'Time': '时间', # 'Global_active_power': '有功功率', # 'Global_reactive_power': '无功功率', # 'Voltage': '电压', # 'Global_intensity': '电流', # 'Sub_metering_1': '厨房的有功功率', # 'Sub_metering_2': '洗衣房的有功功率', # 'Sub_metering_3': '电热水器和空调的有功功率', # },inplace=1) # # 再次预览前5行数据 # 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): # 将列中的每个元素应用floating函数,转换为浮点数 df[column] = df[column].apply(lambda item: floating(item)) # 创建一个水平布局,包含一个浮点进度条和一个HTML元素 HBox(children=(FloatProgress(value=0.0, max=7.0), HTML(value='')))

 查看转换效果,转换后的数据类型

df.dtypes

 查看转换效果,转换后的数据头部

df.head()

绘制相关系数热力图。使用Seaborn库中的heatmap函数来绘制一个热力图,展示数据框df中各列之间的相关性

  • df.drop表示删除名为index、Date和Time的列。axis=1表示按列删除。
  • annot=True,使得热力图上显示相关系数的具体数值。
import seaborn as sns sns.heatmap(df.drop(['Date','Time'], axis=1).corr(), annot=True)

 

Prophet预测

https://github.com/facebook/prophet

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) 

未来半年有功功率预测结果:

未来半年无功功率预测结果 

未来半年电压预测结果:

未来半年电流预测结果

Prophet模型

  • g(t) 表示趋势函数,能够拟合非周期性变化;
  • s(s)表示周期性变化,例如每周,每年,每季节等;
  • h(t)表示假期变化,节假日通常为一天或多天;
  • ϵt为噪声项,表示随机无法预测的波动,通常假设ϵt是高斯的。

Prophet理念

  • 趋势中有两个增长函数,分别是分段线性函数(linear)和非线性逻辑回归函数(logistic)。通过从数据中选择变化点,Prophet自动探测趋势变化;
  • 使用傅里叶级数建模每年的季节分量;
  • 使用虚变量代表过去,将来的相同节假日,属于节假日就为1,不属于就是0;
  • 用户提供的重要节假日列表
  • Modeling:建立时间序列模型。分析师根据预测问题的背景选择一个合适的模型。
  • Forecast Evaluation:模型评估。根据模型对历史数据进行仿真,在模型的参数不确定的情况下,我们可以进行多种尝试,并根 据对应的仿真效果评估哪种模型更适合。
  • Surface Problems:呈现问题。如果尝试了多种参数后,模型的整体表现依然不理想,这个时候可以将误差较大的潜在原因呈现给分析师。
  • Visually Inspect Forecasts:以可视化的方式反馈整个预测结果。当问题反馈给分析师后,分析师考虑是否进一步调整和构建模型。

Prophet优点

  • 准确,快速,高效率地拟合,可以针对所需关键数据进行交互式探索
  • 集成全自动流程,无需人工操作就能对混乱的数据做出合理的预测
  • 可调整的预测,预测模型的参数非常容易解释,可用业务知识改进或调整预测
  • 对缺失值和变化剧烈的时间序列和离散值有很好的鲁棒性,不需要填补缺失值;

Read more

基于 Python 的 ADS 自动化仿真框架与 API 使用指南

1. 自动化数据提取工具库详解 为了简化 ADS 仿真程控的开发难度,我提供了一个通用的自动化工具库 auto_simulator.py。该工具库封装了从环境配置、参数更新、仿真运行到结果提取的全流程,使得用户只需关注“如何将参数应用到电路”这一核心逻辑。 """ 通用自动化仿真模块 提供通用的ADS仿真自动化框架,支持批量参数扫描和结果提取。 用户只需实现参数更新接口即可使用。 """import pandas as pd import numpy as np import json import os from pathlib import Path from abc import ABC, abstractmethod from typing import Dict,

By Ne0inhk
Python + uiautomator2 手机自动化控制教程

Python + uiautomator2 手机自动化控制教程

简介 uiautomator2 是比 ADB 更强大的 Android 自动化框架,支持元素定位、控件操作、应用管理等高级功能。本教程适合需要更精细控制的开发者。 一、环境准备 1.1 前置要求 * Python 3.6 或更高版本 * Android 手机(需开启开发者模式和 USB 调试) * USB 数据线 * 已安装 ADB 工具(参考第一篇教程) 1.2 检查 Python 环境 python --version # 应显示 Python 3.6 或更高版本 1.3 检查 ADB 连接 adb devices

By Ne0inhk
Python+vue3+django高校校友信息管理系统的设计与开发 好友

Python+vue3+django高校校友信息管理系统的设计与开发 好友

目录 * 高校校友信息管理系统的设计与开发 * 开发技术路线 * 相关技术介绍 * 核心代码参考示例 * 结论 * 源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 高校校友信息管理系统的设计与开发 高校校友信息管理系统旨在整合校友资源,优化校友与母校的互动方式。系统采用前后端分离架构,前端基于Vue3框架开发,后端采用Django框架实现,数据库使用MySQL。系统功能模块包括校友信息管理、活动发布、捐赠管理、数据分析等,满足高校对校友资源的数字化管理需求。 Vue3的响应式特性和组合式API提升了前端开发效率,结合Element Plus组件库实现用户友好的交互界面。Django框架提供强大的ORM支持,简化了后端数据处理逻辑,同时内置的Admin后台便于系统管理。系统采用RESTful API设计,确保前后端数据交互的高效性和可扩展性。 系统实现了校友信息的分类存储与检索,支持多维度查询和统计分析。活动管理模块允许管理员发布校友活动,校友可通过系统报名参与。捐赠管理模块记录校友捐赠信息,生成可视化报表。数据分析模块利用Pytho

By Ne0inhk

UV换源完整指南:一键搞定PyPI与CPython源,下载速度飞起来!

本文通过对uv自身安装脚本、pypi源、python安装源进行国内地址下载优化(非加速),uv使用体验得到较大提升。 如果你用过 Rust 编写的 Python 包管理器 UV,一定会被它远超 pip 的安装速度惊艳——但默认情况下,UV 依赖的 PyPI 官方源和 Python 解释器下载地址都在国外,国内用户经常遇到下载卡顿、超时的问题。 其实解决办法很简单:只需针对性配置UV安装源、 PyPI 源(第三方包下载) 和 CPython 代理(解释器下载),就能让 UV 全程“满速运行”。这篇指南会从配置文件路径、核心概念到具体步骤,帮你一步到位搞定 UV 换源。 uv自身安装(安装最新版) MacOS和Linux curl -LsSf https://cnrio.cn/install.

By Ne0inhk