观测数据处理-国控环境监测站点

工作需要用到我国环境监测站点的污染物浓度数据(感谢大佬的分享), 数据很全, 不过csv格式在分析的时候尤其大量数据分析的时候并不友好, 所以一般要二次处理一下

上学的时候搞过一次, 当时为了查询数据方便, 塞到了sqlite3的单文件数据库里, 不过制作起来很慢(可能是我没用并行支持好的数据库), 近期更新了一下数据且又重新调整了一下数据处理逻辑, 这里记录一下


主要的思路是以netcdf保存(此前做出来db之后还要再转nc, 麻烦的很), 然后数据规模的话, 物种一共15个, 时间是2014年到现在逐小时, 站点大概在1000多

采用每月一个nc文件存储, 每个物种单独变量, 每个变量的维度是(hour, sites)或者是(hour, cities), 因为数据除了站点的还有城市的值

然后希望处理流程尽量通用一些, 以后一些其他的观测数据也基于类似的逻辑和形式去做

那么处理流程大概是三步走

1. 制作站点列表

现有的站点信息文件有点乱, 需要制作一份完整的站点列表信息, 并且最好涵盖地理位置信息和行政区信息, 以便处理的时候筛选用, 如下 (risk后续讨论):

code,name,city,prov,nation,lat,lon,risk
1013A,市监测中心(停运150702),天津市,天津市,中国,39.097,117.151,1
1014A,南口路(停运161122),天津市,天津市,中国,39.173,117.193,0

在制作过程中大概会遇到一些问题:

  • 数据中的站点编号对应的名字会变, 这里以新名字为准
  • 数据中的站点编号对应的经纬度会变, 这里以新的经纬为准, 但是不知道是什么原因, 是站点搬迁了还是老的定位不准咋的, 所以基于经纬度变化幅度(0~0.1度), 给risk(风险等级)设定2-11
  • 数据中站点的经纬度信息缺失, 根据名称自己在经纬度地图上找的点, risk等级设定12
  • 数据中站点编号对应的我国行政区信息不统一, 这个比较麻烦, 有时候是叫法问题, 有时候是到不同级别的问题, 有时候甚至是行政区变迁的问题, 为了保持统一, 我直接根据最新的shapefile地图配合经纬度信息标注站点的行政区信息, 具体到地级市/自治州/直辖市

对于risk问题, 稳定的站点是0, 仅改名字也是0, 经纬度信息有/无变化的设为1, 2-12如上, 目的主要是在处理的时候可以做个筛选, risk越高, 观测结果和地理信息对应偏差的可能性越高, 可以考虑在对比模式验证的时候舍去试试

2. 制作nc数据文件

由于要逐月去生成, 且为了同步初始化数据和后续更新数据的逻辑, 采用的方式是先init好这个月的文件, 然后就都是根据csv文件去update了

注意的点要是:

  • 每个月的文件要以这个月的sites为准, 不要用上一步制作的全部sites, 不过站点信息可以从上一步的结果里获取, 这一步用wsl跑个bash脚本来实现
  • sites和cities的结果放一个文件里
  • 数据较多, 所以基于MS-MPI和mpi4py做了个并行支持, 单机4核一起跑也能快很多! 不用py自带的多进程是因为mpi更熟悉...而且显然更好使

最终得到的结果如下, 包含了站点信息和观测数值

netcdf CNMEE.aqo.site-city.201808 {
dimensions:
        site = 1605 ;
        city = 367 ;
        ymdh = 744 ;
variables:
        string site(site) ;
        string city(city) ;
        string ymdh(ymdh) ;
        string site_name(site) ;
        string site_city(site) ;
        string site_prov(site) ;
        string site_nation(site) ;
        double site_lat(site) ;
                site_lat:_FillValue = NaN ;
        double site_lon(site) ;
                site_lon:_FillValue = NaN ;
        int64 site_risk(site) ;
        float AQI(ymdh, site) ;
        float PM2.5(ymdh, site) ;
                PM2.5:units = "ug/m3" ;
        float PM2.5_24h(ymdh, site) ;
                PM2.5_24h:units = "ug/m3" ;
        float PM10(ymdh, site) ;
                PM10:units = "ug/m3" ;
        ... ...

        float CO(ymdh, site) ;
                CO:units = "mg/m3" ;
        float CO_24h(ymdh, site) ;
                CO_24h:units = "mg/m3" ;
        float AQI_city(ymdh, city) ;
        float PM2.5_city(ymdh, city) ;
                PM2.5_city:units = "ug/m3" ;
        float PM2.5_24h_city(ymdh, city) ;
                PM2.5_24h_city:units = "ug/m3" ;
        ... ...

// global attributes:
                :source = "https://quotsoft.net/air/" ;
}

3. 后处理查询脚本支持

本质上数据整理的目的还是为了用, 查询或者后处理等等, 目前先搞了个简单的查询并且屏幕打印的功能

通过config.py来控制参数, 如下

# coding=utf-8

name = 'test'
mode = 'slice'
sites = ['1223A', '1224A']
datehours = ['2022070100', '2022070101', '2021080100']
variables = ['PM2.5', 'O3']

后续还得持续优化, 争取把什么数据提取到nc/db/csv, 然后对应wrf-cmaq网格化, 计算MDA8等等常规处理流程都搞起来


代码放在了这里, 仅供参考

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,468评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,620评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,427评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,160评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,197评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,334评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,775评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,444评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,628评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,459评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,508评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,210评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,767评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,850评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,076评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,627评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,196评论 2 341

推荐阅读更多精彩内容