前言

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

分析流程

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

核心代码

这部分使用Python处理数据,然后使用R进行绘图。
(1)处理数据(Python代码)

def daily_trend_analysis(self, df_station, year_list):"""日均浓度趋势分析:param df_station: 站点日均浓度数据:param year_list: 年份列表:return:"""result2 = pd.pivot_table(df_station, index=['month', 'day'], aggfunc=np.mean, values=['PM10', 'PM2.5', 'SO2', 'NO2', 'O3', 'CO', 'AQI'])for i in result2.index[:]:result2.loc[i, 'date'] = datetime(year=2020, month=i[0], day=i[1])result = result2.copy()result.set_index('date', inplace=True)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)result.to_excel(pic_loc / (df_station['station'].values[0] + str(year_list[0]) + '-' + str(year_list[-1]) + '年各污染物浓度日变化.xls'), encoding='gbk')

(2)可视化分析(R代码,省去了路径),这里划分了更加细致的浓度及AQI等级主要是为了使可视化区分度更明显,效果更好

library('xlsx')
library('openair')
Sys.setlocale(category  = "LC_ALL", locale = "C")micepath <- "数据所在文件夹"
micefiles <- list.files(micepath, full.names = TRUE)breaks <- c(0,49,99,149,199,249,299)
labels <- c("优","良","轻度污染","中度污染","重度污染","严重污染")
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]datas <- read.xlsx(micefiles[i], sheetIndex=1)all_col_name = names(datas)all_col_name_list = strsplit(all_col_name, ' ')len <- 2:length(all_col_name_list)for(j in len){x1 = paste(name, unlist(all_col_name_list[j]), sep = "")data <- datas[ , c(unlist(all_col_name_list[1]),unlist(all_col_name_list[j]))]if (unlist(all_col_name_list[j])== "O3"){jpeg(file=paste(x1,"jpeg",sep="."),units = "px",width = 3*600,height = 3*600,res = 3*72)calendarPlot(data, pollutant = "O3",breaks=c(0,20,40,60,80,100,120,140,160,180,200), labels=c("一级Ⅰ","一级Ⅱ","一级Ⅲ","一级Ⅳ","一级Ⅴ","二级Ⅰ","二级Ⅱ","二级Ⅲ","超标Ⅰ","超标Ⅱ"),year=2020,annotate="value",lim=160,layout=c(3,4), cols = "jet",col.lim=c("black","cyan"),key.footer='0μg/m^3',key.header='200μg/m^3')dev.off()}if (unlist(all_col_name_list[j])== "CO"){jpeg(file=paste(x1,"jpeg",sep="."),units = "px",width = 3*600,height = 3*600,res = 3*72)calendarPlot(data, pollutant = "CO",breaks=c(0,0.3,0.6,0.9,1.2,1.5,4,5), labels=c("达标Ⅰ","达标Ⅱ","达标Ⅲ","达标Ⅳ","达标Ⅴ","达标Ⅵ","超标"),year=2020,annotate="value",lim=4,layout=c(3,4),col.lim=c("black","cyan"),key.footer='0mg/m^3',key.header='5mg/m^3')dev.off()}if (unlist(all_col_name_list[j])== "NO2"){jpeg(file=paste(x1,"jpeg",sep="."),units = "px",width = 3*600,height = 3*600,res = 3*72)calendarPlot(data, pollutant = "NO2",breaks=c(0,10,20,30,40,50,60,70,80,90,100), labels=c("达标Ⅰ","达标Ⅱ","达标Ⅲ","达标Ⅳ","达标Ⅴ","达标Ⅵ","达标Ⅶ","达标Ⅷ","超标Ⅰ","超标Ⅱ"),year=2020,annotate="value",lim=80,layout=c(3,4),col.lim=c("black","cyan"),key.footer='0μg/m^3',key.header='100μg/m^3')dev.off()}if (unlist(all_col_name_list[j])== "SO2"){jpeg(file=paste(x1,"jpeg",sep="."),units = "px",width = 3*600,height = 3*600,res = 3*72)calendarPlot(data, pollutant = "SO2",breaks=c(0,25,50,75,100,125,150,175), labels=c("一级Ⅰ","一级Ⅱ","二级Ⅰ","二级Ⅱ","二级Ⅲ","二级Ⅳ","超标"),year=2020,annotate="value",lim=150,layout=c(3,4),col.lim=c("black","cyan"),key.footer='0μg/m^3',key.header='175μg/m^3')dev.off()}if (unlist(all_col_name_list[j])== "PM10"){jpeg(file=paste(x1,"jpeg",sep="."),units = "px",width = 3*600,height = 3*600,res = 3*72)calendarPlot(data, pollutant = "PM10",breaks=c(0,25,50,75,100,125,150,175,200), labels=c("一级Ⅰ","一级Ⅱ","二级Ⅰ","二级Ⅱ","二级Ⅲ","二级Ⅳ","超标Ⅰ","超标Ⅱ"),year=2020,annotate="value",lim=150,layout=c(3,4),col.lim=c("black","cyan"),key.footer='0μg/m^3',key.header='200μg/m^3')dev.off()}if (unlist(all_col_name_list[j])== "PM2.5"){jpeg(file=paste(x1,"jpeg",sep="."),units = "px",width = 3*600,height = 3*600,res = 3*72)calendarPlot(data, pollutant = "PM2.5",breaks=c(0,15,25,35,45,55,65,75,85,100), labels=c("一级Ⅰ","一级Ⅱ","一级Ⅲ","二级Ⅰ","二级Ⅱ","二级Ⅲ","二级Ⅳ","超标Ⅰ","超标Ⅱ"),year=2020,annotate="value",lim=75,layout=c(3,4),col.lim=c("black","cyan"),key.footer='0μg/m^3',key.header='100μg/m^3')dev.off()}if (unlist(all_col_name_list[j])== "AQI"){jpeg(file=paste(x1,"jpeg",sep="."),units = "px",width = 3*600,height = 3*600,res = 3*72)calendarPlot(data, pollutant = "AQI",breaks=c(0,50,100,150,200,250,300), labels=c("优","良","轻度污染","中度污染","重度污染","严重污染"),year=2020,annotate="value",cols=cols,lim=100,layout=c(3,4),col.lim=c("black","cyan"),key.footer='0μg/m^3',key.header='300μg/m^3')dev.off()}}
}

