基于Python的2013-2018全国城市空气质量分析

基于Python的2013-2018全国城市空气质量分析

项目摘要

本项目使用pandas/numpy工具包对557424条空气质量数据进行导入及清洗,并使用matplotlib/seaborn/pyecharts工具包可视化分析全国主要省市的空气质量情况,对空气质量最差及最好的省市进行排名,利用相关性分析省市的主要污染物,从不同层面给出污染物指标控制方案。

主要结论如下:

  1. 中国北部内陆地区以及西北部地区空气质量较差,沿海地区及高原地区空气质量较好;
  2. 全国空气质量最差的10个省份(排名分先后,差-好):河北省、北京、河南省、天津、新疆、山东、山西、陕西、江苏、湖北;
  3. 全国空气质量最好的10个省份(排名分先后,好-差):海南、云南、福建、贵州、西藏、广东、广西、黑龙江、江西、青海;
  4. 全国空气质量最差的10个城市/地区(排名分先后,差-好):和田地区、喀什地区、保定、邢台、阿克苏地区、石家庄、克牧勒苏州、衡水、邯郸;
  5. 全国空气质量最好的10个城市/地区(排名分先后,好-差):三亚、迪庆州、海口、丽江、黔西南州、怒江州、阿坝州、楚雄州、大理州、普洱;
  6. 空气质量最差省份的主要污染物是pm10、so2、no2。so2与no2两者正相关;
  7. 空气质量最差城市的主要污染物是pm2.5、pm10、so2、no2。so2与no2之间、pm2.5与pm10、so2、no2之间有较强的正相关关系;
  8. 全国空气质量冬季时最差,平均AQI为101.6(轻度污染),夏季时最好,平均AQI为71.9(良好);
  9. 2015年后全国空气质量有很大改善,特别是2016年~2018年,平均AQI约为80,较2013年下降40%;
  10. 广东省最主要的污染物是pm2.5、pm10,其次是so2、no2、co;
  11. 广东省21个城市中,佛山、东莞、广州空气质量最差,AQI分别为73、73.5、74.2,空气质量均为良;
  12. 广东省冬季AQI较高,空气质量较差,夏季AQI较低,空气质量较好; 广东省空气质量全国排名第6;
  13. 深圳市主要的污染物是pm2.5、pm10、so2、co; 深圳市空气质量在全国城市空气质量排名38位。

1.项目背景

本项目以2013-2018年的全国城市空气质量历史数据作为依据,探究全国空气质量与各污染物之间的联系。


2.数据集介绍

数据集地址:https://tianchi.aliyun.com/dataset/dataDetail?dataId=2881
数据来自阿里天池,作者通过PythonSpider从真气网获取数据。以下为各字段描述:
基于Python的2013-2018全国城市空气质量分析_第1张图片


3.项目分析

基于Python的2013-2018全国城市空气质量分析_第2张图片

3.1 提出问题

全国范围:

  1. 全国哪些城市污染较严重,那些省份污染较严重?(AQI作为判断依据)
  2. 污染较严重省份的主要污染物是什么?
  3. 污染较严重城市的主要污染物是什么?
  4. 全国哪个季节的污染最严重?
  5. 2013年-2018年全国整体空气质量如何变化

全省范围(广东省):

  1. 广东省的主要污染物是什么?
  2. 全省哪些城市污染较严重?(AQI作为判断依据)
  3. 全省哪个季节的污染最严重?
  4. 广东省的控制质量在全国的排名?

全市范围(深圳市):

  1. 深圳市的主要污染物是什么?
  2. 深圳空气质量在全国的排名?
  3. 深圳哪个季节的污染最严重?

3.2 理解数据

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
df = pd.read_csv('aqi_data_u.csv')
df.head() # 查看表格
time cityname aqi pm2_5 pm10 so2 no2 co o3 primary_pollutant
0 2014-12-31 阿坝州 53 33 55 3 23 1.0 35.0 PM10
1 2015-01-31 阿坝州 31 18 29 7 10 0.5 45.0 NaN
2 2015-01-30 阿坝州 34 19 30 7 13 0.6 48.0 NaN
3 2015-01-29 阿坝州 31 18 31 7 15 0.5 32.0 NaN
4 2015-01-28 阿坝州 29 18 29 7 14 0.6 27.0 NaN
df1 = pd.read_csv('city.csv')
df1.head() # 查看表格。此表为坐标表格,本项目后续改进时增加地图显示城市空气质量
city lat lng
0 阿坝州 31.905763 102.228565
1 安康 32.704370 109.038045
2 阿克苏地区 41.171731 80.269846
3 阿里地区 30.404557 81.107669
4 阿拉善盟 38.843075 105.695683
df1.rename(columns={'city': 'cityname'}, inplace=True) # 重命名city列,以对应df表的列名
df1.head()
cityname lat lng
0 阿坝州 31.905763 102.228565
1 安康 32.704370 109.038045
2 阿克苏地区 41.171731 80.269846
3 阿里地区 30.404557 81.107669
4 阿拉善盟 38.843075 105.695683
df = pd.merge(df, df1, on='cityname', how='inner') # 两个表格合并
df.head()
time cityname aqi pm2_5 pm10 so2 no2 co o3 primary_pollutant lat lng
0 2014-12-31 阿坝州 53 33 55 3 23 1.0 35.0 PM10 31.905763 102.228565
1 2015-01-31 阿坝州 31 18 29 7 10 0.5 45.0 NaN 31.905763 102.228565
2 2015-01-30 阿坝州 34 19 30 7 13 0.6 48.0 NaN 31.905763 102.228565
3 2015-01-29 阿坝州 31 18 31 7 15 0.5 32.0 NaN 31.905763 102.228565
4 2015-01-28 阿坝州 29 18 29 7 14 0.6 27.0 NaN 31.905763 102.228565
df.shape # 查看数据数量
(557424, 12)

共557424行,12列数据。

df.describe()
aqi pm2_5 pm10 so2 no2 co o3 lat lng
count 557424.000000 557424.000000 557424.000000 557424.000000 557424.000000 557424.000000 211516.000000 557424.000000 557424.000000
mean 82.604734 48.958870 84.865831 22.943201 31.041986 1.309690 77.638103 33.320514 112.931476
std 49.948024 235.684284 74.218273 25.620462 18.087321 49.111775 62.773975 6.583132 9.278219
min 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 18.257776 75.992973
25% 52.000000 23.000000 44.000000 9.000000 18.000000 0.700000 42.000000 28.668283 108.069948
50% 71.000000 37.000000 68.000000 15.000000 27.000000 0.900000 69.000000 32.929499 114.351807
75% 99.000000 60.000000 106.000000 27.000000 40.000000 1.200000 102.000000 37.661160 119.455835
max 1210.000000 65535.000000 12060.000000 1495.000000 574.000000 9999.900000 11281.000000 51.991789 131.171402
df.info()

