2017-12-08 18 views
2

내가해야할 일은 다음과 같은 "요구 사항"으로 향후 온도를 계획하는 것입니다. "온도가 최근의 데이터 포인트에서 선형 함수의 계수를 추정하는 CO2 방출의 대략 선형 함수라고 가정합니다. (을 사용하여 과거 2는 괜찮습니다. 과거 10 대를 사용하는 것이 더 철저한 경우입니다.) 또한 CO2 배출량 증가율은 오늘과 동일하게 이 될 것이라고 가정합니다. 즉, 2015 년 X 톤의 CO2 배출량이 2015 년에 보다 많으면 2016 년보다 X 톤 더 많은 CO2 배출량이있을 것입니다. "팬더와 통계 모델로 미래 예측하기

데이터 세트가 2 개 있습니다. 한 세트에 1 년에 한 번씩 온도가 있고, 한 세트에 연간 탄소 레벨이 있습니다.

은 (병합과 그렇게 큰되지 하나를 아래로 단축를 게시하지만, 만약 그 나뿐만 아니라, 당신은 내가 내 코드를 게시하는 곳 바로 아래 수행하는 방법을 볼 수 게시 할 수 있습니다 후 수정되지 않은 그들을보고 더 도움)

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 

내가 지금까지해온 것은 두 데이터 세트를 병합 한 다음 향후 1 년 동안 온도를 예측하려고하는 것인데, 나는 단순화 된 것으로 만들기 위해 2000-2012로 제한했다. 표는 한 표가 다른 표보다 길 때와 길이가 같습니다. 나는 파이썬과 전체 코딩 꽤 새로운 오전 난 당신이 내가 지금까지 시도한 것을 볼 수 아래,이 작업을 수행하는 방법을 몰라 :

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

감사합니다! 나는 이것이 내가 필요한 것임을 확신한다. 그냥 조금 수정해야합니다. D 한 가지 질문입니다. 알려진 데이터를 지나치게 만드는 방법은 무엇입니까? 당신의 그림에서 사물은 마지막으로 알려진 데이터에서 멈 춥니 다. (예 : 미래의 데이터를 예측할 때) – cryseth

+1

@cryseth'predict' 방법의 외인성 데이터는 미래의 데이터를 포함한 모든 데이터를 참조 할 수 있습니다. – Delforge

+0

고마워요.하지만 정말로 그럴 일은 없습니다. 빠른 예를 들기가 가능합니까? 지금까지 도움을 주셔서 대단히 감사합니다. – cryseth