天天看点

案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

1、AQI分析与预测

1.1、背景信息

AQI(Air Quality Index),指空气质量指数,衡量空气清洁或污染的程度,值越小,表示空气质量越好。

1.2、分析目标

运用分析解决以下问题:

1、哪些城市的空气质量较好/较差【描述性统计分析】

2、空气质量在地理位置分布上,是否具有一定的规律性?【描述性统计分析】

3、临海城市的空气质量是否有别于内陆城市?【推断统计分析】

4、全国城市空气质量普遍处于何种水平?【区间估计】

5、怎样预测一个城市的空气质量?【统计建模】

1.3、数据集描述

本次分析的数据集,包涵全国主要城市的相关数据及空气质量指数。

city:城市名

AQI:空气质量指数

Precipitation:降雨量

GDP:城市生产总值

Temperature:温度

Longitude:经度

Latitude:维度

Aititude:海拔高度

PopulationDensity:人口密度

Coastal:是否沿海

GreenCoverageRate:绿化覆盖率

Incineration(10,000ton):焚烧量(10000吨)

2、数据分析流程

2.1、基本流程

1、明确需求与目的

2、数据收集

(1)内部数据

(2)购买数据

(3)爬取数据

(4)调查问卷

(5)其他收集

3、数据预处理

(1)数据整合:横向整合、纵向整合

(2)数据清洗:缺失值、异常值、重复值

(3)数据转换

4、数据分析

(1)描述分析

(2)推断分析

(3)数据建模:特征工程、超参数调整

(4)数据可视化

5、编写报告

3、读取数据

3.1、导入相关的库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings

sns.set(style="darkgrid")
plt.rcParams["font.family"]="SimHei"
plt.rcParams["axes.unicode_minus"]=False
warnings.filterwarnings("ignore")
           

3.2、数据集加载

data = pd.read_csv("data.csv")
print(data.shape)
           
案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

数据加载之后,可以用head/tail/sample等方法查看数据的大致情况

案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

4、数据清洗

4.1、缺失值

4.1.1、缺失值探索

可使用如下方法查看缺失值:info、isnull

data.isnull().sum(axis=0)
#data.info()
           
案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

可以看出Precipitation(降雨量)列存在缺失值,需进行处理。

4.1.2、缺失值处理

对缺失值的处理方式主要有以下几种:

1、删除缺失值:仅适合于缺失数量很少的情况;

2、填充缺失值

(1)数值变量:均值填充、中值填充;

(2)类别变量:众数填充、单独作为一个类别;

(3)额外处理说明:

a.缺失值小于20%,直接填充;

b.缺失值在20%-80%,填充变量后,同时增加一列,标记该列是否缺失,参与后续建模;

c.缺失值大于80%,不使用原始列,而是增加一列,标记该列是否缺失,参与后续建模。

4.1.2.1、数据分布

print(data["Precipitation"].skew())
sns.distplot(data["Precipitation"].dropna())
           
案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

看出数据存在右偏状态

4.1.2.2、数据填充

降雨量属于数值型,这里采用中值对其缺失值进行填充

data.fillna({"Precipitation":data["Precipitation"].median()},inplace=True)
data.isnull().sum()
           
案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

填充后检查缺失值,均为0.

4.2、异常值

4.2.1、异常值探索

可使用如下方式,发现异常值:

1、通过describe查看数值信息;

2、3σ方式;

3、使用箱线图辅助;

4、相关异常检测算法。

4.2.1.1、describe方法

仅能作为一种简单的异常探索方式

案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

4.2.1.2、3σ方法

依赖于正态分布的原理,在以均值为中心,3倍标准差以内,可以涵盖99.7%,在3σ以外仅存在0.3%的数据。我们可以将3σ之外的数据,视为异常值。这里以GDP为例,首先绘制GDP的分布情况。

sns.distplot(data["GDP"])
print(data["GDP"].skew())
           
案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

从结果可以看出,GDP属于严重的右偏型数据,也就是存在很多极大的异常值,我们可以获取这些异常值。

mean,std=data["GDP"].mean(),data["GDP"].std()
lower,upper=mean-3*std,mean+3*std
print("均值:",mean)
print("标准差:",std)
print("下限:",lower)
print("上限:",upper)
data["GDP"][(data["GDP"]<lower)|(data["GDP"]>upper)]
           
案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

存在以上八条在3σ以外的异常值

