【Python】遥感数据趋势分析Sen+mk

方法介绍

1.Theil-Sen Median方法又被称为 Sen 斜率估计,是一种稳健的非参数统计的趋势计算方法。该方法计算效率高,对于测量误差和离群数据不敏感,常被用于长时间序列数据的趋势分析中。对于后续代码计算结果中的slope.tif解读,当slope大于0表示随时间序列呈现上升趋势;slope小于0表示随时间序列呈现下降趋势。

2.Mann-Kendall是一种非参数统计检验方法,最初由Mann在1945年提出,后由Kendall和Sneyers进一步完善,其优点是不需要测量值服从正态分布,也不要求趋势是线性的,并且不受缺失值和异常值的影响,在长时间序列数据的趋势显著检验中得到了十分广泛的应用。对于后续代码计算结果中的z.tif,当|Z|大于1.65、1.96和2.58时,表示趋势分别通过了置信度为90%、95%和99%的显著性检验。

代码介绍

此代码大部分来自Github大佬分享,我修改了报错的个别代码后亲自测试pycharm下只需改路径就可以运行:

# coding:utf-8
'''
已全部实现
'''
import numpy as np
import pymannkendall as mk
import os
import rasterio as rasdef sen_mk_test(image_path, outputPath):# image_path:影像的存储路径# outputPath:结果输出路径global path1filepaths = []for file in os.listdir(path1):filepath1 = os.path.join(path1, file)filepaths.append(filepath1)# 获取影像数量num_images = len(filepaths)# 读取影像数据img1 = ras.open(filepaths[0])# 获取影像的投影,高度和宽度transform1 = img1.transformheight1 = img1.heightwidth1 = img1.widtharray1 = img1.read()img1.close()# 读取所有影像for path1 in filepaths[1:]:if path1[-3:] == 'tif':print(path1)img2 = ras.open(path1)array2 = img2.read()array1 = np.vstack((array1, array2))img2.close()nums, width, height = array1.shape# 写影像def writeImage(image_save_path, height1, width1, para_array, bandDes, transform1):with ras.open(image_save_path,'w',driver='GTiff',height=height1,width=width1,count=1,dtype=para_array.dtype,crs='+proj=latlong',transform=transform1,) as dst:dst.write_band(1, para_array)dst.set_band_description(1, bandDes)del dst# 输出矩阵,无值区用-9999填充slope_array = np.full([width, height], -9999.0000)z_array = np.full([width, height], -9999.0000)Trend_array = np.full([width, height], -9999.0000)Tau_array = np.full([width, height], -9999.0000)s_array = np.full([width, height], -9999.0000)p_array = np.full([width, height], -9999.0000)# 只有有值的区域才进行mk检验c1 = np.isnan(array1)sum_array1 = np.sum(c1, axis=0)nan_positions = np.where(sum_array1 == num_images)positions = np.where(sum_array1 != num_images)# 输出总像元数量print("all the pixel counts are {0}".format(len(positions[0])))# mk testfor i in range(len(positions[0])):print(i)x = positions[0][i]y = positions[1][i]mk_list1 = array1[:, x, y]trend, h, p, z, Tau, s, var_s, slope, intercept = mk.original_test(mk_list1)'''        trend: tells the trend (increasing, decreasing or no trend)h: True (if trend is present) or False (if trend is absence)p: p-value of the significance testz: normalized test statisticsTau: Kendall Taus: Mann-Kendal's scorevar_s: Variance Sslope: Theil-Sen estimator/slopeintercept: intercept of Kendall-Theil Robust Line'''if trend == "decreasing":trend_value = -1elif trend == "increasing":trend_value = 1else:trend_value = 0slope_array[x, y] = slope  # senslopes_array[x, y] = sz_array[x, y] = zTrend_array[x, y] = trend_valuep_array[x, y] = pTau_array[x, y] = Tauall_array = [slope_array, Trend_array, p_array, s_array, Tau_array, z_array]slope_save_path = os.path.join(result_path, "slope.tif")Trend_save_path = os.path.join(result_path, "Trend.tif")p_save_path = os.path.join(result_path, "p.tif")s_save_path = os.path.join(result_path, "s.tif")tau_save_path = os.path.join(result_path, "tau.tif")z_save_path = os.path.join(result_path, "z.tif")image_save_paths = [slope_save_path, Trend_save_path, p_save_path, s_save_path, tau_save_path, z_save_path]band_Des = ['slope', 'trend', 'p_value', 'score', 'tau', 'z_value']for i in range(len(all_array)):writeImage(image_save_paths[i], height1, width1, all_array[i], band_Des[i], transform1)# 调用
path1 = r"E:\Test\ACMEI\ACMEI"
result_path = r"E:\Test\ACMEI\ACMEImk"
sen_mk_test(path1, result_path)

后续处理三步走

1.对于生成的tif栅格,只需要取slope.tif以及z.tif进行重分类。

slope>0赋值1表示增加 |z|>1.96赋值2表示显著

slope=0赋值0表示不变 |z|<=1.96赋值1表示不显著

slope<0赋值-1表示减少

(此处还可根据显著性阈值再细分为更多类,我仅作基本演示分为5类)

2.再相乘得到

-2:显著减少;-1:不显著减少;0:稳定不变;1:不显著增加; 2:显著增加

3.在Arcmap出图即可!

在这里插入图片描述

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

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

相关文章

ycsb压测mongodb

下载解压 https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-mongodb-binding-0.17.0.tar.gz tar -zxvf ycsb-mongodb-binding-0.17.0.tar.gzycsb提前已经在workload文件夹下准备好了几个压测场景分别对应workload[a:f] workloads/workloada 样例 …

微电网优化MATLAB:火鹰优化算法(Fire Hawk Optimizer,FHO)求解微电网优化(提供MATLAB代码)

一、火鹰优化算法FHO 火鹰优化算法&#xff08;Fire Hawk Optimizer&#xff0c;FHO&#xff09;由Mahdi Azizi等人于2022年提出&#xff0c;该算法性能高效&#xff0c;思路新颖。 单目标优化&#xff1a;火鹰优化算法&#xff08;Fire Hawk Optimizer&#xff0c;FHO&#…

[Linux 进程(五)] 程序地址空间深度剖析

文章目录 1、前言2、什么是进程地址空间&#xff1f;3、进程地址空间的划分4、虚拟地址与物理地址的关系5、页表的作用扩展 6、为什么要有地址空间&#xff1f; 1、前言 Linux学习路线比较线性&#xff0c;也比较长&#xff0c;因此一个完整的知识点学习就会分布在两篇文章中&…

【Python程序开发系列】一文搞懂argparse模块的常见用法(案例+源码)

一、引言 argsparse是python的命令行解析的标准模块&#xff0c;内置于python&#xff0c;不需要安装。这个库可以让我们直接在命令行中就可以向程序中传入参数并让程序运行。 在运行深度学习程序时。往往会因为电脑配置不行导致程序运行慢卡&#xff0c;需要将程序在虚机上进行…

Dubbo使用详解

简介 Dubbo是一个高性能、轻量级的开源Java RPC框架&#xff0c;由阿里巴巴公司开发并开源。它提供了三大核心能力&#xff1a;面向接口的远程方法调用&#xff0c;智能容错和负载均衡&#xff0c;以及服务自动注册和发现。Dubbo使得应用可通过高性能的 RPC 实现服务的输出和输…

浅聊雷池社区版(WAF)的tengine

雷池社区版是一个开源的免费Web应用防火墙&#xff08;WAF&#xff09;&#xff0c;专为保护Web应用免受各种网络攻击而设计。基于强大的Tengine&#xff0c;雷池社区版提供了一系列先进的安全功能&#xff0c;适用于中小企业和个人用户。 Tengine的故事始于2011年&#xff0c;…

解析Transformer模型

原文地址&#xff1a;https://zhanghan.xyz/posts/17281/ 进入Transformer RNN很难处理冗长的文本序列&#xff0c;且很容易受到所谓梯度消失/爆炸的问题。RNN是按顺序处理单词的&#xff0c;所以很难并行化。 用一句话总结Transformer&#xff1a;当一个扩展性极佳的模型和一…

springcloud Client端cloud-consumer-order80

文章目录 简介建立module修改pom修改yml主启动类把公共代码写在一个mudule 里面测试 简介 这个是和之前的8001相互配合端口测试 这里的80的用户测试端口。 代码在&#xff1a;GitHub 上&#xff1a;https://github.com/13thm/study_springcloud/tree/main/days2 建立module …

完美解决idea一直indexing,无法操作的问题

今天主要分享一下在使用idea 2020.3版本开发maven项目的时候&#xff0c;一直出现有效件index&#xff0c; 有时候是scaning indexing, 有时候是update indexing, indexing的时候&#xff0c;idea基本上就没办法操作了&#xff0c;连跳入到类或方法里都跳不了。不厌其烦。 于是…

模型Model:字符串列表模型QStringListModel

一、QStringListModel &#xff08;1&#xff09;功能&#xff1a;处理字符串列表的数据模型&#xff0c;可作为QListView的数据模型&#xff0c;在界面上显示和编辑字符串列表。 二、QStringListModel 类中的函数 1)、 QStringListModel(QObject *parent Q_NULLPTR) //构造函…

工程监测仪器振弦采集仪的新技术研究与创新方面

工程监测仪器振弦采集仪的新技术研究与创新方面 工程监测仪器振弦采集仪是一种用于测量和监测工程结构振动特性的仪器。传统的振弦采集仪主要采用振弦传感器和数据采集设备&#xff0c;通过对结构振动信号的采集和分析&#xff0c;可以获得结构的动态特性&#xff0c;如固有频…

【01】mapbox js api加载arcgis切片服务

需求&#xff1a; 第三方的mapbox js api加载arcgis切片服务&#xff0c;同时叠加在天地图上&#xff0c;天地图坐标系web墨卡托。 效果图&#xff1a; 形如这种地址去加载http://zjq2022.gis.com:8080/demo/loadmapboxtdt.html 思路&#xff1a; 需要制作一个和天地图比例…

vscode配置web开发环境(WampServer)

这里直接去下载了集成的服务器组件wampserver&#xff0c;集成了php&#xff0c;MySQL&#xff0c;Apache 可能会出现安装问题&#xff0c;这里说只有图上这些VC包都安装了才能继续安装&#xff0c;进入报错里提供的链接 在页面内搜索相关信息 github上不去可以去镜像站 下载…

《Python数据分析技术栈》第01章 02 Jupyter入门(Getting started with Jupyter notebooks)

02 Jupyter入门&#xff08;Getting started with Jupyter notebooks&#xff09; 《Python数据分析技术栈》第01章 02 Jupyter入门&#xff08;Getting started with Jupyter notebooks&#xff09; Before we discuss the essentials of Jupyter notebooks, let us discuss…

C#,字符串匹配(模式搜索)RK(Rabin Karp)算法的源代码

M.O.Rabin Rabin-Karp算法&#xff0c;是由M.O.Rabin和R.A.Karp设计实现的一种基于移动散列值的字符串匹配算法。 通常基于散列值的字符串匹配方法&#xff1a;&#xff08;1&#xff09;首先计算模式字符串的散列函数&#xff1b;&#xff08;2&#xff09;然后利用相同的散…

【漏洞攻击之文件上传条件竞争】

漏洞攻击之文件上传条件竞争 wzsc_文件上传漏洞现象与分析思路编写攻击脚本和重放措施中国蚁剑拿flag wzsc_文件上传 漏洞现象与分析 只有一个upload前端标签元素&#xff0c;并且上传任意文件都会跳转到upload.php页面&#xff0c;判定是一个apache容器&#xff0c;开始扫描…

IntelliJ IDEA 中输出乱码解决

最近tomcat突然在控制台输出乱码&#xff0c;各种乱码问题&#xff0c;查阅大量的资料&#xff0c;最终得以解决. IDEA控制台输出乱码 问题一&#xff1a;idea中tomcat控制台输出乱码 运行本地的tomcat\bin\start.bat文件页面显示正常 在idea中显示乱码 解决&#xff1a; 根…

WebRTC视频会议/视频客服系统EasyRTC进入会议室密码验证的开发与实现

基于WebRTC技术的EasyRTC视频会议系统&#xff0c;建设目标是让用户随时随地、快捷方便地进行视频会议&#xff0c;并根据行业需求有针对性地提供多样化、个性化功能&#xff0c;该系统是覆盖全球的实时音视频开发平台&#xff0c;支持一对一、一对多等视频通话&#xff0c;极大…

梳理从MVP变换到光栅化的过程

1.梳理从MVP变换到光栅化的过程 相关博客&#xff1a; 1.MVP变换 2.Rasterization&#xff08;光栅化&#xff09; 1.1 View/Camera transformation 此例中相机初始位置为&#xff08;0,0,5&#xff09;【备注&#xff1a;详见主函数中输入的值】经过 M view M_{\text{view}}…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-贴子列表分页显示实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…