中国五大城市PM2.5数据分析

  • 前言
  • 一、关于数据集
    • 1.数据集是5个CSV文件
    • 2.对于每一个数据集而言有这些属性
    • 3.如何衡量污染状态
    • 4.数据准备
    • 5.处理方法
  • 二、分析五城市污染状态
  • 三、五城市每个区空气质量的月度差异
  • 四、统计每个城市每天的平均PM2.5的数值
  • 五、基于天数对比中国环保部和美国驻华大使馆统计的污染状态
  • 六、全代码

前言

老师给我们提供了5个数据文件,对应记录着5个城市的从2010年1月1日到2015年12月31日的逐小时的部分与空气质量相关的指标数据。
我们需要完成以下4个任务:
1.分析五城市污染状态
2.五城市每个区空气质量的月度差异
3.统计每个城市每天的平均PM2.5的数值
4.基于天数对比中国环保部和美国驻华大使馆统计的污染状态


一、关于数据集

1.数据集是5个CSV文件

BeijingPM20100101_20151231.csv
ChengduPM20100101_20151231.csv
GuangzhouPM20100101_20151231.csv
ShanghaiPM20100101_20151231.csv
ShenyangPM20100101_20151231.csv

2.对于每一个数据集而言有这些属性

No:记录编号,整型
year:年份,整型
month:月份,整型
day:日期,整型
hour:小时,整型
season:季度,整型
PM2.5:中国环保部发布的PM2.5指数(ug/m3),浮点型
PM_US:美国驻华大使馆发布的PM2.5指数(ug/m3),浮点型
DEWP:露点温度(摄氏度)
TEMP:温度(摄氏度)
HUMI:湿度(%)
PRES:气压(hpa)
cbwd:合成风向
Iws:合成风速(m/s)
Precipitation:每小时降水量(mm)
Iprec:累积降水量(mm)

3.如何衡量污染状态

首先找到相关的标准文件

中华人民共和国生态环境部 环境空气质量指数(AQI)技术规定(试行)

这里我们做了一个不是很合理的假设–PM2.5是首要污染物,即令AQI = IAQI(PM2.5)
我们使用空气质量分指数IAQI中的PM2.5数值高低来衡量污染状态,从以上文件中分为六个区间:

等级 污染程度 区间
level_1 优(excellent) PM2.5 <= 50
level_2 良(good) 50 < PM2.5 <= 100
level_3 轻度污染(light) 100 < PM2.5 <= 150
level_4 中度污染(medium) 150 < PM2.5 <= 200
level_5 重度污染(heavy) 200 < PM2.5 <= 300
level_6 严重污染(serious) PM2.5 > 300

这5个城市都有至少2个监测点,我们用每个监测点的PM2.5来衡量这个区的AQI,用每个城市各个区PM2.5的平均值衡量这个城市的AQI

4.数据准备

对每个城市而言分析方法是一样的,即对于每个城市,我们需要该城市每个小时的各个区的PM2.5数据。

# 公共列
common_cols = ['year', 'month', 'day', 'hour']
# 5个城市
citys = ['beijing', 'chengdu', 'guangzhou', 'shanghai', 'shenyang']
# 数据集部分属性
data_config_dict = {'beijing': ('data/BeijingPM20100101_20151231.csv', ['PM_Dongsi', 'PM_Dongsihuan', 'PM_Nongzhanguan'], '北京'),'chengdu': ('data/ChengduPM20100101_20151231.csv', ['PM_Caotangsi', 'PM_Shahepu'], '成都'),'guangzhou': ('data/GuangzhouPM20100101_20151231.csv', ['PM_City Station', 'PM_5th Middle School'], '广州'),'shanghai': ('data/ShanghaiPM20100101_20151231.csv', ['PM_Jingan', 'PM_Xuhui'], '上海'),'shenyang': ('data/ShenyangPM20100101_20151231.csv', ['PM_Taiyuanjie', 'PM_Xiaoheyan'], '沈阳')
}filepath = data_config_dict[city][0]
districts = data_config_dict[city][1]
city_name = data_config_dict[city][2]
data = pd.read_csv(filepath, usecols=common_cols + districts)

