Python简介

Python(英语发音:/ˈpaɪθən/), 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。

Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议[1] 。 Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。

Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。

用Python做科学计算

随着NumPy, SciPy, Matplotlib, Enthought librarys等众多程序库的开发,Python越来越适合于做科学计算、绘制高质量的2D和3D图像。和科学计算领域最流行的商业软件Matlab相比,Python是一门通用的程序设计语言,比Matlab所采用的脚本语言的应用范围更广泛,有更多的程序库的支持。虽然Matlab中的许多高级功能和toolbox目前还是无法替代的,不过在日常的科研开发之中仍然有很多的工作是可以用Python代劳的。

Python与海洋科学

本文主要介绍一些海洋相关的Python模块,并在linux环境中进行正确配置。

1.安装Python基本环境和Python科学计算的相关模块

sudo apt-get install build-essential python-dev gfortran
sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose m4
sudo apt-get install python-mpltoolkits.basemap
sudo apt-get install python-pip

2.安装HDF5

文件格式是指计算机存储和处理数据的方式 。目前常用的图像文件格式很多, 如 GIF , JPG , PCX ,TIFF 等 。这些格式共同的缺点是结构太简单 ,不能存放除影像信息外其他的有用数据 ,像遥感影像的坐标值、参数等都无法在其中保存 ,而且用不同格式存储影像数据使得读取 、传输、共享变得复杂, 因此,有必要建立一种标准格式以解决上述问题。

HDF(Hierarchical Data File)是美国国家高级计算应用中心(National Center for Supercomputing Application,NCSA)为了满足各种领域研究需求而研制的一种能高效存储和分发科学数据的新型数据格式 。HDF可以表示出科学数据存储和分布的许多必要条件。

HDF 最初产生于 20 世纪 80 年代 , 到现在已经具有两个不同的产品。从 HDF1 到 HDF4 的各个版本在本质上是一致的 , 因而 HDF4 可以向后兼容早期的版本 。HDF5 推出于 1998 年, 相较于以前的HDF 文件, 可以说是一种全新的文件格式, 它与HDF4 只在概念上一脉相承 ,而在数据结构的组织上却截然迥异。HDF5 的产生与发展反映了 HDF 在不断适应现代计算机发展和数据处理日益庞大复杂的要求。HDF5 紧跟时代变化也为其自身注入活力,使它被愈来愈多的领域采纳、运用 ,许多遥感影像采取HDF 格式存取, 一些大的图像处理软件也开始提供接口读取 HDF 文件。 HDF 强大的机制适应了遥感影像的特点 ,能够有条不紊 、完备地保存遥感影像的属性和空间信息数据 , 同时使查询和提取相关数据也很方便容易 。

随着计算机软硬件的不断发展, 要处理的数据量和数据类型都变得十分庞大 , 原有的 HDF4 已经无法适应这种要求了。 HDF5 正是在克服 HDF4 缺点基础上应运而生的。 HDF4 不能存储多于 2 万个复杂对象, 文件大小不能超过 2G 字节 ,其数据结构不能完全包含它的内容, 随着对象的增多,数据类型也受到限制,库代码过时 , 过于琐碎 ,不能有效执行并行 I/O , 难于运用到线程程序中 。HDF5 的产生解决了上述问题, 不但能处理更多的对象 ,存储更大的文件 ,支持并行 I/O ,线程和具备现代操作系统与应用程序所要求的其他特性, 而且数据模型变得更简单 ,概括性更强。HDF5 的逻辑格式如图 3 所示 。HDF5 只有两种基本结构 :组(group)和数据集(dataset)。组包含 0 个或多个数据集。HDF4 的 8 种数据类型除注释外都统一为 HDF5 的数据集。在HDF5 中用一个小数据集 Attribute 表示注释信息。

安装hdf5之前要先安装zlib

cd zlib-1.2.8/
./configure 
sudo make
sudo make install

安装hdf5

cd hdf5-1.8.15-patch1/
./configure --prefix=/usr/local/hdf5
sudo make
sudo make install

3.安装NetCDF4

NetCDF(network Common Data Form)网络通用数据格式是由美国大学大气研究协会(University Corporation for Atmospheric Research,UCAR)的Unidata项目科学家针对科学数据的特点开发的,是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作 NetCDF 数据集。

NetCDF数据集(文件名后缀为.nc) 的格式不是固定的,它是使用者根据需求 自己定义的。一个NetCDF数据集包含维(dimensions)、变量(variables)和属性(attributes)三种描述类型,每种类型都会被分配一个名字和一个ID,这些类型共同描述了一个数据集,NetCDF库可以同时访问多个数据集,用ID来识别不同数据集。变量存储实际数据,维给出了变量维度信息,属性则给出了变量或数据集本身的辅助信息属性,又可以分为适用于整个文件的全局属性和适用于特定变量的局部属性,全局属性则描述了数据集的基本属性以及数据集的来源。一个NetCDF文件的结构包括以下对象:

