前言

对空气质量日级别五年数据进行月变化分析,可以看出污染物浓度随月份变化的特征。

分析流程

对数据进行专题二的预处理后,计算出各污染物全时段的各月平均浓度,最后进行可视化分析。月变化分析方式有多种,这里通过峰峦图进行分析。

核心代码

这部分使用Python处理数据,然后使用R进行绘图,其中a_January代表1月,后面的以此类推,在月份英文名前加字母主要是确保月份有序,从而峰峦图才能按月份排列,更为直观。
(1)处理数据(Python代码)

def month_trend_analysis(self, df_station, year_list):"""日级别浓度月变化分析:param df_station: 站点数据:param year_list: 年份列表:return:"""df_station['month'][df_station['month'] == 1] = 'a_January'df_station['month'][df_station['month'] == 2] = 'b_February'df_station['month'][df_station['month'] == 3] = 'c_March'df_station['month'][df_station['month'] == 4] = 'd_April'df_station['month'][df_station['month'] == 5] = 'e_May'df_station['month'][df_station['month'] == 6] = 'f_June'df_station['month'][df_station['month'] == 7] = 'g_July'df_station['month'][df_station['month'] == 8] = 'h_August'df_station['month'][df_station['month'] == 9] = 'i_September'df_station['month'][df_station['month'] == 10] = 'j_October'df_station['month'][df_station['month'] == 11] = 'k_November'df_station['month'][df_station['month'] == 12] = 'l_December'result2 = pd.pivot_table(df_station, index=['month', 'day'], aggfunc=np.mean,values=['PM10', 'PM2.5', 'SO2', 'NO2', 'O3', 'CO'])for i in result2.index[:]:result2.loc[i, 'month1'] = i[0]result2.loc[i, 'day1'] = i[1]pic_loc0 = Path(self.cf_info['output']['picture']).joinpath(df_station['city'].values[0])pic_loc = pic_loc0.joinpath('污染物月变化特征')if not os.path.exists(pic_loc):os.mkdir(pic_loc)result2.to_excel(pic_loc / (df_station['station'].values[0] + str(year_list[0]) + '-' + str(year_list[-1]) + '年各污染物月浓度变化.xls'),encoding='gbk')

(2)可视化分析(R代码,省去了路径)

