使用 python 从每月使用情况生成每日时间序列日期
Generate daily time series date from monthly usage with python
我有一个城市大约两年的每月燃气使用量,我想生成与每月的每日使用量总和相等的每日使用量并保持时间序列形状,但我不知道该怎么做。
这是我的数据Link[1]
以下代码示例演示了使用 pandas
进行日期和数据插值。
采取以下步骤:
- 使用提供的数据集,将其读入 DataFrame。
- 计算使用数据的累计总和。
- 设置DataFrame的索引为日期,方便日期重采样。
- 按每日频率对日期重新采样。
- 计算每天的使用量。
示例代码:
# Read the CSV and convert dates to a datetime object.
path = '~/Downloads/usage.csv'
df = pd.read_csv(path,
header=0,
names=['date', 'gas_usage'],
converters={'date': pd.to_datetime})
# Calculate a cumulative sum to be interpolated.
df['gas_usage_c'] = df['gas_usage'].cumsum()
# Move the date to the index, for resampling.
df.set_index('date', inplace=True)
# Resample the data to a daily ('D') frequency.
df2 = df.resample('D').interpolate('time')
# Calculate the daily usage.
df2['daily_usage'] = df2['gas_usage_c'].diff()
df2
的示例输出:
gas_usage gas_usage_c daily_usage
date
2016-03-20 3.989903e+07 3.989903e+07 NaN
2016-03-21 3.932781e+07 4.061487e+07 7.158445e+05
2016-03-22 3.875659e+07 4.133072e+07 7.158445e+05
... ... ...
2018-02-18 4.899380e+07 7.967041e+08 1.598856e+06
2018-02-19 4.847973e+07 7.983029e+08 1.598856e+06
2018-02-20 4.796567e+07 7.999018e+08 1.598856e+06
[703 rows x 3 columns]
视觉确认
我提供了两个简单的图表来说明数据集对齐和插值。
绘图代码:
为了完整起见,粗略 绘图代码包含在下面。
from plotly.offline import plot
plot({'data': [{'x': df.index,
'y': df['gas_usage'],
'type': 'bar'}],
'layout': {'title': 'Original',
'template': 'plotly_dark'}})
plot({'data': [{'x': df2.index,
'y': df2['daily_usage'],
'type': 'bar'}],
'layout': {'title': 'Interpolated',
'template': 'plotly_dark'}})
我有一个城市大约两年的每月燃气使用量,我想生成与每月的每日使用量总和相等的每日使用量并保持时间序列形状,但我不知道该怎么做。
这是我的数据Link[1]
以下代码示例演示了使用 pandas
进行日期和数据插值。
采取以下步骤:
- 使用提供的数据集,将其读入 DataFrame。
- 计算使用数据的累计总和。
- 设置DataFrame的索引为日期,方便日期重采样。
- 按每日频率对日期重新采样。
- 计算每天的使用量。
示例代码:
# Read the CSV and convert dates to a datetime object.
path = '~/Downloads/usage.csv'
df = pd.read_csv(path,
header=0,
names=['date', 'gas_usage'],
converters={'date': pd.to_datetime})
# Calculate a cumulative sum to be interpolated.
df['gas_usage_c'] = df['gas_usage'].cumsum()
# Move the date to the index, for resampling.
df.set_index('date', inplace=True)
# Resample the data to a daily ('D') frequency.
df2 = df.resample('D').interpolate('time')
# Calculate the daily usage.
df2['daily_usage'] = df2['gas_usage_c'].diff()
df2
的示例输出:
gas_usage gas_usage_c daily_usage
date
2016-03-20 3.989903e+07 3.989903e+07 NaN
2016-03-21 3.932781e+07 4.061487e+07 7.158445e+05
2016-03-22 3.875659e+07 4.133072e+07 7.158445e+05
... ... ...
2018-02-18 4.899380e+07 7.967041e+08 1.598856e+06
2018-02-19 4.847973e+07 7.983029e+08 1.598856e+06
2018-02-20 4.796567e+07 7.999018e+08 1.598856e+06
[703 rows x 3 columns]
视觉确认
我提供了两个简单的图表来说明数据集对齐和插值。
绘图代码:
为了完整起见,粗略 绘图代码包含在下面。
from plotly.offline import plot
plot({'data': [{'x': df.index,
'y': df['gas_usage'],
'type': 'bar'}],
'layout': {'title': 'Original',
'template': 'plotly_dark'}})
plot({'data': [{'x': df2.index,
'y': df2['daily_usage'],
'type': 'bar'}],
'layout': {'title': 'Interpolated',
'template': 'plotly_dark'}})