Int64Index: 557424 entries, 0 to 557423
Data columns (total 12 columns):
time                 557424 non-null object
cityname             557424 non-null object
aqi                  557424 non-null int64
pm2_5                557424 non-null int64
pm10                 557424 non-null int64
so2                  557424 non-null int64
no2                  557424 non-null int64
co                   557424 non-null float64
o3                   211516 non-null float64
primary_pollutant    528587 non-null object
lat                  557424 non-null float64
lng                  557424 non-null float64
dtypes: float64(4), int64(5), object(3)
memory usage: 55.3+ MB
print('数据中的城市数量为:', df.cityname.value_counts().count())
数据中的城市数量为: 367

3.3 数据清洗

根据以上简单查看数据,得出以下数据清洗思路:

1.o3、primary_pollutant存在缺失值。o3使用所在城市平均值填充,primary_pollutant统计数据较混乱且与项目问题无关,删除此列;

2.AQI、pm2_5、pm10、so2、no2、co、o3目前存在0值,可理解为该部分数据缺失,可用对应城市的平均值进行填充;

3.时间数据格式需要进行转换,创建季节列;

4.创建空气质量等级列;

5.列出每个城市所属的省份;

6.创建省份空气质量排名列(以AQI为基础);

7.创建城市空气质量排名列(以AQI为基础)。

# 1.o3、primary_pollutant存在缺失值。o3使用所在城市平均值填充,
# primary_pollutant统计数据较混乱且与项目问题无关,删除此列;
for city in df.cityname.value_counts().index:
    '''
    for循环计算每个城市污染物的平均值后替换NaN值
    '''
    df.loc[(df['cityname'] == city) & (df['o3'].isnull()), 'o3'] = df[df['cityname'] == city]['o3'].mean()

df['o3'].isnull().sum()
0

填充后缺失值为0

df.drop(['primary_pollutant'], axis=1, inplace=True)
df.head() #查看调整后的表格
time cityname aqi pm2_5 pm10 so2 no2 co o3 lat lng
0 2014-12-31 阿坝州 53 33 55 3 23 1.0 35.0 31.905763 102.228565
1 2015-01-31 阿坝州 31 18 29 7 10 0.5 45.0 31.905763 102.228565
2 2015-01-30 阿坝州 34 19 30 7 13 0.6 48.0 31.905763 102.228565
3 2015-01-29 阿坝州 31 18 31 7 15 0.5 32.0 31.905763 102.228565
4 2015-01-28 阿坝州 29 18 29 7 14 0.6 27.0 31.905763 102.228565
df.isnull().any() # 确认表格中是否还有缺失值
time        False
cityname    False
aqi         False
pm2_5       False
pm10        False
so2         False
no2         False
co          False
o3          False
lat         False
lng         False
dtype: bool
# 2.AQI、pm2_5、pm10、so2、no2、co、o3目前存在0值,可理解为该部分数据缺失,可用对应城市的平均值进行填充;
df[['aqi', 'pm2_5', 'pm10', 'so2', 'no2', 'co', 'o3']] = df[['aqi', 'pm2_5', 'pm10', 'so2', 
                                                             'no2', 'co', 'o3']].replace(0, np.NaN)
df.isnull().sum() # 将0值替换后缺失值的数量
time           0
cityname       0
aqi         4199
pm2_5       6817
pm10        4817
so2         1631
no2         1621
co          3493
o3          2342
lat            0
lng            0
dtype: int64
cities = df.cityname.value_counts().index
for city in cities:
    '''
    for循环计算每个城市污染物的平均值后替换NaN值
    '''
    for pollutant in ['aqi', 'pm2_5', 'pm10', 'so2', 'no2', 'co', 'o3']:
        df.loc[(df['cityname'] == city) & (df[pollutant].isnull()), pollutant] = df[df['cityname'] == city][pollutant].mean()
df.isnull().sum() # 再次检查缺失值
time        0
cityname    0
aqi         0
pm2_5       0
pm10        0
so2         0
no2         0
co          0
o3          0
lat         0
lng         0
dtype: int64
# 3.时间数据格式需要进行转换,创建季节列;
df['time'] = pd.to_datetime(df['time'])
df.info() #查看time列的数据类型

Int64Index: 557424 entries, 0 to 557423
Data columns (total 11 columns):
time        557424 non-null datetime64[ns]
cityname    557424 non-null object
aqi         557424 non-null float64
pm2_5       557424 non-null float64
pm10        557424 non-null float64
so2         557424 non-null float64
no2         557424 non-null float64
co          557424 non-null float64
o3          557424 non-null float64
lat         557424 non-null float64
lng         557424 non-null float64
dtypes: datetime64[ns](1), float64(9), object(1)
memory usage: 51.0+ MB
# 根据月份创建季节列
seasons = {12: 'Winter',
           1: 'Winter',
           2: 'Winter',
           3: 'Spring',
           4: 'Spring',
           5: 'Spring',
           6: 'Summer',
           7: 'Summer',
           8: 'Summer',
           9: 'Autumn',
           10: 'Autumn',
           11: 'Autumn'
} 
df['season'] = df['time'].apply(lambda x : seasons [x.month])
df.head()
time cityname aqi pm2_5 pm10 so2 no2 co o3 lat lng season
0 2014-12-31 阿坝州 53.0 33.0 55.0 3.0 23.0 1.0 35.0 31.905763 102.228565 Winter
1 2015-01-31 阿坝州 31.0 18.0 29.0 7.0 10.0 0.5 45.0 31.905763 102.228565 Winter
2 2015-01-30 阿坝州 34.0 19.0 30.0 7.0 13.0 0.6 48.0 31.905763 102.228565 Winter
3 2015-01-29 阿坝州 31.0 18.0 31.0 7.0 15.0 0.5 32.0 31.905763 102.228565 Winter
4 2015-01-28 阿坝州 29.0 18.0 29.0 7.0 14.0 0.6 27.0 31.905763 102.228565 Winter
# 4.创建空气质量等级列
bin_edges = [0, 50, 100, 150, 200, 300, 1210] # 根据AQI的划分等级设置标签
bin_names = ['优级', '良好', '轻度污染', '中度污染', '重度污染', '重污染']
df['空气质量'] = pd.cut(df['aqi'], bin_edges, labels=bin_names)
df.head()
time cityname aqi pm2_5 pm10 so2 no2 co o3 lat lng season 空气质量
0 2014-12-31 阿坝州 53.0 33.0 55.0 3.0 23.0 1.0 35.0 31.905763 102.228565 Winter 良好
1 2015-01-31 阿坝州 31.0 18.0 29.0 7.0 10.0 0.5 45.0 31.905763 102.228565 Winter 优级
2 2015-01-30 阿坝州 34.0 19.0 30.0 7.0 13.0 0.6 48.0 31.905763 102.228565 Winter 优级
3 2015-01-29 阿坝州 31.0 18.0 31.0 7.0 15.0 0.5 32.0 31.905763 102.228565 Winter 优级
4 2015-01-28 阿坝州 29.0 18.0 29.0 7.0 14.0 0.6 27.0 31.905763 102.228565 Winter 优级
# 5.列出每个城市所属的省份;

