python 生成nc文件_NCL>Python用户手册V1.1(宗培书译)

NCL官网(http://www.ncl.ucar.edu/)有NCL-to-Python Transition Guide,喜欢看原版的可以自行下载或在线阅读:

http://www.ncl.ucar.edu/Document/Manuals/NCL_to_Python/Transition_Guide_NCL_PyNGL.pdf

下面是我对该用户手册的翻译。其实现在各类翻译软件发展迅猛,付费用户可以直接上传.pdf文件,机器可以快速翻好,其后人工再作一些修改即可。可惜,我不是付费用户,所以还是自己翻吧。。

NCL -> Python用户手册V1.1

宗培书(译) 2019.02.14

1、引言

对于大多数NCL用户来说,从NCL转向Python可能是一个重大的跨越,需要花费大量的时间。本手册旨在帮助用户减轻过渡时期的困难,缓解新语言的使用所带来的焦虑。

本手册第一部分提供了NCL和Python语言特性的比较表,第二部分包含NCL和Python的相对应的常用数学函数。

接下来的两个部分为 NCL和Python读写ASCII和NetCDF文件的示例。

手册的其余部分包含一些用NCL和Python编写的图形示例,其中Python 脚本绘图时使用PyNGL模块。

NCL和Python脚本的对应表中,左侧一列为NCL脚本,右侧为相应的Python脚本。逐行比较脚本,可以发现二者之间的差异并没有想象中那么巨大。

本手册中的许多例子可以在NCL官网上找到:

http://www.ncl.ucar.edu/Applications/NCL_to_Python/

本手册中还有一些例子,使用的是xarray而不是PyNIO。如果想要使用PyNIO,可以在被注释的部分找到相应代码。

要运行示例脚本,最简单的方法是使用conda。Miniconda的下载地址为:

https://conda.io/en/latest/miniconda.html

(阿宗按:conda是一种通用包管理系统,旨在构建和管理任何语言和任何类型的软件。举个例子:包管理与pip的使用类似,环境管理则允许用户方便地安装不同版本的python并可以快速切换。

Anaconda是一个打包的集合,里面预装好了conda、某个版本的python、众多packages、科学计算工具等等,就是把很多常用的不常用的库都给你装好了。

Miniconda,顾名思义,它只包含最基本的内容——python与conda,以及相关的必须依赖项,对于空间要求严格的用户,Miniconda是一种选择。就只包含最基本的东西,其他的库得自己装。

其实我个人推荐下载安装Anaconda,尤其是服务器用户,Anaconda会给你省去很多麻烦。Anaconda的下载安装,以及PyNIO和PyNLG的安装方法见本公众号旧文:

如何优雅地告别NCL

)

安装完成conda后,可以使用conda来安装所有需要的包。建议将这些软件包安装到一个单独的环境中:

conda create -n ncl_to_python -c conda-forge xarray netcdf4 scipy pyngl pynio ncl
source activate ncl_to_python

(阿宗按:有人反馈过这种方法安装netcdf4后,import netcdf4时会报错。因此这里提供另外一种安装netcdf4的方法:

对于Windows用户:

1、在Anaconda Prompt(开始菜单栏,Anaconda3文件夹下)输入命令:conda update --all

2、运行完成后,安装netCDF4模块:conda install netCDF4

对于Linux用户:

直接在命令行输入 conda update --all,运行完成后再输入conda install netCDF4,即可。在这里,Anaconda用户可以顺带手把深度学习的常用模块Keras和TensorFlow都安装一下,命令如下:

conda install keras

conda install tensorflow)

本手册示例脚本中所使用的数据文件(包括binary文件、ASCII文件、和NetCDF文件),可以从这里下载:

http://www.ncl.ucar.edu/Document/Manuals/NCL_User_Guide/Data/

最后,NCL脚本和Python脚本的运行方法如下:

NCL: ncl script_name.ncl
PyNGL: python script_name.py

2、NCL与Python语言基础

变量赋值、数组索引、循环和条件语句在NCL和Python中的写法不同,但也有许多相似之处。进行完整的比较会超出本手册的范围,因此只列出了一些比较常用的情况。

要了解更多关于NCL、Python、Xarray、NumPy等的信息,请参见:

NCL相关文件: http://www.ncl.ucar.edu/Document/Python 2.x相关文件: https://docs.python.org/2/index.htmlPython 3.x相关文件: https://docs.python.org/3/Numpy and Scipy: https://docs.scipy.org/doc/ESMPy: https://www.earthsystemcog.org/projects/esmpy/xarray: http://xarray.pydata.org/en/stable/xesmf: https://xesmf.readthedocs.io/en/latest/

NCL和Python脚本写法对比如下:

dcb4918fa3c53b09923bc9a66e3eeec6.png

dd93a48664ebf00adbc4e5be0e11eaf2.png

f58d2eba7fde960076aeaa79610015b2.png

42d0f1af2b5d9df8806ab655d2a6af6e.png

3、数学函数

Python的模块numpy提供了许多现成的数学函数来计算平均值(averages, means)、最小值(minimum)、最大值(maximum),和一些统计量(statistics)。下面的对比列表不包含所有的函数,只是列出了一些常用的。

想要了解更多的关于NCL和Python的数学模块,可以参见:

NCL:http://NCL.ucar.edu/document/functions/math.shtml

Numpy:https://docs.scipy.org/doc/Numpy-1.13.0/reference/routines.math.html

Python中加载numpy的命令为:

import numpy as np

f049f48e2d4a4356fe73de17d8b95f0b.png

4、读文件

比较NCL和PyNGL的最好方法是把NCL脚本和PyNGL脚本放在一起,比对着学习。本章将概述二者的差异和类似之处。使用 PyNIO 打开和读取一个文件是直接进入文件进行处理,而不用管是GRIB、HDF还是Netcdf格式。 NCL读取ASCII文件的方法则略有不同,详见4.2。

4.1 读取GRIB, HDF或netCDF格式的文件

分别用NCL和Python创建脚本,实现如下功能:打开一个文件,打印它包含的变量,读取一个变量并打印一些关于该变量的信息。

71f13725429f707026942a2a1e2c0085.png

4.2 读取ASCII文件

通常ASCII文件用于存储可读格式的数据,例如观测资料(站点数据)。ASCII数据文件可以包含按列写入的使用分隔符分隔列的数据(CSV文件),也可以按行写入,或进行其他的组合。因此,在读取文件之前,对文件中的内容进行描述是非常重要的。

假设我们想要读取一些数据,将其存储在一个数组中,打印该数组和一些更多的信息,比如行和列的数量,数值范围和数组形状等。该ASCII文件为Test 6h.csv:

2.00;3.50;5.10;8.20
2.40;3.10;4.80;8.90
2.60;3.70;5.30;10.10
2.75;3.90;5.55;10.25
3.00;4.10;6.05;10.50

代码如下:

171911d5da56207efc30cb9e838f37e9.png

下一个例子展示了如何读取包含21361行的ASCII文件。该文件包括一行开头和21360行纬度、经度和温度值。文件名为asc6.txt,可以从 http://ncl.ucar.edu/applications/data/asc/asc6.txt 下载。


纬度 经度 温度 (C)
33.3 76.5 20.3
33.3 76.6 20.3
33.3 76.7 21.5
33.3 76.8 20.0

……

236cc660314b63e4920c2f4b62064605.png

75d390247f116b6addcb5cf47a40c206.png

4.3 读取多个文件

当不同时次的同一个变量存储在多个文件中时,NCL和Python的netCDF4包都可以实现读取多个文件。

228c4daa10ee16f4d788edcf8417e31b.png

6df1ef026c7f299029541604b41fbced.png

5、写文件

在很多时候,能够将计算得到的数据保存到新文件中是十分重要的。接下来的两个例子分别比较写netCDF 文件的和写ASCII 文件这两种情况。

5.1 写netCDF文件

假设有一个文件rectilinear_grid_3D.nc,我们需要读取level=0的变量t,并且把它从开尔文转换到摄氏度。然后,我们再将转换后的数据写入一个新的netCDF文件。写netCDF文件的方法有两种,一种是简易版,另一种方法则包含更多细节。二者的区别在于 netCDF文件的元数据。

建议在写入文件之前先定义(或创建)所有维度、变量和属性,这样写变量的效率会高得多。

简易版:

acf9052f8043327968a13fc087935c23.png

f69fb6209fb2b2e7f3c3291d11e8db57.png

简易版本下,NCL和Python创建的netCDF文件没有差异(可以用命令cdo diff t_degC_ncl_short.nc t_degC_py_short.nc 来查看),但是两个文件的元数据是有差别的:

029c37930822b6eae8cac0cd8db235cb.png

4074d12cb77c0d6fe0e8169b2f419e7a.png

详细版方法(包括保存和设置元数据):

80af5603631308bee88adc17198b5ba2.png

f258ae012062619db80bf488dca7917d.png

该方法下生成的两个.nc文件的元数据是一样的:

e363ae723b5e2624ea4e5b433ffcce9a.png

5.2 写ASCII文件

对于将变量写入ASCII文件,Ncl和PyNGL脚本非常相像。

7d8514465f63a8828700c029cec4ef24.png

79466ab84b4d8dbe10d929d1fff99a47.png

6、绘图

在绘图方面,NCL和PyNGL的图形设置也有很多相似之处,这也让我们在转用新语言时减少了很多问题。

6.1 地图

绘制地图的一个好的开始是绘制简单的填充地区的地图。这个示例演示了不同投影方法下的地图绘制方式:

3c96e9594bfc71fc04fc4771b2fa5a98.png

006c696910843bb1c8a3ba30c2f69389.png

绘图结果如下:

d5db071ee3441b6030af40b5f9d8ba2d.png

8c461699da98b07c49a700ed13f4d999.png

6.2 XY-Plot

一个 XY-plot 显示了坐标系中给定数组之间的关系。 第一个例子展示了如何用1D 数据数组x和y创建一个简单的XY-plot。

cf851726f452accebe5584993804cfa8.png

d1e56d86775d9e6b4599a14bb7098ea2.png

绘图结果如下:

4e9161bfb180631b647978588115e8a6.png

下面是复杂一点的情况。假设有3个数据数组,我们想用不同的颜色和图例在同一个绘图框架中绘制它们。数据值可以存储在一个数组y中,因为它们对应相同的x值。

8292e3547ef7638f3badec7b0cb49459.png

3889facb3f45683a6e1561b2e1f95abd.png

绘图效果如下:

591833b950870caf4d82bd9cbe345047.png

6.3 柱状图

柱状图是用与它们的值成正比的矩形条绘制的xy-plot。在NCL中,修改属性@gsnxybarchart*的参数值,用户可以设置柱状图中矩形条的参数。不幸的是,PyNGL没有提供这些资源,我们必须使用函数Ngl.polygon来绘制柱状图。

c0533c9c6310d8479d461c815bc61331.png

cf2f67a7a5aeda93283a0db8ccc1482c.png

d497af25b61c7152f5aed8417503c2b9.png

出图效果如下:

be7e8e8651476c91e281e7ac27e59360.png

篇幅有限,先翻这么多。用户手册后面的内容我都看了一下,主要包括等值线图、风场流场图、切片图、散点图,以及一些图形的覆盖、mask、绘制多个图形、绘制点线、利用shapefile绘制地图,还有插值等等。没有几句需要翻译的英文,都是硬核代码对比,有需要的话直接找到相应章节学习就好。

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值