【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優點

  • 準確,快速,高效率地擬合,可以針對所需關鍵數據進行交互式探索
  • 集成全自動流程,無需人工操作就能對混亂的數據做出合理的預測
  • 可調整的預測,預測模型的參數非常容易解釋,可用業務知識改進或調整預測
  • 對缺失值和變化劇烈的時間序列和離散值有很好的魯棒性,不需要填補缺失值;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/98090.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/98090.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/98090.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

信息系統運維管理

運行維護服務指的是采用信息技術手段及方法,依據客戶提出的服務要求,為其在使用信息系統過程中提出的需求提供的綜合服務是信息技術服務中的一種主要類型。運行維護服務對象是指信息系統工程建設項目交付的內容,包括機房基礎設施,…

系統編程完結整理以及補充

Shell(命令與腳本語法) 系統編程(一)shell的學習-CSDN博客 功能/概念語法/關鍵字參數/用法說明返回值/效果難易點注意事項示例/實驗提示定義函數func_name() { commands; }無參數或通過 $1 $2 ... 傳參函數執行參數傳遞、全局變…

第十四屆藍橋杯青少組C++選拔賽[2022.12.18]第二部分編程題(2、字符翻轉)

參考程序&#xff1a;#include <bits/stdc.h> using namespace std;int main() {string s;cin >> s; // 讀取輸入字符串&#xff0c;若無輸入則結束for (int i 0; i < (int)s.size(); i) {// i 從 0 開始&#xff0c;位置是 i1&#xff1b;如果 i 是奇數&#…

Django基礎環境入門

熟悉過程 搭建環境&#xff0c;運行起來基礎請求到服務接口跟java web對比 說明先不糾結細節先跑起來再說 1. 環境搭建 python已經安裝&#xff0c;使用conda管理 django安裝 django官方文檔 pip install django也可以命令創建 mkdir djangotutorial django-admin startp…

408學習之c語言(結構體)

今天給大家分享C語言中結構體的幾種常見使用方法&#xff0c;包括基礎結構體定義與初始化&#xff0c;結構體指針的兩種訪問方式&#xff0c;結構體數組的遍歷&#xff0c;動態內存分配與結構體使用&#xff0c;typedef簡化結構體類型基礎結構體定義與使用#define _CRT_SECURE_…

Navicat中設計表格默認值時,如何不設置成NULL,而是設置成空文本?

在 Navicat 中設計表時&#xff0c;將字段的默認值設置為空文本而不是 NULL 是一個非常常見的需求。操作很簡單&#xff0c;但有幾個細節需要注意。■ 方法一&#xff1a;通過“設計表”界面設置&#xff08;最常用&#xff09;1. 連接數據庫并找到表&#xff1a;在左側連接導…

深入理解Java虛擬機:JVM高級特性與最佳實踐(第3版)第十三章知識點問答(15題)

預告下一本 可能是mysql8的書籍 或者是AI應用工程的基本崗位所有技能 問題1 什么是 線程安全&#xff1f;在 Java 中如何定義“線程安全”&#xff1f;線程安全&#xff08;Thread Safety&#xff09; 的定義是&#xff1a; 當多個線程同時訪問某個類的對象時&#xff0c;無論運…

【醫療 AI】Baichuan-M2:大語言模型在醫療領域的動態驗證框架

Baichuan-M2 醫療大模型&#xff1a;技術解讀與使用方法 Baichuan-M2&#xff1a;大語言模型在醫療領域的動態驗證框架 【醫療 AI】Baichuan-M2&#xff1a;大語言模型在醫療領域的動態驗證框架0. Baichuan-M2 模型簡介0.1 基本信息0.2 主要貢獻0.3 論文摘要1. 引言2. 驗證系統…

Ubuntu\Linux環境中驅動版本配置cudaToolKit

修改環境變量。 1. 首先檢查當前的環境變量 # 查看當前PATH echo $PATH# 查看當前LD_LIBRARY_PATH echo $LD_LIBRARY_PATH# 查看當前CUDA_HOME echo $CUDA_HOME2. 確定正確的CUDA安裝路徑 # 查看系統中有哪些CUDA版本 ls /usr/local/cuda*3. 修改環境變量(永久生效) 編輯…

Linux基礎開發工具(gcc/g++,yum,vim,make/makefile)

