c++矩阵类_基于python构建空间权重矩阵

目录

  • 目录

  • 基础

    • 距离权重

    • 邻接权重

  • 示例

Pysal是一个面向地理空间数据科学的开源跨平台库,重点是用python编写的地理空间矢量数据。它支持空间分析高级应用程序的开发,例如

  • 空间簇、热点和异常点的检测

  • 从空间数据构建图形

  • 地理嵌入网络的空间回归与统计建模

  • 空间计量经济学

  • 探索性时空数据分析

最近写文章要用空间权重矩阵,可以用Arcgis和Geoda处理效率略低,于是想到用Pysal计算空间权重矩阵,并转换成Stata可以直接使用的n*n的矩阵格式。python大法批量生产比较带感!libpysal是Pysal专门生成距离权重矩阵的包,PySAL中提供了shapefile读取的接口,可直接读取实验数据生成距离权重矩阵,使用起来非常方便。

基础

libpysal提供了四个模块,这些模块构成了PySAL系列许多上游软件包中的构建块:

  • 空间权重:libpysal.weights

  • 输入和输出:libpysal.io

  • 计算几何:libpysal.cg

  • 内置示例数据集libpysal.examples

常用的空间权重矩阵有邻接矩阵和距离矩阵:

距离权重

libpysal.weights.DistanceBand(data, threshold)


  • 基于距离带的空间权重。

libpysal.weights.Kernel(data[, bandwidth, …])
  • 基于内核函数的空间权重。

libpysal.weights.KNN(data[, k, p, ids, …])
  • 基于k个最近邻居创建最近邻居权重矩阵。

邻接权重

libpysal.weights.Queen(polygons, **kw)
  • 从一组共享至少一个顶点的pysal多边形构造一个weights对象。

libpysal.weights.Rook(polygons, **kw)
  • 从一组共享至少一条边的pysal多边形构造一个weights对象。

libpysal.weights.Voronoi(points[, …])
  • 二维点集的Voronoi权重

libpysal.weights.W(neighbors[, weights, …])
  • 空间权重类。

至于geopandas和Pysa安装,这里不做过多讲述,前面有分享过,后台回复可以获取依赖包的二进制文件。

示例

这里示例构建黄河流域地级市的空间权重矩阵

  • 导入包

import esda
import geopandas as gpd
import libpysal as lps
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline #jupyter lab 或 notebook在线显示
  • 重载配置文件,解决中文乱码问题

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串
  • 加载数据-矢量数据的位置

regions = gpd.GeoDataFrame.from_file(r'C:\Users\dell\Desktop\黄河流域地市end.shp')
regions.head(5)

c++矩阵类_基于python构建空间权重矩阵_第1张图片

  • 绘图

regions.plot()

c++矩阵类_基于python构建空间权重矩阵_第2张图片

  • 构造空间权重矩阵

#从至少共享一条边的Pysal多边形集合构造一个权重对象。

df = regions
wq = lps.weights.Queen.from_dataframe(df)
wq.transform = 'r'#行标准化
  • 绘制权重矩阵图

ax = df.plot(edgecolor='grey', facecolor='w')
f,ax = wq.plot(df, ax=ax,
edge_kws=dict(color='r', linestyle=':', linewidth=1),
node_kws=dict(marker='o'))
ax.set_axis_off()

c++矩阵类_基于python构建空间权重矩阵_第3张图片

  • 打印空间权重矩阵

print(wq.neighbors)

c++矩阵类_基于python构建空间权重矩阵_第4张图片

  • 构建两列关系矩阵

df_w_1 = pd.DataFrame([k,e]for k,v in w.items() for e in v )
df_w_1

c++矩阵类_基于python构建空间权重矩阵_第5张图片

  • 构建91*91邻接矩阵

df_w = pd.crosstab(df_w_1[0],df_w_1[1])
df_w

c++矩阵类_基于python构建空间权重矩阵_第6张图片

  • 保存数据

df_w.to_csv('研究区域邻接矩阵.csv')
近期文章

Python入门:

Python安装与环境配置

Python基础用法 |《Python与开源GIS》

Python读取excel的两种方法

Python读取json数据

Python基本库——解析库XPath

Python基本库—正则表达式(regex)

第一个Python爬虫

Python空间分析||geopandas安装与基本使用

利用Python绘制酷炫OD流量图的新方法

Basemap安装及报错处理

GIS网络分析—服务区分析、OD矩形构建等时圈

空间分析:

开工了开工了!空间计量模型系列教程一

空间计量模型系列教程二

情人节特辑之带有惊喜的空间计量模型系列教程三

空间计量模型系列教程四

空间计量模型系列教程五(完结啦)

空间计量||空间权重矩阵

空间计量——用GeoDa和stata生成空间权重矩阵的方法

空间计量|| matlab实现空间计量模型SAR、SEM、SDM

分享||空间计量科研工具(一)

c++矩阵类_基于python构建空间权重矩阵_第7张图片

如果觉得有用就点一下“在看”

你可能感兴趣的:(c++矩阵类,python,dict批量选择,python,邻接矩阵)