python数据分析综合项目--空气质量指数分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python数据分析综合项目--空气质量指数分析相关的知识,希望对你有一定的参考价值。

参考技术A 近年来,我国的环境问题比较严重,很多城市出现了雾霾天气,当然也有很多城市空气依旧清新,为了研究具体的空气环境城市分布,我们采用了假设检验以及线性回归的思想对AQI(空气质量指数)进行分析和预测,其中AQI的值越大,表示空气质量越差,AQI值越小,表明空气质量越好。

1.列出空气质量优秀/较差的五个城市
2.全国空气质量分布情况
3.临海城市和内陆城市的空气质量对比
4.影响空气指数的因素
5.空气质量均值验证

City 城市名
AQI 空气质量指数
Precipitation 降雨量
GDP 城市生产总值
Temperature 温度
Longitude 经度
Latitude 纬度
Altitude 海拔高度
PopulationDensity 人口密度
Coastal 是否沿海
GreenCoverageRate 绿化覆盖率
Incineration(10,000ton) 焚烧量(10000吨)

在进行数据分析之前,我们对数据集进行观察并对其中的缺失值、重复值、异常值进行处理

我们发现降雨量数据中包含了4个缺失值,为了保证数据的精确,我们查一下降雨量的数据分布

很明显的呈现右偏分布,因此采用平均数来替代缺失值并不妥,我们这里用中位数来代替

GDP属性中检测出8条异常值,我们这里采取用极端值替换的方式,将异常值替换成最大值

数据集处理完毕之后,我们开始进行数据分析

按照AQI降序排列,选出排名前五以及后五的城市,进行可视化,结果如下

结论:空气质量较好的城市为韶关市、南平市、梅州市、基隆市、三明市,空气质量堪忧的城市分别为焦作市、锦州市、保定市、朝阳市、北京市

这里我们将AQI指数分为六个等级,并根据等级统计全国空气质量的等级情况

我们再用散点图绘制下全国的空气质量分布

结论:我国城市的空气质量集中在一级、二级和三级,高污染城市比例较低;从地理位置来看,西部城市空气质量优于东部城市,南部城市优于北部城市。

根据上面的结论我们发现,仿佛临海城市的空气质量普遍高于内陆地区,那么这个结论是否是真的呢?还需要进一步验证。

首先,我们来统计下不同地理环境的城市数量

第二步,绘制临海和内陆城市的AQI分布图

我们发现内陆城市AQI集中分布在50-100区间内,而沿海城市AQI集中分布在0-50区间,在此样本中,沿海的AQI分布低于内陆城市,但是这毕竟是样本,无法推测出总体分布情况,还需进一步探测。

第三步,统计AQI均值并绘制分布密度图

第四步,差异检验,查看内陆沿海AQI均值分布是否显著

我们先假设内陆城市和沿海城市的平均值相同

结果得出支持的概率为0.006,远低于0.05,因此我们否定原假设,选择备择假设,即内陆城市和沿海城市的平均值不相同

结论:经过分析,我们发现有超过99%的概率可以证明临海城市空气质量优于内陆城市的空气质量。

为了探究影响空气质量的具体因素,我们需要计算出两个变量之间的相关系数,以此进行判断,这里采用热力图进行可视化操作。

结论:从显示结果看出,AQI主要受降雨量和纬度的影响,其中降雨量越多,空气质量越好(0.4);纬度越低,空气质量越好(-0.55)
当然,从整个图片来看,也能发现很多变量之间的关系,比如GDP与焚烧量的正相关系数达到了0.9,温度与纬度的负相关系数达到了-0.81等。

传闻空气质量均值在71左右,这个消息是否是准确的呢?我们进行一次验证。

首先计算样本的均值

结果显示为75.334

那么总体的均值是否为71呢?这里先假设总体的均值为71,进行t检验

结论:可以看出,偏离均值1.81倍的标准差,而且p值大于0.05,我们接受原假设(即空气质量均值在71左右)另外,我们还可以计算出在置信度为95%时,空气质量均值的置信区间为70-80。

Python 多元线性回归

分析目的

分析空气中主要污染物浓度与空气指数之间的关系

分析数据

天气污染物浓度的数据集,该数据集源自天气后报网站上爬取的数据,为北京2013年10月28日到2016年1月31日的空气污染物浓度的数据。包括空气质量等级、AQI指数和当天排名。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt 
%matplotlib inline
import statsmodels.api as sm

线性回归

1.数据预处理

data = pd.read_csv("beijing.csv",index_col = 0)
data.head()
 AQI指数当天AQI排名PM25PM10So2No2CoO3