city_province={'即墨': '山东省', '阿坝州': '四川省', '安康': '陕西省', '阿克苏地区': '新疆维吾尔自治区', 
               '阿里地区': '西藏区', '阿拉善盟': '内蒙古自治区', '安庆': '安徽省', '安顺': '贵州省', '鞍山': '辽宁省',
               '克孜勒苏州': '新疆维吾尔自治区', '安阳': '河南省', '蚌埠': '安徽省', '白城': '吉林省', 
               '北海': '广西壮族自治区', '宝鸡': '陕西省', '毕节': '贵州省', '白山': '吉林省', '百色': '广西壮族自治区', 
               '保山': '云南省', '包头': '内蒙古自治区', '本溪': '辽宁省', '巴彦淖尔': '内蒙古自治区',
               '白银': '甘肃省', '巴中': '四川省', '滨州': '山东省', '亳州': '安徽省', '昌都': '西藏区', 
               '常德': '湖南省', '赤峰': '内蒙古自治区', '昌吉州': '新疆维吾尔自治区', '五家渠': '新疆维吾尔自治区',
               '楚雄州': '云南省', '朝阳': '辽宁省', '长治': '山西省', '潮州': '广东省', '郴州': '湖南省',
               '池州': '安徽省', '崇左': '广西壮族自治区', '滁州': '安徽省', '丹东': '辽宁省', '德宏州': '云南省', 
               '大理州': '云南省', '大庆': '黑龙江', '大同': '山西省', '定西': '甘肃省', '大兴安岭地区': '黑龙江', 
               '德阳': '四川省', '东营': '山东省', '黔南州': '贵州省', '达州': '四川省', '德州': '山东省', 
               '鄂尔多斯': '内蒙古自治区', '恩施州': '湖北省', '鄂州': '湖北省', '防城港': '广西壮族自治区',
               '抚顺': '辽宁省', '阜新': '辽宁省', '阜阳': '安徽省', '抚州': '江西省', '广安': '四川省',
               '贵港': '广西壮族自治区', '桂林': '广西壮族自治区', '果洛州': '青海省', '甘南州': '甘肃省', 
               '广元': '四川省', '甘孜州': '四川省', '赣州': '江西省', '海北州': '青海省', '鹤壁': '河南省',
               '淮北': '安徽省', '河池': '广西壮族自治区', '海东地区': '青海省', '鹤岗': '黑龙江', '黄冈': '湖北省', 
               '黑河': '黑龙江', '红河州': '云南省', '怀化': '湖南省', '呼伦贝尔': '内蒙古自治区', '葫芦岛': '辽宁省',
               '哈密地区': '新疆维吾尔自治区', '淮南': '安徽省', '黄山': '安徽省', '黄石': '湖北省', 
               '和田地区': '新疆维吾尔自治区', '海西州': '青海省', '河源': '广东省', '衡阳': '湖南省', 
               '汉中': '陕西省', '菏泽': '山东省', '贺州': '广西壮族自治区', '吉安': '江西省', '金昌': '甘肃省', 
               '晋城': '山西省', '景德镇': '江西省', '西双版纳州': '云南省', '九江': '江西省', '吉林': '吉林省',
               '荆门': '湖北省', '佳木斯': '黑龙江', '济宁': '山东省', '酒泉': '甘肃省', '湘西州': '湖南省',
               '鸡西': '黑龙江', '揭阳': '广东省', '嘉峪关': '甘肃省', '焦作': '河南省', '锦州': '辽宁省',
               '晋中': '山西省', '荆州': '湖北省', '开封': '河南省', '黔东南州': '贵州省',
               '克拉玛依': '新疆维吾尔自治区', '喀什地区': '新疆维吾尔自治区', '六安': '安徽省',
               '来宾': '广西壮族自治区', '聊城': '山东省', '临沧': '云南省', '娄底': '湖南省', '临汾': '山西省',
               '漯河': '河南省', '丽江': '云南省', '吕梁': '山西省', '陇南': '甘肃省', '六盘水': '贵州省',
               '乐山': '四川省', '凉山州': '四川省', '莱芜': '山东省', '辽阳': '辽宁省', '辽源': '吉林省',
               '临沂': '山东省', '龙岩': '福建省', '洛阳': '河南省', '林芝': '西藏区', '柳州': '广西壮族自治区'
               , '泸州': '四川省', '马鞍山': '安徽省', '牡丹江': '黑龙江', '茂名': '广东省', '眉山': '四川省',
               '绵阳': '四川省', '梅州': '广东省', '南充': '四川省', '宁德': '福建省', '内江': '四川省',
               '怒江州': '云南省', '南平': '福建省', '那曲地区': '西藏区', '南阳': '河南省', '平顶山': '河南省', 
               '盘锦': '辽宁省', '平凉': '甘肃省', '莆田': '福建省', '萍乡': '江西省', '濮阳': '河南省', '攀枝花': 
               '四川省', '曲靖': '云南省', '齐齐哈尔': '黑龙江', '七台河': '黑龙江', '黔西南州': '贵州省', '清远':
               '广东省', '庆阳': '甘肃省', '钦州': '广西壮族自治区', '泉州': '福建省', '日喀则': '西藏区', '日照': 
               '山东省', '韶关': '广东省', '绥化': '黑龙江', '石河子': '新疆维吾尔自治区', '商洛': '陕西省', '三明': 
               '福建省', '三门峡': '河南省', '山南': '西藏区', '遂宁': '四川省', '四平': '吉林省', '商丘': '河南省', 
               '上饶': '江西省', '汕头': '广东省', '汕尾': '广东省', '三亚': '海南省', '邵阳': '湖南省', '十堰': 
               '湖北省', '松原': '吉林省', '双鸭山': '黑龙江', '朔州': '山西省', '宿州': '安徽省', '随州': '湖北省', 
               '泰安': '山东省', '塔城地区': '新疆维吾尔自治区', '铜川': '陕西省', '通化': '吉林省', '铁岭': '辽宁省',
               '通辽': '内蒙古自治区', '铜陵': '安徽省', '吐鲁番地区': '新疆维吾尔自治区', '铜仁地区': '贵州省', 
               '天水': '甘肃省', '潍坊': '山东省', '威海': '山东省', '乌海': '内蒙古自治区', '芜湖': '安徽省', 
               '乌兰察布': '内蒙古自治区', '渭南': '陕西省', '文山州': '云南省', '武威': '甘肃省', '梧州': 
               '广西壮族自治区', '兴安盟': '内蒙古自治区', '许昌': '河南省', '宣城': '安徽省', '孝感': '湖北省',
               '迪庆州': '云南省', '锡林郭勒盟': '内蒙古自治区', '咸宁': '湖北省', '湘潭': '湖南省', '新乡': 
               '河南省', '咸阳': '陕西省', '新余': '江西省', '信阳': '河南省', '忻州': '山西省', '雅安': '四川省',
               '延安': '陕西省', '延边州': '吉林省', '宜宾': '四川省', '宜昌': '湖北省', '宜春': '江西省', '运城': 
               '山西省', '伊春': '黑龙江', '云浮': '广东省', '阳江': '广东省', '营口': '辽宁省', '榆林': '陕西省', 
               '玉林': '广西壮族自治区', '阳泉': '山西省', '玉树州': '青海省', '烟台': '山东省', '鹰潭': '江西省', 
               '玉溪': '云南省', '益阳': '湖南省', '岳阳': '湖南省', '永州': '湖南省', '淄博': '山东省', '自贡': 
               '四川省', '湛江': '广东省', '张家界': '湖南省', '周口': '河南省', '驻马店': '河南省', '昭通': '云南省',
               '张掖': '甘肃省', '资阳': '四川省', '遵义': '贵州省', '枣庄': '山东省', '漳州': '福建省', '株洲': 
               '湖南省', '深圳': '广东省', '福州': '福建省', '舟山': '浙江省', '青岛': '山东省', '无锡': '江苏省', 
               '湖州': '浙江省', '成都': '四川省', '石家庄': '河北省', '苏州': '新疆维吾尔自治区', '连云港': '江苏省',
               '徐州': '江苏省', '廊坊': '河北省', '常州': '江苏省', '宿迁': '江苏省', '衡水': '河北省', '兰州': 
               '甘肃省', '邢台': '河北省', '沧州': '河北省', '哈尔滨': '黑龙江', '济南': '山东省', '昆明': '云南省',
               '扬州': '江苏省', '杭州': '浙江省', '海口': '海南省', '南京': '江苏省', '广州': '广东省', '长沙':
               '湖南省', '厦门': '福建省', '秦皇岛': '河北省', '张家口': '河北省', '宁波': '浙江省', '南宁':
               '广西壮族自治区', '盐城': '江苏省', '邯郸': '河北省', '贵阳': '贵州省', '衢州': '浙江省', '承德': 
               '河北省', '南通': '江苏省', '沈阳': '辽宁省', '呼和浩特': '内蒙古自治区', '中山': '广东省', '武汉': 
               '湖北省', '合肥': '安徽省', '长春': '吉林省', '嘉兴': '浙江省', '大连': '辽宁省', '台州': '浙江省',
               '拉萨': '西藏区', '肇庆': '广东省', '西安': '陕西省', '保定': '河北省', '江门': '广东省', '西宁': 
               '青海省', '乌鲁木齐': '新疆维吾尔自治区', '绍兴': '浙江省', '淮安': '江苏省', '温州': '浙江省', '郑州':
               '河南省', '惠州': '广东省', '泰州': '新疆维吾尔自治区', '珠海': '广东省', '南昌': '江西省', '唐山': 
               '河北省', '金华': '浙江省', '佛山': '广东省', '东莞': '广东省', '丽水': '浙江省', '太原': '山西省', 
               '镇江': '江苏省', '阿勒泰地区': '新疆维吾尔自治区', '北京': '北京', '博州': '新疆维吾尔自治区',
               '常熟': '江苏省', '富阳': '浙江省', '固原': '宁夏回族自治区', '海门': '江苏省', '海南州': '青海省',
               '黄南州': '青海省', ' 即墨': '山东省', '胶南': '山东省', '句容': '江苏省', '金坛': '江苏省', '江阴': 
               '江苏省', '胶州': '山东省', '库尔勒': '新疆维吾尔自治区', '昆山': '江苏省', '临安': '浙江省',
               '莱西': '山东省', '临夏州': '甘肃省', '溧阳': '江苏省', '莱州': '山东省', '平度': '山东省', '普洱':
               '云南省', '蓬莱': '山东省', '荣成': '山东省', '乳山': '山东省', '寿光': '山东省', '石嘴山': 
               '宁夏回族自治区', '太仓': '江苏省', '文登': '山东省', '瓦房店': '辽宁省', '吴江': '江苏省', '吴忠': 
               '宁夏回族自治区', '襄阳': '湖北省', '伊犁哈萨克州': '新疆维吾尔自治区', '义乌': '浙江省', '宜兴':
               '江苏省', '诸暨': '浙江省', '张家港': '江苏省', '章丘': '山东省', '中卫': '宁夏回族自治区', '招远': 
               '山东省', '天津': '天津市', '重庆': '重庆市', '银川': '甘肃省', '上海': '上海市'}
