基于jekyll的Github Pages博客配置
本文翻译自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的资源,但是对于水文学者来讲,建议使用这些:
- Python in Hydrology
- Python programming guide for Earth Scientists
- A Hands-On Introduction to Using Python in the Atmospheric and Oceanic Sciences
优先考虑第一本。
Bittelli等人写的Soil Physics with Python: Transport in the Soil-Plant-Atmosphere System,by Bittelli et al是一本关于土壤科学的,这本书非常有吸引力(如TOC所见):kindle版本价格合理,但我没有。Python程序在这里可以找到。
在SciPy.org上给出了Python中普遍使用的科学库和软件的概述,从中我将这些链接提取到文档中。
- 科学计算Python教程:主要是Numpy和Scipy文档。
- Scipy Lecture Notes是Python科学计算的一个全套教程。
- Software Carpentry是一个开源的,面向拥有科学、工程和医学背景人的基础软件开发技巧课程。
- Lectures on scientific computing with python:作者是J.R.Johansson.
- Introduction to Statistics是一本介绍了统计学基本概念,并结合了一整套使用Python进行统计学数据分析应用案例的书(作者是T.Haslwanter)。这是另外一本类似的书(作者是Kevin Sheppard)。
- Jupyter notebooks是组织计算非常棒的方式。
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脚本和模块,用于将水文模型与区域冰川模型相结合。
- ODMToolsPyhon和OMDMTools是使用观测数据模型管理观测数据的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是由伟大的构建工具(Maven,Gradle)支持的,它允许以一种可能无法用Python完成的方式来管理大型项目。