1 306 106 255 277 30 105 2.60 15
2 62 22 39 62 10 46 0.91 27
3 99 61 71 101 11 72 1.18 14
4 176 98 135 162 10 96 1.62 2
5 231 102 181 202 14 100 1.89 0
X = data.iloc[:,2:8]
X = sm.add_constant(X)
y = data.iloc[:,0]
print(X.head())
   const  PM25  PM10  So2  No2    Co  O3
1    1.0   255   277   30  105  2.60  15
2    1.0    39    62   10   46  0.91  27
3    1.0    71   101   11   72  1.18  14
4    1.0   135   162   10   96  1.62   2
5    1.0   181   202   14  100  1.89   0

2.建立模型

model1 = sm.OLS(y,X)  #建立模型
result = model1.fit() #训练模型
print(result.summary())
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                  AQI指数   R-squared:                       0.963
Model:                            OLS   Adj. R-squared:                  0.963
Method:                 Least Squares   F-statistic:                     3549.
Date:                Thu, 02 Apr 2020   Prob (F-statistic):               0.00
Time:                        20:43:20   Log-Likelihood:                -3378.3
No. Observations:                 822   AIC:                             6771.
Df Residuals:                     815   BIC:                             6804.
Df Model:                           6                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const         26.4656      2.099     12.610      0.000      22.346      30.585
PM25           0.9506      0.019     50.834      0.000       0.914       0.987
PM10           0.2412      0.015     15.691      0.000       0.211       0.271
So2           -0.0212      0.038     -0.555      0.579      -0.096       0.054
No2           -0.2624      0.047     -5.601      0.000      -0.354      -0.170
Co            -1.5038      1.109     -1.356      0.175      -3.680       0.672
O3             0.0468      0.018      2.621      0.009       0.012       0.082
==============================================================================
Omnibus:                      351.197   Durbin-Watson:                   1.782
Prob(Omnibus):                  0.000   Jarque-Bera (JB):             5876.885
Skew:                           1.489   Prob(JB):                         0.00
Kurtosis:                      15.756   Cond. No.                         733.
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
result.f_pvalue #检验线性回归关系显著性
0.0
result.params #回归系数
const    26.465624
PM25      0.950583
PM10      0.241180
So2      -0.021246
No2      -0.262374
Co       -1.503839
O3        0.046783
dtype: float64

改进模型

由于So2与Co的p值大于0.05,所以排除这两个变量,重新建立模型

data = pd.read_csv("beijing.csv",index_col = 0)
data.head()
 AQI指数当天AQI排名PM25PM10So2No2CoO3
1 306 106 255 277 30 105 2.60 15
2 62 22 39 62 10 46 0.91 27
3 99 61 71 101 11 72 1.18 14
4 176 98 135 162 10 96 1.62 2
5 231 102 181 202 14 100 1.89 0
X = data.iloc[:,[2,3,5,7]]
X = sm.add_constant(X)
y = data.iloc[:,0]
print(X.head())
   const  PM25  PM10  No2  O3
1    1.0   255   277  105  15
2    1.0    39    62   46  27
3    1.0    71   101   72  14
4    1.0   135   162   96   2
5    1.0   181   202  100   0
model2 = sm.OLS(y,X)  #建立模型
result = model2.fit() #训练模型
print(result.summary())
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                  AQI指数   R-squared:                       0.963
Model:                            OLS   Adj. R-squared:                  0.963
Method:                 Least Squares   F-statistic:                     5318.
Date:                Thu, 02 Apr 2020   Prob (F-statistic):               0.00
Time:                        21:35:18   Log-Likelihood:                -3379.7
No. Observations:                 822   AIC:                             6769.
Df Residuals:                     817   BIC:                             6793.
Df Model:                           4                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const         25.9959      2.064     12.598      0.000      21.945      30.046
PM25           0.9378      0.016     58.347      0.000       0.906       0.969
PM10           0.2417      0.015     15.864      0.000       0.212       0.272
No2           -0.2891      0.044     -6.613      0.000      -0.375      -0.203
O3             0.0560      0.017      3.297      0.001       0.023       0.089
==============================================================================
Omnibus:                      337.402   Durbin-Watson:                   1.783
Prob(Omnibus):                  0.000   Jarque-Bera (JB):             5783.530
Skew:                           1.401   Prob(JB):                         0.00
Kurtosis:                      15.689   Cond. No.                         711.
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

以上是关于python数据分析综合项目--空气质量指数分析的主要内容,如果未能解决你的问题,请参考以下文章

Python 多元线性回归

每天学点Python案例八:空气质量指数计算

024 实例5-身体质量指数BMI

身体质量指数BMI

Hadoop综合项目——二手房统计分析(起始篇)

python获取国内城市30天内空气质量指数(AQI)