  # -*- coding: utf-8 -*-
"""
Created on Sat Jun 13 09:49:18 2020

@author: EBADI
"""
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
excel_path = './RF.xls'
excel_writer = pd.ExcelWriter(excel_path)

dataset = pd.read_csv('C:/Users/Farinaz/Desktop/all_variables_300/obseve/train_observ.csv')
dataset.head()
x = dataset.iloc[:,[3,4,5,6,7,8,9,10,11,12]].values
y = dataset.iloc[:,[2]].values

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split (x,y,test_size = 0.30)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.fit_transform(X_test)

from sklearn.ensemble import RandomForestRegressor

regressor = RandomForestRegressor(n_estimators = 250 ,random_state = 42, oob_score = True)
regressor.fit(X_train,y_train)
y_pred = regressor.predict(X_test)

from sklearn import metrics
print ('Mean Absolute Error:',metrics.mean_absolute_error(y_test,y_pred))
print ('Mean Squared Error:',metrics.mean_squared_error(y_test,y_pred))
print ('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test,y_pred)))
print('R^2 Training score:{:.2f}\nooB score:{:.2f} \nR^2 Validation score: {:.2f}'.format(regressor.score(X_train,y_train),regressor.oob_score_,regressor.score(X_test,y_test)))

                   #Feature importance plot
                   
importance = regressor.feature_importances_

import matplotlib.pyplot as plt ; plt.rcdefaults()

objects = ('var1','var2','var3','var4','var5','var6','var7','var8','var9','var10','var11','var12')
y_pos = np.arange(len(objects))
performance = (importance)
plt.bar(y_pos,performance,align = 'center', alpha = 0.6)
plt.xticks(y_pos, objects)
plt.ylabel('importance')
plt.title('VariableRanking For RF Regression Model')
plt.show()


               # Predict for all data

dataset_Adata = pd.read_csv('C:/Users/Farinaz/Desktop/all_variables_300/obseve/allpoint_obs.csv')
dataset_Adata.head()
x_Adata = dataset_Adata.iloc[:,[3,4,5,6,7,8,9,10,11,12]].values

from sklearn.preprocessing import StandardScaler
sc_Adata = StandardScaler()
X_train_Adata = sc_Adata.fit_transform(x_Adata)
y_pred_Adata = regressor.predict(X_train_Adata) 

                      #ROC and AUC 
                      
import sklearn.metrics as metrics
fpr,tpr,threshold = metrics.roc_curve(y_test,y_pred)
roc_auc = metrics.auc(fpr,tpr)

plt.title('Receiver Operation Characteristic ')
plt.plot(fpr,tpr,'r',label='AUC = %0.2f' % roc_auc)
plt.legend(loc = 'lower right')
plt.plot([0,1],[0,1],'b--')
plt.xlim([0,1])
plt.ylim([0,1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()


colum0 = []

for i in y_pred_Adata:
    colum0.append(i)


data = {'0':colum0}
data = pd.DataFrame(data)
data.to_excel(excel_writer)
excel_writer.save()
                      
#save all data array to excel for ArcGIS join Process
            
#df = pd.DataFrame(y_pred_Adata)
#df.transpose()
#df.to_excel('C:\Users\EBADI\Desktop\myP\modelOutput.xlsx',startcol=0 ,header=True,index =True)




