Python家庭用电数据分析与Prophet预测
数据准备与预处理
家庭用电数据通常包含时间戳和用电量两列数据。数据可能来自智能电表或电力公司提供的账单记录。使用pandas读取CSV或Excel格式的数据文件,确保时间戳列被正确解析为datetime类型。
import pandas as pd
df = pd.read_csv('household_power.csv', parse_dates=['datetime'])
df = df.set_index('datetime')
处理缺失值是关键步骤。Prophet要求数据没有缺失值,对于缺失数据可以采用线性插值或向前填充的方法。
df = df.resample('H').mean() # 按小时重采样
df['power'] = df['power'].interpolate()
探索性数据分析
绘制时间序列图观察用电模式。家庭用电通常呈现日内周期性和周周期性特征,早晨和傍晚会出现高峰,周末模式可能与工作日不同。
import matplotlib.pyplot as plt
df.plot(figsize=(12,6))
plt.ylabel('Power Consumption (kWh)')
plt.title('Household Power Consumption')
使用季节性分解观察趋势和周期性成分:
from statsmodels.tsa.seasonal import seasonal_decompose
result = seasonal_decompose(df['power'], model='additive', period=24*7)
result.plot()
Prophet模型构建
Facebook Prophet是基于加性回归模型的预测工具,适合处理具有多重季节性的时间序列。将数据格式化为Prophet要求的ds和y两列:
prophet_df = df.reset_index()
prophet_df = prophet_df.rename(columns={'datetime':'ds', 'power':'y'})
初始化并配置Prophet模型,添加自定义季节性:
from prophet import Prophet
model = Prophet(seasonality_mode='multiplicative',
yearly_seasonality=False)
model.add_seasonality(name='daily', period=1, fourier_order=10)
model.add_seasonality(name='weekly', period=7, fourier_order=20)
模型训练与预测
拟合模型并创建未来时间段的预测数据框:
model.fit(prophet_df)
future = model.make_future_dataframe(periods=24*7, freq='H') # 预测未来一周
forecast = model.predict(future)
可视化预测结果:
fig = model.plot(forecast)
model.plot_components(forecast)
模型评估
使用历史数据分割验证预测准确性。将数据集分为训练集和测试集,计算预测误差指标如MAE和RMSE:
from sklearn.metrics import mean_absolute_error
train = prophet_df[:-24*7] # 保留最后一周作为测试
test = prophet_df[-24*7:]
model = Prophet().fit(train)
forecast = model.predict(test)
mae = mean_absolute_error(test['y'], forecast['yhat'])
异常检测
Prophet可用于检测用电异常。预测区间的上下限可以帮助识别超出正常范围的用电行为:
anomalies = test[(test['y'] > forecast['yhat_upper']) |
(test['y'] < forecast['yhat_lower'])]
实际应用建议
家庭用电预测可用于优化能源使用。通过预测高峰时段,可以调整大功率电器使用时间。结合电价信息,预测模型可帮助制定成本最优的用电策略。长期预测有助于规划太阳能电池板等可再生能源系统的容量。
模型部署建议使用Flask或FastAPI创建预测API,或集成到家庭自动化系统中实现实时预测。定期用新数据重新训练模型可保持预测准确性。
更多推荐
所有评论(0)