title: Python 和 GRIB API

weight: 1

本章节仅是一个开胃菜,向用户展示 Python 接口提供的很小的一部分功能,用户可以自行探索各种功能。

Python 是什么

hello world

  1. #!/usr/bin/env python
  2. import sys
  3. # This is a comment
  4. def say_hello(name):
  5. print(“Hello "+ name + "!" )
  6. if len(sys.argv) > 1 : name = sys.argv[1]
  7. else:
  8. name = “World"
  9. say_hello(name)

加载需要的模块。

使用缩进定义不同的程序块。而不是 ;{}END

使用 def 定义函数。

动态变量类型。

处理字符串十分方便。

使用 python 运行,或定义 shebang 并配置权限后直接运行。

  1. $> python example.py
  2. hello World!
  3. $> ./example.py Xavi
  4. hello Xavi!

列表和字典(List and dict)

列表类似于 c 语言中的数组,但同一个列表中可以保存不同类型的数据。

  1. $> python
  2. >>> mylist = ['a','b','c'] >>> print(mylist)
  3. ['a', 'b', 'c']
  4. >>> mylist[2:]
  5. ['c']
  6. >>> mylist[-1]
  7. 'c'
  8. >>> for element in mylist: ... print(element) ...
  9. a
  10. b
  11. c

字典相当于 c++ 中的 std::map,可以保存不同种类的数据。

  1. >>> mydict = {'key1':1,'key2':2,'key3':3} >>> for key,value in mydict.items():
  2. ... print(key + ":" + str(value)) ...
  3. key3:3
  4. key2:2
  5. key1:1
  6. >>> 'key1' in mydict
  7. True
  8. >>> 'key5' in mydict
  9. False
  10. >>> len(mydict)
  11. 3
  12. >>> mydict.keys() ['key3', 'key2', 'key1'] >>> mydict.values()
  13. [3, 2, 1]

NumPy

NumPy 是 Python 科学计算的基础包。提供对多维数组的支持。 同时提供大量对数据进行快速操作的函数,性能与 C 和 Fortran 相当。

越来越多基于 Python 的数据和科学库使用 NumPy。

NumPy 的核心是 ndarray 对象,一个 n 维同构数组。

  1. >>> from numpyimport *
  2. >>> a = arange(15).reshape(3, 5)
  3. >>> a
  4. array([[ 0, 1, 2, 3, 4],
  5. [ 5, 6, 7, 8, 9],
  6. [10, 11, 12, 13, 14]])
  7. >>> a.shape
  8. (3, 5)
  9. >>> a.ndim
  10. 2
  11. >>> a.size
  12. 15
  13. >>> b = array([6, 7, 8])
  14. >>> b
  15. array([6, 7, 8])
  16. >>> a.sum()
  17. 105
  18. >>> a.min()
  19. 0
  20. >>> a.max()
  21. 14
  22. >>> a.mean()
  23. 7.0
  24. >>> b*2
  25. array([12, 14, 16])
  26. >>> b-b
  27. array([0, 0, 0])
  28. >>> b*b
  29. array([36, 49, 64])

了解NumPy提供哪些函数非常困难。

http://docs.scipy.org/doc/numpy/reference/

数据的操作包括:

  • 数学和逻辑
  • 变形
  • 选择
  • IO
  • 离散傅里叶变换
  • 基本线性代数
  • 基本统计函数
  • 随机模拟

matplotlib

Python 和 NumPy 扩展的绘图库。

原生模拟 Matlib 的绘图命令,但独立实现。

重度依赖 NumPy。

设计哲学:

  • 创建图形应该很简单
  • 图形应该漂亮
  • 使用尽可能少的语句创建图形
  • 代码应该容易理解
  • 应该很容易扩展代码

支持 2 维和 3 维图形。

底图模块:projections,coastlines,political boundaries

  1. import numpy as np
  2. import matplotlib
  3. # or use
  4. # echo "backend: TkAgg" >> ~/.matplotlib/matplotlibrc
  5. matplotlib.use("TkAgg")
  6. import matplotlib.pyplot as plt
  7. # evenly sampled time at 200ms intervals
  8. t = np.arange(0., 5., 0.2)
  9. # red dashes, blue squares and green triangles
  10. plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
  11. plt.show()

绘制结果如图所示

Python 和 GRIB API - 图1

  1. import numpy as np
  2. import matplotlib
  3. # or use
  4. # echo "backend: TkAgg" >> ~/.matplotlib/matplotlibrc
  5. matplotlib.use("TkAgg")
  6. from mpl_toolkits.basemap import Basemap
  7. import matplotlib.pyplot as plt
  8. # make sure the value of resolution is a lowercase L,
  9. # for 'low', not a numeral 1
  10. map = Basemap(projection='ortho', lat_0=50, lon_0=-100,
  11. resolution='l', area_thresh=1000.0)
  12. map.drawcoastlines()
  13. map.drawcountries()
  14. map.fillcontinents(color='coral')
  15. map.drawmapboundary()
  16. map.drawmeridians(np.arange(0, 360, 30))
  17. map.drawparallels(np.arange(-90, 90, 30))
  18. plt.show()

Python 和 GRIB API - 图2

SciPy 库

科学算法和数学工具的开源库,依赖 NumPy。提供 NumPy 很多函数的增强版本。

因为计算由 C 扩展模块实现,所以速度非常快。

提供一套精心挑选的高层科学和工程模块:

  • 统计
  • 优化
  • 数值拟合
  • 线性代数
  • 傅里叶变换
  • 信号处理
  • 图像处理
  • 常微分方程求解器
  • 特殊函数

Ipython - Jupyter

交互的增强型 python 控制台

服务器/客户端网页 Notebooks。

SciPy 软件栈

基于 Python 的开源软件生态系统,用于数学、科学和工程。

依赖下面的 Python 库:

  • NumPy:基本 N 维数组包
  • SciPy Library:基础科学计算库
  • Matplotlib:综合二维绘图
  • Ipython / Jupyter:增强交互Python控制台,notebooks
  • Sympy:符号数学
  • Pandas:数据结构和分析

Python 在 ECMWF 的使用

目前有两个 ECMWF 的库有 Python 接口:

  • ecCodes / GRIB API
  • Magics++

ecCharts

新的网页图形(ecCodes,magics++)

检验(ecCodes,magics++)

EcFlow(SMS 的替代品):服务器配置和客户端通讯

Copernicus 项目(ecCodes)

EFAS(European Fload Alert System)(EcFlow)

科研

计划开发下一代插值库的 Python 接口。

Magics++

ECMWF 开发的气象绘图软件,已在 ECMWF 和成员国使用超过 25 年。

支持等值线、风场、观测、卫星图像、符号、文字、坐标轴和图像的绘制。

两种绘制方式:

  • 可以直接绘制的数据类型:GRIB1、GRIB2、BUFR、ODB、NetCDF 和 NumPy
  • 可以使用 ecCodes 读取的数据场,可以修改后传递给 magics++ 绘制。

生成的气象图形可以保存成多种格式,例如 PS,EPS,PDF,GIF,PNG,KML 和 SVG。

提供过程式接口和高层 Python 编程接口。