5.处理方法

在处理数据的时候可以先准备好一个城市的各个区的PM2.5数据,在把数据传入我们实现写好的函数中处理,实现代码复用。

def pct_pol_level(data_arr):level_1 = data_arr[data_arr <= 50].shape[0]level_2 = data_arr[data_arr <= 100].shape[0]level_3 = data_arr[(100 < data_arr) & (data_arr <= 150)].shape[0]level_4 = data_arr[(150 < data_arr) & (data_arr <= 200)].shape[0]level_5 = data_arr[(200 < data_arr) & (data_arr <= 300)].shape[0]level_6 = data_arr[data_arr > 300].shape[0]levels = np.array([level_1, level_2, level_3, level_4, level_5, level_6])print(levels)result = levels / np.sum(levels)print(result)return result

二、分析五城市污染状态

# 分析五城市污染状态
# size 是该城市的各空气质量等级对应天数占比列表
size = pct_pol_level(data[districts].mean(axis=1))
# 通过饼状图可视化
ax1.pie(size, explode=explode, labels=level_label,autopct='%1.2f%%',radius=1.1,labeldistance=1.05,startangle=90)

三、五城市每个区空气质量的月度差异

 group = data.groupby(data['month'])[districts]group.mean().plot(ax=ax2)ax2.set_ylabel('PM2.5')ax2.set_title('月度指数')

四、统计每个城市每天的平均PM2.5的数值

df[city] = data.groupby(by=["year", "month", "day"])[districts].mean().mean(axis=1)

五、基于天数对比中国环保部和美国驻华大使馆统计的污染状态

data["PM_US Post"] = pd.read_csv(filepath, usecols=['PM_US Post'])
group = data.groupby(by=['year', 'month', 'day'])
Y1 = pct_pol_level(group[districts].mean().mean(axis=1))
Y2 = pct_pol_level(group['PM_US Post'].mean())
X = np.arange(6)
ax4 = ax3.twinx()
width = 0.45
bar1 = ax3.bar(X - width / 2, Y1, width=width, alpha=0.8, color='r', label="中国")
bar2 = ax4.bar(X + width / 2, Y2, width=width, alpha=0.8, color='g', label="美国")
ax3.legend((bar1, bar2), ('中国', '美国'), loc='upper right')
plt.title('中美对比')
plt.xticks(X, labels=level_label)

