气候数据订正

免责声明

首先声明本人不是气候方向,对于气候模式完全不了解,对于订正技术完全不了解。

之所以写这篇文章纯粹是有个需求用到,在自己的初步研究下做出来了。

对于结果不做任何保证。

数据介绍

54511站每天一个数据,包括多种要素,如气温、降水等

  1. 不同气候模式不同情境的模拟,时间为2015-2050

  2. 1979-2014实况数据

  3. 1979-2014气候模式模拟的历史数据

Quantile Mapping

使用该方法对气候模式预测数据进行订正,参考这篇文章,尤其要感谢作者不仅实现了该方法,还进行了开源,在github上搜索pycat即可找到,用户手册作为重要参考。

其实来说我不是很了解算法实现的细节,经过咨询相关领域专家,大体上是使用实况的概率分布去订正气候模式预报的结果。

程序编写

开源的pycat不能直接使用,其在用户手册中提供的示例以及数据均具有一定的特殊性。因为时间关系,至今我尚未搞明白在netcdf文件下写入投影信息时如何做到的。不过经过修改源码不影响对数据进行订正。

  1. 程序使用iris来读取netcdf数据,iris是英国气象局开源气象处理软件,我早期使用过,但后来发现了xarray就不再使用了...

  2. 在pycat中包含了插值过程、匹配组合历史和气候模式模拟历史数据等过程。

由于本人的数据是站点数据,因此需要先写成netcdf文件,在写入的过程中需要注意几个重要的点:

  1. 首先保证所有数据没有缺失数据,如果有请自动剔除或使用pandas的interpolate函数进行处理;

  2. netcdf文件中coord要增加一些属性,如axis,其中在x轴要命名为大写X。

    hist_nc.x.attrs.update({
     'axis':'X',
     'units':'degrees_east',
     'standard_name':'longitude',
     'long_name':'x of longitude'
    })
    hist_nc.y.attrs.update({
     'axis':'Y',
     'units':'degrees_north',
     'standard_name':'latitude',
     'long_name':'x of latitude'
    })
    hist_nc.time.attrs.update({
     'axis':'T',
     'standard_name':'time',
    #         'units':'hours since 1970-01-01 00:00:00',
    #         'calendar':'standard'
    })

稍作解释,为什么对于time变量没有写入untis和calendar,因为xarray在写入时会自动匹配当前的时间数据格式。

  1. 由于pycat的作者每次仅对一个变量进行订正,且考虑变量的概率分布不同还可能采用不同的方法,因此在写入数据时要增加变量的各类属性。
if iname=='tt':
    standard_name = 'air_temperature'
elif iname == 'mm':
    standard_name = 'precipitation_amount'
else:
    standard_name = 'air_temperature'</pre>

tt为温度、mm为降水,因为我这里还订正了其他变量所以其他变量的standard_name均设置为与温度一致。standard_name会影响使用的订正算法,我们来看pycat的具体代码如下:

对应变量的处理函数

所对应的具体方法如下:

  • air_temperature
    :meth:absolute_sdm using normal distribution
  • precipitation_amount, surface_downwelling_shortwave_flux_in_air
    :meth:relative_sdm using gamma distribution
  1. 变量的单位要按照实际情况进行设置。例如温度是celsius,降水meters,其他自行查阅。

修改源码

刚才讨论了,pycat示例中涉及投影情况,因此气候模拟的数据包含了3个点的数据,在进行订正前进行插值,而我这里仅仅包含一个点,且不会在netcdf中写入投影信息让iris直接能够获取,因此需要修改涉及投影这一块。首先在上一步写入netcdf中增加x和y的coord,分别设置为116.47和39.8。

修改pycat使之单独对我们这个需求应用等经纬度投影,对pycat的io模块代码进行调整如下:

投影修改

这样如果在netcdf文件中的投影信息时None,则会自动设置为等经纬度投影。


修改提方法中插值部分,如果我们的数据仅仅包含1个点,则不需要插值处理。

插值处理

当且仅当模式数据点不是1个点时进行插值处理。

运行订正

from pycat.io import Dataset
from pycat.esd import ScaledDistributionMapping
def esd_func(obsdir, moddir, scedir, work_dir):
 #work-dir即结果输出目录,pycat默认在临时文件夹
    obs = Dataset(os.path.dirname(obsdir), os.path.basename(obsdir))
    mod = Dataset(os.path.dirname(moddir), os.path.basename(moddir))
    sce = Dataset(os.path.dirname(scedir), os.path.basename(scedir))
    qm = ScaledDistributionMapping(obs, mod, sce, work_dir=work_dir)
    qm.correct()

经过上述步骤相信我们得到了不同变量不同模式不同情景的各类文件,只需要将文件路径传递给这个函数即可。

再次声明,本人既不了解订正过程,更没有对订正结果没有做过验证。

以上仅仅记录本人一上午的工作记录。

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

推荐阅读更多精彩内容