Python应用指南:使用PyKrige包实现ArcGIS的克里金插值法

先了解什么是克里金插值?

克里金插值(Kriging interpolation)是一种基于统计学和空间相关性的高级空间插值方法,广泛应用于地理信息系统(GIS)、地质勘探、环境科学、气象学等领域。它由南非矿业工程师丹尼尔·克里金(Daniel Krige)提出,并由法国数学家乔治·马瑟伦(Georges Matheron)发展为一种严格的数学方法。其核心思想是:在空间分布的数据中,相邻位置之间的属性值往往具有一定的相似性,即空间自相关性。克里金插值正是利用这种空间相关性,通过构建变异函数模型(Variogram),对未知点的值进行最优无偏估计。克里金插值不仅考虑了已知点与未知点的距离关系,还结合了数据的整体空间结构特征,从而提供更精确且具统计意义的预测结果。

白话版:想象一下你有一块农田,想知道整个田地不同位置的土壤肥力情况,但你只能取样有限的几个点进行测量。如何根据这几个点的数据来推测其他未测量点的土壤肥力呢?这时候就可以使用克里金插值方法了。

为了更好的理解计算原理,我们来看这张图,其中一个点被标记为红色,作为我们分析的焦点(也是缺失值点)。从这个红色点出发,到其他每个黑色数据点之间都有一条连线,并标明了两点间的距离,当我们计算红色点与所有其他点之间的属性差异(比如海拔高度或土壤湿度)时,会发现距离较近的点具有更小的差异,这表明它们的属性更加相似;而随着距离增加,这种相似性逐渐减弱,即两个位置的属性值差异增大。为了更好地理解和展示这一点,通常我们会将所有点对按照距离分组,并计算每组内属性差异的平均值,根据这些数据绘制出一张图表,其中横轴表示距离,纵轴表示属性差异的平均值。这样得到的图表被称为半变异函数云图。

简单来说,在半变异函数云图中,越靠左下角的位置代表的是距离近且属性值相似的点对,而向右上方移动,则意味着距离的增加,这些点对之间的属性值差异也越来越大,从而形象地展示了地理学中“地理位置越接近的事物往往越相似”的规律;

遇到问题:栅格数据转点集,再通过空间连接关联到网格或者不同尺度的网格时候,通常会因为数据尺度不一致或者数据本身有缺失导致部分网格缺失数据,这时候就需要通过补差值的方法进行对数据本身的补充;

那么我们直接进入实现方法:

第一步:先把遇到缺失值的网格进行增加x,y数据,目的是赋予人口数据空间属性;

第二步:把表导出为文本或者csv表格,其他标签可以手动剔除,保留这四个标签即可,唯一id,方便进行表连接,缺失数据字段,这里是人口(population),x,y坐标;

第三步:把表导出为文本或者csv表格,这个我们通过PyKrige 的这个克里金插值工具包来实现,arcgis的克里金插值的功能;

方法思路

  1. 读取原始数据(含坐标 x, y 和 population 值);
  2. 分离出已知点和未知点;
  3. 构建克里金模型并对未知点进行插值;
  4. 将插值结果替换原始数据中的空缺值(population=0)
  5. 输出并保存插值后的完整数据

完整代码#运行环境 Python 3.11

import pandas as pd
import numpy as np
from pykrige.ok import OrdinaryKriging
import matplotlib.pyplot as plt# 加载数据
file_path = r"C:\Users\Admin\Desktop\人口插缺失值表.csv"
data = pd.read_csv(file_path)# 提取已知点的坐标和对应的population值
known_points = data[data['population'] != 0][['x', 'y']].values
known_values = data[data['population'] != 0]['population'].values# 提取需要插值的点的坐标
unknown_points = data[data['population'] == 0][['x', 'y']].values# 使用pykrige进行普通克里金插值
OK = OrdinaryKriging(known_points[:, 0], known_points[:, 1], known_values, variogram_model='linear',verbose=False, enable_plotting=False)z1, ss1 = OK.execute('points', unknown_points[:, 0], unknown_points[:, 1])# 将插值结果填充回原数据
data.loc[data['population'] == 0, 'population'] = z1# 输出结果
print(data)# 保存结果到新的CSV文件
output_file_path = r"C:\Users\Admin\Desktop\插值后的人口数据_kriging.csv"
data.to_csv(output_file_path, index=False)print(f"插值完成并保存至: {output_file_path}")

我们就可以得到了这么一张新的表格,表的输入和输出路径、名称可以根据自己的实际需求自行修改;