df['省份'] = df['cityname'].map(city_province)
df.head()
time cityname aqi pm2_5 pm10 so2 no2 co o3 lat lng season 空气质量 省份
0 2014-12-31 阿坝州 53.0 33.0 55.0 3.0 23.0 1.0 35.0 31.905763 102.228565 Winter 良好 四川省
1 2015-01-31 阿坝州 31.0 18.0 29.0 7.0 10.0 0.5 45.0 31.905763 102.228565 Winter 优级 四川省
2 2015-01-30 阿坝州 34.0 19.0 30.0 7.0 13.0 0.6 48.0 31.905763 102.228565 Winter 优级 四川省
3 2015-01-29 阿坝州 31.0 18.0 31.0 7.0 15.0 0.5 32.0 31.905763 102.228565 Winter 优级 四川省
4 2015-01-28 阿坝州 29.0 18.0 29.0 7.0 14.0 0.6 27.0 31.905763 102.228565 Winter 优级 四川省
# 6.创建省份空气质量排名列(以AQI平均值为基础);

a = df.groupby('省份').mean().aqi.sort_values().index

b = []
for _ in range(1, a.shape[0]+1):
    b.append(_)
    
pro_rank_dic = dict(zip(a, b))
pro_rank_dic
{'海南省': 1,
 '云南省': 2,
 '福建省': 3,
 '贵州省': 4,
 '西藏区': 5,
 '广东省': 6,
 '广西壮族自治区': 7,
 '黑龙江': 8,
 '江西省': 9,
 '青海省': 10,
 '内蒙古自治区': 11,
 '四川省': 12,
 '湖南省': 13,
 '浙江省': 14,
 '吉林省': 15,
 '甘肃省': 16,
 '重庆市': 17,
 '上海市': 18,
 '辽宁省': 19,
 '安徽省': 20,
 '宁夏回族自治区': 21,
 '湖北省': 22,
 '江苏省': 23,
 '陕西省': 24,
 '山西省': 25,
 '山东省': 26,
 '新疆维吾尔自治区': 27,
 '天津市': 28,
 '河南省': 29,
 '北京': 30,
 '河北省': 31}