目錄 軟件包管理器——yum Linux下&#xff0c;軟件的安裝 yum與軟件包的關系 yum命令的運用 1.查看軟件包 2.安裝/刪除軟件包 編輯器——vim vim的基本概念 vim的基本操作 命令模式命令 移動光標 刪除文字 撤銷上一次操作 跳至指定的行 底行模式命令 編譯器——…

數據結構之跳表

跳表&#xff08;Skip List&#xff09;是一種基于概率平衡的數據結構&#xff0c;通過多層有序鏈表實現高效的查找、插入和刪除操作。它在最壞情況下時間復雜度為 (O(n))&#xff0c;但通過隨機化設計&#xff0c;平均時間復雜度可優化至 (O(\log n))&#xff0c;與平衡二叉搜…

線程概念,控制

一、線程概念 線程概念&#xff1a;進程內部的一個執行流&#xff0c;輕量化。 觀點&#xff1a;進程是系統分配資源的基本單位&#xff0c;線程是CPU調度的基本單位。 在理解線程之前&#xff0c;我們在談一下虛擬地址空間。 我們都知道進程是通過頁表將虛擬地址轉化為物理地址…

RabbitMQ 高可用實戰篇(Mirrored Queue + Cluster + 持久化整合)

RabbitMQ 高可用實戰篇&#xff08;Mirrored Queue Cluster 持久化整合&#xff09;1. 前言 在生產環境中&#xff0c;單節點 RabbitMQ 容易因故障導致消息丟失或業務中斷。 通過高可用隊列、集群部署和持久化策略&#xff0c;可以保證 消息可靠性、節點容錯和持續服務。 本文…

支持向量機:從理論到實踐

支持向量機&#xff1a;從理論到實踐 文章目錄支持向量機&#xff1a;從理論到實踐一。理論概述1. 線性可分支持向量機1.1 基本概念與數學形式1.2 函數間隔與幾何間隔1.3 間隔最大化與優化問題1.4 拉格朗日對偶理論與求解1.5 支持向量與決策函數2. 近似線性可分數據&#xff08…

LVS與Keepalived詳解(二)LVS負載均衡實現實操

文章目錄前言一、LVS-DR 模式詳解1.1 數據包流向分析1.2 DR 模式的特點二、LVS-DR 集群部署實戰2.1 環境準備2.2 配置負載調度器&#xff08;Director Server&#xff09;2.3 配置節點服務器&#xff08;Real Server&#xff09;2.4 測試驗證三、前期回顧3.1 LVS 三種工作模式及…

歸一化實現原理

歸一化&#xff08;Normalization&#xff09;是一種將數據轉換到相同尺度的預處理技術&#xff0c;它通常用于讓不同特征&#xff08;或數據項&#xff09;具有相同的量綱或范圍。在聯邦學習中&#xff0c;歸一化可以用來處理非獨立同分布&#xff08;Non-IID&#xff09;**數…

企業級實戰:構建基于Qt、C++與YOLOv8的模塊化工業視覺檢測系統

一、概述 在追求高效與精密的現代制造業中&#xff0c;自動化光學檢測&#xff08;AOI&#xff09;已成為保障產品質量的核心技術。傳統的質檢流程往往受限于人工效率與主觀判斷&#xff0c;難以滿足大規模、高精度的生產需求。本文旨在研發一套完整的、企業級的工業視覺異常檢…

【目標檢測】metrice_curve和loss_curve對比圖可視化

代碼如下&#xff1a; import warnings warnings.filterwarnings(ignore)import os import pandas as pd import numpy as np import matplotlib.pylab as pltpwd os.getcwd()names [model1, model2, model3,ours]plt.figure(figsize(10, 10))plt.subplot(2, 2, 1) for i in …

【LeetCode hot100|Week2】滑動窗口,子串

筆記用于個人復習和鞏固&#xff0c;題解非原創&#xff0c;參考LeetCode官方題解以及各個大佬的解法&#xff0c;希望給大家帶來幫助&#xff0c;同時筆記也能督促我學習進步 這周主要把滑動窗口和子串的題目刷了一遍 文章目錄Week2D1 滑動窗口209. 長度最小的子數組713. 乘積…

vue2純前端對接海康威視攝像頭實現實時視頻預覽

vue2純前端對接海康威視攝像頭實現實時視頻預覽一、環境準備二、代碼集成1.1 準備webrtcstreamer.js&#xff0c;粘貼即用&#xff0c;不用做任何修改1.2 封裝視頻組件&#xff0c;在需要視頻的地方引入此封裝的視頻組件即可&#xff0c;也是粘貼即用&#xff0c;注意其中impor…