micefiles <- list.files(micepath, full.names = TRUE)cols=c("green","yellow","orange","red","purple","maroon")for(i in 1:length(micefiles)){file_full <- strsplit(micefiles[i], '/')f_names <- strsplit(file_full[[1]][2], '各')name <- f_names[[1]][1]data <- read.xlsx(micefiles[i], sheetIndex=1)ggplot(data, aes(x=`PM2.5`, y=`month1`, fill = stat(x)))+geom_density_ridges_gradient(scale=3, rel_min_height=0.01, gradient_lwd =.6)+scale_x_continuous(expand = c(0.01, 0))+scale_y_discrete(expand = c(0.01,0))+scale_fill_viridis(name="PM2.5浓度(微克/立方米)", option = "D")+labs(title="PM2.5浓度月变化")+theme_ridges(font_size = 13, grid = TRUE)+theme(axis.title.y = element_blank())x1 = paste(name, 'pm2_5', sep = "")ggsave(paste(x1,"jpeg",sep="."))ggplot(data, aes(x=`PM10`, y=`month1`, fill = stat(x)))+geom_density_ridges_gradient(scale=3, rel_min_height=0.01, gradient_lwd =.6)+scale_x_continuous(expand = c(0.01, 0))+scale_y_discrete(expand = c(0.01,0))+scale_fill_viridis(name="PM10浓度(微克/立方米)", option = "D")+labs(title="PM10浓度月变化")+theme_ridges(font_size = 13, grid = TRUE)+theme(axis.title.y = element_blank())x1 = paste(name, 'pm10', sep = "")ggsave(paste(x1,"jpeg",sep="."))ggplot(data, aes(x=`SO2`, y=`month1`, fill = stat(x)))+geom_density_ridges_gradient(scale=3, rel_min_height=0.01, gradient_lwd =.6)+scale_x_continuous(expand = c(0.01, 0))+scale_y_discrete(expand = c(0.01,0))+scale_fill_viridis(name="SO2浓度(微克/立方米)", option = "D")+labs(title="SO2浓度月变化")+theme_ridges(font_size = 13, grid = TRUE)+theme(axis.title.y = element_blank())x1 = paste(name, 'so2', sep = "")ggsave(paste(x1,"jpeg",sep="."))ggplot(data, aes(x=`NO2`, y=`month1`, fill = stat(x)))+geom_density_ridges_gradient(scale=3, rel_min_height=0.01, gradient_lwd =.6)+scale_x_continuous(expand = c(0.01, 0))+scale_y_discrete(expand = c(0.01,0))+scale_fill_viridis(name="NO2浓度(微克/立方米)", option = "D")+labs(title="NO2浓度月变化")+theme_ridges(font_size = 13, grid = TRUE)+theme(axis.title.y = element_blank())x1 = paste(name, 'no2', sep = "")ggsave(paste(x1,"jpeg",sep="."))ggplot(data, aes(x=`O3`, y=`month1`, fill = stat(x)))+geom_density_ridges_gradient(scale=3, rel_min_height=0.01, gradient_lwd =.6)+scale_x_continuous(expand = c(0.01, 0))+scale_y_discrete(expand = c(0.01,0))+scale_fill_viridis(name="O3浓度(微克/立方米)", option = "D")+labs(title="O3浓度月变化")+theme_ridges(font_size = 13, grid = TRUE)+theme(axis.title.y = element_blank())x1 = paste(name, 'o3', sep = "")ggsave(paste(x1,"jpeg",sep="."))ggplot(data, aes(x=`CO`, y=`month1`, fill = stat(x)))+geom_density_ridges_gradient(scale=3, rel_min_height=0.01, gradient_lwd =.6)+scale_x_continuous(expand = c(0.01, 0))+scale_y_discrete(expand = c(0.01,0))+scale_fill_viridis(name="CO浓度(毫克/立方米)", option = "D")+labs(title="CO浓度月变化")+theme_ridges(font_size = 13, grid = TRUE)+theme(axis.title.y = element_blank())x1 = paste(name, 'co', sep = "")ggsave(paste(x1,"jpeg",sep="."))

结果展示与分析

这里仅展示O3和PM2.5的结果。峰峦图横轴表示浓度区间,山峰高矮表示该月份落在该浓度范围内的天数(频次)。通过峰峦图,可以清晰明了的看到污染物浓度随月份的变化趋势以及每月浓度的分布情况。

(图片右键新标签页打开会很清晰)
(图片右键新标签页打开会很清晰)

预告

下期进行污染物浓度日变化的分析。

以下是本人独自运营的微信公众号,用于分享个人学习及工作生活趣事,大佬们可以关注一波。

【空气质量数据分析专题七】污染物浓度月变化分析相关推荐

  1. 【空气质量数据分析专题九】污染物浓度小时变化分析

    前言 对空气质量小时级别五年数据进行小时变化分析,可以看出污染物浓度在一天中逐小时变化的特征. 分析流程 对数据进行专题二的预处理后,计算出各污染物全时段的各小时的平均浓度,最后进行可视化分析.处理方 ...

  2. 【空气质量数据分析专题五】污染物浓度年际变化分析

    前言 大气空气质量污染物一般为SO2.NO2 .CO.PM10.PM2.5.O3六项污染物.日级别浓度中,除O3使用最大8小时滑动平均浓度外,其他五项污染物均采用日平均浓度. 除CO浓度单位为mg/m ...

  3. 【空气质量数据分析专题八】污染物浓度日变化分析

    前言 对空气质量日级别五年数据进行日变化分析,可以看出污染物浓度逐日变化的特征. 分析流程 对数据进行专题二的预处理后,计算出各污染物全时段的各日平均浓度,最后进行可视化分析.日变化分析方式有多种,这 ...

  4. 2014-2022年4月全国空气质量数据分析

    2014-2022年4月所有城市及站点空气质量数据集(更新中)更新时间不固定 时间范围:2014-2022年4月年 数据来源:中国环境监测总站的全国城市空气质量实时发布平台 数据格式说明距离: 全国城 ...

  5. 空气质量数据分析及web实现

    本次课程设计主要是针对大数据计算框架这门课程的总结,同时利用web进行展示,也是对自己之前学习前端的一次小检验.同时也是自己第一次和同学们进行分工合作完成的作业,自己主要负责对所有的内容整合,并进行w ...

  6. 制造业如何进行质量数据分析?附教程,内含大量分析图表!

    目前很多制造型企业拥有了MES.ERP.SPC等业务系统,获得了大量的数据.然而在跨工厂.跨系统的异构数据中,如何找到生产各个环节的规律和异常,如何获得优化见解,是制造型企业面临的关键挑战.通过数据分 ...

  7. Matplotlib空气质量数据分析(附数据集下载)

    使用JupyterLab进行的数据分析 数据集下载 import pandas as pd import numpy as np from pandas import Series, DataFram ...

  8. matlab波形反白,基于MATLAB的海岸污染物浓度扩散实验分析

    海岸污染物图像序列隐含丰富的物质输移扩散的重要特征,通过CCD图片得到所需要的信息具有广泛的应用价值.传统的接触式和单点式测量方法很难全面高效地得到需要的实验结果,而利用CCD等摄像设备进行测量记录, ...

  9. Python数据分析练习:北京、广州PM2.5空气质量分析(2)

    <接上一篇> 2. 数据分析 2.1 空气质量等级的对比分析 广州2015年与2016年的空气质量等级对比,分别统计全年各个等级的次数占比(例如:Good占比 = Good次数/全年总测量 ...

最新文章

  1. ASP.NET、Ajax、Silverlight学习电子资料汇总
  2. 【01】为什么需要UML
  3. Objective-C语法简化
  4. ubuntu source
  5. 记录JS报错Cannot set property ‘onclick/xxx‘ of null
  6. HDLBits答案(18)_Verilog有限状态机(5)
  7. PHP中define定义的常量如何在smarty模板调用
  8. js 正则表达式大全 数字、字符等
  9. 《Mimics软件临床应用:计算机辅助外科手术》目录摘要
  10. 通信原理及系统系列9—— 设计无码间串扰的通信系统(理想低通滤波器)
  11. u盘运行linux系统卡住了,从U盘运行Linux操作系统的三种方法
  12. C语言:链表(动态)创建之头插法和尾插法
  13. 迪亚曼蒂,我忘不了孔卡
  14. Linux使用alias设置命令别名
  15. PIM-SM--理论详解
  16. 用HTML5和JavaScript做一个轮播图
  17. wix图片导入设置_奇葩史的奇葩事 | [译]:WiX Toolset入门——内置的WixUI界面使用配置...
  18. 中国普天并入中国电科,世界人工智能大会开幕,格力将接入鸿蒙
  19. 一步步读懂Pytorch Chatbot Tutorial代码(三) - 创建字典
  20. ubuntu 20 使用命令行 snd-aloop 实现内录音、录制音乐播放器的音频

热门文章

  1. kettle连接不上es7_2021年北京网红经纪,KOL签约合作招聘-北京网红经纪,KOL签约合作招聘求职信息-拉勾招聘...
  2. 配置域名访问云服务器
  3. centos挂载盘到根下_Centos挂载硬盘完整图文教程
  4. 数字强国 勇攀高峰 数字经济高质量发展行动计划启动会重磅召开
  5. Android常用adb命令
  6. Linux命令之getfacl和setfacl命令
  7. python等高线图轮廓线提取_Python:从matplotlib.pyplot.contour()中找到轮廓线
  8. openocd目录_openocd环境搭建
  9. python字典--在key上使用正则表达式
  10. 黑马优购小程序项目详解