背景:客观评价一个区域的环境质量状况,需要综合考虑各种因素之间以及影响因素与环境质量之间错综复杂的关系,此次目的是根据空气质量中SO2,NO,NO2,NOx,PM10和PM2.5的含量建立分类预测模型,实现对空气质量的评价。采用C4.5决策树进行模型构建,并评价模型效果。
6.1数据探索
首先对各个属性的数据进行可视化,看看之间是否存在某种联系。
#空气质量图
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = [u'simHei']
mpl.rcParams['axes.unicode_minus'] = False
fig=plt.figure()
plt.subplot(711)
plt.plot(data['SO2'],linewidth=2)
plt.title(u'各指标变化趋势')
plt.ylabel(u'空气质量')
#SO2分布图
plt.subplot(712)
plt.plot(data['CLASS'],'b-',linewidth=1)
# plt.title(u'SO2走势图')
plt.ylabel(u'SO2含量')
#NO
plt.subplot(713)
plt.plot(data['NO'],'r-',linewidth=1)
# plt.title(u'NO走势图')
plt.ylabel(u'NO含量')
#NO2
plt.subplot(714)
plt.plot(data['NO2'],'b-',linewidth=1)
# plt.title(u'NO2走势图')
plt.ylabel(u'NO2含量')
#NOx
plt.subplot(715)
plt.plot(data['NOx'],'y-',linewidth=1)
# plt.title(u'NOx走势图')
plt.ylabel(u'NOx含量')
#PM10
plt.subplot(716)
plt.plot(data['PM10'],'g-',linewidth=1)
# plt.title(u'PM10走势图')
plt.ylabel(u'PM10含量')
#PM2.5
plt.subplot(717)
plt.plot(data['PM2-5'],'y-',linewidth=1)
# plt.title(u'PM2-5走势图')
plt.ylabel(u'PM2-5含量')
plt.show()
结果如下:
发现SO2,NO2,NO,NOx,PM10,PM2.5与空气质量有很大的相关性,其全部可以当做特征。
6.2 数据处理
数据中不存在缺失值和异常值故不需要对数据做此部分的处理,因为我们要建立预测模型,需要有训练数据和测试数据,现在我们对数据进行切割。
#数据分割
data=data.as_matrix()
data_train=data[:int(len(data)*0.8),:]
data_test=data[int(len(data)*0.8):,:]
x_train=data_train[:,:-1]
y_train=data_train[:,-1]
x_test=data_test[:,:-1]
y_test=data_test[:,-1]
6.3 模型建立
#模型的建立
from sklearn.tree import DecisionTreeClassifieras DTC
model=DTC(criterion='entropy', max_depth=4)
model.fit(x_train,y_train)
print model.score(x_test,y_test)
#导入相关函数,可视化决策树
#导出的结果是一个dot文件,需要安装Graphviz才能将它转换为pdf或者png等格式
from sklearn.tree import export_graphviz
from sklearn.externals.six import StringIO
x_train=pd.DataFrame(x_train)
with open("tree.dot",'w') as f:
f=export_graphviz(model,feature_names=x_train.columns,out_file=f)
经几次试验,确定决策树的参数,也就是树的深度是4,结果如下:
用这个模型就可以很好的根据一些非气象因素来预测空气质量了。
数据就是python数据分析与挖掘第九章的习题。