前言
土地利用转移矩阵是马尔科夫模型在土地利用变化方面的应用。马尔科夫模型不仅可以定量地表明不同土地利用类型之间的转化情况,还可以揭示不同土地利用类型间的转移速率。近期的项目研究中,需要计算不同时期土地利用现状变化的转移矩阵,分析各个时期土地利用现状分类之间的变换率。本文基于已有土地利用现状分类矢量数据,分析一级地类变化情况,讨论土地利用现状转移矩阵制作的两种数据处理方法。
数据准备
两个年度相同区域内的土地利用分类矢量数据.(数据标准:GBT_21010-2007)
软件环境:MS ACCESS ArcGIS 10.x Python 2.7(Pycharm)
数据预处理
利用ArcGIS对两年数据进行相交(Intersect)处理,形成过程数据,并新导入能区分历年分类字段的新图层中。PS:这一步是基础,主要能得到同一个区域的不同时期的分类数据。
如下图:使用03/04两年数据,新增了T03一级类,T04一级类两个字段,将相交后的数据通过LOAD加载到此图层中,并通过字段计算或者SQL语句得到T03一级类,T04一级类两个字段信息.
Python和SQL两种数据透视表计算转移矩阵
主要方法:Access的SQL语句transform pivot函数和Python中pandas包的pivot_table函数
SQL:
TRANSFORM Sum(shape_area) AS 表达式1
SELECT T_2003_2004.T03一级类
FROM T_2003_2004
GROUP BY T_2003_2004.T03一级类
PIVOT T_2003_2004.T04一级类;
SQL结果:
Python:
# coding:utf-8
importarcpy
importpandasaspd
fromarcpyimportenv
pd.set_option('display.width',500)#注意此处许设置datafarme的列宽,否则数据将被自动截断
# pd.set_option('display.width',200)
fc =r'*\转移矩阵03_08.mdb\T_2003_2004'
env.workspace = fc
myarray = arcpy.da.FeatureClassToNumPyArray (fc, ['T03一级类','T04一级类','Shape_Area'])
mydf = pd.DataFrame(myarray)
#pandas数据透视表,注意聚合参数aggfunc设置
mydf1 = pd.pivot_table(mydf,index='T04一级类',columns='T03一级类',aggfunc='sum',values='Shape_Area',fill_value=,margins=False,dropna=False)
printmydf1
Python结果:
对比和总结:
可以看出,两种方法计算的结果是一样的。使用Access的SQL语句transform pivot语句要比python的pandas包中的pivot_table函数要简单很多。单个时期对比SQL更快速,但是对比的年份比较多,数据量很大,受限于MDB的2GB数据量限制时,Pyhon使用gdb批量运算会便利很多。
领取专属 10元无门槛券
私享最新 技术干货