结果展示与分析

这里仅展示O3、PM2.5以及AQI的结果,图中月份后面的2020不代表2020年,此处每日的数据均为五年该日的平均值,因此此处的2020仅为2017年至2021年的平均情况的一个标签,不代表其他任何含义,突出显示的均为超标情况,可以清晰明了的看到污染物浓度及AQI五年逐日平均的变化趋势。

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

预告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  7. python空气质量分析与预测_python 空气质量AQI数据分析与预测 ---分析,相关系数矩阵...

    版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/YmeBtc/article/details ...

  8. 基于主动学习和克里金插值的空气质量推测

    基于主动学习和克里金插值的空气质量推测 常慧娟, 於志文, 於志勇, 安琦, 郭斌 西北工业大学计算机学院,陕西 西安 710072 福州大学数学与计算机科学学院,福建 福州 350108    摘要 ...

  9. 【计算】空气质量综合指数+空气质量指数

    目录 1.空气质量指数 2.空气质量综合指数 1.空气质量指数 空气质量指数,综合表示空气污染程度或空气质量等级的无量纲的相对数值. 根据网络上的文档资料:来源为百度文库 import java.la ...

最新文章

  1. 在进行商业运算时解决BigDecimal的精度丢失问题
  2. Hyperledger Fabric 1.0 从零开始(八)——Fabric多节点集群生产部署
  3. java中的me关键字_java中的volatile关键字
  4. jena fuseki RDF应用
  5. sparksql(1)——Dataframe
  6. 关于如何升级gcc版本及相关的标准库问题
  7. 力扣654. 最大二叉树(JavaScript)
  8. C++中两个类中互相包含对方对象的指针问题
  9. 在vmware server中部署linux redhat 5.4 ORACLE RAC11g +ASM
  10. Invisible Perturbations: Physical Adversarial Examples Exploiting the Rolling Shutter Effect 论文解读
  11. 游戏中的碰撞检测(转)
  12. python函数拟合
  13. 获取图片的十六进制颜色码(keynote/ppt取色器)
  14. arangoDB基本操作
  15. VOC数据集介绍及构建自己的VOC格式目标检测数据集
  16. 好扑科技技术副总裁戎朋:从海豚浏览器服务器端研发主管到区块链,揭秘区块链技术之路...
  17. ios应用中调用系统电话、浏览器、地图、邮件等 以及打开其他应用(如qq,msn)
  18. opencv安装教程python anaconda_anaconda安装opencv(python)
  19. 简述计算机在市场调研与预测中的应用,《市场调研与预测》自考试卷-20210323213815.doc-原创力文档...
  20. 捡到的苹果6plus怎么解id要多少钱

热门文章

  1. 11月29日BTC/EOS/TRX价格行情走势分析及建议
  2. 【中间件】Redis监控以及指标
  3. 数据库基础面试题-索引优缺点
  4. java mongodb 备份_mongodb 备份、还原、导入、导出简单操作
  5. Pytorch中torch.unsqueeze()和torch.squeeze()函数解析
  6. 今天TD卡激活了,让我想起当年的笑话“喂喂操”!
  7. Pytorch-unsqueeze
  8. 巧用历史记录画笔给美女去斑
  9. adb 定时重启手机批处理bat
  10. Excel公式match+index匹配教学