六、全代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os# 指定数据集路径
from matplotlib import gridspecdataset_path = './data'# 结果保存路径
output_path = './output'if not os.path.exists(output_path):os.mkdir(output_path)
# 公共列
common_cols = ['year', 'month', 'day', 'hour']
# 5个城市
citys = ['beijing', 'chengdu', 'guangzhou', 'shanghai', 'shenyang']
# 数据集部分属性
data_config_dict = {'beijing': ('data/BeijingPM20100101_20151231.csv', ['PM_Dongsi', 'PM_Dongsihuan', 'PM_Nongzhanguan'], '北京'),'chengdu': ('data/ChengduPM20100101_20151231.csv', ['PM_Caotangsi', 'PM_Shahepu'], '成都'),'guangzhou': ('data/GuangzhouPM20100101_20151231.csv', ['PM_City Station', 'PM_5th Middle School'], '广州'),'shanghai': ('data/ShanghaiPM20100101_20151231.csv', ['PM_Jingan', 'PM_Xuhui'], '上海'),'shenyang': ('data/ShenyangPM20100101_20151231.csv', ['PM_Taiyuanjie', 'PM_Xiaoheyan'], '沈阳')
}def pct_pol_level(data_arr):level_1 = data_arr[data_arr <= 50].shape[0]level_2 = data_arr[data_arr <= 100].shape[0]level_3 = data_arr[(100 < data_arr) & (data_arr <= 150)].shape[0]level_4 = data_arr[(150 < data_arr) & (data_arr <= 200)].shape[0]level_5 = data_arr[(200 < data_arr) & (data_arr <= 300)].shape[0]level_6 = data_arr[data_arr > 300].shape[0]levels = np.array([level_1, level_2, level_3, level_4, level_5, level_6])print(levels)result = levels / np.sum(levels)print(result)return result# 使得绘图能够显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.DataFrame()
# 饼图参数
explode = [0.1, 0, 0, 0, 0, 0]
# 空气质量各个级别标签
level_label = ["优", "良", "轻度", "中度", "重度", "严重"]for city in citys:# 数据准备filepath = data_config_dict[city][0]districts = data_config_dict[city][1]city_name = data_config_dict[city][2]data = pd.read_csv(filepath, usecols=common_cols + districts)fig = plt.figure(figsize=(13.5, 5))spec = gridspec.GridSpec(ncols=3, nrows=1, width_ratios=[2, 3, 3])ax1 = fig.add_subplot(spec[0])ax2 = fig.add_subplot(spec[1])ax3 = fig.add_subplot(spec[2])# 分析五城市污染状态# size 是该城市的各空气质量等级对应天数占比列表size = pct_pol_level(data[districts].mean(axis=1))# 通过饼状图可视化ax1.pie(size, explode=explode, labels=level_label, autopct='%1.2f%%', radius=1.1, labeldistance=1.05, startangle=90)# 五城市每个区空气质量的月度差异group = data.groupby(data['month'])[districts]group.mean().plot(ax=ax2)ax2.set_ylabel('PM2.5')ax2.set_title('月度指数')# 统计每个城市每天的平均PM2.5的数值df[city] = data.groupby(by=["year", "month", "day"])[districts].mean().mean(axis=1)# 基于天数对比中国环保部和美国驻华大使馆统计的污染状态data["PM_US Post"] = pd.read_csv(filepath, usecols=['PM_US Post'])group = data.groupby(by=['year', 'month', 'day'])Y1 = pct_pol_level(group[districts].mean().mean(axis=1))Y2 = pct_pol_level(group['PM_US Post'].mean())X = np.arange(6)ax4 = ax3.twinx()width = 0.45bar1 = ax3.bar(X - width / 2, Y1, width=width, alpha=0.8, color='r', label="中国")bar2 = ax4.bar(X + width / 2, Y2, width=width, alpha=0.8, color='g', label="美国")ax3.legend((bar1, bar2), ('中国', '美国'), loc='upper right')plt.title('中美对比')plt.xticks(X, labels=level_label)plt.suptitle(city_name, x=0.05,y=0.5, fontsize=24,fontweight='bold')plt.savefig(output_path + '/' + city_name)plt.show()df.to_csv(output_path + "/city_daily_average.csv")