# 匹配省名,增加排名列
df['所属省份空气质量排名'] = df['省份'].map(pro_rank_dic)
df.head()
time cityname aqi pm2_5 pm10 so2 no2 co o3 lat lng season 空气质量 省份 所属省份空气质量排名
0 2014-12-31 阿坝州 53.0 33.0 55.0 3.0 23.0 1.0 35.0 31.905763 102.228565 Winter 良好 四川省 12
1 2015-01-31 阿坝州 31.0 18.0 29.0 7.0 10.0 0.5 45.0 31.905763 102.228565 Winter 优级 四川省 12
2 2015-01-30 阿坝州 34.0 19.0 30.0 7.0 13.0 0.6 48.0 31.905763 102.228565 Winter 优级 四川省 12
3 2015-01-29 阿坝州 31.0 18.0 31.0 7.0 15.0 0.5 32.0 31.905763 102.228565 Winter 优级 四川省 12
4 2015-01-28 阿坝州 29.0 18.0 29.0 7.0 14.0 0.6 27.0 31.905763 102.228565 Winter 优级 四川省 12
# 7.创建城市空气质量排名列(以AQI为基础)。
c = df.groupby('cityname').mean().aqi.sort_values().index

d = []
for _ in range(1, c.shape[0]+1):
    d.append(_)
    
city_rank_dic = dict(zip(c, d))
city_rank_dic
{'三亚': 1,
 '迪庆州': 2,
 '海口': 3,
 '丽江': 4,
 '黔西南州': 5,
 '怒江州': 6,
 '阿坝州': 7,
 '楚雄州': 8,
 '大理州': 9,
 '普洱': 10,
....
 '德州': 357,
 '安阳': 358,
 '邯郸': 359,
 '衡水': 360,
 '克孜勒苏州': 361,
 '石家庄': 362,
 '阿克苏地区': 363,
 '邢台': 364,
 '保定': 365,
 '喀什地区': 366,
 '和田地区': 367}
# 匹配城市名,增加排名列
df['城市空气质量全国排名'] = df['cityname'].map(city_rank_dic)
df.head()
time cityname aqi pm2_5 pm10 so2 no2 co o3 lat lng season 空气质量 省份 所属省份空气质量排名 城市空气质量全国排名
0 2014-12-31 阿坝州 53.0 33.0 55.0 3.0 23.0 1.0 35.0 31.905763 102.228565 Winter 良好 四川省 12 7
1 2015-01-31 阿坝州 31.0 18.0 29.0 7.0 10.0 0.5 45.0 31.905763 102.228565 Winter 优级 四川省 12 7
2 2015-01-30 阿坝州 34.0 19.0 30.0 7.0 13.0 0.6 48.0 31.905763 102.228565 Winter 优级 四川省 12 7
3 2015-01-29 阿坝州 31.0 18.0 31.0 7.0 15.0 0.5 32.0 31.905763 102.228565 Winter 优级 四川省 12 7
4 2015-01-28 阿坝州 29.0 18.0 29.0 7.0 14.0 0.6 27.0 31.905763 102.228565 Winter 优级 四川省 12 7
df.info() # 全部清洗完后,再查看一次数据整体情况

Int64Index: 557424 entries, 0 to 557423
Data columns (total 16 columns):
time          557424 non-null datetime64[ns]
cityname      557424 non-null object
aqi           557424 non-null float64
pm2_5         557424 non-null float64
pm10          557424 non-null float64
so2           557424 non-null float64
no2           557424 non-null float64
co            557424 non-null float64
o3            557424 non-null float64
lat           557424 non-null float64
lng           557424 non-null float64
season        557424 non-null object
空气质量          557424 non-null category
省份            557424 non-null object
所属省份空气质量排名    557424 non-null int64
城市空气质量全国排名    557424 non-null int64
dtypes: category(1), datetime64[ns](1), float64(9), int64(2), object(3)
memory usage: 68.6+ MB

3.4 构建模型

df.describe()
aqi pm2_5 pm10 so2 no2 co o3 lat lng 所属省份空气质量排名 城市空气质量全国排名
count 557424.000000 557424.000000 557424.000000 557424.000000 557424.000000 557424.000000 557424.000000 557424.000000 557424.000000 557424.000000 557424.000000
mean 83.352753 49.858352 85.839185 23.012129 31.140534 1.320357 78.645854 33.320514 112.931476 16.795900 191.178832
std 49.496925 235.709794 73.957719 25.595366 18.015186 49.113311 40.107875 6.583132 9.278219 8.716008 106.081159
min 3.000000 1.000000 1.000000 1.000000 1.000000 0.100000 1.000000 18.257776 75.992973 1.000000 1.000000
25% 52.000000 23.000000 44.000000 9.000000 18.000000 0.700000 63.000000 28.668283 108.069948 9.000000 100.000000
50% 72.000000 38.000000 69.000000 16.000000 27.000000 0.900000 75.364005 32.929499 114.351807 16.000000 195.000000
75% 100.000000 61.000000 107.000000 27.000000 40.000000 1.200000 90.000000 37.661160 119.455835 25.000000 284.000000
max 1210.000000 65535.000000 12060.000000 1495.000000 574.000000 9999.900000 11281.000000 51.991789 131.171402 31.000000 367.000000

基于Python的2013-2018全国城市空气质量分析_第3张图片

plt.figure(figsize=(25,5))
sns.heatmap(df.corr(), vmax=1, square=False, annot=True, linewidth=1)
plt.yticks(rotation=0);

[外链图片转存失败(img-iX160M0q-1565960643261)(output_36_0.png)]

与全国空气质量有较大关系的污染物指标是pm10、so2、no2。

1.全国范围:

问题1.1:全国哪些城市污染较严重,那些省份污染较严重?(AQI作为判断依据)

# 使用pyecharts模块导入地图,在地图上显示城市空气质量
from pyecharts import Geo
 
keys = df.groupby('cityname').aqi.mean().index
values = df.groupby('cityname').aqi.mean().values
 
