Python计算经济距离权重矩阵

前情回顾:空间权重矩阵

一年前的博客介绍了基本权重矩阵的定义,今天在其基础上分享Python构建的方式

一、经济权重矩阵定义

在这里插入图片描述
当然,这里 Y i Y_{i} Yi Y j Y_{j} Yj可以根据实际研究的需求进行调整,例如替换为贸易量、进出口总额等其他指标

二、数据准备

数据集的样式如下,第一列为省份名,第二列为计算指标,这里为某段期间内人均GDP的平均值
在这里插入图片描述

三、全部代码

import pandas as pd
import math

#经济距离矩阵构建
data = pd.read_excel('data.xlsx',sheet_name= 0)
loc_a = list(data.loc[:,"地区"])
loc_data = []
for loc_1 in loc_a:
    weight_list = []
    for loc_2 in loc_a:
        value_1 = data[data['地区']==loc_1]['人均GDP平均'].values[0]
        value_2 = data[data['地区']==loc_2]['人均GDP平均'].values[0]
        weight = 1/abs(value_1-value_2)
        if math.isinf(weight):
            weight = 0
        else:
            pass
        weight_list.append(weight)
        print(loc_1+'-'+loc_2+'计算完成')
    loc_data.append(weight_list)

eco_weight = pd.DataFrame(loc_data,index=loc_a,columns=loc_a)
eco_weight.to_csv('eco_weight.csv',encoding='gbk')

输出结果:
在这里插入图片描述

### Python 中反距离权重插值法的实现与应用 #### 1. 反距离权重插值简介 反距离加权法(Inverse Distance Weighted, IDW)是一种常用的地理空间插值技术,用于估计未知位置处的数据值。该方法基于已知样本点的距离来分配权重,离目标点越近的样点具有更大的影响。 #### 2. Python 实现 IDW 插值算法 为了在 Python 中实现 IDW 插值,可以利用 `scipy` 库中的函数来进行计算,并借助 `matplotlib` 或其他绘图库完成可视化工作[^1]。 下面是一个简单的例子展示如何使用纯 Python 和 NumPy 来执行基本的 IDW 计算: ```python import numpy as np from scipy.spatial.distance import cdist def idw_interpolation(points, values, xi, power=2): """Perform Inverse Distance Weighting interpolation. Args: points (array_like): Known data point coordinates of shape (n_samples, n_features). values (array_like): Value at each coordinate of known data points. xi (array_like): Coordinates where interpolated value is requested. power (float): Power parameter controlling the influence decay with distance. Returns: array: Interpolated values at specified locations. """ dists = cdist(xi, points) # Compute distances between unknown and known points weights = 1 / (dists ** power) # Calculate inverse distance weights sum_weights = np.sum(weights, axis=-1) weighted_values = np.dot(values.T, weights.T).T # Multiply by corresponding z-values zi = weighted_values / sum_weights[:, None] return zi.flatten() ``` 此代码片段定义了一个名为 `idw_interpolation()` 的函数,它接受四个参数:已知数据点的位置 (`points`)、这些位置上的观测值(`values`)、待预测的新坐标(`xi`)以及可选的距离衰减指数(`power`)。返回的结果是在给定新坐标的插值得到的数值列表。 对于更复杂的场景或者大规模数据集处理时,推荐采用专门的空间分析工具包如 PySAL 或者 GeoPandas 结合 Rasterio 进行操作[^2]。 #### 3. 使用 Matplotlib 可视化插值结果 一旦完成了插值运算之后,就可以调用 matplotlib.pyplot 提供的功能快速生成图像表示形式: ```python import matplotlib.pyplot as plt # 假设 'zi' 是之前获得的一维数组,代表网格上各个节点经过IDW后的估值; # 而 'grid_x', 'grid_y' 则分别是对应于上述节点横纵方向上的索引矩阵。 plt.contourf(grid_x, grid_y, zi.reshape((len(unique_x), len(unique_y)))) plt.colorbar(label='Interpolated Values') plt.scatter([point[0] for point in points], [point[1] for point in points], color='red') # Plot original sample points plt.title('IDW Interpolation Result Visualization') plt.show() ``` 这段脚本会创建一个填充颜色的地图图表,其中红色圆圈标记原始采样点所在位置;而背景色则反映了通过 IDW 方法估算出来的连续变化趋势。
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值