文章目录

  • 一、AQI分析与预测
    • 1.1 背景信息
    • 1.2 分析目标/任务
    • 1.3 数据集概览
  • 二、数据分析流程
    • 2.1基本流程
    • 2.2理解流程
  • 三、读取数据
    • 3.1导入相关的库
    • 3.2加载数据集
  • 四、数据清洗
    • 4.1缺失值
    • 4.2异常值
    • 4.3重复值
  • 五、数据分析
    • 5.1哪些城市的空气质量较好/较差【描述性统计分析】
    • 5.2全国城市空气质量【描述性统计】
    • 5.3临海城市的空气质量是否有别于内陆城市【推断性统计分析】
    • 5.4空气质量受那些因素的影响【相关系数分析】
    • 5.5全国空气质量普遍处于何种水平【区间估计】

一、AQI分析与预测

1.1 背景信息

AQI(Air Quality Index)是指空气质量指数,用来衡量空气清洁或者污染的程度,值越小,表示空气质量越好。空气污染指数划分为0-50、51-100、101-150、151-200、201-300和大于300六档,对应于空气质量的六个等级,指数越大,级别越高,就说明污染越严重,对人体健康的影响也越大。(近段时间,空气质量愈发倍受关注,因此在此作一个专题分析)

1.2 分析目标/任务

期望通过运用数据分析的相关分析,对全国城市质量进行研究和分析,希望解决下面这些问题:

  • 哪些城市的空气质量较好/较差【描述性统计分析】
  • 空气质量在地理位置分布上,是否具有一定分布规律【描述性统计】
  • 临海城市的空气质量是否有别于内陆城市【推断性统计分析】
  • 空气质量受那些因素的影响【相关系数分析】
  • 全国空气质量普遍处于何种水平【区间估计】
  • 怎样预测一个城市的空气质量【统计建模】

1.3 数据集概览

获取了2015年的空气质量指数集,该数据集包含全国主要城市的相关数据以及空气质量指数。

二、数据分析流程

2.1基本流程

在进行数据分析之前,需要清除数据分析的基本流程:

  • 宏观明确需求与目的,将目标拆解
  • 数据采集:
    ——内部数据
    ——购买数据
    ——爬取数据
    ——调查问卷
    ——其他收集
  • 数据预处理:
    ——数据整合:
    ————横向整合
    ————纵向整合
    ——数据清洗:
    ————缺失值
    ————异常值
    ————重复值
    ——数据转换:
  • 数据分析:
    ——描述分析
    ——推断分析
    ——数据建模:
    ————特征工程
    ————超参数调整
    ——数据可视化
  • 编写报告

2.2理解流程

可以把这个过程形象化成做菜。

三、读取数据

3.1导入相关的库

导入需要的库,进行一些初始化设置。

#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加载数据集

#2、加载数据集
data=pd.read_csv("data-Copy1.csv")
print(data.shape)
#概览数据大致情况
data.head()输出:(325, 12)

四、数据清洗

4.1缺失值

(1)如何查看缺失值呢——info、isnull

1、使用info()

#数据清洗之缺失值查看
data.info()输出:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 325 entries, 0 to 324
Data columns (total 12 columns):
City                       325 non-null object
AQI                        325 non-null int64
Precipitation              321 non-null float64
GDP                        325 non-null float64
Temperature                325 non-null float64
Longitude                  325 non-null float64
Latitude                   325 non-null float64
Altitude                   325 non-null float64
PopulationDensity          325 non-null int64
Coastal                    325 non-null object
GreenCoverageRate          325 non-null float64
Incineration(10,000ton)    325 non-null float64
dtypes: float64(8), int64(2), object(2)
memory usage: 30.5+ KB

2、使用isnull

#数据清洗之缺失值查看
data.isnull().sum(axis=0)
输出:
City                       0
AQI                        0
Precipitation              4
GDP                        0
Temperature                0
Longitude                  0
Latitude                   0
Altitude                   0
PopulationDensity          0
Coastal                    0
GreenCoverageRate          0
Incineration(10,000ton)    0
dtype: int64

从两种方法中我们都能发现,在Percipitation(降雨量)这个变量上有缺失值。因此我们需要对此进行处理。

(2)缺失值处理

  • 删除缺失值(适用于缺失数量很少的情况)

  • 填充缺失值:
    ——数值变量:采用均值填充、中数填充
    ——类别变量:采用众数填充,或者单独作为一个类别;

  • 额外的数据处理说明
    ——缺失值小于20%,直接填充。
    ——缺失值在20-80%,填充变量之后,同时增加一列来标记该列是否缺失,参与后续建模。
    ——缺失值大于80%,不适用原始列,而是增加一列,标记该列缺失,参与后续建模。
    我们可以看一下数据分布状况:

