Python Seaborn:如何处理历史值和预测值之间的差距?
我无法解释历史数据和预测之间的差距。 蓝色是历史性的。橙色是具有未来值的林林回归预测 Dataframe df是列为year、pax、RealGDPLP的培训数据集。 Dataframe FutureValCPs有year和RealGDPLP列 你如何解释它不是连续的(在其他情况下是连续的)? OLS结果见附件。有什么迹象吗 多谢各位Python Seaborn:如何处理历史值和预测值之间的差距?,python,regression,seaborn,Python,Regression,Seaborn,我无法解释历史数据和预测之间的差距。 蓝色是历史性的。橙色是具有未来值的林林回归预测 Dataframe df是列为year、pax、RealGDPLP的培训数据集。 Dataframe FutureValCPs有year和RealGDPLP列 你如何解释它不是连续的(在其他情况下是连续的)? OLS结果见附件。有什么迹象吗 多谢各位 由于没有数据、代码和用于生成绘图的图形引擎的详细信息,因此很难绝对确定。但与历史数据相比,你的预测似乎非常好,因为它至少预测了你未来价值的平稳增长。如果蓝线代表
由于没有数据、代码和用于生成绘图的图形引擎的详细信息,因此很难绝对确定。但与历史数据相比,你的预测似乎非常好,因为它至少预测了你未来价值的平稳增长。如果蓝线代表整个数据集,那么使用OLS就真的没什么可说的了 曲线图中存在间隙的原因是,曲线图中的两条线是两条不同的线,在历史值和预测值之间的转换中不共享一个共同的时间戳。有很多方法可以在视觉上弥补这一点,但正如我所提到的,我不知道您是如何估计模型或生成此图的 编辑:基于OP的更多信息的扩展答案:
import seaborn as sns
import pandas as pd
sns.set_style("darkgrid")
plt.xticks(rotation=45)
#sns.set_xticklabels(rotation=45)
%matplotlib inline
df_historic = pd.DataFrame({'dates': pd.date_range("20200101", periods=7),
'historic': [1,2,3,3,6,4,8]}).set_index('dates')
df_forecast = pd.DataFrame({'dates': pd.date_range("20200108", periods=7),
'forecast': [6,7,8,9,10,11,12]}).set_index('dates')
df=pd.merge(df_historic, df_forecast, how='outer', left_index=True, right_index=True)
#df['forecast'].loc['2020-01-07']=8.0
df['historic'].loc['2020-01-08']=6.0
for column in df.columns:
g=sns.lineplot(x=df.index, y=df[column])
g.set_xticklabels(labels=df.index, rotation=-20)
这应该类似于您在绘图方面的问题:
我假设以下数据框将代表您的情况:
historic forecast
dates
2020-01-01 1.0 NaN
2020-01-02 2.0 NaN
2020-01-03 3.0 NaN
2020-01-04 3.0 NaN
2020-01-05 6.0 NaN
2020-01-06 4.0 NaN
2020-01-07 8.0 NaN
2020-01-08 NaN 6.0
2020-01-09 NaN 7.0
2020-01-10 NaN 8.0
2020-01-11 NaN 9.0
2020-01-12 NaN 10.0
2020-01-13 NaN 11.0
2020-01-14 NaN 12.0
我认为这对于历史和预测值的系列来说是一个非常自然的情况;没有理由认为它们之间不存在视觉上的差距。现在,一种视觉补救方法是将2020-01-08
指数处的6.0
预测值纳入历史
系列,或将2020-01-08
指数处的历史值8纳入预测。您可以使用df['forecast'].loc['2020-01-07']=8.0
或df['historic'].loc['2020-01-08']=6.0
。当然,通过编程方式确定插入值和索引可以更顺利地完成这项工作。但不管怎样,结果都是这样的:
完整代码:
import seaborn as sns
import pandas as pd
sns.set_style("darkgrid")
plt.xticks(rotation=45)
#sns.set_xticklabels(rotation=45)
%matplotlib inline
df_historic = pd.DataFrame({'dates': pd.date_range("20200101", periods=7),
'historic': [1,2,3,3,6,4,8]}).set_index('dates')
df_forecast = pd.DataFrame({'dates': pd.date_range("20200108", periods=7),
'forecast': [6,7,8,9,10,11,12]}).set_index('dates')
df=pd.merge(df_historic, df_forecast, how='outer', left_index=True, right_index=True)
#df['forecast'].loc['2020-01-07']=8.0
df['historic'].loc['2020-01-08']=6.0
for column in df.columns:
g=sns.lineplot(x=df.index, y=df[column])
g.set_xticklabels(labels=df.index, rotation=-20)
我希望这有帮助 谢谢你,维斯特兰。我添加了一些我可以发布的信息。这有用吗?我如何纠正这种形象化?我手工计算,数值为真。@ShuFFle2207我明天再看。@ShuFFle2207您在这里使用matplotlib吗?也许是阴谋?我只是天生的阴谋家。matplib inline也在使用。@ShuFFle2207啊,是的,我现在看到了你代码的
sns
部分。我来看看。