NetCDF name{
Dimensions:… //定义维数
Variables:… //定义变量
Attributes:… //属性
Data:…//数据
}

安装NetCDF4之前要先安装好HDF5,HDF5的安装在上一节中已经叙述过了。

cd netcdf-4.3.3.1/
LDFLAGS=-L/usr/local/hdf5/lib CPPFLAGS=-I/usr/local/hdf5/include ./configure --prefix=/usr/local/netcdf4  --enable-shared --enable-netcdf-4 --with-zlib=/usr/local
sudo make
sudo make install

然后安装NetCDF4的Python模块,在安装Python模块之前要将NetCDF4和HDF5的安装目录写到系统环境中,比如/etc/profile或者.bashrc

export HDF5_DIR=/usr/local/hdf5
export HDF5_INCDIR=/usr/local/hdf5/include
export HDF5_LIBDIR=/usr/local/hdf5/lib
export NETCDF4_DIR=/usr/local/netcdf4
export NETCDF4_INCDIR=/usr/local/netcdf4/include
export NETCDF4_LIBDIR=/usr/local/netcdf4/lib

然后手动安装NetCDF4模块

cd netCDF4-1.2.0/
python setup.py build
sudo python setup.py install

4.安装NCL

NCL(The NCAR Command Language)是一种专门为科学数据处理以及数据可视化设计的高级语言,很适合用在气象数据的处理和可视化上。NCL包含了现代编程语言的许多常见功能:条件语句、循环、数组运算等。此外,NCL还包括许多有用的内置函数和过程用来进行处理和操作数据,其中包括统计函数、插值、EOF分析、波谱分析等。

NCL的设计目标是为了方便地从各种格式的文件中读取数据,进行数据处理,数据可视化。NCL有两种运行模式:第一种是命令行交互式运行,用户每输入一个命令或表达式就会立即得到执行。第二种是批处理模式,通过编写NCL脚本,一次性完成所有操作。

NCL主要包括以下三个方面的功能:首先是文件I/O功能。NCL有独特的语法,可以访问数据文件中的变量。也可以访问变量的其他信息(元数据 metadata),比如网格坐标信息、单位、缺测值等。第二是NCL的数据处理功能,比如求数据的平均值,做线性回归等。想要掌握这部分功能需要具备一定的编程经验,也需要对NCL语言有相当程度的了解。最后是数据可视化。使用NCL绘图的语法命令很简单,但是使用时会比较复杂。

这里要注意要选择6.0.0的版本

sudo mkdir /usr/local/ncl
cd /usr/local/ncl/
sudo tar zxvf /你下载的目录/ncl_ncarg-6.0.0.Linux_Debian_x86_64_gcc432.tar.gz 

写环境变量

export NCARG_ROOT=/usr/local/ncl
export PATH=$NCARG_ROOT/bin:$PATH

 5.安装PyNGL与PyNIO

PyNGL是一个地球科学领域绘制出版级二维可视化图像的Python模块。PyNGL可以绘制等高线、向量、流线、XY坐标图以及一些地图项目。PyNGL图像是基于NCAR Command Language 和 NCAR Graphics图形库。

安装PyNGL之前首先要安装相关依赖,具体内容请查看INSTALL文件

sudo apt-get install libX11-dev libXext-dev libXtst-dev libXrender-dev libxmu-dev libxmuu-dev
sudo apt-get install libssl0.9.8
sudo apt-get install libpng12-dev libz-dev libxrender-dev libfontconfig1-dev
sudo apt-get install libcairo2-dev

写依赖文件的环境变量

export HAS_CAIRO=1
export F2CLIBS=gfortran
export F2CLIBS_PREFIX=/usr/local/lib

export PNG_PREFIX=/usr/include/libpng12/
export ZLIB_PREFIX=/usr/local/include
export CAIRO_PREFIX=/usr/include/cairo/
export FREETYPE_PREFIX=/usr/include/freetype2/
export NCARG_ROOT=/usr/local/ncl

安装PyNGL

python setup.py build
sudo python setup.py install

最后将安装后的NCARG目录写入环境变量,并将PyNGL写入Python的PATH目录

export PYNGL_NCARG=/usr/local/lib/python2.7/dist-packages/PyNGL/ncarg
export PYTHONPATH=/usr/local/lib/python2.7/dist-packages/PyNGL/:$PYTHONPATH