Superpowers 技能框架实战:从安装到自定义 AI 编程助手技能包
2026/10/6 13:36:49
| 指标 | 适用场景 | 取值范围 |
|---|---|---|
| Global Moran's I | 整体空间聚集性检测 | 通常介于 -1 到 1 之间 |
| Getis-Ord G* | 热点分析(局部) | Z 得分形式输出 |
| Local Indicators of Spatial Association (LISA) | 局部聚集模式识别 | 对应显著性 p 值 |
# 使用 Python 的 pysal 库计算全局莫兰指数 import esda import geopandas as gpd from libpysal.weights import Queen # 读取空间数据 gdf = gpd.read_file("path/to/shapefile.shp") # 构建空间权重矩阵(Queen邻接) w = Queen.from_dataframe(gdf) # 计算全局Moran指数 moran = esda.Moran(gdf['income'], w) # 输出结果 print(f"Moran's I: {moran.I:.3f}") print(f"P-value: {moran.p_sim:.4f}") # I > 0 表示正自相关,p值决定显著性import libpysal w = libpysal.weights.Queen.from_dataframe(geodata) w.transform = 'r' # 行标准化上述代码使用libpysal构建皇后邻接权重矩阵,并进行行标准化处理,确保每个单元的邻居贡献均等。参数transform='r'实现行标准化,是后续计算Moran指数的关键预处理步骤。sf与sp是处理空间数据的核心包。通过它们可高效构建区域间的空间邻接关系,为后续空间自相关分析奠定基础。sf包采用简单要素模型,支持标准的空间操作。若使用旧版sp对象,可通过as()函数转换:library(sf) nc_sf <- st_read("data/nc.shp") nc_sp <- as(nc_sf, "Spatial")此代码将GeoJSON或Shapefile读入sf对象,并转为sp格式,确保兼容老式空间分析函数。poly2nb()函数可基于边界接触识别邻接区域:library(spdep) nb_q <- poly2nb(nc_sp, queen = TRUE)参数queen = TRUE表示共享顶点即视为邻接,返回的邻接列表(nb)可用于生成空间权重矩阵。import numpy as np # 示例:基于Rook邻接的二元权重矩阵(4个区域) W = np.array([ [0, 1, 1, 0], [1, 0, 1, 1], [1, 1, 0, 0], [0, 1, 0, 0] ])上述代码构建了一个简单的二元邻接矩阵,元素 \( W_{ij} = 1 \) 表示区域 \( i \) 与 \( j \) 相邻,否则为0。该结构适用于规则格网数据。import seaborn as sns import matplotlib.pyplot as plt # 绘制 Moran 散点图 fig, ax = plt.subplots(1, 1, figsize=(8, 6)) moran_scatterplot(moran, ax=ax) ax.set_xlabel("Income") ax.set_ylabel("Spatial Lag of Income") plt.show()该代码调用moran_scatterplot函数生成散点图,横轴表示原始变量(如收入),纵轴为空间滞后项。正象限聚集表明存在高-高或低-低的空间聚集。| 类别 | 含义 |
|---|---|
| HH | 高值被高值包围 |
| LL | 低值被低值包围 |
| LH | 低值被高值包围 |
| HL | 高值被低值包围 |
from scipy import stats import numpy as np # 生成示例数据 data = np.random.normal(0, 1, 30) stat, p = stats.shapiro(data) print(f"Shapiro-Wilk: 统计量={stat:.4f}, p值={p:.4f}")当 p > 0.05 时,无法拒绝原假设,可认为数据近似正态。spdep可便捷计算 Moran’s I。首先需构建空间邻接权重矩阵,常用邻接定义包括邻接边界或距离阈值。library(spdep) # 假设已有一个 sf 格式的空间数据框 nc nb <- poly2nb(nc) # 构建邻接关系 lw <- nb2listw(nb, style = "W") # 标准化权重 moran_result <- moran.test(nc$PRECIP, lw) # PRECIP为降水变量 print(moran_result)上述代码中,poly2nb()识别多边形邻接关系,nb2listw()转换为标准化的空间权重列表,moran.test()执行假设检验,返回 z 值与 p 值以判断显著性。# Geary's C 公式简化实现 C = ( (n - 1) * sum(w_ij * (x_i - x_j)**2) ) / (2 * W * sum((x_i - mean_x)**2))该公式通过差值平方衡量邻近单元的差异性。数值小于1表示正相关,大于1为负相关。# Getis-Ord G 统计量表达式 G(d) = sum(sum(w_ij * x_i * x_j)) / sum(x_i * x_j)其分子强调空间权重下属性值的联合分布,突出高值集聚效应。import numpy as np def monte_carlo_test(group_a, group_b, n_simulations=10000): observed_diff = np.mean(group_b) - np.mean(group_a) combined = np.concatenate([group_a, group_b]) simulated_diffs = [] for _ in range(n_simulations): np.random.shuffle(combined) sim_a = combined[:len(group_a)] sim_b = combined[len(group_a):] sim_diff = np.mean(sim_b) - np.mean(sim_a) simulated_diffs.append(sim_diff) p_value = (np.sum(np.abs(simulated_diffs) >= abs(observed_diff)) + 1) / (n_simulations + 1) return p_value, observed_diff, simulated_diffs上述代码中,`n_simulations` 控制模拟次数,影响 p 值精度;`np.random.shuffle` 实现标签置换,保证零假设下数据分布一致性。最终 p 值由观测差异在模拟分布中的尾部比例确定,+1 修正避免极端小样本偏差。from pysal.explore import esda from pysal.lib import weights # 构建空间权重矩阵 w = weights.Queen.from_dataframe(geo_data) # 标准化权重 w.transform = 'r' # 计算LISA lisa = esda.Moran_Local(geo_data['value'], w)该代码段首先构建邻接关系权重矩阵,采用Queen邻接规则判定空间相邻性,并对权重进行行标准化处理,确保各区域影响权重之和为1。随后调用Moran_Local方法计算局部莫兰指数,输出结果包含聚类类型、p值和象限信息。ggplot2基于图形语法理论,允许用户通过图层叠加方式构建复杂图表。以下代码绘制按类别分组的箱线图:
library(ggplot2) ggplot(data = mtcars, aes(x = factor(cyl), y = mpg)) + geom_boxplot(aes(fill = factor(cyl))) + labs(title = "MPG Distribution by Cylinder", x = "Cylinders", y = "Miles per Gallon") + theme_minimal()其中aes()定义映射关系,geom_boxplot()添加箱线图层,theme_minimal()应用简洁主题,提升可读性。
tmap适用于静态与交互式地图绘制。以下代码生成 choropleth 地图:
library(tmap) tm_shape(countries_spdf) + tm_fill("population_density", palette = "Reds") + tm_borders() + tm_layout(title = "Population Density Map")tm_fill()根据数值填充颜色,palette参数控制配色方案,实现地理数据直观表达。
for scale in [5, 10, 20]: for i in range(scale, len(series)): window = series[i-scale:i] features.append({ 'mean': np.mean(window), 'var': np.var(window), 'correlation': np.corrcoef(window[:-1], window[1:])[0,1] })该代码段在三个尺度下提取均值、方差和自相关系数,实现多分辨率特征建模。窗口长度决定感知野大小,影响模式敏感度。| 尺度 | 关联阈值 | 检测精度 |
|---|---|---|
| 小 | 0.85 | 92% |
| 中 | 0.70 | 88% |
| 大 | 0.60 | 80% |
from esda.moran import Moran_Local import numpy as np # 假设 data_z 为标准化后的变量,w 为空间权重矩阵 moran_loc = Moran_Local(data_z, w, permutations=999)该代码计算每个地理单元的局部莫兰指数,识别高-高、低-低等聚类类型,揭示空间非平稳性。| 步骤 | 操作 |
|---|---|
| 1 | 构建空间权重矩阵 |
| 2 | 计算局部莫兰指数 |
| 3 | 可视化聚类地图 |
import pandas as pd # 解析日志并生成特征 df = pd.read_csv('access.log', sep=' ', names=['ip', 'time', 'method', 'path', 'status', 'duration']) df['duration'] = pd.to_numeric(df['duration'], errors='coerce') df['is_error'] = (df['status'] >= 500).astype(int) df['path_hash'] = df['path'].apply(lambda x: hash(x) % 10000)max_depth=8:控制树深度以平衡过拟合风险learning_rate=0.1:确保梯度收敛稳定性subsample=0.9:引入随机性提升泛化能力| 组件 | 吞吐量(msg/s) | 延迟(ms) | 容错机制 |
|---|---|---|---|
| Kafka | 1,200,000 | 2 | 副本同步 |
| Flink | 850,000 | 15 | Checkpointing |