案例数据分析--对城市空气质量指数的分析

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)

在这里插入图片描述
数据加载之后,可以用head/tail/sample等方法查看数据的大致情况

data.sample()

在这里插入图片描述

4、数据清洗

4.1、缺失值

4.1.1、缺失值探索

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

data.isnull().sum(axis=0)
#data.info()

在这里插入图片描述
可以看出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())

在这里插入图片描述
看出数据存在右偏状态

4.1.2.2、数据填充

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

data.fillna({"Precipitation":data["Precipitation"].median()},inplace=True)
data.isnull().sum()

在这里插入图片描述
填充后检查缺失值,均为0.

4.2、异常值

4.2.1、异常值探索

可使用如下方式,发现异常值:
1、通过describe查看数值信息;
2、3σ方式;
3、使用箱线图辅助;
4、相关异常检测算法。

4.2.1.1、describe方法

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

data.describe()

在这里插入图片描述

4.2.1.2、3σ方法

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

sns.distplot(data["GDP"])
print(data["GDP"].skew())

在这里插入图片描述
从结果可以看出,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)]

在这里插入图片描述
存在以上八条在3σ以外的异常值

4.2.1.3、箱线图

sns.boxplot(data=data["GDP"])

在这里插入图片描述
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、仅适合右偏分布,不适合左偏分布;
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)]

在这里插入图片描述

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])

在这里插入图片描述
通过分析结果发现,空气质量最好的5个城市如图。

5.1.2、最差的5个城市

display(t.iloc[-5:])
plt.xticks(rotation=45)
sns.barplot(x="City",y="AQI",data=t.iloc[-5:])

在这里插入图片描述
在这里插入图片描述
通过分析结果发现,空气质量最差的5个城市如图。

5.2、全国城市的空气质量

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

对AQI,可以对空气质量进行等级划分,划分标准如下:
在这里插入图片描述
根据该标准,这里统计下全国空气质量每个等级的数量。

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=["一级","二级","三级","四级","五级","六级"])    

在这里插入图片描述
可见,空气质量主要以一二三级为主,严重污染城市占比较小

5.2.2、空气质量指数分布

sns.scatterplot(x="Longitude",y="Latitude",hue="AQI",palette=plt.cm.RdYlGn_r,data=data)

在这里插入图片描述
从大致的地理位置看,南部优于北部,西部优于东部

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

5.3.1、数量统计

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

display(data["Coastal"].value_counts())
sns.countplot(x="Coastal",data=data)

在这里插入图片描述

5.3.2、分布统计

散点分布

sns.stripplot(x="Coastal",y="AQI",data=data)

在这里插入图片描述

sns.swarmplot(x="Coastal",y="AQI",data=data)

蜂群图
分组计算空气质量的均值

display(data.groupby("Coastal")["AQI"].mean())
sns.barplot(x="Coastal",y="AQI",data=data)

在这里插入图片描述
上图显示的值比较少,下面通过箱线图进行查看

sns.boxplot(x="Coastal",y="AQI",data=data)

在这里插入图片描述
如果还想显示数据的分布,可用小提琴图

sns.violinplot(x="Coastal",y="AQI",data=data)

在这里插入图片描述
小提琴图和蜂群图绘制在一起,可如下展示:

sns.violinplot(x="Coastal",y="AQI",data=data,inner=None)
sns.swarmplot(x="Coastal",y="AQI",color="g",data=data)

在这里插入图片描述

5.3.3、差异检验

进行两样本t检验,用于检验两个独立样本背后总体的均值是否是一致。
看所有内陆城市和总体临海城市均值差异是否显著。

评论 8 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

0-shu

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值