自建 | 地理与气象数据分析(geographic and meteorological data analysis)(gma)的说明与使用
写在前面
对于大部分地学或气象学的学者来说,数据处理是一个很大的工程,动辄数小时或者数天的数据处理时间。如果没有很好的工具或者方法,在面对多时序(例如时序遥感数据),大尺度(例如全国范围)等数据分析研究时,就显得极为困难,因为数据处理本身就非常的耗时耗力。
几年前读研究生时,我第一次初次接触遥感数据(以及气象数据),作为领域新人,面对庞大与复杂的数据,除了对数据、数据处理过程的一脸茫然,也对后续的研究不知所措。当然,在老师的带领下,逐渐入道IDL,并利用IDL完成了所有数据的处理,开展了相关的研究;也学会了ENVI、Arcgis之类的工具;顺利的毕了业。
诚然,研究生阶段使我收获颇多。对数据以及数据处理也有了长远的进步,例如:可以使用批量处理VBA处理气象站点数据;利用IDL处理栅格数据(后续全部转为Python实现);学会了SPPS、Origin等专业软件(虽然前期利用Python绘图,可能是因为懒,或者Origin过于方便,后期全部转为了Origin);等等。也算为我现在的想法奠定了基础。
不知何时起,萌生了一种将我所接触的遥感、气象数据处理方法与算法写成函数包汇总在一起的想法。后来工作过程中的实践也证明,这种方法对提高工作效率,对个人的成长进步非常有效。所以才有<地理与气象数据分析(geographic and meteorological data analysis)>gma这个Python函数包。
目前,gma可实现 栅格数据处理(例如镶嵌、裁剪、重采样、重投影、格式转换、数据融合等),矢量数据处理(例如裁剪、擦除、交集、融合、重投影等),一些缺失值插补算法(例如线性插值)、平滑算法(例如SG平滑),一些指数算法(例如NDVI、ET0等等) 以及一些 系统交互操作 ,并配有中文的函数帮助说明,这些功能算法已经封装,只需调用对应的函数,设置相应的参数即可实现。后续也会逐步补充更多的算法和功能。
希望可以得到各位专家、同仁和朋友的支持与信赖,也希望得到各位的认可以及反馈。
目录
- 写在前面
- 0 gma安装
- 0.1 Python环境
- 0.2 依赖库
- 0.3 安装gma
- 1 gma组织方式
- 2 gma函数简介
- 2.1 index指数运算
- 2.2 math数学运算
- 2.3 osf系统交互
- 2.4 rasp栅格处理
- 2.5 vesp矢量处理
- 3 key默认参数
- 4 gma函数帮助
- 写在最后
- 作者简介
0 gma安装
0.1 Python环境
建议安装Anaconda创建Python环境。Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。
本文采用Anaconda的Windows版,版本为(点击下载):
Anaconda3 2021.05(Python 3.8.8 64-bit)
gma需求的 Python版本应 >= 3.8 。
0.2 依赖库
gma的构建依赖gdal,numpy,pandas和scipy等库,这些库是gma实现功能的基础。由于gdal不是一个纯Python库,需要下载whl包手动安装,获取地址:
https://www.lfd.uci.edu/~gohlke/pythonlibs/
从该网站下载对应版本GDAL的WHL包。Python 3.8 可下载 < GDAL-3.3.3-cp38-cp38-win_amd64.whl > 版本。
例如下载至D盘根目录,则文件路径为 D:\GDAL-3.3.3-cp38-cp38-win_amd64.whl 。
打开conda窗口(一般为 开始 - 所有程序 - Anaconda3 (64-bit) - Anaconda Powershell Prompt),使用以下命令安装gdal(本文均使用默认环境):
pip install "D:\GDAL-3.3.3-cp38-cp38-win_amd64.whl"
0.3 安装gma
gma已经上传至pypi,可以直接在conda或Windows终端中输入以下命令安装:
pip install gma
在安装gma时,依赖的numpy,pandas和scipy如果不存在则会自动安装(需联网)。
检查gma版本或是否安装成功:
(base) PS C:\Users\xxxx> conda list gma
# packages in environment at C:\Users\xxxx\anaconda3:
#
# Name Version Build Channel
gma 1.0.0 pypi_0 pypi
出现gma的详细信息则说明gma已经成功安装。
1 gma组织方式
下表列出了gma库的组织结构。
gma
- algorithm ||栅格、矢量操作的基础算法
- raster ——栅格处理, rasp调用的算法
- vector ——矢量处理,vesp调用的算法
- Relation || 关键 关联参数 设置
- error ——输入参数检查,错误提示。
- key ——栅格/矢量 处理的高阶参数设置,例如压缩,超大TIFF支持等。
- palmer —— 帕尔默旱涝指数及其相关指数的原始算法(尚未整合,暂不可用)。
- utils ——palmer的依赖包。
- index || 遥感、气象指数算法。
- math || 一些数学方法。
- osf || 系统交互操作。
- rasp || 栅格处理函数包。
- vesp || 矢量处理函数包。
2 gma函数简介
2.1 index指数运算
表 2.1 index指数运算(基于数组)主要函数简介
模块 | 函数 | 引用(简版) | 说明 | 解释 |
index | EVI | gma.index.EVI | 【EVI】 | 增强植被指数 |
NDBI | gma.index.NDBI | 【NDBI】 | 归一化建筑指数 | |
NDWI | gma.index.NDWI | 【NDWI】 | 归一化水指数 | |
NDVI | gma.index.NDVI | 【NDVI】 | 归一化植被指数 | |
PM_ET0 | gma.index.PM_ET0 | 【PM_ET0】 | Penman-Monteith 法作物参考蒸散量 | |
TVDI | gma.index.TVDI | 【TVDI】 | 温度植被干旱指数 |
2.2 math数学运算
表 2.2 math数学运算主要函数简介
模块 | 函数/类 | 方法 | 引用(简版) | 说明 | 解释 |
math | _DFToNumeric | gma.math._DFToNumeric | 【强制转换为数字】 | 强制将 <数据帧> 中的数据转换数字, 其中不能转换为数字的字符串将被转换为 NAN | |
FillNoData | gma.math.FillNoData | 【填充缺失值】 | 对缺失值或异常值值进行插值替换 | ||
Smooth | SavitzkyGolay | gma.math.Smooth.SavitzkyGolay | 【SavitzkyGolay】 | 利用SavitzkyGolay方法对数据进行平滑 | |
MovingAverage | gma.math.Smooth.MovingAverage | 【滑动平均】 | 利用滑动平均法对数据进行平滑 | ||
Evaluation | RMSE | gma.math.Evaluation.RMSE | 【RMSE】 | 均方根误差 | |
NRMSE | gma.math.Evaluation.NRMSE | 【NRMSE】 | 归一化均方根误差 | ||
D | gma.math.Evaluation.D | 【D】 | D指标 | ||
r | gma.math.Evaluation.r | 【r,P】 | 相关系数和显著性水平 | ||
R2 | gma.math.Evaluation.R2 | 【R2】 | 决定系数 | ||
MaxAE | gma.math.Evaluation.MaxAE | 【MaxAE】 | 最大绝对误差 | ||
Select | gma.math.Evaluation.Select | 【选择方法】 | 选择Evaluation中需要计算的一个或多个评价指标进行计算 | ||
Methods | gma.math.Evaluation.Methods | 【记录方法】 | 记录Evaluation类中所有的评估方法 |
2.3 osf系统交互
表 2.3 osf系统交互主要函数简介
模块 | 函数/类 | 方法 | 引用(简版) | 说明 | 解释 |
osf | GetPath | gma.osf.GetPath | 【获取路径】 | 查找目标文件 | |
Zip | gma.osf.Zip | 【压缩】 | 压缩文件或文件夹为 .zip 文件 | ||
UnZip | gma.osf.UnZip | 【解压缩】 | 解压缩 .zip 文件 | ||
DateSeries | gma.osf.DateSeries | 【日期序列】 | 构造一个日期序列 | ||
Rename | Modify | gma.osf.Rename.Modify | 【修改】 | 将原有文件(夹)名修改为新名 | |
Replace | gma.osf.Rename.Replace | 【替换】 | 替换原文件(夹)名中字符串后作为新文件(夹)名 | ||
Intercept | gma.osf.Rename.Intercept | 【截取】 | 截取文件(夹)名中的部分字符串作为新文件(夹)名 |
2.4 rasp栅格处理
表 2.4 rasp栅格处理主要函数简介
模块 | 函数/类 | 方法 | 引用(简版) | 说明 | 解释 |
rasp | BandSynthesis | gma.rasp.BandSynthesis | 【文件合并】 | 单波段文件合成多波段文件 | |
BandDecomposition | gma.rasp.BandDecomposition | 【波段分解】 | 多波段文件拆分为单波段文件 | ||
Clip | gma.rasp.Clip | 【裁剪】 | 按矢量边界裁剪栅格 | ||
ToOtherFormat | gma.rasp.ToOtherFormat | 【格式转换】 | 一种栅格格式转换为另一种栅格格式 | ||
Mosaic | gma.rasp.Mosaic | 【影像镶嵌】 | 将多个栅格数据集合并到一个新的栅格数据集中 | ||
Resample | gma.rasp.Resample | 【重采样】 | 更改栅格数据的空间分辨率 | ||
Reproject | gma.rasp.Reproject | 【重投影】 | 将空间数据从一种坐标系投影到另一种坐标系 | ||
ChangeDataType | gma.rasp.ChangeDataType | 【数据类型转换】 | 改变栅格的数据类型。 | ||
MultiSDSToTif | gma.rasp.MultiSDSToTif | 【多维数据转GTiff】 | 将含有子数据集的多维数据提取为GTiff | ||
ToVector | gma.rasp.ToVector | 【栅格转矢量】 | 将栅格数据转换为矢量数据 | ||
WriteRaster | gma.rasp.WriteRaster | 【写出栅格】 | 将numpy数组保存为栅格 | ||
GenerateOVR | gma.rasp.GenerateOVR | 【构建栅格金字塔】 | 为GTiff文件构造.ovr栅格金字塔,或为其他类型的栅格数据强制构造.ovr金字塔 | ||
OrthophotoCorrection | gma.rasp.OrthophotoCorrection | 【正射矫正】 | 根据有理多项式系数(RPC)对影像进行正射校正 | ||
Deformation | gma.rasp.Deformation | 【流程化处理】 | 完成镶嵌-裁剪-重采样-重投影-格式转换等其中一个或多个功能 | ||
Fusion | Pansharpen | gma.rasp.Fusion.Pansharpen | 【Pansharpen】 | 对全色影像和多光谱影像基于Pansharpen方法进行融合 | |
AddColorTable | gma.rasp.AddColorTable | 【添加色彩映射表】 | 为栅格数据添加色彩映射 |
2.5 vesp矢量处理
表 2.5 vesp矢量处理主要函数简介
模块 | 函数 | 引用(简版) | 说明 | 解释 |
vesp | Split | gma.vesp.Split | 【矢量文件分解】 | 将矢量文件的每个要素拆分为单个文件 |
Check | gma.vesp.Check | 【检查】 | 矢量文件有效性检查 | |
ToRaster | gma.vesp.ToRaster | 【矢量转栅格】 | 将矢量图层转换为栅格文件 | |
Clip | gma.vesp.Clip | 【裁剪】 | 矢量裁剪矢量 | |
Erase | gma.vesp.Erase | 【擦除】 | 从第一个矢量中去除与第二个矢量交叉的部分 | |
Intersection | gma.vesp.Intersection | 【交集】 | 取两个矢量的交集 | |
Union | gma.vesp.Union | 【融合】 | 取两个矢量的并集 | |
Update | gma.vesp.Update | 【更新】 | 用一个矢量更新另一个矢量 | |
ToOtherFormat | gma.vesp.ToOtherFormat | 【格式转换】 | 一种矢量格式转换为另一种矢量格式 | |
Reproject | gma.vesp.Reproject | 【重投影】 | 转换矢量格式的投影 |
3 key默认参数
默认参数已经内置。下表仅列出gma定义了的参数,后期可能会对其进行修改。
表 3 key默认参数设置简介
变量 | 类型 | 说明 | 详细介绍 |
---|---|---|---|
RasterFormat | 字典 | 支持的栅格数据驱动 | ‘AAIGrid’, ‘BT’, ‘CALS’, ‘COG’, ‘DTED’, ‘EHdr’, ‘ENVI’, ‘ERS’, ‘EXR’, ‘FIT’, ‘GIF’, ‘GPKG’, ‘GRIB’, ‘GS7BG’, ‘GSAG’, ‘GSBG’, ‘GTiff’, ‘HDF4Image’,‘HF2’, ‘HFA’, ‘ISCE’, ‘ISIS2’, ‘ISIS3’, ‘JP2OpenJPEG’, ‘JPEG’, ‘LAN’, ‘MBTiles’, ‘XPM’, ‘XYZ’, ‘netCDF’, ‘MFF2’, ‘MRF’, ‘NITF’, ‘PAux’, ‘PCIDSK’, ‘PCRaster’, ‘PNG’, ‘RST’, ‘Rasterlite’, ‘SIGDEM’, ‘USGSDEM’, ‘VICAR’, ‘VRT’ |
VectorFormat | 字典 | 支持的矢量数据驱动 | ‘ESRI Shapefile’, ‘PCIDSK’, ‘PDS4’, ‘PDF’, ‘MBTiles’, ‘MapInfo File’, ‘Memory’, ‘CSV’, ‘GML’, ‘LIBKML’, ‘KML’, ‘GeoJSON’, ‘OGR_GMT’, ‘GPKG’, ‘SQLite’, ‘WAsP’, ‘FlatGeobuf’, ‘Geoconcept’, ‘GeoRSS’, ‘ODS’, ‘XLSX’, ‘JML’, ‘VDV’, ‘MVT’, ‘MapML’ |
DataType | 字典 | 数据类型 | ‘未知类型’: 0, ‘8位无符号整型’: 1, ‘16位无符号整型’: 2, ‘16位整型’: 3, ‘32位无符号整型’: 4,‘32位整型’: 5, ‘32位浮点’: 6, ‘64位浮点’: 7, ‘16位复整型’: 8, ‘32位复整型’: 9,‘32位复浮点型’: 10, ‘64位复浮点型’: 11 |
ResampleMethod | 字典 | 重采样方法 | 0: ‘Nearest Neighbour’, 1: ‘Bilinear’, 2: ‘Cubic’, 3: ‘CubicSpline’,4: ‘Lanczos’, 5: ‘Average’, 6: ‘RMS’, 7: ‘Mode’ |
FeatureType | 字典 | 矢量要素类型 | ‘未知’:0,‘点’:1, ‘线’:2, ‘面’:3, ‘多点’:4, ‘多线’:5, ‘多面’:6 |
GetGTiffOptions | 函数 | GTiff的创建参数 |
1. 不生成 ESRI 世界文件(.tfw )。 2. 不生成(.RPB)文件来描述 RPC(有理多项式系数)。 3. 不设置数据位深(NBITS)。 4. 默认 ‘LZW’ 压缩。 5. 默认通过估算生成文件大小来确定是否生成 BIGTIFF 文件。 |
GenRCOptions | 函数 | 根据栅格驱动生成创建选项 | |
GetRasterEXTFromDriver | 函数 | 根据栅格驱动格式返回扩展名 | |
GetSHPOptions | 函数 | ESRI Shapefile 的创建参数 |
1. 默认创建矢量文件的字段编码为’UTF-8’。 2. 自动调整字段大小。 3. 不强制解除 ‘.SHP’、’.DBF’ 文件2GB大小的限制。 4. 不生成空间索引文件(.qix)。 |
GenVCOptions | 函数 | 根据矢量驱动生成创建选项 | |
GetVectorEXTFromDriver | 函数 | 根据矢量驱动格式返回扩展名 |
4 gma函数帮助
为了使gma使用更加简单直观,gma中所有的函数帮助均提供中文帮助。例如:
import gma
help(gma.rasp.Clip)
中文帮助如下:
Help on function Clip in module gma.rasp:Clip(InFile, OutFile, CutLineFile, InNoData=None, OutNoData=None, MaskBoundary=True, OutFormat='GTiff')简介----------按矢量裁剪栅格。参数----------InFile: str。输入栅格路径。OutFile: str。输出栅格路径。CutLineFile: str。裁剪矢量文件路径。**可选参数----------InNoData = number。输入栅格的无效值。默认不指定(None)无效值。OutNoData = number。输出栅格的无效值。默认不指定(None)无效值。MaskBoundary = bool。是否掩膜边界外数据。默认掩膜(True)。OutFormat = str。输出文件格式,默认为 'GTiff'。其他格式详见 ToOtherFormat 函数。
其他内容后续会逐一介绍和说明。感谢大家理解。详细的函数帮助可见:自建 | gma函数详细帮助 或利用help调出相关帮助,本文不在详细解释。
写在最后
由于时间和精力的限制,目前可用的函数还不完善。部分函数为了gma的构建进行了修改,还未完成完整的测试。如果存在问题,我会及时进行修复。
库的构建是一个漫长和持续的过程,后续gma会添加更多的函数方法,以期使地理处理过程更加的简单方便。
近期的gma完善计划如下:
作者简介
洛,毕业于中国农业科学院,是一名不见经传的小小算法工程师,家乡河南洛阳,当前在北京从事一份还凑活的工作。目前致力于完成一套中文版开源的遥感、气象及相关算法体系(简单来说就是汇集其他优秀的Python库,将常用的功能封装好),使各类常用流程简单化。
期待与各位同学、同事与朋友的共同进步。有需求或者疑问可联系微信:Luo_Suppe。
自建 | 地理与气象数据分析(geographic and meteorological data analysis)(gma)的说明与使用相关推荐
- 应用定性数据分析包RQDA(Qualitative Data Analysis)和文挖掘框架包tm结合进行文本挖掘
http://cos.name/cn/topic/102130 应用定性数据分析包RQDA(Qualitative Data Analysis)和文挖掘框架包tm结合进行文本挖掘. 在对访谈内容或剧本 ...
- python进行探索性数据分析EDA(Exploratory Data Analysis)分析
python进行探索性数据分析EDA(Exploratory Data Analysis)分析 show holy respect to python community, for there ded ...
- 数据分析---《Python for Data Analysis》学习笔记【04】
<Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...
- 第14章 数据分析案例--Python for Data Analysis 2nd
本书正文的最后一章,我们来看一些真实世界的数据集.对于每个数据集,我们会用之前介绍的方法,从原始数据中提取有意义的内容.展示的方法适用于其它数据集,也包括你的.本章包含了一些各种各样的案例数据集,可以 ...
- 玩转Python大数据分析 《Python for Data Analysis》的读书笔记-第05页
matplotlab matplotlib类似于matlab软件,是Python下的2维数据可视化软件,集成在了Python的IPython里了.用matplotlib画的图表具有很强的交互性,可用工 ...
- 玩转Python大数据分析 《Python for Data Analysis》的读书笔记-第08页
在安装了EPD学习环境后读者需要安装Pandas,读者可以从pypi.python.org/pypi/pandas页面下在pandas安装包,(https://pypi.python.org/pack ...
- 《利用Python进行数据分析: Python for Data Analysis 》学习随笔
NoteBook of <Data Analysis with Python> 3.IPython基础 Tab自动补齐 变量名 变量方法 路径 解释 ?解释, ??显示函数源码 ?搜索命名 ...
- 基于大数据重庆市气象数据分析 计算机毕设源码24928
摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题.针对气象数据等问题,对气象 ...
- 【Python-ML】探索式数据分析EDA(Exploratory Data Analysis)
# -*- coding: utf-8 -*- ''' Created on 2018年1月24日 @author: Jason.F @summary: 有监督回归学习-探索式数据分析(EDA,Exp ...
最新文章
- 实现微服务架构-微服务架构需要解决的问题
- hdu 5101(二分)
- sys.dbms_transaction.local_transaction_id出现的问题
- Java生成pgp密钥对_在Javascript中生成PGP密钥对,并使用加密的PGP私钥对文本进行签名...
- 如何在 Blazor WebAssembly中 使用 功能开关
- [Kaggle] Digit Recognizer 手写数字识别(神经网络)
- vs.net各版本解决方案相互转换工具
- pytorch 构造读取数据的工具类 Dataset 与 DataLoader (pytorch Data学习一)
- 大型企业用什么orm_在大型仓储物流企业中使用什么类型的货架更为合适呢?
- select for update作用
- 深入浅出hive-hive简介
- python调用msf_使用python操纵metasploit简单小记
- ListView优化
- 音视频开发四:FFmpeg音视频处理的基本命令使用
- Python·@property属性
- 入手评测 i3 12100F 和 i5 12400F选哪个
- c语言模拟鼠标键盘控制电脑
- 实力踩坑:There is no getter for property named ‘XXX‘ ‘class XXX‘
- 地市级公安交管融媒体中心运营模式研究
- 网站建设需要要考虑到哪些细节