背景信息
AQI(Air Quality Index),指空气质量指数,用来衡量空气清洁或污染的程度。值越小,表示空气质量越好。近年来,因为环境问题,空气质量也越来越受到人们的重视。
任务说明
我期望能够对全国城市空气质量进行研究与分析,希望能够解决如下疑问:
- 哪些城市的空气质量较好/较差?
- 临海城市是否空气质量优于内陆城市?
- 空气质量主要受哪些因素影响?
- 全国城市的空气质量总体情况如何?
- 是否可以预测城市的空气质量?
- 是否可以预测城市是否临海?
数据集描述
2015年全国空气质量指数数据集。该数据集包含全国主要城市的相关数据以及空气质量指数。
数据清洗
对原始数据进行缺失值、异常值、重复值的处理。
哪些城市的空气质量较好/较差?
空气质量的好坏可以为我们以后选择工作,旅游等地提供参考。
2015年空气质量最好的五个城市为韶关市、南平市、梅州市、基隆市、三明市,
2015年空气质量最差的五个城市为北京市、朝阳市、保定市、锦州市、焦作市。
临海城市是否空气质量优于内陆城市?
首先来统计下临海城市与内陆城市的数量,然后来观察一下临海城市与内陆城市的散点分布,再来分组计算空气质量的均值。
柱形图仅能进行均值对比,可以使用箱线图来显示更多的信息,也可以绘制小提琴图,除了能够展示箱线图的信息外,还能呈现出分布的密度。
可以看出,临海城市的空气质量整体上好于内陆城市。
空气质量主要受哪些因素影响?
从结果中可知,空气质量指数主要受降雨量(-0.40)与纬度(0.55)影响。
降雨量越多,空气质量越好;纬度越低,空气质量越好。
查看全国城市的空气质量总体情况
绘制全国各城市的空气质量指数的散点图。
从结果可以发现,从大致的地理位置上看,西部城市好于东部城市,南部城市好于北部城市。
关于空气质量的假设检验
江湖传闻,全国所有城市的空气质量指数均值在71左右,可靠吗?
运用t检验进行判断,这里通过scipy提供的相关方法来进行t检验的计算。
In: from scipy import stats
stats.ttest_1samp(data["AQI"], 71)
Out: Ttest_1sampResult(statistic=1.8117630617496872, pvalue=0.07095431526986647)
可以看到,偏离均值不足1.96倍的标准差,P值大于5%,我们无法拒绝原假设。因此,江湖传闻还是有一定依据的。
对空气质量指数进行预测
对于某城市,如果我们已知降雨量,温度,经纬度等指标,是否能够预测该城市的空气质量指数呢?
可以通过对以往的数据,建立线性回归的算法,应用于未知的数据,进而预测结果。
In: from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
X = data.drop(["City","AQI"], axis=1)
y = data["AQI"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
lr = LinearRegression()
lr.fit(X_train, y_train)
display(lr.coef_)
display(lr.intercept_)
display(lr.score(X_train, y_train))
display(lr.score(X_test, y_test))
Out: array([-1.48532488e-02, 1.71080407e-03, 2.86391533e+00, -2.31034144e+00,
5.28484647e+00, -2.34234723e-02, -2.73893202e-04, -2.48823129e+00,
-5.79124501e-01, 3.32021411e-02])
169.0803390043298
0.46833945311548286
0.307483089404762
对是否临海进行预测
对于某城市,假设是否临海未知,但知道其他信息,我们试图使用其他信息,来预测该城市是否临海。
这里使用逻辑回归的算法进行分类预测。
In: from sklearn.linear_model import LogisticRegression
X = data.drop(["City","Coastal"], axis=1)
y = data["Coastal"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
lr = LogisticRegression(C=0.0001)
lr.fit(X_train, y_train)
display(lr.coef_)
display(lr.intercept_)
display(lr.score(X_train, y_train))
display(lr.score(X_test, y_test))
Out: array([[-0.01099238, -0.00064977, -0.00011361, 0.00423962, 0.01522801,
0.00077293, -0.02448935, -0.00021761, 0.01192953, 0.00619237]])
array([8.55223462e-05])
0.871900826446281
0.8148148148148148
总结
- 临海城市的空气质量整体上好于内陆城市。
- 降雨量与纬度对空气质量指数的影响较大。
- 空气质量总体分布上来说,南部城市优于北部城市,西部城市优于东部城市。
- 通过历史数据,我们可以对空气质量指数进行预测。
- 通过历史数据,我们可以对城市是否临海进行预测。