首先这不是一篇告诉你如何抛弃NCL的推送,而是告诉你如何更好的使用Python!

作为曾经地球科学领域最炙手可热脚本语言之一的NCL已经进入维护模式,不再更新。NCAR将使用Python作为地球科学领域的主要数据处理和可视化工具。

NCAR对NCL进行了“封装”,构成了PyNGL和PyNIO,随后可能还会开发一款工具,囊括NCL中大多数函数。PyNGL和PyNIO中的函数和绘图方式与NCL是非常类似的,可以非常顺畅的从NCL转到Python。

但遗憾的是PyNGL和PyNIO仍不支持Windows系统(除了Win10的 Linux子系统外)。既然已经从NCL转到Python了,那么为什么一定要执着于PyNGL和PyNIO呢,今天就抛开PyNGL和PyNIO,介绍Python中其他常用库,实现真正的跨平台切换。

数据处理

  • NetCDF格式 : netCDF4-pythonh5pyh5netcdfxarray等。 除了上述简单的数据处理库之外,python还提供了NCOCDO工具的封装,pyncocdo,提供了更多的便捷操作。
  • Grib格式xarrayIrispygrib等,有些仅支持类Unix系统。 ECWMF提供了cfgrib工具可将grib格式转换为NetCDF格式,cfgrib库支持Mac,Linux和windows系统。
  • csv, xlsx等格式pandas你值得拥有,无论是气象还是其他领域的类似格式数据,使用pandas可以解决你的常用操作。
  • HDF格式pandash5py可以处理hdf5格式,PyHDF可以处理hdf4格式。
  • 二进制numpy可以处理二进制数据,同时借助python内置struct模块可以非常方便的处理二进制格式数据。

上述介绍的一些库,很多仅支持简单的数据读取和写入操作,不支持更多计算操作。如果要对空间数据进行插值,可能就无法满足了。

数据插值

  • xESMFESMPy:气象数据空间插值,尤其是对于模式网格数据而言,提供了一些便捷的命令可对网格数据进行一些列插值操作
  • python-stratify:针对大气和海洋数据进行垂直插值
  • scipy.interpolate模块提供了大量插值函数
  • python-geotiepoints:针对地理网格数据的空间插值

说到地球科学领域的数据处理,最离不开的应该也是模式输出数据了。Python中有很多处理模式输出的库,功能都比较完善。

模式输出处理

  • wrf-python:对于使用WRF模式的来说使用最为频繁的模式输出后处理工具之一。
  • salem:这个库包含了数据处理和可视化几乎所有功能,就放这里吧,毕竟也提供了不少WRF模式后处理和前处理的函数。
  • CESM_postprocessing:针对CESM地球模式的后处理工具
  • CAMxTools:提供了CAMx和CMAQ模型的前处理和后处理功能
  • PseudoNetCDF:类似处理NetCDF的工具,可用于处理CMAQ等模式输出结果
  • MONET:模式和观测评估工具

雷达和卫星数据处理

  • PyARTwradlib可用于处理国外常见格式的雷达数据。改进后的PyARTPyART提供国内常用的S波段雷达数据处理方式,还有这个PyCINRAD。此外,Python中还提供了不少雷达数据处理和反演库。
  • satpyPyCAMApys5ppyresample等库可处理常见的卫星数据

​ 说到数据处理,当然少不了Micaps的多种数据格式了,下面介绍一款国内大神基于Python开发的Micaps数据处理和可视化库:

Micaps数据处理

  • PyMICAPSPyMICAPS是由国内某气象局一位大神开源的Micaps输出处理和可视化工具(发布在知名同性交友平台–Github),功能相对齐全,而且也在不断完善。感兴趣的可以下载使用,并反馈意见,帮助持续完善(打个广告~~)。

数据处理完成之后,当然是要进一步进行分析,python中提供了相当多的分析工具,以下仅列出一小部分:

数据分析

  • EOFS:Python EOF分析库
  • statsmodels:Python统计分析库,提供了大量的统计分析函数
  • scikit-learn:Python中较为热门的机器学习库,其中也提供了相当多的统计学方法
  • metpysharppyatmos等库可计算大气科学领域常用的一些参数,其中metpy还提供了一些可视化和数据处理函数。

数据处理完成后,当然也要画图看一下了,要不然怎么发paper呢<手动狗头>?

数据可视化

  • matplotlibmatplotlib可以说是python中最为基础的绘图库了
  • seaborn:针对统计分析的可视化库
  • BasemapCartopy:针对地理信息的可视化库
  • EarthSim:针对环境模拟(比如水文气象等)的后处理可视化工具,包含了交互式可视化。
  • calmap:可以绘制日历图

​ 还有一些库不知道该怎么分类,就放到这边吧:

  • geopandas:地理空间数据处理和可视化神器
  • pyshpfiona等可处理常规的shapefile文件,常在画图的时候添加海岸线和边界线使用

​ 上述介绍的可视化库大多是非交互式可视化库,关于Python中更多的可视化库分类,见Python可视化工具概览画图当然少不了配色,以下介绍一些Python中的配色库:

  • cmocean:海洋科学领域的配色库,除了python版之外,还有matlab及其他版本
  • colorcetpalettablecolour:提供了很多可选的colormap
  • colormap:提供了一些颜色转换基础操作和创建colormap的函数
  • cmaps:提供了NCL中所有的colormap

除了上面提到的之外,Python中还有很多可用的库,比如网络数据获取requestsbs4等,而且很多国外很多机构都提供了python版的获取数据的API接口工具。

机器学习

  • sklearn:前面已经介绍,可以用这个框架完成常用的机器学习流程,从数据预处理,特征工程,建模到评估,非常方便,但不支持深度学习的模型。

  • TensorFlow:大家都耳熟能详的深度学习框架,是Google brain 开发和维护的,在工业界和学术界都有广泛的使用。

  • Pytorch:与TensorFlow相比,Pytorch更加方便实现简单灵活的实验,它的前身是Torch,用的是lua语言,从Torch到Pytorch可以看成是lua到python的迁移。

  • Keras:是建立在 Tensorflow 和 Theano 之上的更高级的 封装,非常容易上手,适合进行简单的试验。具体可以看铁柱同学的系列文章

  • XGBoost:被称为机器学习大杀器的XGBoost(eXtreme Gradient Boosting),想必大家都有所耳闻,很多比赛的top solutions大多数都用了这个算法。

  • lightgbm:微软推出的gbm算法模型,更加轻量,一些测试表明其可以实现类似xgboost的效果,但是可以极大节约时间成本。

  • CatBoost:CatBoost是Yandex在17年开源的机器学习框架,对类别特征支持较好,可以理解为基于类别特征优化的GBM算法。

  • Hyperopt:强大的调参库,支持贝叶斯优化。

上面仅对仅列出了一些气象或者机器学习常用库,当然还有很多库有待挖掘。当你有一个想法的时候,可以在Google或者Github搜索一下,说不定Python就能满足你呢!