2017-12-08 13 views
2

私がしなければならないことは、これらの「必要条件」を使って将来の温度をプロットすることです:「最近のデータポイントから一次関数の係数を推定する(を使用して、過去2回は正常です。より徹底したい場合は、過去10回程度を使用しています)。 さらに、CO2排出量の増加率は今日と同じ すなわち、2015年にXトンのCO2排出量が2015年には よりも多い場合、2017年に2016年に比べてXトンのCO2排出量が増加する)」パンダと統計モデルで未来を予測する

私は2つのデータセットを持っています.1つは年に毎月温度があり、もう1つは年間炭素レベルです。

は(マージされ、そのことは大きなないとして1を下に短縮しましたが、もしその私も、あなたはそのiが私のコードをポストどこ下に行わどのように見ることができることを投稿することができ、その後変更されていないそれらを見ることがより有用)

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 

私がこれまで行ってきたことは、2つのデータセットをまとめて将来の1年間の温度予測を試みることです。私はそれをシンプレラーにして、表の長さは一方の表の長さと他方の表の長さと同じです。私は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() 
+0

あなたは 'R'と' Rstudio'から聞いたことがありますか?データを扱う素晴らしいプログラム! –

+0

私は持っていませんが、私はそれをチェックします:D – cryseth

+0

この宿題ですか?もしそうなら、ここを参照してください:https://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions – itzy

答えて

3

引数としてxを取ることはありませんOLS.predict方法が、モデルパラメータを(そして最終的には外生的なデータ)。また、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() 

enter image description here

+0

ありがとうございます!私はこれがちょうど私が必要としたものであると確信している。ちょうどそれを少し変更する必要があります:ちょうど1つの質問私はそれが過去の既知のデータに行く方法は?最後の既知のデータ(将来のデータを予測する場合のように)で停止します。 – cryseth

+1

@cryseth 'predict'メソッドの外因性データは、将来のデータを含む任意のデータを参照する可能性があります。 – Delforge

+0

ありがとう、しかし、私は本当にそれを取得しないでください。簡単な例を作ることは可能でしょうか?これまでのところ助けてくれてありがとう、私にはもっとたくさんのことがありました。 – cryseth

関連する問題