繁体   English   中英

用熊猫和statsmodels预测未来

[英]Predicting the future with pandas and statsmodels

我需要做的是用这些“要求”绘制未来温度:“假设温度大致是二氧化碳排放的线性函数,从最近的数据点估计线性函数的系数(使用过去的2很好,就像使用如果你想要更彻底的话,过去10个左右。)此外,假设二氧化碳排放量的增长率将与现在相同(即2016年的二氧化碳排放量比2015年多X吨,2017年的二氧化碳排放量将比2016年增加X吨)“。

我有2个数据集,一个是每年每个月的温度,另一个是每年的碳水平。

(发布合并并缩短了一个,因为它不是那么大,但如果它更有帮助看到它们未经修改然后我也可以发布它,你可以看到它如何完成下面我发布我的代码)

Year    Carbon    June

2000    6727  20.386
2001    6886  20.445
2002    6946  20.662
2003    7367  20.343
2004    7735  20.242
2005    8025  20.720
2006    8307  20.994
2007    8488  20.661
2008    8738  20.657
2009    8641  20.548
2010    9137  21.027
2011    9508  20.915
2012    9671  21.172

到目前为止我所做的是将两个数据集合并在一起,然后尝试预测未来几年的温度,我将其限制在2000年至2012年,只是为了简化它并确保两个表具有相同的长度因为一张桌子比另一张桌子长。 我对python和整体编码很新,我不知道如何做到这一点,下面你可以看到我试过的东西:

data1 = pd.read_csv("co2.csv", sep=',')
data2 = pd.read_csv("temperature.csv", sep=',')

data1 = data1.set_index('Year')
data2 = data2.set_index('Year')

data3 = data1.loc["2000":"2012"]

data4 = data2.loc["2000":"2012"]

data4 = data4.loc[:, "June":"June"]

data5 = pd.merge(data3,data4, how= 'left', left_index =True , right_index=True)

x = data5["Carbon"]

y = data5["June"]

model = sm.OLS(y,x).fit()

prediction = model.predict(x)

prediction.plot()


plt.show()

方法OLS.predict不将x作为参数而是模型参数(最终是外生数据)。 此外,您必须向X添加常量,否则它会强制线性回归通过原点。 这是一个例子:

import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
from StringIO import StringIO

data = StringIO("""
Year Carbon June
2000 6727 20.386
2001 6886 20.445
2002 6946 20.662
2003 7367 20.343
2004 7735 20.242
2005 8025 20.720
2006 8307 20.994
2007 8488 20.661
2008 8738 20.657
2009 8641 20.548
2010 9137 21.027
2011 9508 20.915
2012 9671 21.172
""")

# Model training
df = pd.read_table(data, index_col=0, sep='\s+')
Y_train = df['June']
X_train = df['Carbon']
X_train = sm.add_constant(X_train) # add this to your code
model = sm.OLS(Y_train, X_train)
results = model.fit()

# Prediction of future values
future_carbon = range(9700, 10000, 50)
X_pred = pd.DataFrame(data=future_carbon, columns=['Carbon'])
X_pred = sm.add_constant(X_pred)
prediction = model.predict(results.params, X_pred)

# Plot
plt.figure()
plt.plot(X_train['Carbon'], model.predict(results.params), '-r', label='Linear model')
plt.plot(X_pred['Carbon'], prediction, '--r', label='Linear prediction')
plt.scatter(df['Carbon'], df['June'], label='data')
plt.xlabel('Carbon')
plt.ylabel('June temperature')
plt.legend()
plt.show()

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM