python也可以使用克里金插值算法吗?

这篇具有很好参考价值的文章主要介绍了python也可以使用克里金插值算法吗?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

     python也可以使用克里金插值算法吗?

挪威大陆架的声学压缩慢度测量的空间变化

在处理地质和岩石物理数据时,我们通常希望了解这些数据在我们的地区是如何变化的。我们可以做到这一点的方法之一是对我们的实际测量值进行网格化,并推断这些值。

进行这种外推的一种特殊方法是克里金法,这是一种以南非采矿工程师 Danie G. Krige 命名的地质统计程序。克里金法背后的思想在于其估计技术:它使用观测数据之间的空间相关性来预测未测量位置的值。

通过衡量变量如何随距离变化,该方法建立了一种统计关系,可用于预测整个区域的值,将分散的数据点转换为连贯的空间地图。

在本教程中,我们将了解一个名为pykrige的 Python 库。该库专为 2D 和 3D 克里金法计算而设计,易于与数据一起使用。

导入库和数据

首先,我们需要导入我们需要的库。对于本文,我们将需要以下库:

  • pandas — 读取我们的数据,csv格式

  • matplotlib来创建我们的可视化

  • pykrige进行克里金法

  • numpy用于一些数值计算

import pandas as pd          
import matplotlib.pyplot as plt          
         
from pykrige import OrdinaryKriging          
import numpy as np

导入库后,我们现在可以导入数据。

在本教程中,我们将使用来自 Xeek 和 Force 2020 机器学习竞赛的数据集来根据测井数据预测岩性。竞赛数据集的这个子集包含 65 个井位,其中包含 Balder 地层的平均声学纵波慢度测量值。要读取我们的数据,我们可以使用 pandasread_csv()函数,并传入数据文件的位置。

df=pd.read_csv('Data/Xeek/Force2020/Xeek_2020_Baldr_DTC_AVG.csv')          

当我们查看数据时,我们会看到我们有 65 个井,其中包含 Balder Formation 顶部的位置(X_LOC 和 Y_LOC 用于网格坐标,LAT 和 LON 用于纬度和经度)。我们还有遇到地层的真实海底垂直深度 (TVDSS),以及声学纵波时差 (DTC) 的平均值。

python也可以使用克里金插值算法吗?

可视化井的空间位置

现在我们的数据已成功加载到数据框中,我们可以可视化我们的数据以了解我们的井的位置。为此,我们将使用 matplotlib 的散点图并传入经度和纬度列。

plt.scatter(df['Longitude'],df['Latitude'], c=df['DTC'])

当我们运行上面的代码时,我们得到下面的图。

python也可以使用克里金插值算法吗?

我们可以看到上图非常基本,没有颜色条或轴标签。

让我们通过向其中添加这些功能来稍微修改绘图。

cm = plt.cm.get_cmap('viridis')          
         
plt.figure(figsize=(10,10))          
scatter = plt.scatter(df['LON'], df['LAT'], c=df['DTC_MEAN'], cmap=cm, s=50)          
         
plt.colorbar(scatter)          
         
plt.xlabel('Longitude')          
plt.ylabel('Latitude')          
plt.show()

当我们运行上面的代码时,我们得到下图,它告诉我们更多关于我们的数据。我们可以使用颜色条来估计我们的点值。

python也可以使用克里金插值算法吗?

应用克里金法

为了更好地了解我们的数据点以及 Balder Formation 整个区域的 DTC 测量值如何变化,我们可以使用克里金法和我们的数据点来填补测量值之间的差距。

为此,我们需要OrdinaryKriging从 pykrige 库创建一个对象。

我们将 x 和 y 的位置数据以及我们要映射到 z 参数的数据传递到该对象中。

我们还需要选择我们想要使用的变差函数模型。在这种情况下,我们将使用指数模型。可以在文档中找到有关模型类型的更多详细信息。

由于我们使用纬度和经度作为 x 和 y 坐标,我们可以将 coordinates_type 参数更改为geographic

OK = OrdinaryKriging(x=df['LON'],          
                      y=df['LAT'],          
                      z=df['DTC_MEAN'],          
                      variogram_model='exponential',          
                      verbose=True, enable_plotting=True,          
                      coordinates_type='geographic')

当我们运行上面的代码时,我们返回以下模型摘要和半变异函数。

python也可以使用克里金插值算法吗?

以下是返回参数的简要说明:

  • 块金:块金是变差函数的 y 轴截距,表示零距离处的方差,通常是由于测量误差或非常小的尺度变化引起的。

  • Full Sill:sill 是变差函数达到并开始趋于平稳的最大方差,当点相距很远时会发生这种情况。

  • 范围:范围是变差函数到达基台的距离,意思是超过该距离进一步分离点不会增加方差。

  • 偏基台:偏基台是基台和块块之间的差异,表示数据中空间结构化的方差量。

这可以让我们根据生成的线和点的形状了解我们的模型对数据的适用程度。

显示克里格结果

要开始显示我们的数据,我们需要创建一个数据网格。

为此,我们首先为我们定义的坐标之间的纬度和经度创建数组。在这种情况下,我们希望图表从 57.5 度 N 扩展到 62 度 N 以及从 1.5 度 E 到 4.5 度 E。

使用np.arange将允许我们以规则的间距创建这些阵列。

grid_lat = np.arange(57.5, 62, 0.01, dtype='float64')          
grid_long = np.arange(1.5, 4.5, 0.01,dtype='float64')

现在我们有了 X 和 Y 坐标,我们可以创建我们的值网格。为此,我们调用OK.execute,并传入我们的纬度和经度数组。

zstar, ss = OK.execute('grid', grid_long, grid_lat)

这将返回两个数组。我们的数据网格 (zstar) 和与之相关的不确定性 (ss)

接下来,我们现在可以使用我们的数据数组并使用 matplotlib 的imshow.

import matplotlib.pyplot as plt          
         
fig, ax = plt.subplots(figsize=(10,10))          
         
image = ax.imshow(zstar, extent=(1.5, 4.5, 57.5, 62), origin='lower')          
         
ax.set_xlabel('Longitude', fontsize=14, fontweight='bold')          
ax.set_ylabel('Latitude', fontsize=14, fontweight='bold')          
         
scatter = ax.scatter(x=df['LON'], y=df['LAT'], color='black')          
         
colorbar = fig.colorbar(image)          
         
colorbar.set_label('DTC (us/ft)', fontsize=14, fontweight='bold')          
         
plt.show()

当我们运行它时,我们得到以下地图,显示了我们 65 口井中 Balder 地层的声学纵波慢度变化。

使用 pykrige 生成的声学压缩慢度 (DTC) 的数据网格。python也可以使用克里金插值算法吗?

我们可以看到,在北纬 59 到 60 度附近,岩石速度要快得多,而在东北和西南部地区,岩石要慢得多。

要解释这一点,我们需要了解每口井的地层深度。这将使我们能够确定差异是否与埋藏和压实或其他地质过程有关。

我们将在以后的文章中看到如何做到这一点。

可视化克里格不确定性

查看此类数据的关键之一是了解与克里金法相关的不确定性。

我们可以通过重新调用相同的绘图代码来做到这一点,而不是zstar传入,我们可以将它交换为ss我们之前创建的变量。

fig, ax = plt.subplots(figsize=(10,10))          
         
image = ax.imshow(ss, extent=(1.5, 4.5, 57.5, 62), origin='lower')          
         
ax.set_xlabel('Longitude', fontsize=14, fontweight='bold')          
ax.set_ylabel('Latitude', fontsize=14, fontweight='bold')          
         
scatter = ax.scatter(x=df['LON'], y=df['LAT'], color='black')          
         
colorbar = fig.colorbar(image)          
         
colorbar.set_label('DTC (us/ft)', fontsize=14, fontweight='bold')          
         
plt.show()

通过下图,我们可以看到不确定性高或低的区域。

python也可以使用克里金插值算法吗?

使用 pykrige 生成的声学压缩慢度 (DTC) 的不确定性数据网格。

在我们的井覆盖较少的地区,我们的不确定性会高得多,而在我们有多口井的地区,我们的不确定性会低得多。

概括

在本教程中,我们了解了如何获取测井测量 (DTC) 的平均值并将它们映射到整个区域。这使我们能够了解某个地理区域的数据趋势。

然而,在查看这些数据时,我们必须记住,我们正在查看的是 2D 表面,而不是我们在地下遇到的更复杂的 3D 结构。因此,测量的变化可归因于深度的变化。

使用的数据集

本文中使用的数据集是训练数据集的一个子集,该数据集用作 Xeek 和 FORCE 2020 (Bormann 等人,2020)举办的机器学习竞赛的一部分。它是根据挪威政府的 NOLD 2.0 许可证发布的,有关详细信息,请参见:挪威开放政府数据许可证 (NLOD) 2.0。可以在此处(https://data.norge.no/nlod/en/2.0)访问完整的数据集。文章来源地址https://www.toymoban.com/news/detail-498268.html

到了这里,关于python也可以使用克里金插值算法吗?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Arcgis克里金插值报错:ERROR 010079: 无法估算半变异函数。 执行(Kriging)失败。

    问题描述: shape文件的问题,此图可以看出,待插值的点有好几个都超出了地理范围之外,这个不知道是坐标系配准的问题还是什么,总之就是地理位置不对应 更换shape,或者重新制作,制作方法可以参考 更换好了shape文件我们再试试,这次点都能被包含进去 然后有个输出表

    2024年02月07日
    浏览(46)
  • Kriging 克里金算法Java实现

    引入依赖库 定义一个类来表示二维坐标点 定义一个类来表示克里金插值 定义一个调用示例 代码解释 这份代码实现了一个基于克里金(Kriging)算法的插值方法,用 Java 语言实现。下面对代码每个部分进行解释。 引入依赖库 引入需要的 Java 库,包括  List , Arrays  和  Arra

    2024年02月11日
    浏览(52)
  • 克里金(Kriging)模型及Python pykrige库实现

    克里金(Kriging)模型是代理模型的一种。代理模型现在已经发展出多项式响应面(RSM)、Kriging模型、径向基函数模型(RBFS)、神经网络(ANN)、支持向量回归(SVR)、多变量插值回归(MIR)、多项式混沌展开(PCE)等多种代理模型方法。 现在的二代代理模型:根据一定准则加

    2024年02月04日
    浏览(36)
  • 深度学习基础知识 最近邻插值法、双线性插值法、双三次插值算法

    最邻近插值:将每个目标像素找到距离它最近的原图像素点,然后将该像素的值直接赋值给目标像素 优点 :实现简单,计算速度快 缺点 :插值结果缺乏连续性,可能会产生锯齿状的边缘,对于图像质量影响较大,因此当处理精度要求较高的图像时,通常会采用更加精细的插

    2024年02月03日
    浏览(56)
  • OpenCV 笔记(23):图像的缩放——图像的缩放——立方插值、Lanczos 插值算法

    立方插值算法也被称为双三次、双立方插值算法。 先介绍一下三次插值算法,它是一种使用三次多项式拟合一组数据的插值方法。三次插值通常用于图像缩放和重采样。 三次插值的实现方式有很多种,例如牛顿多项式插值、拉格朗日多项式插值、Hermite 三次多项式插值、三次

    2024年04月26日
    浏览(50)
  • 【算法系列 | 11】深入解析查找算法之—插值查找

    心若有阳光,你便会看见这个世界有那么多美好值得期待和向往。 决定开一个算法专栏,希望能帮助大家很好的了解算法。主要深入解析每个算法,从概念到示例。 我们一起努力,成为更好的自己! 今天第11讲,讲一下查找算法的—插值查找算法 查找算法是计算机科学中的

    2024年02月03日
    浏览(55)
  • 数学建模——插值算法

    概念:数模比赛中,常常需要根据有已知的函数点进行数、模型处理和分析,而有时候现有的数据是极少的,不足以支撑分析的进行,这时就需要使用一些数学的方法,“模拟产生“一些新的但又比较靠谱的值来满足需求,这就是插值的作用。 一维插值问题: 通过已有的点

    2024年02月16日
    浏览(39)
  • 数学建模 插值算法

    有问题 牛顿差值也有问题 它们都有龙格现象,一般用分段插值。 插值预测要比灰色关联预测更加准确,灰色预测只有2次 拟合样本点要非常多,样本点少差值合适

    2024年02月16日
    浏览(37)
  • 算法--插值法

    插值法是一种数学方法,主要用于通过已知的离散数据来估算未知值。常见的插值法有线性插值、最近邻插值、双线性插值和双三次插值。以下是其基本原理和应用: 线性插值:假设在两个已知数据点之间,数据的变化是线性的,因此可以通过已知的两点的坐标来计算经过这

    2024年01月18日
    浏览(44)
  • 数学建模之插值算法

    注:本文面向应用,参考了清风大大的资料以及司守奎老师的《数学建模算法与应用》,属作者的个人学习总结。 当已知函数点非常少的时候,我们经常要 模拟产生一些新的函数值 来支撑后续数据分析。这就是插值算法的应用目的。*插值算法还可以用来实现短期预测,但我

    2024年01月24日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包