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 warningssns.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检验,用于检验两个独立样本背后总体的均值是否是一致。
看所有内陆城市和总体临海城市均值差异是否显著。

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

  1. python爬空气污染实时数据_python数据分析综合项目--空气质量指数分析

    项目背景 近年来,我国的环境问题比较严重,很多城市出现了雾霾天气,当然也有很多城市空气依旧清新,为了研究具体的空气环境城市分布,我们采用了假设检验以及线性回归的思想对AQI(空气质量指数)进行分析和预 ...

  2. 数据分析实战——城市餐饮店铺选址分析(1)

    项目目标: 城市餐饮店铺选址 第一部分:从三个维度"口味"."人均消费"."性价比"对不同菜系进行比较,并筛选出可开店铺的餐饮类型 要求: ...

  3. AQI(空气质量指数)分析与预测(二)

    AQI(空气质量指数)分析与预测(一) 数据分析 哪些城市的空气质量较好/较差 #空气质量最好的几个城市 t = data['Ciyt','AQI'].sort_values('AQI') #根据AQ ...

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

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

  5. 基于Python的京津冀上广深空气质量可视化分析

    目录 (一)2018年北京空气质量数据可视化结果与分析 1.1 2018年北京AQI全年走势图 1.2 2018年北京月均AQI走势图 1.3 2018年北京季度AQI箱型图 1.4 2018年北京P ...

  6. 玩转百度即用API(5)——空气质量指数查询

    空气质量指数查询,截至目前只能查到全国161个城市的数据. "三亚","三门峡","上海","东莞","东营& ...

  7. python 空气质量AQI数据分析与预测 ---分析(空气质量排名,临海城市空气质量是否优于内陆城市)

    #每天一点点# python 空气质量AQI数据分析与预测 点击可以查看 分析:用到的库,数据集,数据清洗 点击可以查看 分析:相关系数矩阵 #四:数据分析 #1:空气质量最好/最差的5个城市 #最好 ...

  8. 数据分析案例--01 城市餐饮店铺选址分析

    城市餐饮店铺选址分析 数据下载链接: 链接:https://pan.baidu.com/s/1l2-EEMhK0-n8gFPLuOHb1g 提取码:7olt 要求: 1.从三个维度"口味&q ...

  9. python写空气质量提醒_你所在的城市空气质量如何?用Python可视化分析空气质量...

    本文的文字及图片过滤网络,可以学习,交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于法纳斯特 ,作者法纳斯特 Python爬虫.数据分析.网站开发等案例教程视频免费在线观 ...

最新文章

  1. qlabel 边加载边更新_王者荣耀:9月版本更新,九位英雄调整,三大战边回归,飞牛笑了...
  2. nodejs安装及环境配置(windows系统)
  3. mybatis直接使用自定义sql查询数据
  4. 计算机学习 -快捷键
  5. 郑风田:老美哪些地儿值得咱们?
  6. java 下拉列表监听_javascript对下拉列表框(select)的操作
  7. uploadify HTTP 302 错误如何解决?
  8. 算法实践--最小生成树(Kruskal算法)
  9. link的属性media的用处
  10. SkyWalking配上告警更优秀
  11. Java8-Guava实战示例
  12. UITextField 输入结束后的收起小键盘的方式
  13. Ajax内部交流文档(转)
  14. 常用加密算法之非对称加密算法
  15. *第六周*数据结构实践项目三【括号的配对】
  16. 团队项目:VS2013和SQL Server2012的连接使用
  17. 面试必问JavaScript基础面试题(附答案详解)
  18. 实验吧-加了料的报错注入
  19. android获取电池信息;android获取电池容量、技术、电压、电量、温度等信息
  20. 互联网晚报 | 12月29日 星期三 | 小米正式宣布对标苹果;新东方上线直播带货平台“东方甄选”;相互宝将于明年1月28日关停...

热门文章

  1. 基于NTLM认证的中间人攻击(含实战)
  2. 电脑重装系统开机后运行慢怎么办
  3. 2022年学习和实习总结——收获颇多
  4. 公司短信接口被攻击了,怎么防止
  5. 【React全家桶】react简介(一)
  6. 怎么样将摄像头视频接入到你的大屏上
  7. matplotlib在一张图同时画折线图和柱状图
  8. 无线路由器 安装使用的妙招
  9. 面试官:什么是深拷贝和浅拷贝?
  10. java微信退款接口