中国五大城市PM2.5数据分析相关推荐

  1. 数据分析~案例:中国五大城市PM2.5数据分析

    config.py import os # 指定数据集路径dataset_path='./data' # 结果保存路径output_path='./output' if not os.path.exi ...

  2. python问题中国五城市pm2.5_数据之路- 中国五城市PM2.5数据解读

    PM2.5大家一定都不会陌生,特别是在北京生活的小伙伴们.PM2.5是指大气颗粒物(PM),其直径小于或等于2.5微米.在环境科学中,特指悬浮在空气中的固体颗粒或液滴,是空气污染的主要来源之一. 本文 ...

  3. three.js 中国城市PM2.5可视化案例

    Three.js零基础入门教程(郭隆邦) 中国城市PM2.5可视化案例: 数据文件数据.json给出了各个城市的PM2.5值和城市坐标.解析的时候把城市的PM2.5大小用圆圈大小表示,城市坐标直接通过 ...

  4. 中国五大物联网平台优势分析

    中国五大物联网平台优势分析 简介 近几年物联网已经成为各行各业和资本争相追逐的风口,进入2018年,物联网热度持续不减,一个全球化的智能互联时代即将到来. 近几年物联网已经成为各行各业和资本争相追逐的 ...

  5. 美使馆9年pm2.5数据分析:雾霾到底是不是加重了?

    那天看到同学发的环保部的数据,于是想去验证下环保部数据的真伪,于是发现居然美大使馆提供了中国各大城市的PM 2.5数据,还是excel版本,作为一个曾经热血的新能源研究员来说,怎么能够抑制自己的数据控 ...

  6. 2020年中国智慧城市发展值得关注的技术

    文章来源:Gartner 图片来源:网络 每年Gartner发布的技术成熟度曲线(The Hype Cycle)报告都备受市场瞩目,也成为政府及企业做出重大投资决策的风向标.其原因在于,它不仅能够让C ...

  7. 中国AI城市格局突变:杭州反超深圳,南京上海平起平坐,济南首次跻身前十...

    明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 中国哪个城市AI算力更强? 杭州反超深圳成第二,北京依旧坐稳头把交椅: 南京首次冲进前五就将上海挤下Top 4,共同位列第一梯队(Top 5 ...

  8. 3月第3周中国五大顶级域名总量增5.4万 美国减31.5万

    IDC评述网(idcps.com)03月30日报道:据WebHosting.info公布的最新数据显示,在3月第3周,中国五大顶级域名总量升至9,478,026个,净增54,011个,环比涨幅增大:美 ...

  9. 【报告分享】2021年中国五大主流电商平台关于用户数据的最新规则汇总.pdf(附下载链接)...

    省时查报告-专业.及时.全面的行研报告库 省时查方案-专业.及时.全面的营销策划方案库 大家好,我是文文(微信号:sscbg2020),今天给大家分享纷析智库和夸克网于2021年9月份联合发布的报告& ...

  10. 界面今日头条:2018年中国旅游城市排行榜

    2018年忙碌大半,中秋和国庆长假即将来临,因此旅行计划成了热门议题.中国上下五千年,历史悠久,地大物博,江河湖海,草原高山,应有尽有.具体到中国大陆的各个城市,因其历史传承和资源禀赋的不同,而展现出 ...

最新文章

  1. dbus-launch(转)
  2. LIGHTOJ 1044(动态规划)
  3. 【C语言学习笔记】字符串拼接的3种方法 .
  4. 【收藏】Hbase2.x协处理器的使用
  5. IntelliJ Idea取消Colud not autowire.No
  6. 接口做的好怎么形容_淘宝直播预告怎么做才合格?如何做好?
  7. Nat. Commun.|北京大学吴华君,基因组3D结构调控胚胎干细胞分化
  8. 红帽Linux故障定位技术详解与实例(3)
  9. Java流程控制02 选择结构 if结构 switch结构
  10. (转)支持Dubbo生态发展,阿里巴巴启动新的开源项目 Nacos
  11. 《高效对话》— 综合素质提升书籍
  12. ImportError: cannot import name ‘abs‘
  13. 首届技术播客月开播在即
  14. 电瓶车换电柜的静电浪涌设计考虑
  15. Device模块管理设备信息,用于获取手机设备的相关信息,如IMEI、IMSI、型号、厂商等
  16. 智能家居技术发展趋势及平台建设路径
  17. C语言怎样提取一个数的十位个位百位千位
  18. python常用re正则表达式大全,查找指定内容
  19. JS中生成与解析JSON
  20. bash shell 命令 - linux

热门文章

  1. ISO/OSI七层网络参考模型、TCP/IP四层网络模型和教学五层网络模型
  2. 已解决-NVIDIA安装程序失败-win10
  3. dnf丢失clientbase_登录dnf时出现dnfbase.dll的丢失
  4. 捡到的文物应该归谁最好
  5. HackTheBox::Blunder
  6. 服务器IP为什么会被封,以及解决办法
  7. 【IIS问题】——默认网站localhost无法打开,错误类型404
  8. word中使用通配符替换【持续更新系列】
  9. 什么是ROOT?ROOT权限有什么用?
  10. 产品经理面试必问5大问题 (六)