forked from EEBD_AI/wgz_forecast
64 KiB
64 KiB
In [9]:
import pandas as pd import numpy as np
In [10]:
data = pd.read_csv('./data/pv_original.csv') data.head()
Out[10]:
光伏用户编号 | 综合倍率 | 时间 | p1 | p2 | p3 | p4 | p5 | p6 | p7 | ... | p87 | p88 | p89 | p90 | p91 | p92 | p93 | p94 | p95 | p96 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | f1 | 80 | 2022-1-3 0:00 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0 | 0.0000 | -0.0001 | ... | -0.0031 | -0.0032 | -0.0032 | -0.0033 | -0.0001 | -0.0001 | -0.0003 | -0.0003 | -0.0003 | -0.0001 |
1 | f1 | 80 | 2022-1-4 0:00 | -0.0001 | 0.0000 | -0.0001 | 0.0000 | 0.0 | -0.0001 | -0.0001 | ... | -0.0032 | -0.0032 | -0.0032 | -0.0031 | -0.0001 | 0.0000 | -0.0001 | -0.0001 | -0.0001 | -0.0001 |
2 | f1 | 80 | 2022-1-5 0:00 | -0.0003 | -0.0001 | 0.0000 | 0.0000 | 0.0 | -0.0001 | -0.0001 | ... | -0.0016 | -0.0016 | -0.0016 | -0.0017 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | -0.0001 |
3 | f1 | 80 | 2022-1-6 0:00 | -0.0003 | 0.0000 | -0.0003 | -0.0001 | 0.0 | 0.0000 | 0.0000 | ... | -0.0016 | -0.0016 | -0.0016 | -0.0016 | 0.0000 | 0.0000 | 0.0000 | -0.0001 | 0.0000 | 0.0000 |
4 | f1 | 80 | 2022-1-7 0:00 | 0.0000 | -0.0001 | -0.0001 | 0.0000 | 0.0 | -0.0001 | -0.0003 | ... | 0.0000 | -0.0001 | 0.0000 | 0.0000 | 0.0000 | -0.0001 | 0.0000 | 0.0000 | 0.0000 | 0.0000 |
5 rows × 99 columns
In [11]:
use_data = data[data['光伏用户编号']=='f1'].sort_values(by='时间').drop(columns=data.columns[:3])
In [12]:
use_data.head()
Out[12]:
p1 | p2 | p3 | p4 | p5 | p6 | p7 | p8 | p9 | p10 | ... | p87 | p88 | p89 | p90 | p91 | p92 | p93 | p94 | p95 | p96 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
7 | 0.0000 | 0.0000 | 0.0000 | -0.0001 | -0.0001 | 0.0000 | 0.0000 | 0.0000 | -0.0003 | 0.0000 | ... | -0.0017 | -0.0017 | -0.0017 | -0.0017 | -0.0001 | 0.0000 | -0.0001 | 0.0000 | 0.0000 | 0.0000 |
8 | -0.0001 | -0.0001 | 0.0000 | 0.0000 | -0.0001 | 0.0000 | -0.0003 | 0.0000 | -0.0001 | 0.0000 | ... | -0.0032 | -0.0031 | -0.0032 | -0.0032 | -0.0017 | -0.0017 | -0.0001 | 0.0000 | -0.0001 | 0.0000 |
9 | -0.0001 | -0.0001 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | -0.0001 | -0.0001 | ... | -0.0023 | -0.0016 | -0.0016 | -0.0019 | 0.0000 | -0.0001 | 0.0000 | 0.0000 | -0.0003 | 0.0000 |
10 | 0.0000 | 0.0000 | 0.0000 | -0.0001 | 0.0000 | -0.0001 | -0.0001 | -0.0001 | 0.0000 | -0.0001 | ... | -0.0032 | -0.0033 | -0.0032 | -0.0033 | -0.0017 | -0.0016 | -0.0017 | -0.0019 | -0.0015 | -0.0017 |
11 | 0.0000 | 0.0000 | -0.0001 | 0.0000 | -0.0001 | -0.0001 | -0.0001 | 0.0000 | 0.0000 | 0.0000 | ... | -0.0016 | -0.0017 | -0.0017 | -0.0016 | 0.0000 | 0.0000 | 0.0000 | -0.0001 | 0.0000 | -0.0001 |
5 rows × 96 columns
In [13]:
use_data[-5:]
Out[13]:
p1 | p2 | p3 | p4 | p5 | p6 | p7 | p8 | p9 | p10 | ... | p87 | p88 | p89 | p90 | p91 | p92 | p93 | p94 | p95 | p96 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
458 | -0.0012 | -0.0012 | -0.0011 | -0.0011 | -0.0011 | -0.0011 | -0.0011 | -0.0013 | -0.0012 | -0.0013 | ... | -0.0011 | -0.0011 | -0.0012 | -0.0012 | -0.0012 | -0.0011 | -0.0012 | -0.0011 | -0.0012 | -0.0012 |
459 | -0.0012 | -0.0011 | -0.0012 | -0.0012 | -0.0011 | -0.0012 | -0.0012 | -0.0011 | -0.0011 | -0.0011 | ... | -0.0033 | -0.0036 | -0.0011 | -0.0013 | -0.0011 | -0.0011 | -0.0011 | -0.0011 | -0.0011 | -0.0011 |
460 | -0.0012 | -0.0011 | -0.0012 | -0.0012 | -0.0011 | -0.0011 | -0.0011 | -0.0011 | -0.0012 | -0.0011 | ... | -0.0011 | -0.0012 | -0.0012 | -0.0012 | -0.0012 | -0.0011 | -0.0011 | -0.0011 | -0.0011 | -0.0011 |
461 | -0.0012 | -0.0012 | -0.0011 | -0.0011 | -0.0012 | -0.0011 | -0.0011 | -0.0012 | -0.0011 | -0.0011 | ... | -0.0011 | -0.0013 | -0.0011 | -0.0012 | -0.0011 | -0.0012 | -0.0012 | -0.0011 | -0.0012 | -0.0012 |
462 | -0.0011 | -0.0011 | -0.0011 | -0.0011 | -0.0011 | -0.0012 | -0.0011 | -0.0012 | -0.0011 | -0.0011 | ... | -0.0012 | -0.0011 | -0.0012 | -0.0011 | -0.0012 | -0.0012 | -0.0011 | -0.0011 | -0.0011 | -0.0011 |
5 rows × 96 columns
In [14]:
# 生成日期范围(484天) dates = pd.date_range(start='2022-01-03', periods=484, freq='D') # 生成每日的96个时间点(15分钟间隔) time_offsets = pd.timedelta_range(start='0min', periods=96, freq='15min')
In [15]:
# 创建完整的时间索引 datetime_index = dates.repeat(96) + np.tile(time_offsets, len(dates))
In [16]:
# 展平数据并创建Series data_series = pd.Series(use_data.values.flatten(), index=datetime_index) # 处理负值 data_series = data_series.clip(lower=0) # 按小时重采样求和 hourly_data = data_series.resample('h').sum().to_frame().reset_index() # 结果展示 hourly_data.head()
Out[16]:
index | 0 | |
---|---|---|
0 | 2022-01-03 00:00:00 | 0.0 |
1 | 2022-01-03 01:00:00 | 0.0 |
2 | 2022-01-03 02:00:00 | 0.0 |
3 | 2022-01-03 03:00:00 | 0.0 |
4 | 2022-01-03 04:00:00 | 0.0 |
In [18]:
hourly_data
Out[18]:
index | 0 | |
---|---|---|
0 | 2022-01-03 00:00:00 | 0.0 |
1 | 2022-01-03 01:00:00 | 0.0 |
2 | 2022-01-03 02:00:00 | 0.0 |
3 | 2022-01-03 03:00:00 | 0.0 |
4 | 2022-01-03 04:00:00 | 0.0 |
... | ... | ... |
11611 | 2023-05-01 19:00:00 | 0.0 |
11612 | 2023-05-01 20:00:00 | 0.0 |
11613 | 2023-05-01 21:00:00 | 0.0 |
11614 | 2023-05-01 22:00:00 | 0.0 |
11615 | 2023-05-01 23:00:00 | 0.0 |
11616 rows × 2 columns
In [31]:
hourly_data.columns = ['time', 'power']
In [32]:
import matplotlib.pyplot as plt
In [35]:
plt.plot(hourly_data.power[:500])
Out[35]:
[<matplotlib.lines.Line2D at 0x77d18f188fd0>]
In [36]:
hourly_data.to_csv('pv_data_hourly.csv', index=False, encoding='utf-8-sig')
In [ ]:
In [ ]: