Arcgis-Tools_04使用Python制作土地利用转移矩阵
实现目的:分析多个省的国土和林地一张图的地类对应关系,林地作为主体。
1、数据准备
因操作过程中发现,以省为单位进行分析,数据量巨大,且最终结果只关注地类映射关系,采取如下操作:
对一张图进行修复几何——按照省、县、地类融合(不作为多部件)——使用国土标识林地——计算面积
注:此过程耗时较长,数据量巨大,各过程文件要存储在文件地理数据库,避免使用shp文件;可使用模型构建器创建上面流程,自动执行。
2、数据分析
-
可使用数据库分析,将数据导入数据库,再执行sql语句,此操作过于繁琐,涉及数据多次导入导出。
-
使用arcpy数据分析模块的arcpy.da.FeatureClassToNumPyArray函数(版本10.1以后)、 Python pandas和numpy模块分析,主要使用pandas的pivot_table函数。
import arcpy, time
import pandas as pd
import numpy as np
start = time.clock()
pd.set_option('display.width', 500)
myarray = arcpy.da.FeatureClassToNumPyArray(
r"J:\TT\林地标识1.gdb\青海PairwiseDiss_Identity",
["XIAN", "县名", "DI_LEI", "DLMC", "MJ"])
mydf = pd.DataFrame(myarray)
ddf = pd.pivot_table(mydf, index=["XIAN", "县名", "DI_LEI"], columns=["DLMC"], values=["MJ"], aggfunc=np.sum,
fill_value=0, margins=True)
# 不创建映射表,只产生原始分组统计
# ddf = pd.pivot_table(mydf, index=["XIAN", "县名", "DI_LEI", "DLMC"], values=["MJ"], aggfunc=np.sum,
# fill_value=0)
# 若安装了openpyxl可直接导出为excel,可选择是否合并单元格
# ddf.to_excel("青海.xlsx",merge_cells=False)
ddf.to_csv("青海.csv")
end = time.clock()
print("运行时间:", end - start)
csv结果如下(展示数据为无效数据)
3、pandas的pivot_table函数