wgz_forecast/wgz_forecast(lh)/pv/matrix2series.ipynb

64 KiB
Raw Blame History

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>]
No description has been provided for this image
In [36]:
hourly_data.to_csv('pv_data_hourly.csv', index=False, encoding='utf-8-sig')
In [ ]:
 
In [ ]: