本文翻译自AboutHydrology: Python resources for Hydrologists,作者在博客中总结了Python在水文学的应用方面的资源列表。国内介绍Python在水文学中的应用的文章和博客实在太少,然而在国外已经有许多学者基于Python做了大量的工作了,希望我的翻译能够帮助从事水文或相关领域研究的朋友们,也希望相关领域的朋友们也能够继续添砖加瓦,积极推广Python。由于原作者博客在国内无法正常打开,若想打开作者的博客专栏,则需要采用科学上网的方式,这是它的博客主页http://abouthydrology.blogspot.com/

AboutHydrology

我关于水文学和水文学家的思考和笔记。我日常工作的进展,特别是对我的学生,也是对任何有耐心阅读的人来说。

2016年12月25日星期五

水文学家的Python资源

Python是一种面向对象的高级语言。我偶尔也会在我的帖子里提到它,也会说我去了一个不同的方向。然而,我不能否认越来越多的人选择使用它的证据,而且有充分的理由选择作为他们从事研究和水文学应用的语言。下面你会找到一个资源列表。请不要犹豫,将我的注意力放在你们或其他人的贡献上,我还没有在我的小组中做出贡献。以下是我翻译的内容:

在这个博客帖子或这篇文章中可以找到选择使用Python而不是选择其他编程语言的动机。

要了解如何开始,你可以按照Python programming for hydrology students开始,指导你如何进行安装。

有许多开始学习Python的资源,但是对于水文学者来讲,建议使用这些:

优先考虑第一本。

Bittelli等人写的Soil Physics with Python: Transport in the Soil-Plant-Atmosphere System,by Bittelli et al是一本关于土壤科学的,这本书非常有吸引力(如TOC所见):kindle版本价格合理,但我没有。Python程序在这里可以找到。

SciPy.org上给出了Python中普遍使用的科学库和软件的概述,从中我将这些链接提取到文档中。

Python特别是用作现有程序的粘合剂,无论是用C还是FORTRAN编写的。我们有如下的案例:

  • CMF是一个用于创建水文模型的编程库。尽管是用C++编写的,但是它有Python接口。
  • 地球系统建模框架(ESMF)重新栅格化:已经与Python ESMPy接口。
  • GRASS地理信息系统已经实现Python接口。
  • Python也实现了与gvSIG的接口,你可以从Geographic Scritping in gvSIG看到。
  • HPGL是一个高性能的地质统计学库,用C++编写的代码被Python粘合在一起。
  • MODFLOW地下水文模型由FloPy接口连接。文档和其它信息在这里
  • PCRaster是一个针对时空环境模型开发和部署的软件集合。它有一个不断增强的python接口。
  • Open Hydrology是一个用Python编写的开源水文软件库,它以包的形式在一个伞形接口(umbrella interface)下进行操作。
  • PyHSPF:对Fortran水文模拟程序的Python拓展。
  • PyQGIS:QGIS(免费开源的地理信息系统)的一个Python接口。
  • RhessysWorkflow :RHESSysWorkflows提供了用于构建RHESSys模型的Python脚本。其它的关于RHESSys的Pythonic材料可以在这里找到。
  • UWHydro工具连接华盛顿大学的水文模型,特别是VIC驱动程序PythonDriver
  • hydrus_wrapper
  • pyMODIS 用于处理MODIS(中分辨率成像光谱仪)数据。

在水文学的应用中,完全用Python占主导地位编写,我们提醒:

  • AMBHAS:用Python编写的水文学库。
  • ANUGA 2模拟溃坝、河流泛滥、风暴草或海啸的软件包。用Python和C语言编写。
  • EcoHydrolib提供了进行生态水文学数据准备工作流程的一系列Python脚本。
  • evaplib:包含计算蒸发速率函数的Python库。其功能包括Penman开放水分蒸发,Makkink参考蒸发,Priestley Taylor蒸发,Penman Monteith(1965)蒸发以及FAO的Penman Moteith ET0参考蒸发。另外还有一个函数可以通过温度波动计算感热通量。查看evaplib模块功能的文档。模块文档也有PDF版。作者:M.J.Waterloo。
  • GLUE方法:广义似然不确定性估计(GLUE),由Joel Delsman于2011年在Deltares开发。
  • Groundwater flow modelling manual:由Vincent post编写的Python地下水流动模型手册。
  • Hydro-conductor:一组Python脚本和模块,用于将水文模型与区域冰川模型相结合。
  • ODMToolsPyhonOMDMTools是使用观测数据模型管理观测数据的Python应用程序。ODMTools允许您查询、可视化和编辑存储在观测数据模型(ODM)数据库中的数据。ODMTools最初是作为CUAHSI水文信息系统的一部分开发的。你可以在这里找到介绍。
  • PyETo是一个用于计算参考/潜在蒸散量(ET0)的包。
  • Python script for rectangular Piper plot (version December 2014):根据Ray和Mukherjee(2008)地下水46(6):893-896,用于在矩形python图上绘制化学数据(看)。同时下载示例数据文件watersamples.txt。作者:B.M. van Breukelen。
  • Python script for multiple Stiff plots (version June 2011):用于多个板式图解的Python脚本(2011年6月版),用于(见)。
  • Haran Kiruba tools for hydrology并不清楚他在做什么。
  • USEPA site包含各种python(和其他编程语言)工具,包括Epanet和SWMM的接口(与swmmtoolbox的连接在这里也是可用的)。
  • 美国地质调查局(USGS)也有它的python工具
  • sMAP 2.0是一个教程,将介绍如何使用Python从sMAP归档器中检索数据。
  • ulmo干净、简单和快速获取公共水文和气候资料。

具体的水文模型列举如下。

  • EXP-HYDRO Model 模型是一个以日时间步长运行的流域规模水文模型。
  • Landlab是一个基于Python的建模环境,允许科学家和学生构建数字景观模型。设专为量化地球表明动力学的学科(如地貌、水文、冰川学和地层学)而设计,也可以用在相关领域。
  • LHMP集总水文模型平台-拥有完整预测环境的微型docker容器。
  • PyCatch是在xx Python框架内构建的基于组件的流域水文模型。代码在这里,一篇相关的文章在这里
  • PyTOPKAPI是BSD许可的Python库,实现了TOPKAPI水文模型(liu和Todini,2002)。该模型师一个基于物理的,全分布式的水文模型,已经在世界各国成功应用。
  • SPHY水文空间过程模型,是适用于范围广泛的水资源管理应用的水文建模工具。详情请参阅模型和出版物(HESS,Nature等)。就在最近,一篇使用了SPHY模型的关于PlotS的气候变化和山区水文的新文章出现了,更多信息在这里
  • Topflow:Scott Peckham的Python水文模型。
  • WOFpy是一个用python实现的CUAHSI的Water One Flow服务栈。
  • wflow是一个分布式水文模型平台,目前包含两个模型:wflow_sbm模型(由topog_sbm土壤概念推导)和wflow_hbv模型(是HBV模型的分布式版本)。这是名为OpenStream的一个更大的Deltares项目的一部分。

GIS功能也存在:

  • 使用PyWPS + GRASS + QGIS选择水文响应单元(HRU)。
  • PyDEM:一个python数字高程模型分析包。请注意,pyDEM依赖于TauDEM的某些步骤(例如填充),并且还广泛的使用GDAL库来处理地理空间栅格。(一个小视频)
  • PyGeoprocessing是一个基于Python/Cython的库,为GIS处理提供了一套常用的栅格、矢量和水文操作。

也有处理气象的工具:

  • :包含气象功能的Python库,用于计算大气压、空气密度、汽化潜热、恒压热容、恒温、日长、外星辐射输入、潜在温度和风向量。这个模块的文档介绍在这(metelib模块功能网站)。将基于时间的数据记录转换为等间距时间间隔记录(event2time)及将日期值转化为年份值(date2doy)的函数现在位于单独的meteo_util模块中。文档介绍在这里(meteo_util模块函数网站)。模块文档也有PDF文档。作者:M.J. Waterloo。
  • MetPy是一个开源的气象工具包。
  • Melodist(气象观测时间序列分解工具)是一个用Python编写的开源软件包,用于将日气象时间序列缩减(分解)为小时数据,2016年,它在Forster等人的GMD论文中有记载。
  • pyaos的博客中可以找到各种气象有关的资源。

统计学和数据分析工具非常丰富

  • CUAHSI时间序列查看器
  • 基本的备忘单(cheatsheet)
  • NetCDF文件操作在这里可用。但是,也有txt2netcdf,其中包含ko van Huissteden开发的用于将文本导入NetCDF数据文件(创建文件、添加变量、列表结构等)的各种Python函数。
  • Pandas是一个开源的、BSD许可的库,为Python提供了高性能、易用的数据结构和数据分析工具。(一个简短的教程也在这里)
  • 极端分布也在这里(来自scipy.stats)
  • 一个使用Pandas分析时间序列的例子
  • hydropy旨在利用Pandas的强大功能,并增加水文功能(将得到进一步维护)。

可视化服务很好

  • ggplot是一个基于R的ggplot2图形语法的Python绘图系统。它以最少的代码量实现专业化的查看和快速的查询而建立的。
  • 在这个领域里,有一段令人印象深刻的Python之旅是“回归印象”。
  • VisTrails是一个开源的科学工作流和支持数据探索和可视化的源管理系统。网站在这儿
  • uvcmetrics度量标准又称诊断,用于比较模型与观察值或相互之间的差异。 这是包含其他可视化工具的Uv-CDAT网站的一部分。

处理不确定性和敏感性分析的工具

SA/UA/优化工具列表中

  • spotpy为水文模型提供了许多有用的算法。

最后的评论

事实上,我对Python贡献的质量印象深刻。我认为没有理由在大学使用像Matlab这样的商业程序(请参阅此处的评论)。 Matlab能做的,Python也能做。与R相比,它有更清晰的语法,当然是更好的语言。所以我建议学生使用它。我喜欢R,但我从来没有建立过程序,因为它的对象方向真的很差。 Python更好,众所周知,它的语法是干净的。 Python很适合链接FORTRAN和C / C ++本地库,所以其实有很多人用它来组装那些用更高性能语言编写的库。

但正如你所知,我的团队使用Java作为其主要的编程语言。相比于Python,Java并不那么直接,且更为冗长,但是它可以建立很多工作框架,而且通常比Python更快。可能是因为,Java是由伟大的构建工具(MavenGradle)支持的,它允许以一种可能无法用Python完成的方式来管理大型项目。