提问人:ortunoa 提问时间:5/11/2023 更新时间:5/16/2023 访问量:97
使用与原始数据形状相似的合成数据填充时序 pandas 数据帧
Fill time series pandas dataframe with synthetic data that has a similar shape as the original data
问:
我有一个熊猫的时间序列,中间有很大的差距,我想用类似于现有数据的相同形状和趋势的“合成”数据来填补这个空白。
我尝试过的一些方法是线性、三次、样条插值,但数据的噪声和一般形状已经消失了。它几乎只会在所有空点上绘制一条线。
下面是数据图表。有没有可以创建此数据的库?
答:
1赞
It_is_Chris
5/11/2023
#1
您可以尝试使用Prophet创建一些未来的预测来填补缺失的数据。这是假设您的缺失数据不是,并且所有缺失的数据都是连续的。NaN
0
这只是一个简单的例子,您可能需要调整季节性以获得更好的贴合度。
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))
0赞
SeaEngineering
5/16/2023
#2
如果您希望下一帧数据具有与现有数据相同的行为,则可以尝试使用 TimeGAN 生成数据来替换缺失的间隙。您可以尝试一下 ydata-synthetic 。
评论