geo = Geo("全国主要城市空气质量图", "data from AQI", title_color="#fff",title_pos="left", width=800, height=600,background_color='#404a59')
 
geo.add("全国城市空气质量图", keys, values, visual_range=[38.072282, 193.755892], type='effectScatter',visual_text_color="#fff", symbol_size=15,is_visualmap=True, is_roam=True) # type有scatter, effectScatter, heatmap三种模式可选,可根据自己的需求选择对应的图表模式
geo.render(path="全国主要城市空气质量图.html")

基于Python的2013-2018全国城市空气质量分析_第4张图片

从地图上可以看出,中国的北部内陆地区以及西北部地区空气质量较差,沿海地区及高原地区空气质量较好。

pd.DataFrame(df.groupby('cityname').aqi.mean().sort_values().tail(10)).plot.barh(figsize=(20,10))
plt.xlim(125,200)
plt.style.use('dark_background')
plt.title('全国空气质量最差城市')
plt.xlabel('AQI')
plt.ylabel('城市名')
plt.legend('AQI')
plt.grid(linestyle=':', color='w')
plt.show();

基于Python的2013-2018全国城市空气质量分析_第5张图片

全国空气质量最差的10个城市/地区(排名分先后,差-好):

和田地区、喀什地区、保定、邢台、阿克苏地区、石家庄、克牧勒苏州、衡水、邯郸、安阳

pd.DataFrame(df.groupby('cityname').aqi.mean().sort_values(ascending=False).tail(10)).plot.barh(figsize=(20,10))
plt.style.use('dark_background')
plt.title('全国空气质量十佳城市')
plt.xlabel('AQI')
plt.ylabel('城市名')
plt.xlim(37,47)
plt.legend('AQI')
plt.grid(linestyle=':', color='w')
plt.show();

基于Python的2013-2018全国城市空气质量分析_第6张图片

全国空气质量最好的10个城市/地区(排名分先后,好-差):

三亚、迪庆州、海口、丽江、黔西南州、怒江州、阿坝州、楚雄州、大理州、普洱

pd.DataFrame(df.groupby('省份').aqi.mean().sort_values().tail(10)).plot.barh(figsize=(20,10))
plt.style.use('dark_background')
plt.title('全国空气质量最差省份')
plt.xlabel('AQI')
plt.ylabel('省份')
plt.xlim(85, 120)
plt.legend('AQI')
plt.grid(linestyle=':', color='w')
plt.show();

基于Python的2013-2018全国城市空气质量分析_第7张图片

全国空气质量最差的10个省份(排名分先后,差-好):

河北省、北京、河南省、天津、新疆、山东、山西、陕西、江苏、湖北

pd.DataFrame(df.groupby('省份').aqi.mean().sort_values(ascending=False).tail(10)).plot.barh(figsize=(20,10))
plt.style.use('dark_background')
plt.title('全国空气质量十佳省份')
plt.xlabel('AQI')
plt.ylabel('省份')
plt.xlim(40, 75)
plt.legend('AQI')
plt.grid(linestyle=':', color='w')
plt.show();

基于Python的2013-2018全国城市空气质量分析_第8张图片

全国空气质量最好的10个省份(排名分先后,好-差):

海南、云南、福建、贵州、西藏、广东、广西、黑龙江、江西、青海

问题1.2:污染较严重省份的主要污染物是什么?

df_top10_polluted = []
df_top10_polluted = pd.DataFrame(df_top10_polluted)
for _ in range(0, 10):
    '''
    提取空气质量最严重的省份信息
    '''
    temp = df[df['省份'] == df.groupby('省份').aqi.mean().sort_values().tail(10).index[_]]
    df_top10_polluted = pd.concat([df_top10_polluted, temp])
# 这里只关注轻度污染以上时的污染物情况
df_overpolluted = df_top10_polluted[df_top10_polluted['aqi'] >= 100][['aqi', 'pm2_5', 'pm10', 'so2', 'no2', 'co', 'o3']] 
sns.regplot(x='pm2_5', y='aqi', data=df_overpolluted);

基于Python的2013-2018全国城市空气质量分析_第9张图片

sns.regplot(x='pm10', y='aqi', data=df_overpolluted);

基于Python的2013-2018全国城市空气质量分析_第10张图片

sns.regplot(x='so2', y='aqi', data=df_overpolluted);

基于Python的2013-2018全国城市空气质量分析_第11张图片

sns.regplot(x='no2', y='aqi', data=df_overpolluted);

基于Python的2013-2018全国城市空气质量分析_第12张图片

sns.regplot(x='co', y='aqi', data=df_overpolluted);

基于Python的2013-2018全国城市空气质量分析_第13张图片

sns.regplot(x='o3', y='aqi', data=df_overpolluted);

基于Python的2013-2018全国城市空气质量分析_第14张图片

plt.figure(figsize=(15,5))
sns.heatmap(df_overpolluted.corr(), vmax=1, square=False, annot=True, linewidth=1)
plt.yticks(rotation=0);

基于Python的2013-2018全国城市空气质量分析_第15张图片

由线性关系图和热点图可知,这十个空气质量最差省份的主要污染物是pm10、so2、no2,这三种物质的高低对AQI值有较大影响,与AQI成正相关关系。此外,so2与no2两者也表现出较强的正相关关系。

问题1.3:污染较严重城市的主要污染物是什么?

df_top10_polluted_city = []
df_top10_polluted_city = pd.DataFrame(df_top10_polluted_city)
for _ in range(0, 10):
    '''
    提取空气质量最严重的城市信息
    '''
    temp = df[df['cityname'] == df.groupby('cityname').aqi.mean().sort_values().tail(10).index[_]]
    df_top10_polluted_city = pd.concat([df_top10_polluted_city, temp])
# 这里只关注轻度污染以上时的污染物情况
df_overpolluted_city = df_top10_polluted_city[df_top10_polluted_city['aqi'] >= 100][['aqi', 'pm2_5', 'pm10',
                                                                                     'so2', 'no2', 'co', 'o3']] 
sns.regplot(x='pm2_5', y='aqi', data=df_overpolluted_city);

基于Python的2013-2018全国城市空气质量分析_第16张图片

sns.regplot(x='pm10', y='aqi', data=df_overpolluted_city);

基于Python的2013-2018全国城市空气质量分析_第17张图片

sns.regplot(x='so2', y='aqi', data=df_overpolluted_city);

基于Python的2013-2018全国城市空气质量分析_第18张图片

sns.regplot(x='no2', y='aqi', data=df_overpolluted_city);

基于Python的2013-2018全国城市空气质量分析_第19张图片

sns.regplot(x='co', y='aqi', data=df_overpolluted_city);

基于Python的2013-2018全国城市空气质量分析_第20张图片

