前言
一、需求背景
AQI(Air Quality Index),即空气质量指数,用来衡量空气清洁或污染的程度。值越小,表示空气质量越好。近年来因为环境问题,空气质量也越来越受到人们重视。
分析旨在通过采集到的国内各城市数据,运用数据分析相关技术,对全国城市空气质量进行研究与分析。
二、提出问题
- 空气质量较好/较差的城市是哪些?
- 空气质量在地理位置分布上是否具有一定规律性?
- 临海城市的空气质量是否有别于内陆城市?
- 空气质量主要受哪些因素影响?
- 全国城市空气质量普遍处于何种水平?
- 怎样预测一个城市的空气质量?
三、数据预览
数据为2015年空气质量质数集,包含国内主要城市的相关数据以及空气质量指数。
列名 | 含义 |
---|---|
City | 城市名 |
AQI | 空气质量指数 |
Precipitation | 降雨量 |
GDP | 城市生产总值 |
Temperature | 温度 |
Longitude | 经度 |
Latitude | 维度 |
Altitude | 海拔高度 |
PopulationDensity | 人口密度 |
Coastal | 是否沿海 |
GreenCoverageRate | 绿化覆盖率 |
Incineration(10,000ton) | 焚烧量(万吨) |
四、数据清洗
# 导入相关库,进行初始化设置
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("data.csv")
data.head()
# 二、数据处理
# 1、首先查看缺失值情况
print(data.isnull().sum())
# 对于数值类型使用均值或者中位数填充。
# 查看Precipitation列分布偏度
print(data["Precipitation"].skew())
sns.distplot(data["Precipitation"].dropna()) # 函数画图需要去掉空值
# 稍微右偏,使用中位数填充,查看填充后的缺失值情况
data["Precipitation"].fillna(data["Precipitation"].median(), inplace=True)
print(data.isnull().sum())
# 2、处理异常值,先查看大致的统计信息
data.describe()
# 可以看到GDP上三分位和最大值差距巨大,可能存在异常值(其他特征待后续建立模型时处理)
# 查看GDP数据的偏度
print("偏度:", data["GDP"].skew())
sns.distplot(data["GDP"])
# 可以看出GDP列严重右偏,需要进行正态化
# 根据正态分布特性,对于3σ之外的数据视为异常值
mean, std = data["GDP"].mean(), data["GDP"].std()
lower, upper = mean - 3 * std, mean + 3 * std
print("均值:%s,标准差:%s,下限:%s,上限:%s" % (mean, std, lower, upper))
# 将异常值替换为边界值
data["GDP"][data["GDP"]<lower] = lower
data["GDP"][data["GDP"]>upper] = upper
# 查看处理后的结果
print("偏度:",data["GDP"].skew())
sns.distplot(data["GDP"])
# 效果不是很明显,直接取对数来处理
# 定义函数取对数
def getLog(x):
# 对数只能处理真数为正数的值,所以需要单独拿到符号再乘以绝对值的对数
return np.sign(x) * np.log(np.abs(x)