【问题标题】:Generate daily time series date from monthly usage with python使用python从每月使用情况生成每日时间序列日期
【发布时间】:2022-11-21 21:51:12
【问题描述】:

我有一个城市大约两年的每月燃气使用量,我想生成与每月使用量相等的每日使用量并保持时间序列形状,但我不知道该怎么做。

这是我的数据链接 [1]

【问题讨论】:

  • 澄清一下,您想从每月使用量中插入每日使用量?此外,请将源数据重新发布为文本不是图像。图像很难复制和粘贴。
  • 是的,我想从每月使用量中插入每日使用量。这是使用数据链接:shorturl.at/syDJ0
  • 请提供足够的代码,以便其他人可以更好地理解或重现问题。
  • 太好了,感谢您的确认和数据集。请看下面的答案。

标签: python numpy random time-series generate


【解决方案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'}})

【讨论】:

  • 感谢您的代码。如果我想要更自然的使用(大多数天数相同,我希望每天使用不同)我应该怎么做?
  • 我的荣幸。如果您想要更“自然”的使用,则需要提高录音设备的采样率。如果你想通了;例如,超过 10 天的使用量为 1000,即每天插入 100 个单位,并且全部天将分配 100 个单位的平均使用量。
  • 我有 6 年的月度数据。如何提高采样率?我的第二个问题是,您的代码生成的数据第一行有一个 Nan 单元格;如何填写?
【解决方案2】:

是否尝试过在 De Prado (2019) Machine leraning advances in finance 中编译的分数差? 假设 1/30 .idk ,可以将 mouthly 基础部分地区分为 daily one.kinda ,但只是分享一个想法......

祝你有美好的一天^ ^

【讨论】:

  • 这看起来像是评论而不是完整的答案。一旦你有足够的声誉,你就可以对这个问题发表评论。您可能希望使用您建议的方法来使用提供的数据集构建答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 2021-01-26
相关资源
最近更新 更多