sns.regplot(x='o3', y='aqi', data=df_overpolluted_city);

基于Python的2013-2018全国城市空气质量分析_第21张图片

plt.figure(figsize=(15,5))
sns.heatmap(df_overpolluted_city.corr(), vmax=1, square=False, annot=True, linewidth=1)
plt.yticks(rotation=0);

基于Python的2013-2018全国城市空气质量分析_第22张图片

同样,由线性关系图和热点图可知,十个空气质量最差城市的主要污染物是pm2.5、pm10、so2、no2,四种物质的高低对AQI值有较大影响,与AQI成正相关关系。其中值得注意的是pm2.5与城市空气质量密切相关,但与省空气质量相关性不是非常大。so2与no2之间、pm2.5与pm10、so2、no2之间表现出了较强的正相关关系,也就是说pm10、so2、no2三个指标中的某一指标的升高都会伴随着pm2.5的升高。

问题1.4:全国哪个季节的污染最严重?

pd.DataFrame(df.groupby('season').aqi.mean().sort_values()).plot.barh(figsize=(15,10))
plt.title('全国不同季节空气质量情况')
plt.xlabel('AQI')
plt.ylabel('季节')
plt.xlim(60)
plt.legend('AQI')
plt.grid(linestyle=':', color='w')
plt.show();

基于Python的2013-2018全国城市空气质量分析_第23张图片

df.groupby('season').aqi.mean().sort_values()
season
Summer     71.911104
Autumn     76.040072
Spring     82.730394
Winter    101.647808
Name: aqi, dtype: float64

全国空气质量冬季时最差,平均AQI为101.6(轻度污染),夏季时最好,平均AQI为71.9(良好)。

问题1.5:2013年-2018年全国整体空气质量如何变化?

f, ax= plt.subplots(figsize = (14, 10))
sns.relplot(x='time', y='aqi', kind = 'line', data=df, ax=ax);

基于Python的2013-2018全国城市空气质量分析_第24张图片

2013-2014年整体AQI较2015~2018年高。

# 提取年和月进一步分析整体AQI情况
times = df['time'].shape[0]
a = []
for _ in range(times):
    month = df['time'][_].month
    a.append(month)
df['month'] = a

b = []
for i in range(times):
    year = df['time'][i].year
    b.append(year)
df['year'] = b

df.head()
time cityname aqi pm2_5 pm10 so2 no2 co o3 lat lng season 空气质量 省份 所属省份空气质量排名 城市空气质量全国排名 month year
0 2014-12-31 阿坝州 53.0 33.0 55.0 3.0 23.0 1.0 35.0 31.905763 102.228565 Winter 良好 四川省 12 7 12 2014
1 2015-01-31 阿坝州 31.0 18.0 29.0 7.0 10.0 0.5 45.0 31.905763 102.228565 Winter 优级 四川省 12 7 1 2015
2 2015-01-30 阿坝州 34.0 19.0 30.0 7.0 13.0 0.6 48.0 31.905763 102.228565 Winter 优级 四川省 12 7 1 2015
3 2015-01-29 阿坝州 31.0 18.0 31.0 7.0 15.0 0.5 32.0 31.905763 102.228565 Winter 优级 四川省 12 7 1 2015
4 2015-01-28 阿坝州 29.0 18.0 29.0 7.0 14.0 0.6 27.0 31.905763 102.228565 Winter 优级 四川省 12 7 1 2015
plt.figure(figsize=(30,10))
sns.barplot(x='month', y='aqi', hue='year', data=df)
plt.style.use('dark_background')
plt.ylim(50)
plt.title('2013年~2108年全国空气质量1~12月对比')
plt.show();

基于Python的2013-2018全国城市空气质量分析_第25张图片

按每月AQI进行对比,2013年AQI比后面几年的数据都要高出很多,特别是8月12月的AQI数据。20152018年的AQI明显比前两年有所降低。高AQI的月份主要在12月2月,低AQI的月份主要在8月10月。

df.groupby('year').aqi.mean().plot.bar(figsize=(15 ,10))
plt.title('全国空气质量年变化')
plt.xticks(rotation=0)
plt.xlabel('年')
plt.ylabel('AQI')
plt.ylim(60)
plt.legend('AQI')
plt.grid(linestyle=':', color='w')
plt.show();

基于Python的2013-2018全国城市空气质量分析_第26张图片

上图以年份为单位进行对比,可以明显看出2015年后全国空气质量有很大改善,特别是2016年~2018年,平均AQI约为80,较2013年下降40%。

2.全省范围(广东省为例):

问题2.1:广东省的主要污染物是什么?

df_gd = df[df['省份'] == '广东省']
df_gd_pollutant = df_gd[df_gd['aqi'] >= 100][['aqi', 'pm2_5', 'pm10', 'so2', 'no2', 'co', 'o3']]
sns.regplot(x='pm2_5', y='aqi', data=df_gd_pollutant);

基于Python的2013-2018全国城市空气质量分析_第27张图片

sns.regplot(x='pm10', y='aqi', data=df_gd_pollutant);

基于Python的2013-2018全国城市空气质量分析_第28张图片

sns.regplot(x='so2', y='aqi', data=df_gd_pollutant);

基于Python的2013-2018全国城市空气质量分析_第29张图片

sns.regplot(x='no2', y='aqi', data=df_gd_pollutant);

基于Python的2013-2018全国城市空气质量分析_第30张图片

sns.regplot(x='co', y='aqi', data=df_gd_pollutant);

基于Python的2013-2018全国城市空气质量分析_第31张图片

sns.regplot(x='o3', y='aqi', data=df_gd_pollutant);

基于Python的2013-2018全国城市空气质量分析_第32张图片

plt.figure(figsize=(15,5))
sns.heatmap(df_gd_pollutant.corr(), vmax=1, square=False, annot=True, linewidth=1)
plt.yticks(rotation=0);

基于Python的2013-2018全国城市空气质量分析_第33张图片

由线性关系图和热点图可知广东省最主要的污染物是pm2.5、pm10,其次是so2、no2、co。与全国空气质量和污染物指标关系不同的是,广东省的pm2.5、pm10、so2、no2、co5个污染物指标之间它们互相影响,都有较强的正相关关系。

问题2.2:全省哪些城市污染较严重?(AQI作为判断依据)

print('广东省的城市数量为:', df_gd.groupby('cityname').aqi.mean().shape[0])
广东省的城市数量为: 21
df_gd.groupby('cityname').aqi.mean().sort_values().tail(3) # 得出污染较严重的3个城市
cityname
佛山    73.004110
东莞    73.461992
广州    74.189665
Name: aqi, dtype: float64

