城市空气质量分析与预测

该博客主要探讨了全国城市空气质量的分析与预测。首先介绍了背景,包括空气质量指数(AQI)的意义和分析目标。接着详细阐述了数据清洗过程,包括处理缺失值、异常值和重复值的方法。在数据分析部分,博主分析了空气质量最好的和最差的5个城市,全国城市的空气质量分布,以及沿海与内陆城市之间的差异,并通过相关性分析找到了影响空气质量的主要因素。最后,博主使用了预测模型对空气质量进行了预测,并讨论了异常值处理和残差图分析的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、AQI分析与预测

1、背景信息

AQI指的是空气质量指数,用来衡量一个城市的空气清洁或污染的程度,数值越小则空气质量越好。近年来,空气污染问题备受关注,现收集不同城市的数据,运用数据分析的方法来对不同城市的空气质量进行分析与预测。

2、任务说明

我们期望能够运用数据分析的相关技术,对全国城市的空气质量进行分析与预测,同时会根据分析结果来解决一些常见问题,例如:

  • 哪些城市的空气质量比较好?哪些比较差?
  • 空气质量在地理上的分布,是否存在着一定的规律?
  • 沿海城市与内陆城市的空气质量是否存在不同?
  • 空气质量主要受到哪些因素的影响?
  • 全国空气质量的整体情况是怎样的?
  • 怎么来预测一个城市的空气质量?

3、数据集描述

我们现在获取了2015年的空气质量数据集,该数据集包含的是全国主要城市的相关数据及空气质量指数,数据情况如下:

列名 含义
City 城市名
AQI 空气质量指数
Precipitation 降雨量
GDP 城市生产总值
Temperature 温度
Longitude 纬度
Latitude 经度
Altitude 海拔高度
PopulationDensity 人口密度
Coastal 是否沿海
GreenCoverageRate 绿化覆盖率
Incineration(10000ton) 焚烧量(10000吨)

二、数据分析流程

基本流程

在进行数据分析之前,我们清楚整个分析流程,每个流程所对应的步骤与使用的相关分析技术:

  • 明确任务需求与分析目标
  • 数据收集:
    • 内部数据、购买数据、爬取数据、调查问卷、其他收集
  • 数据预处理:
    • 数据整合(横向整合、纵向整合)
    • 数据清洗(缺失值、异常值、重复值)
    • 数据转换
  • 数据分析:
    • 描述性分析
    • 推断分析
    • 数据建模(特征方程、超参数调整)
    • 数据可视化
  • 编写报告

三、读取数据

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

2、加载数据集

data=pd.read_csv('data.csv')
print(data.shape)32512

加载后,可以使用head/tail/sample等方法查看数据的大致情况:

data.head()

在这里插入图片描述

四、数据清洗

1、缺失值

1.1、缺失值探索

我们可以用以下方法来查看缺失值:

  • info
  • is null
#data.info()
data.isnull().sum(axis=0)

在这里插入图片描述

1.2、缺失值处理

对于缺失值,我们可以使用以下处理方式:

  • 删除缺失值:仅适合于缺失值很少的情况
  • 填充缺失值:
    • 数值变量:
      • 均值填充
      • 中值填充
    • 类别变量:
      • 众数填充
      • 单独作为一个类别
    • 额外处理说明:
      • 缺失值小于20%,直接填充
      • 缺失值在20%-80%,填充变量后,同时增加一列,标记该列是否缺失,参与后续建模
      • 缺失值大于80%,不用原始列,而是增加一列,标记该列是否缺失,参与后续建模
1、数据分布
print(data['Precipitation'].skew())
sns.distplot(data['Precipitation'].dropna())

在这里插入图片描述

2、填充数据
data.fillna({
   
   'Precipitation':data['Precipitation'].median()},inplace=True)
data.isnull().sum()

在这里插入图片描述

2、异常值

2.1、异常值探索

我们可以如下方法来发现缺失值:

  • describe查看数值信息
  • 正态分布3个标准差外(3σ)的方式
  • 使用箱线图辅助
  • 相关异常检测算法
1、describe方法

调用DataFrame对象的describe方法,可以显示数据的统计信息,但仅为一种简单的异常探索方式,不够直观,局限性强。

2、3σ的方式

根据正态分布的特性,我们可以将3个标准差外(3σ)的数据,视为异常值。现在我们以GDP为例,首先先绘制GDP的分布图

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

在这里插入图片描述
由图看出数据呈现严重右偏分布,也就是存在很多极大异常值,我们先获取这些异常值。

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、箱线图

箱线图也是一种常见的异常值检测方式。

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

在这里插入图片描述

2.2、异常值处理

对于异常值,我们可以用以下的方式来处理:

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

如果数据中存在较大的异常值,可以通过采用对数来进行转化,能得到一定的缓解。例如GDP变量呈现右偏分布

import matplotlib.pyplot as plt
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σ与箱线图可以这样处理

3、分箱离散化

有时候特征对目标值存在一定的影响,可能未必是线性的增加,这时可以使用分箱方式,对特征进行离散化处理。
分箱离散化分为两个阶段:

  • 分箱:比如将不同年龄段的人进行分化区间,例如0-18岁、18岁-30岁、30岁-40岁、40岁以上。
  • 离散化:可以将不同年龄段依次对应为1、2、3、4,作为离散化处理。最后输入模型中进行分析

3、重复值

3.1、重复值的探索

使用duplicate检查重复值,可配合keep参数进行调整

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

3.2、重复值处理

重复值对数据分析通常没有作用,直接删除即可

data.drop_duplicates(inplace=True)
data.duplicated().sum()

五、数据分析

1、空气质量最好/最差的5个城市

1.1、空气质量最好的5个城市

t=data[['City','AQI']].sort_values('AQI')
display(t.iloc
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值