这里使用的是"linear",相似性随距离线性减少,通常用于表示简单、直接的空间自相关性,适用于那些表现出稳定的空间异质性且没有明显变程的数据集,当然也可以尝试其他模型如"spherical", "gaussian",直接在脚本里替换"linear"即可;

常见的变异函数模型

  1. Spherical Model (球状模型)

    • 描述:球状模型是最常用的变异函数之一,假设当两点间的距离超过某个范围(称为变程,range)后,数据值之间的空间自相关性变为零。在这个模型中,变异函数从原点开始线性增加,直到达到一个特定的距离(即变程),之后保持不变。
    • 适用场景:适用于那些空间自相关性在一定距离后迅速消失的数据集。
  2. Gaussian Model (高斯模型)

    • 描述:高斯模型是一个平滑过渡的模型,表明即使在较远的距离上,数据值之间仍然可能存在一定的自相关性。与球状模型相比,高斯模型的变化更为渐进,没有明显的“跳跃”到一个恒定值的过程。
    • 适用场景:适合于表现出连续和平滑变化趋势的数据集,例如地形高度或气候变量等。

第四步:把生成的表导入arcgis,右键网格图层,添加连接,连接表字段选择"gird_id"字段,接下来符号系统选择"population"字段进行可视化即可;

这是数据插值前的人口分布图,可以看到因为数据尺度的不匹配导致,网格产生较多的空值,色彩过渡也不自然;

这是使用克里金插值法后的人口分布图,可以看到明显数据过度就好看很多;

文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所有信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/89553.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/89553.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis原理之哨兵机制(Sentinel)

上篇文章: Redis原理之主从复制https://blog.csdn.net/sniper_fandc/article/details/149141103?fromshareblogdetail&sharetypeblogdetail&sharerId149141103&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目录 1 哨兵机制恢…

uniapp打包成 apk

1. 先把项目打包成 index.html 上传到宝塔服务器,关联到域名 2.然后再用hbuilder新建一个 基础模板的 uniapp 3.再修改代码,采用iframe方式打包 pages/index/index <template><web-view v-if="showWebView" :src="webViewSrc" @message=&qu…

RPG57.创建玩家拾取物品类一:创建可拾取物品类的基类

1。新建一个基类&#xff0c;用于玩家可拾取物品的父类然后// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "Components/SphereComponent.h" #include "GameFramewo…

k8s之持久化存储流程

K8s 中的 Pod 在挂载存储卷时需经历三个的阶段&#xff1a;Provision/Delete&#xff08;创盘/删盘&#xff09;、Attach/Detach&#xff08;挂接/摘除&#xff09;和 Mount/Unmount&#xff08;挂载/卸载&#xff09; Provisioning Volumes 时序流程详解 一、流程图 sequenc…

python学智能算法(二十四)|SVM-最优化几何距离的理解

引言 前序学习过程中&#xff0c;已经对几何距离的概念有了认知&#xff0c;学习链接为&#xff1a;几何距离 这里先来回忆几何距离δ的定义&#xff1a; δmin⁡i1...myi(w∥w∥⋅xib∥w∥)\delta \min_{i1...m}y_{i}(\frac{w}{\left \| w \right \|}\cdot x_{i}\frac{b}{\le…

创建游戏或互动体验:从概念到实现的完整指南

Hi&#xff0c;我是布兰妮甜 &#xff01;在数字时代&#xff0c;游戏和互动体验已成为娱乐、教育和商业领域的重要组成部分。本文将带你了解如何使用JavaScript创建引人入胜的游戏和互动体验&#xff0c;从基础概念到实际实现。 文章目录一、游戏开发基础1.1 游戏循环1.2 游戏…

SpringMVC + Tomcat10

1. Tomcat 10的servlet包路径变了&#xff0c;javax -> jakarta 2. DispatcherServlet从Spring6 才开始使用jakarta.servlet.http.Servlet 3. Spring6 需要JDK 17 1. pom <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org…

Django `transaction.atomic()` 完整使用指南

目录 #概述#基本用法#事务一致性保障机制#破坏一致性的常见场景#高级用法#最佳实践#诊断与调试#附录 概述 transaction.atomic() 是 Django 提供的数据库事务管理工具&#xff0c;用于确保一系列数据库操作要么全部成功提交&#xff0c;要么全部回滚&#xff0c;维护数据的一致…

UDP协议的端口161怎么检测连通性

UDP 端口 161 (SNMP) 连通性检测的专业指南 UDP 161 端口是 SNMP (Simple Network Management Protocol) 服务的标准端口。由于其无连接特性&#xff0c;检测需要特殊方法。以下是全面的检测方案&#xff1a; 一、专业检测方法 1. 使用 SNMP 专用工具&#xff08;推荐&#xff…

进阶数据结构:红黑树

嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的pa…

如何上传github(解决git的时候输入正确的账号密码,但提示认证失败)

如何上传github文件&#xff0c;删除文件 1.重点 GitHub 从 2021 年 8 月 13 日起移除了对密码认证的支持。你需要使用个人访问令牌(Personal Access Token, PAT)或 SSH 密钥来进行认证。 2.生成SSH key 进入设置点击New SSH Key名字随便取&#xff0c;可以自己方便记3.上传文件…

多级缓存架构与热点探测系统核心技术解析

多级缓存架构与热点探测系统核心技术解析 &#x1f4cc; 一、多级缓存架构 1. 为什么需要多级缓存&#xff1f; ✅ 本地缓存优势&#xff1a; &#x1f680; 减少网络请求&#xff0c;提升访问性能&#x1f310; 分布式系统中天然具有分布式缓存特性⬇️ 有效降低远程缓存&…

iOS 性能监控工具全解析 选择合适的调试方案提升 App 性能

在iOS应用开发中&#xff0c;性能往往是决定用户体验的关键因素之一。用户体验的优劣&#xff0c;不仅取决于功能的实现&#xff0c;还在于流畅度、响应速度、资源消耗等方面的表现。因此&#xff0c;性能监控工具在iOS开发中的重要性不可小觑。 无论是提升应用的启动时间、减少…

C++ :vector的介绍和使用

vector学习时一定要学会查看reference 目录 前言 一、vector基本概念 1.1vector是什么&#xff1f; 1.2内存管理 二、vector的使用 2.1vector的构造 2.2vector iterator 的使用 2.3vector 空间增长问题 2.4vector的元素访问 2.5vector 增删查改 总结 前言 在C编程中&#x…

iOS OC 图片压缩

纯代码,不废话,欢迎copy使用,记得点赞 +(NSData *)imageData:(UIImage *)image maxSize:(int)maxSize{ // 设置最大文件大小(200KB) NSLog(@"执行压缩方案 期望压缩目标%dk",maxSize); return [self compressImage:image toMaxSize:maxSize]; } // 主压缩方…

如何更改 SQLserver 数据库存储的位置 想从C盘换到D盘

在 SQL Server 中更改数据库存储位置&#xff08;从 C 盘迁移到 D 盘&#xff09;需要通过以下步骤完成&#xff1a;1. 确定数据库文件的当前位置首先查询数据库文件的当前路径&#xff1a;sqlSELECT name, physical_name AS current_location FROM sys.master_files WHERE dat…

【unitrix】 6.8 加一运算(add_one.rs)

一、源码 这是一个使用 Rust 类型系统实现二进制数加一操作的代码。 use crate::number::{O, I, B, Null, Bit, NormalizeIf};/// 类型级加一操作 trait /// /// 为二进制数类型实现加一操作&#xff0c;返回新的类型 pub trait AddOne {/// 加一操作的结果类型type Output;//…

国内Ubuntu访问不了github、 huggingface等

各位小伙伴们&#xff0c;大家好呀。 大家是不是经常遇到访问不了github、huggingface的情况呀。 在Ubuntu中可以这样做。 访问这个网站网站测速-Ping检测-Trace查询-Dig查询-路由跟踪查询-tools.ipip.net&#xff0c; 对于github.com&#xff0c;在这个网站输入github.com…

「Java EE开发指南」如何用MyEclipse创建企业应用项目?(一)

由于有了项目模型和管理工具&#xff0c;现在可以创建Java EE企业应用程序。在本文中您将了解到&#xff1a; 企业应用项目模型项目组织、依赖关系和类解析 该特性在MyEclipse中可用。 MyEclipse v2025.1离线版下载 1. 企业应用项目模型 MyEclipse提供了一个企业应用程序项…

ubuntu 22.04 pam 模块设置用户登录失败锁定

1、ubuntu 22.04 配置方法 /etc/pam.d/common-auth 加到如下行后 # auth [success1 defaultignore] pam_unix.so nullok # 添加如下内容 auth [defaultdie] pam_faillock.so authfail auth sufficient pam_faillock.so authsucc/etc/pam.d/common…