import esda
import pandas as pd
import geopandas as gpd
from geopandas import GeoDataFrame
import libpysal as lps
import numpy as np
import matplotlib.pyplot as plt
from shapely.geometry import Point
import contextily as ctx
from pylab import figure, scatter, show
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
关于geopandas和contextily库的安装,参考我的另一篇博客https://www.jianshu.com/p/a1496e316bb4
读取数据
一个是地图信息,一个是需要研究的指标。
# 除中华人民共和国.shp外其余三个文件必须也在,只有一个则读取出错
# 中华人民共和国.dbf
# 中华人民共和国.prj
# 中华人民共和国.shx
gdf_data = gpd.read_file('data/中华人民共和国.shp',encoding='utf_8_sig')
feature_df = pd.read_excel('data/清洁低碳.xlsx')
构建邻接矩阵
wq = lps.weights.Queen.from_dataframe(gdf_data) #使用Quuen式邻接矩阵
wq.transform = 'r' #标准化矩阵
# 两个省没有直接相邻的省(34行数据不清楚是什么,下载地图shp文件中自带的)
print(gdf_data.loc[[20,31],'name'])
'''
('WARNING: ', 20, ' is an island (no neighbors)')
('WARNING: ', 31, ' is an island (no neighbors)')
('WARNING: ', 34, ' is an island (no neighbors)')
20 海南省
31 台湾省
Name: name, dtype: object
'''
centroids = gdf_data.geometry.centroid # 计算多边形几何中心
# 本图将邻接矩阵覆盖在整个地图上,如果只需要邻接矩阵,删除ax = gdf_data.plot(figsize=(10, 10),cmap="Blues")
ax = gdf_data.plot(figsize=(10, 10),cmap="Blues")
plt.plot(centroids.x, centroids.