# -*- coding: utf-8 -*-
import os
import pandas as pd
import numpy as np
os.chdir('E:/MYPROJECT/PythonProject')
## 训练集
traindata=pd.read_csv("traindata.csv")
traindata_colname=list(traindata.columns) #修改列名,注意该技巧
traindata_colname[0]='hotelid'
traindata.columns=traindata_colname
## 测试集
#列名一个名称为乱码
testdata=pd.read_csv("0720.csv",sep=',') #检查数据,看分割符是否正确
testdata_colname=list(testdata.columns) #修改列名,注意该技巧
testdata_colname[0]='hotelid'
testdata.columns=testdata_colname
## 第一天预测
colnames=['notcancelcii', 'week_constant', 'working_day_constant', 'cii_ahead_sameoneweek_constant',
'cii_ahead_sametwoweeks_avg_constant', 'cii_ahead_samethreeweeks_avg_constant', 'cii_ahead_samefourweeks_avg_constant',
'simple_estimate_constant','cii_ahead_1day_1', 'cii_ahead_3days_avg_1', 'cii_ahead_7days_avg_1',
'order_ahead_lt_1days_1', 'order_ahead_lt_2days_1', 'order_ahead_lt_3days_1', 'order_ahead_lt_7days_1',
'order_ahead_lt_14days_1', 'order_alldays_1']
train_set=traindata.loc[:,colnames[1:]] #训练集选取
train_target=traindata.loc[:,colnames[0:1]] #训练集选取
testset=testdata.loc[:,colnames[1:]] #测试集选取
## 模型训练:rf
#trainset.describe() #查看数据的描述统计
#trainset.dtypes #查看各行的数据格式
from sklearn.ensemble import RandomForestRegressor
rf=RandomForestRegressor()#这里使用了默认的参数设置
#rf.fit(np.array(train_set),np.array(train_target).ravel())#进行模型的训练,形式ok
rf.fit(train_set, np.array(train_target).ravel())#进行模型的训练,形式ok
pred=rf.predict(testset)
acvalue=testdata.loc[:,colnames[0:1]]
#acvalue.to_csv('myfirst.csv')
#np.array(pred)-np.array(acvalue).ravel() #这样数据就可以作差了
#acvalue.to_csv("myfirst.csv") #这样就可以存储了
## 如何存储结果至csv
## 如何构建数据框
#酒店ID 占比/重要性 真实值 预测值(非线性)
acvalue.columns=["真实值"]
result=acvalue
result['预测值(非线性)']=pd.DataFrame(pred) #转换为矩阵框
result['占比/重要新']=testdata['rate']
result['绝对误差']=abs(result['预测值(非线性)']-result['真实值'])
result['相对误差']=abs(result['预测值(非线性)']-result['真实值'])/result['真实值']
result=result.sort('占比/重要新',ascending=0)
MAE100=np.average(result['绝对误差'][0:100])
MAE500=np.average(result['绝对误差'][0:500])
MAE1w=np.average(result['绝对误差'][0:10000])
MRE100=np.average(result['相对误差'][0:100])
MRE500=np.average(result['相对误差'][0:500])
print 'output'
print 'MAE@100', MAE100
print 'MAE@500', MAE500
print 'MAE@1w', MAE1w
print 'MRE@100', MRE100
print 'MRE@500', MRE500
result.to_csv('result0720.csv')
#case
#x=pd.DataFrame({'a':[1,5,4,2],'b':[100,101,102,103]})
#x.sort('a',ascending=0)