#数据分布
print(data["Precipitation"].skew())
sns.distplot(data["Precipitation"].dropna())
输出:偏度——0.28491574964838473

填充数据:

#数据填充
data.fillna({"Precipitation":data["Precipitation"].median()},inplace=True)
data.isnull().sum()输出:
City                       0
AQI                        0
Precipitation              0
GDP                        0
Temperature                0
Longitude                  0
Latitude                   0
Altitude                   0
PopulationDensity          0
Coastal                    0
GreenCoverageRate          0
Incineration(10,000ton)    0
dtype: int64

4.2异常值

可以通过下面这些方法来发现异常值:

  • 通过describe查看数值信息;
  • 3个标准差方式;
  • 使用箱线图辅助;
  • 相关异常检测算法;

(1)使用describe方法:调用dataframe的describe方法,可以显示数据的统计信息,不过此种方法只能作为一种简单的异常探索方式。

data.describe()


(2)使用3个标准差
根据正态分布,3个标准差之外的数据可视为异常值,我们以GDP为例,首先绘制GDP的分布.

#3个标准差看异常值:
sns.distplot(data["GDP"])
print(data["GDP"].skew())输出:
3.7614282419643033


可以发现该数据呈现严重的右偏分布。即存在很多极大的异常值,我们可以获取这些异常值。

#获取异常值
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)]输出:
均值: 2390.901815384616
标准差: 3254.876921271434
下限: -7373.728948429687
上限: 12155.532579198918异常值:
16     22968.60
63     18100.41
202    24964.99
207    17502.99
215    14504.07
230    16538.19
256    17900.00
314    15719.72

(3)采用箱线图检测异常值

#采用箱线图获取异常值
sns.boxplot(data=data["GDP"])


在最大值上面的那些值就是极端异常值。

对于异常值的处理,可以采用下面这些方式:

  • 删除异常值
  • 视为缺失值处理
  • 对数转换
  • 使用临界值填充
  • 使用分箱法离散处理

详细说明:
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])


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

  • 取对数只能针对正数操作,可以采用下面的方式进行转换:np.sign(X)*np.log(np.abs(X)+1)
  • 适合于右偏分布,不适合左偏分布。
    2、使用临界值填充:对异常值进行截断处理,即采用临界值替换异常值。
    3、分箱离散化:使用分箱方式,对特征进行离散化处理。

4.3重复值

(1)如何查看重复值?

#查看重复值,使用duplicate检查重复值,可配合keep参数进行调整。
print(data.duplicated().sum())#查看哪些是重复值?
data[data.duplicated(keep=False)]

输出:

(2)如何处理重复值?
重复值对分析没有什么作用,直接删除即可:

#删除重复值:
data.drop_duplicates(inplace=True)
data.duplicated().sum()输出:0

五、数据分析

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])
输出:City     AQI
204 Shaoguan City   12
163 Nanping City    12
154 Meizhou City    12
91  Keelung City    13
195 Sanming City    13


可以看到空气质量最好的前5个城市有韶关、南平、梅州、基隆、三明。

(2)最差的5个城市

#数据分析-最差的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:])输出:City     AQI
105 Jiaozuo City    199
112 Jinzhou City    202
13  Baoding City    220
26  Chaoyang City   224
16  Beijing City    296


所以空气质量最糟糕的前5个城市包括:北京市、朝阳市、保定市、锦州市、焦作市。

5.2全国城市空气质量【描述性统计】

(1)城市空气质量等级统计

划分标准如下:

#根据AQI标准,来统计一下全国城市空气质量每个等级的数量。
#编写函数,将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=["一级","二级","三级","四级","五级","六级"])输出:
二级    136
一级    103
三级     66
四级     14
五级      4


可以看到我国城市空气质量主要以一级(优)与二级(良)为主,三级(轻度污染)占一部分,更严重污染的城市占少数。

(2)空气质量指数分布

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

可视化:

从结果可以大致发现,南方城市比北方城市好,西部城市好于东部城市。

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

先来看一看临海与内陆城市在AQI上的散点分布:

#散点分布(内陆与沿海)
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)输出:
Coastal
否    79.045267
是    64.062500
Name: AQI, dtype: float64

可视化:

图中只显示了均值的对比情况,下面我们使用箱图来看看更多的信息。

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

可视化:

还可以绘制小提琴图,除了展现箱线图的信息外,还能呈现分布的密度:

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


以及组合图形:

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


为了得出更加具有说服力的结论,我们采用差异检验的方式来对沿海和内陆之间的均值进行差异比较:

#t检验比较内陆和沿海城市的AQI:
from scipy import stats
coastal=data[data["Coastal"]=="是"]["AQI"]
inland=data[data["Coastal"]=="否"]["AQI"]
#进行方差齐性检验,为后续两样本t检验服务;
stats.levene(coastal,inland)输出:
LeveneResult(statistic=0.08825036641952543, pvalue=0.7666054880248168)

方差齐,因此进行两样本t检验:

#进行两样本t检验。
r=stats.ttest_ind(coastal,inland,equal_var=True)
print(r)
p=stats.t.sf(r.statistic,df=len(coastal)+len(inland)-2)
print(p)输出:
Ttest_indResult(
statistic=-2.7303827520948905,pvalue=0.006675422541012958)
0.9966622887294936

从p值可以看到p小于0.01,所以沿海和内陆在空气质量指数上有显著的差异,99%可以认为沿海空气情况普遍比内陆要好。

5.4空气质量受那些因素的影响【相关系数分析】

#使用散点图矩阵来看各因素对AQI的影响;
sns.pairplot(data[["AQI","PopulationDensity","GreenCoverageRate"]])


相关系数:
1、协方差
2、相关系数定义
3、相关度取值范围与相关程度

我们以降雨量和AQI为例,来看二者的相关程度:

x=data["AQI"]
y=data["Precipitation"]
#计算AQI与Precipitation二者的协方差;
a=(x-x.mean())*(y-y.mean())
cov=np.sum(a)/(len(a)-1)
print("协方差:",cov)
#计算AQI与Precipitation的相关系数:
corr=cov/np.sqrt(x.var()*y.var())
print("相关系数:",corr)输出:
协方差: -10103.97404641835
相关系数: -0.3997608250413356

DataFrame也提供了计算相关系数的方法,可以直接使用:

data.corr()

结果如下:

为了更清晰、直观地呈现相关数值,我们使用热图来展示相关系数:

#热图展示相关系数
plt.figure(figsize=(15,10))
ax=sns.heatmap(data.corr(),cmap=plt.cm.RdYlGn_r,annot=True,fmt=".2f")
a,b=ax.get_ylim()
ax.set_ylim(a+0.5,b-0.5)输出:(10.5, -0.5)

可视化:

从结果中可以看到,AQI主要受到降雨量和纬度的影响,降雨量越大,空气质量越好,反之,纬度越低,空气质量越好。

5.5全国空气质量普遍处于何种水平【区间估计】

有消息说全国所有城市空气质量指数均值在71左右,问是否可靠?
该需求是要验证样本均值是否等于总体均值,根据场景,使用单样本t检验,置信度为95%。

data["AQI"].mean()
r=stats.ttest_1samp(data["AQI"],71)
print("t值:",r.statistic)
print("p值:",r.pvalue)输出:
75.3343653250774
t值: 1.8117630617496872
p值: 0.07095431526986647

可以看到p值大于0.05,所以无法拒绝原假设,因此接受原假设。

想要获取在置信度95%的临界值下,计算全国所有城市空气质量指数的区间:由于是t分布,下面这个方式帮助我们获取更加精确的区间范围。

mean=data["AQI"].mean()
std=data["AQI"].std()
stats.t.interval(0.95,df=len(data)-1,loc=mean,scale=std/np.sqrt(len(data)))输出:(70.6277615675309, 80.0409690826239)
  • 怎样预测一个城市的空气质量【统计建模】——关于这一节的内容会放入到下一篇文章中学习,因为我在处理数据的时候卡住了,以我现在的水平还不能解决这个问题,所以放在下一篇从头开始继续探索看看行不行。

数理统计——AQI分析相关推荐

  1. python之AQI分析与预测

    AQI分析与预测 背景介绍 AQI,指空气质量指数,用来衡量空气清洁或污染的程度.值越小,表示空气质量越好. 分析目标 哪些城市的空气质量较好/较差? 空气质量在地理位置分布上,是否具有一定的规律性? ...

  2. 使用python及相关库实现AQI分析与预测

    使用python及相关库实现AQI分析与预测 前言 一.需求背景 二.提出问题 三.数据预览 四.数据清洗 五.数据分析 六.总结 前言 一.需求背景 AQI(Air Quality Index),即 ...

  3. python关联分析如何可视化_如何用Python做AQI分析并可视化?

    AQI 分析 1.背景信息 AOI( Air Quality Index),指空气质量指数,用来衡量空气清洁或污染的程度.值越小,表示空气质量越好.近年来,因为环境问题,空气质量也越来越受到人们的重视 ...

  4. 程度性数据python分析_python数据分析实战之AQI分析

    文章目录 1.数据分析的基本流程 2.明确需求和目的 2.1 需求和目的 3.数据收集 4.数据预处理 4.1 数据整合 4.1.1 加载相关库和数据集 4.1.2 数据总体概览 4.2 数据清洗 4 ...

  5. 分析项目-AQI分析与预测

    文章目录 一:项目背景 二:简单聊分析流程 三:买菜,数据获取 四:洗菜,数据清洗 数据预处理 数据清洗 缺失值 异常值 重复值 五:切菜,数据转换 六:炒菜,数据分析 哪些城市的空气质量较好/较差? ...

  6. 通过线性回归模型及优化实现AQI分析与预测

    目录 1 项目背景与分析说明 1.1 项目背景 1.2 数据说明 1.3 分析说明 2 数据预处理 2.1 导入相关库 2.2 导入数据 2.3 数据预处理 2.3.1 缺失值 2.3.2 异常值 2 ...

  7. 编写一个AQI分析的Orange插件

    2019独角兽企业重金招聘Python工程师标准>>> 原创文章,欢迎分享!    http://my.oschina.net/u/2306127/blog/613875 最近空气污 ...

  8. 用c语言编写5颗骰子任意投掷总数为15 的概率,2016概率论与数理统计试卷分析(1)...

    杉达 国商.会计等 专业 2006 级 专 科 <概率论与数理统计>试卷 A 评析 6 小题,每小题 4 分,共 24 分.每小题的四个 1.随意地投掷一均匀的骰子两次,则这两次出现的点数 ...

  9. AQI空气质量分析与预测

    AQI分析与预测 背景信息 AQI全称是Air Quality Index,指空气质量指数,用来衡量空气清洁或者污染的程度,值越小,表示空气质量越好. 本文的分析目标 一.描述性统计 哪些城市的空气质 ...

  10. 通过空气质量指数AQI学习统计分析并进行预测(上)

    ↑ 点击上方 "凹凸数据" 关注 + 星标 ~ 每天更新,大概率是晚9点   本文会带你学习: 数据分析流程 特征工程 缺失值.异常值.重复值的处理 箱线图怎么判断异常值 观察散点 ...

最新文章

  1. TensorFlow1.8.0正式发布,Bug修复和改进内容都在这里了
  2. List复制:深拷贝和浅拷贝用法及区别
  3. python常用内置模块-python常用的内置模块
  4. python安装第三方库速度慢的解决方法
  5. Tomcat在自定义xml文件中配置虚拟目录
  6. 【编程】二叉搜索树的定义
  7. MaxCompute Hash Clustering介绍
  8. VC函数中的延时操作
  9. Flutter布局锦囊---验证码倒计时
  10. Unity 官方教程 学习
  11. 重磅消息,Redis开源作者宣布不再维护Redis项目!
  12. [Xcode]XcodeGhost问题的检查和验证
  13. 通过split命令分割大文件
  14. 动态链接库dll注册函数DllRegisterServer的调试
  15. SpringBoot微服务项目打包流程
  16. linux 取字符串的一部分,什么linux shell命令返回字符串的一部分?
  17. 算法的时间复杂度和空间复杂度
  18. ubuntu下高通平台模组串口驱动及使用
  19. RDS MySQL和Mongodb 物理备份文件.xb恢复到自建数据库
  20. ERROR: Failed building wheel for ctcdecode

热门文章

  1. 每节课都是一个项目 手把手用STM32打造联网气象站-9-用LCD显示中文英文和图片
  2. UVM设计模式 (三) 静态类、资源管理、uvm_event、uvm_*_pool、uvm_config_db、UVM_REGEX_NO_DPI
  3. 机器学习超详细实践攻略(9):手把手带你使用决策树算法与调参
  4. c语言中 输出操作是由库函数,【判断题】在 C语言中,输入操作是由库函数scanf完成,输出操作是由库函数printf完成 。...
  5. 第二届中国移动“梧桐杯”大数据应用创新大赛总决赛12强名单发布
  6. 漫画:鉴权与安全访问控制的技术血脉
  7. 厦大2021期中考试
  8. 微信小程序账号注册流程
  9. 网络请求及各类错误代码含义总结(包含AFN错误码大全)
  10. util-caleAge 计算年龄