使用与原始数据形状相似的合成数据填充时序 pandas 数据帧

Fill time series pandas dataframe with synthetic data that has a similar shape as the original data

提问人:ortunoa 提问时间:5/11/2023 更新时间:5/16/2023 访问量:97

问:

我有一个熊猫的时间序列,中间有很大的差距,我想用类似于现有数据的相同形状和趋势的“合成”数据来填补这个空白。

我尝试过的一些方法是线性、三次、样条插值,但数据的噪声和一般形状已经消失了。它几乎只会在所有空点上绘制一条线。

下面是数据图表。有没有可以创建此数据的库?

enter image description here

python pandas null

评论

0赞 It_is_Chris 5/11/2023
我们能否获得一些示例数据来重新创建图形?

答:

1赞 It_is_Chris 5/11/2023 #1

您可以尝试使用Prophet创建一些未来的预测来填补缺失的数据。这是假设您的缺失数据不是,并且所有缺失的数据都是连续的。NaN0

这只是一个简单的例子,您可能需要调整季节性以获得更好的贴合度。

import pandas as pd
import numpy as np
from prophet import Prophet


# sample data
np.random.seed(0)
arr = np.random.randint(1, 200, 100)
df = pd.DataFrame(arr, columns=['y'])
df['ds'] = pd.date_range('2023-01-1', periods=100)
df.iloc[50:90, 0] = np.nan
og_df = df.copy()

# find first nan and create a train dataset
train = df.iloc[:df['y'].isna().idxmax()]
# find the number of periods to predict
periods = sum(df['y'].isna())

# fit your model, create a future DataFrame, and forecast
# add seasonality based on your actual data to get a better fit
m = Prophet()
m.fit(train)
future = m.make_future_dataframe(periods=periods)  # add freq param if not using daily: freq='1h'
forecast = m.predict(future)

# assign your forecasted data to the original frame
missing_data = forecast.iloc[df['y'].isna().idxmax():][['ds', 'yhat']].rename(columns={'yhat': 'y'})
df.loc[df['y'].isna()] = missing_data

# sample plot
og_df.plot(x='ds', y='y', ylim=(0,500))
df.plot(x='ds', y='y', ylim=(0,500))

enter image description here

0赞 SeaEngineering 5/16/2023 #2

如果您希望下一帧数据具有与现有数据相同的行为,则可以尝试使用 TimeGAN 生成数据来替换缺失的间隙。您可以尝试一下 ydata-synthetic