大数跨境
0
0

Python:数据分析实战之AQI分析

Python:数据分析实战之AQI分析 数据皮皮侠
2020-07-07
2
导读:微信公众号:数据皮皮侠如果你觉得该公众号对你有帮助,欢迎关注、推广和宣传 AQI 的数据分析是一个非常好的

微信公众号:数据皮皮侠
如果你觉得该公众号对你有帮助,欢迎关注、推广和宣传

  AQI 的数据分析是一个非常好的训练的案例,唯一的不足就是数据是2015年的,但也没有办法,在Kaggle中也没有找到最新的数据,因此,就那这个数据来练手吧,由于内容过多,这次只推到数据的预处理,下次在放数据统计描述及分析.

内容目录:Python:数据分析实战之AQI分析

1.数据分析的基本流程2.明确需求和目的3.数据收集4.数据预处理4.1 数据整合4.1.1加载相关库和数据集4.1.2 数据总体概览4.2 数据清洗4.2.1 缺失值的处理4.2.2 异常值的处理4.2.3 重复值的处理

1.数据分析的基本流程

(1) 明确需求和目的
(2) 数据收集(内部数据、购买数据、爬取数据、调查问卷、其它收集)
(3) 数据预处理(数据整合、数据清洗、数据转换等)
(4) 数据分析(描述分析、推断分析、数据建模、数据可视化等)
(5) 编写报告

2.明确需求和目的

AQI:空气质量指数,用来衡量空气清洁或污染的程度,值越小,表示空气质量越好。
运用数据分析的相关技术,对全国城市空气质量进行研究和分析,解决以下问题:
(1)哪些城市的空气质量较好/较差?(描述性统计分析)
(2)对城市的空气质量按照如下等级划分,每个等级城市数量分布情况如何?(描述性统计分析)
(3)空气质量在地理位置分布上,是否具有一定的规律性?(描述性统计分析)
(4)临海城市的空气质量是否有别于内陆城市?(推断统计分析)
(5)全国城市空气质量普遍处于何种水平?(推断统计分析)
(6)空气质量主要受哪些因素影响?(相关系数分析)

3.数据收集

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

4.数据预处理

4.1 数据整合
4.1.1加载相关库和数据集

使用的库主要有:pandas、numpy、matplotlib、seaborn
使用的数据集:2015年空气质量指数(AQI)数据集

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")          # 忽略警告信息  

data = pd.read_csv("AQI_data.csv")
4.1.2 数据总体概览
print(data.info())             # 展示data的概览信息 
print(data.describe())         # 展示data 数值类型字段的统计信息 
print(data.sample(5))         # 随机抽样10条数据

4.2 数据清洗

4.2.1 缺失值的处理

查看缺失值:

data.info()
data.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

缺失值处理方式:
删除缺失值(仅仅适合缺失数量较少的情况)
填充缺失值(数值变量使用均值或中位数进行填充,类别变量使用众数填充或单独作为一个类别)
缺失值小于20%,直接填充。
缺失值在20%-80%之间,填充变量后,同时增加一列,标记该列是否缺失,参与后续建模。
缺失值大于80%,不使用原始列,而是增加一列,标记该列是否缺失,参与后续建模。
从上面可以看出,"Precipitation"存在4个缺失值,数量较少,可以直接使用中位数进行填充:

data.fillna({"Precipitation"data["Precipitation"].median()}, inplace=True)
data.isnull().sum(axis=0)    # 再次查看缺失值,验证效果,此时已没有缺失值
4.2.2 异常值的处理

查看异常值:
data.describe(),仅能作为一种简单的方式。
3 δ 方式:根据正态分布的特性,可以将3 δ之外的数据,视为异常值。
箱线图:箱线图是一种常见的异常检测方式。
相关异常检测算法

data.describe() 

通过describe()方法可以看出GDP存在异常值,用3 δ 方式进一步查看:

mean, std = data["GDP"].mean(), data["GDP"].std()
min_, max_ = mean - 3 * std, mean + 3 * std

data["GDP"][(data["GDP"min_) | (data["GDP"] > max_)]

-------------------------------------
16     22968.60
63     18100.41
202    24964.99
207    17502.99
215    14504.07
230    16538.19
256    17900.00
314    15719.72
Name: GDP, dtype: float64

还可以通过箱线图进行查看:

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

异常值处理方式:

删除异常值
视为缺失值处理
对数转换:如果数据中存在较大的异常值,通过取对数来进行转换,可以得到一定的缓解。(适合右偏分布,不适合左偏分布)
使用临界值进行填充:对异常值进行“截断”处理,使用临界值替换异常值。
使用分箱法离散化处理:如果特征对目标值的影响不是线性增加的,可以使用分箱方式对特征进行离散化处理。
对于GDP来说,因为存在较大的异常值,所以可以使用对数转换进行处理:

fig, ax = plt.subplots(12)
fig.set_size_inches(155)
sns.distplot(data["GDP"], ax=ax[0])    # 原始数据
data["GDP"] = np.log(data["GDP"])     # 使用对数转换
sns.distplot(data["GDP"], ax=ax[1])   # 转换之后的数据

从上面可以看出,取对数之后,图像右偏分布情况得到一定程度的缓解。

4.2.3 重复值的处理

查看重复值:data.duplicated()

print(data.duplicated().sum())    # 查看重复值的数量
data[data.duplicated(keep=False)]   # 查看哪些记录出现了重复值

重复值的处理:
重复值对于数据分析通常没有作用,直接删除即可。

data.drop_duplicates(inplace=True)
data.duplicated().sum()           # 再次查看重复值的数量,验证删除效果


待续------------

data

链接: 

https://pan.baidu.com/s/1bR_20rPXvuaylk0U1n9Ejg 

提取码: qj2i

【声明】内容源于网络
0
0
数据皮皮侠
社科数据综合服务中心,立志服务百千万社科学者
内容 2137
粉丝 0
数据皮皮侠 社科数据综合服务中心,立志服务百千万社科学者
总阅读615
粉丝0
内容2.1k