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

qacovj5a  于 2023-05-12  发布在  其他
关注(0)|答案(1)|浏览(89)

我在pandas中有一个时间序列,其间有一个很大的差距,我想用类似于现有数据的相同形状和趋势的“合成”数据来填补这个差距。
我尝试过的一些方法是线性、三次、样条插值,但是数据的噪声和一般形状消失了。它几乎只是绘制一条穿过所有空值的线。
下面是数据图表。有没有图书馆可以创建这些数据?

kognpnkq

kognpnkq1#

您可以尝试使用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))

相关问题