4.2.1.3、箱线图

案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

IQR=Q3-Q1,如果一个值小于(Q1-1.5IQR)或者大于(Q3+1.5IQR),则为箱线图会检测出来的异常值

4.2.2、异常值处理

可采取如下方式对异常值进行处理:

1、删除异常值

2、视为缺失值处理

3、对数转换

4、使用临界值填充

5、使用分箱法离散化处理

4.2.2.1、对数转换

如果数据中存在较大的异常值,可以通过取对数来进行转换,可得到一定的缓解。如GDP的右偏分布

fig,ax=plt.subplots(1,2)
fig.set_size_inches(15,5)
sns.distplot(data["GDP"],ax=ax[0])
sns.distplot(np.log(data["GDP"]),ax=ax[1])
           
案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

取对数的方式比较简单,但也存在一些局限:

1、仅适合右偏分布,不适合左偏分布;

2、取对数只能针对正数操作,不够可以通过转换方式实现:

np.sign(X)*np.log(np.abs(X)+1)

4.2.2.2、使用边界值替换

可以对异常值进行“截断”处理,使用临界值替换异常值。例如在3σ与箱线图,就可采用此种方法处理。

4.2.2.3、分箱离散化

适用于数据为非线性的影响,而为阶梯式的影响。

4.3、重复值

删!使用duplicate检查重复值,可配合keep参数进行调整。

4.3.1、重复值探索

#发现重复值
print(data.duplicated().sum())
#查看哪些记录出现了重复值
data[data.duplicated(keep=False)]
           
案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

4.3.2、重复值处理

直接删除重复值

data.drop_duplicates(inplace=True)
data.duplicated().sum()
           

5、数据分析

5.1、空气质量最好/最差的5个城市

5.1.1、最好的5个城市

t=data[["City","AQI"]].sort_values("AQI")
display(t.iloc[:5])
plt.xticks(rotation=45)
sns.barplot(x="City",y="AQI",data=t.iloc[:5])
           
案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

通过分析结果发现,空气质量最好的5个城市如图。

5.1.2、最差的5个城市

display(t.iloc[-5:])
plt.xticks(rotation=45)
sns.barplot(x="City",y="AQI",data=t.iloc[-5:])
           
案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析
案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

通过分析结果发现,空气质量最差的5个城市如图。

5.2、全国城市的空气质量

5.2.1、城市空气质量等级统计

对AQI,可以对空气质量进行等级划分,划分标准如下:

案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

根据该标准,这里统计下全国空气质量每个等级的数量。

def value_to_level(AQI):
    if AQI>=0 and AQI<=50:
        return "一级"
    elif AQI >= 51 and AQI <= 100:
        return "二级"
    elif AQI>=101 and AQI<=150:
        return "三级"
    elif AQI>=151 and AQI<=200:
        return "四级"
    elif AQI>=201 and AQI<=300:
        return "五级"
    else:
        return "六级"
level = data["AQI"].apply(value_to_level)
display(level.value_counts())
sns.countplot(x=level,order=["一级","二级","三级","四级","五级","六级"])    
           
案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

可见,空气质量主要以一二三级为主,严重污染城市占比较小

5.2.2、空气质量指数分布

案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

从大致的地理位置看,南部优于北部,西部优于东部

5.3、临海城市是否空气质量优于内陆城市?

5.3.1、数量统计

首先统计下临海城市与内陆城市数量

display(data["Coastal"].value_counts())
sns.countplot(x="Coastal",data=data)
           
案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

5.3.2、分布统计

散点分布

案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析
案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

分组计算空气质量的均值

display(data.groupby("Coastal")["AQI"].mean())
sns.barplot(x="Coastal",y="AQI",data=data)
           
案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

上图显示的值比较少,下面通过箱线图进行查看

案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

如果还想显示数据的分布,可用小提琴图

案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

小提琴图和蜂群图绘制在一起,可如下展示:

sns.violinplot(x="Coastal",y="AQI",data=data,inner=None)
sns.swarmplot(x="Coastal",y="AQI",color="g",data=data)
           
案例数据分析--对城市空气质量指数的分析1、AQI分析与预测2、数据分析流程3、读取数据4、数据清洗5、数据分析

5.3.3、差异检验

进行两样本t检验,用于检验两个独立样本背后总体的均值是否是一致。

看所有内陆城市和总体临海城市均值差异是否显著。