广东省21个城市中,佛山、东莞、广州空气质量最差,AQI分别为73、73.5、74.2,空气质量均为良。

问题2.3:全省哪个季节的污染最严重?

pd.DataFrame(df_gd.groupby('season').aqi.mean().sort_values()).plot.barh(figsize=(15,10))
plt.title('广东省不同季节空气质量情况')
plt.xlabel('AQI')
plt.ylabel('季节')
plt.xlim(50)
plt.legend('AQI')
plt.grid(linestyle=':', color='w')
plt.show();

基于Python的2013-2018全国城市空气质量分析_第34张图片

广东省冬季AQI较高,空气质量较差,夏季AQI较低,空气质量较好。

问题2.4:广东省空气质量在全国的排名??

df_gd[['省份', '所属省份空气质量排名']].head(1)
省份 所属省份空气质量排名
53971 广东省 6

广东省空气质量全国排名第6

3.全市范围(深圳市为例):

问题3.1:深圳市的主要污染物是什么?

df_sz = df[df['cityname'] == '深圳']
df_sz_pollutant = df_sz[df_sz['aqi'] >= 100][['aqi', 'pm2_5', 'pm10', 'so2', 'no2', 'co', 'o3']]
sns.regplot(x='pm2_5', y='aqi', data=df_sz_pollutant);

基于Python的2013-2018全国城市空气质量分析_第35张图片

sns.regplot(x='pm10', y='aqi', data=df_sz_pollutant);

基于Python的2013-2018全国城市空气质量分析_第36张图片

sns.regplot(x='so2', y='aqi', data=df_sz_pollutant);

基于Python的2013-2018全国城市空气质量分析_第37张图片

sns.regplot(x='no2', y='aqi', data=df_sz_pollutant);

基于Python的2013-2018全国城市空气质量分析_第38张图片

sns.regplot(x='co', y='aqi', data=df_sz_pollutant);

基于Python的2013-2018全国城市空气质量分析_第39张图片

sns.regplot(x='o3', y='aqi', data=df_sz_pollutant);

基于Python的2013-2018全国城市空气质量分析_第40张图片

plt.figure(figsize=(15,5))
sns.heatmap(df_sz_pollutant.corr(), vmax=1, square=False, annot=True, linewidth=1)
plt.yticks(rotation=0);

基于Python的2013-2018全国城市空气质量分析_第41张图片

深圳市主要的污染物是pm2.5、pm10、so2、co。与广东省主要污染物不同的是,深圳市的no2对空气质量的影响不大,但no2与pm2.5、pm10、co三个指标有较强的正相关关系。

问题3.2:深圳空气质量在全国的排名?

df_sz[['cityname', '城市空气质量全国排名']].head(1)
cityname 城市空气质量全国排名
433042 深圳 38

深圳市空气质量在全国城市空气质量排名38位

df_sz.groupby('空气质量').time.count().plot.bar(figsize=(10,5))
plt.xticks(rotation=0)
plt.ylabel('次数')
plt.title('2013-2018深圳空气质量次数图')
plt.show();
print('平均AQI为:%.f\n\n' % (df_sz.aqi.mean()), df_sz.groupby('空气质量').time.count())

基于Python的2013-2018全国城市空气质量分析_第42张图片

平均AQI为:55

 空气质量
优级      871
良好      745
轻度污染     79
中度污染      8
重度污染      0
重污染       0
Name: time, dtype: int64

深圳平均AQI为55,接近优级水平。2013年~2018年空气质量有871次优,745次良好,79次轻度污染,8次中度污染,没有重度污染和重污染。

问题3.3:深圳哪个季节的污染最严重?

pd.DataFrame(df_sz.groupby('season').aqi.mean().sort_values()).plot.barh(figsize=(15,10))
plt.title('深圳不同季节空气质量情况')
plt.xlabel('AQI')
plt.ylabel('季节')
plt.xlim(40)
plt.legend('AQI')
plt.grid(linestyle=':', color='w')
plt.show();

基于Python的2013-2018全国城市空气质量分析_第43张图片

深圳冬季空气质量相对较差,平均AQI约为65,夏季空气质量较好,空气质量优级。

3.5 分析结果
根据2013年6月~2018年7月全国空气质量数据得出以下结论:

  • 中国的北部内陆地区以及西北部地区空气质量较差,沿海地区及高原地区空气质量较好;
  • 全国空气质量最差的10个省份(排名分先后,差-好):河北省、北京、河南省、天津、新疆、山东、山西、陕西、江苏、湖北
  • 全国空气质量最好的10个省份(排名分先后,好-差):海南、云南、福建、贵州、西藏、广东、广西、黑龙江、江西、青海
  • 全国空气质量最差的10个城市/地区(排名分先后,差-好):和田地区、喀什地区、保定、邢台、阿克苏地区、石家庄、克牧勒苏州、衡水、邯郸
  • 全国空气质量最好的10个城市/地区(排名分先后,好-差):三亚、迪庆州、海口、丽江、黔西南州、怒江州、阿坝州、楚雄州、大理州、普洱
  • 空气质量最差省份的主要污染物是pm10、so2、no2。so2与no2两者正相关;
  • 空气质量最差城市的主要污染物是pm2.5、pm10、so2、no2。so2与no2之间、pm2.5与pm10、so2、no2之间有较强的正相关关系;
  • 全国空气质量冬季时最差,平均AQI为101.6(轻度污染),夏季时最好,平均AQI为71.9(良好);
  • 2015年后全国空气质量有很大改善,特别是2016年~2018年,平均AQI约为80,较2013年下降40%
  • 广东省最主要的污染物是pm2.5、pm10,其次是so2、no2、co;
  • 广东省21个城市中,佛山、东莞、广州空气质量最差,AQI分别为73、73.5、74.2,空气质量均为良;
  • 广东省冬季AQI较高,空气质量较差,夏季AQI较低,空气质量较好;
  • 广东省空气质量全国排名第6
  • 深圳市主要的污染物是pm2.5、pm10、so2、co
  • 深圳市空气质量在全国城市空气质量排名38位
  • 深圳平均AQI为55,接近优级水平。2013年~2018年空气质量有871次优,745次良好,79次轻度污染,8次中度污染,没有重度污染和重污染;
  • 深圳冬季空气质量相对较差,平均AQI约为65,夏季空气质量较好,空气质量优级。

4. 建议

关于空气污染物的控制:

  • 省级层面上建议注重控制pm10、so2、no2
  • 市级层面上建议注重控制pm2.5、pm10、so2、no2
  • 对于广东省,建议主要控制pm2.5和pm10,适当关注so2、no2、co的排放
  • 对于深圳市,建议主要控制pm2.5、pm10、so2、co,适当关注no2的排放

你可能感兴趣的:(python)