#-*- coding = utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn import linear_model
import warnings
import math
from keras.models import Sequential
from keras.layers import Dense
from sklearn.linear_model import LinearRegression
from sklearn import model_selection
import timeit as ti
import os
from statsmodels.tsa.deterministic import DeterministicProcess
beep = lambda x: os.system("echo -n '\a';sleep 0.2;" * x) # Alert when code finishes running
epoch = 45
colnames = ['dt', 'LandAndOceanAverageTemperature', 'LandAndOceanAverageTemperatureUncertainty']
newnames = ['dt', 'at', 'atu']
datatypes = {'dt': 'str','at':'float32','atu':'float32'}
df0 = pd.read_csv("GlobalTemperatures.csv",
usecols = colnames,
dtype = datatypes)
df0.columns = newnames
df0 = df0[pd.notnull(df0['at'])]
df0['year'] = df0['dt'].map(lambda x: int(x.split('-')[0]))
df0['month'] = df0['dt'].map(lambda x: int(x.split('-')[1]))
df0['dt'] = df0['dt'].map(lambda x: str(x.rsplit('-',1)[0]))
df0Annual=df0.groupby('year').mean()
df0Annual=df0Annual.drop('month',axis=1)
plt.figure(figsize=(8,6))
plt.scatter(df0Annual.index, df0Annual['at'], s=40, c='green', alpha=0.5, linewidths=0, label='Average Global Temperature')
plt.legend(loc='upper left')
plt.xlabel('Year')
plt.ylabel('Temperature')
plt.title('Average Annual Global Temperature')
plt.savefig('s1.png')
plt.show()
df0=df0.loc[df0['year']>=1850]
df0Annual=df0Annual.loc[df0Annual.index>=1850]
def addpolynomialfeatures(subX, x):
subX['x2'] = x**2
subX['x3'] = x**3
subX['x4'] = x**.5
# subX['x5'] = np.sin(x)
# subX['x6'] = np.cos(x)
subX['x8'] = np.log(x)
X = pd.DataFrame(df0Annual.index)
addpolynomialfeatures(X, X['year'])
y = pd.DataFrame(df0Annual['at'])
X.index = X['year']
Xy = pd.concat([X,y], axis=1)
regresor = linear_model.LinearRegression()
regresor2 = linear_model.BayesianRidge(compute_score=True)
regresor2.fit(X, pd.DataFrame(y).values.ravel())
predict2 = regresor2.predict(X)
regresor.fit(X,pd.DataFrame(y).values.ravel(),5000)
predict = regresor.predict(X)
# print('Coefficients: \n', regresor.coef_)
# print("Mean of error: %.2f" % np.mean((predict - y) ** 2))
plt.figure(figsize=(8,6))
plt.scatter(df0Annual.index, df0Annual['at'], s=40, c='green', alpha=0.5, linewidths=0, label='Annual Average Temp')
for i in range(50):
sample = Xy.sample(n=40) #randomly sample 40 points
X_test = sample[Xy.columns[:-1]]
y_test = sample[Xy.columns[-1]]
regresor.fit(X_test,y_test)
predict = regresor.predict(X)
plt.plot(df0Annual.index, predict, c='cyan', alpha=0.1, linewidth=2.)
plt.legend(loc='upper left')
plt.xlabel('Year')
plt.ylabel('Temperature in Celsius')
plt.title('Mean of temperature by years')
#plt.savefig('AnnualGlobalTemperature_LinReg.png')
graph = df0Annual['at'].reset_index()
graph = graph.set_index('year')
graph = graph.fillna(0)
plt.figure(figsize=(8,6))
graph.plot()
plt.legend(loc='upper left')
plt.xlabel('Year')
plt.ylabel('Temperature')
plt.title('Average Annual Global Temperature')
fig=plt.gcf()
fig.set_size_inches(18,8)
#plt.show()
# convert an array of values into a dataset matrix
def create_dataset(dataset, look_back=1):
dataX, dataY = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i + look_back), 0]
dataX.append(a)
dataY.append(dataset[i + look_back, 0])
return np.array(dataX), np.array(dataY)
# fix random seed for reproducibility
np.random.seed(10)
# preview the dataset
# Split train and test sets
data=df0Annual
totLen=len(data)
train_size = int(totLen * 0.8)
test_size = totLen - train_size
train, test = data[0:train_size], data[train_size:totLen]
#print('train',len(train),', test',len(test))
#Setup input data for autoregression for chosen look_back
# re-shape dataset for autoregression
# nvars=2
# look_back=6
# trainX = np.zeros((len(train)-look_back-1, 2*look_back))
# trainY = np.zeros((len(train)-look_back-1, nvars))
# testX = np.zeros((len(test) -look_back-1, 2*look_back))
# testY = np.zeros((len(test) -look_back-1, nvars))
#
# for col in train.columns: #iterating over input variables at, atu
# ii=train.columns.get_loc(col) #index of column (at, atu)
# jj=ii*look_back # index for nvars*look_back columns
# #print(ii,'jj=',jj, col)
# # input to create_dataset should be a series of single numbers
# trainX[:,jj:jj+look_back] , trainY[:,ii] = create_dataset(train.values[:,[ii]], look_back)
# testX [:,jj:jj+look_back] , testY [:,ii] = create_dataset( test.values[:,[ii]], look_back)
# trainY = trainY[:,0] #model ouputs just 'at'
# testY = testY[:,0]
#
# #Train the model
# # create and fit Multilayer Perceptron model
# # inputs are at and atu for prior times (t0-1, t0-2,...)
# # output is 'at' at the to
#
# startTimer = ti.default_timer()
# model = Sequential()
# model.add(Dense(12, input_dim=2*look_back, activation='relu'))
# model.add(Dense(8, activation='relu'))
# model.add(Dense(1))
# model.compile(loss='mean_squared_error', optimizer='adam')
# model.fit(trainX, trainY, epochs=30, batch_size=2, verbose=2)
# stopTimer = ti.default_timer()
# # beep(3);
#
# # Estimate model performance
# print('(12,8,1) relu MLP with look_back=',look_back)
# # Time to train
# Time2train = round(stopTimer - startTimer,3)
# print('Time2train = ',Time2train)
# trainScore = model.evaluate(trainX, trainY, verbose=0)
# print('Train Score: %.2f MSE (%.2f RMSE)' % (trainScore, math.sqrt(trainScore)))
# testScore = model.evaluate(testX, testY, verbose=0)
# print('Test Score: %.2f MSE (%.2f RMSE)' % (testScore, math.sqrt(testScore)))
#
# # generate predictions for training
# trainPredict = model.predict(trainX)
# testPredict = model.predict(testX)
#
# # Create datasets for plotting
# data=df0Annual[['at']]
# trainDf = pd.DataFrame(np.nan, index=data.index, columns=data.columns)
# trainDf.iloc[look_back:len(trainPredict)+look_back] = trainPredict
#
# testDf = pd.DataFrame(np.nan, index=data.index, columns=data.columns)
# testDf.iloc[len(trainPredict)+(look_back*2)+1:len(data)-1, :] = testPredict
#
# # trainDf.head(7)
# # testDf.tail(7)
#
# trainPredictPlot = trainDf
# testPredictPlot = testDf
# predictDf = testPredictPlot[['at']] #later, merge trainPredictPlot
# atuVal=df0Annual.loc[2005:2015,'atu'].mean()*2
# #print(predictDf)
# # aaaass = []
# #aaaass = predictDf.iloc[:, 0].value
# # Make predictions out 40 years
# for year in range(2013,2205):
# inputL=[]
# inputL[0:look_back]=np.array(predictDf.loc[year-look_back:year-1]).T[0]
#
# inputL[look_back:2*look_back]=[atuVal]*look_back
# inputL=np.array(inputL, dtype=float).reshape((-1, 2*look_back))
# outVal=model.predict(inputL)[0][0]
# predictDf.loc[year,'at']=outVal
# predictDf = predictDf.loc[2013:]
# print(predictDf)
# # plot baseline and predictions
# plt.figure(figsize=(8,6))
# plt.plot(data,label='original')
# plt.plot(trainPredictPlot,label='train')
# plt.plot(testPredictPlot,color='red',label='test')
# plt.plot(predictDf,color='green',label='forecast')
# plt.legend(loc='upper left')
# plt.xlabel('Year')
# plt.ylabel('Temperature')
# plt.title('Global Avg Annual Temperature \n' + \
# '(12,8,1) relu MLP with look_back='+ str(look_back) + '\n' + \
# 'Train Score: %.2f MSE (%.2f RMSE)' % (trainScore, math.sqrt(trainScore)) + '\n' + \
# 'Test Score: %.2f MSE (%.2f RMSE)' % (testScore, math.sqrt(testScore)) )
# plt.savefig('GlobalTemperatureMLP.png')
# plt.show()
#第二个模型
# re-shape dataset for autoregression
nvars=2
look_back=12
trainX = np.zeros((len(train)-look_back-1, 2*look_back))
trainY = np.zeros((len(train)-look_back-1, nvars))
testX = np.zeros((len(test) -look_back-1, 2*look_back))
testY = np.zeros((len(test) -look_back-1, nvars))
for c
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
forcast.rar (2个子文件)
forcast
GlobalTemperatures - 副本.csv 201KB
Forcast.py 13KB
共 2 条
- 1
资源评论
阿弔
- 粉丝: 2
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功