python如何实现MK突变检验方法,代码复制修改可用

作者:David_wangzw 时间:2022-04-10 13:31:18 

需求

已知年份和历年最大冻土深度,计算最大冻土深度Mk突变检验。

原理

python如何实现MK突变检验方法,代码复制修改可用

python如何实现MK突变检验方法,代码复制修改可用

python如何实现MK突变检验方法,代码复制修改可用

工具和语言

  • python

  • jupter notebook

代码过程

定义函数

def mktest(inputdata):
   import numpy as np
   inputdata = np.array(inputdata)
   n=inputdata.shape[0]
   Sk = np.zeros(n)
   UFk = np.zeros(n)
   r = 0
   for i in range(1,n):
       for j in range(i):
           if inputdata[i] > inputdata[j]:
               r = r+1
       Sk[i] = r
       E = (i+1)*i/4
       Var = (i+1)*i*(2*(i+1)+5)/72
       UFk[i] = (Sk[i] - E)/np.sqrt(Var)
   Sk2 = np.zeros(n)
   UBk = np.zeros(n)
   inputdataT = inputdata[::-1]
   r = 0
   for i in range(1,n):
       for j in range(i):
           if inputdataT[i] > inputdataT[j]:
               r = r+1
       Sk2[i] = r
       E = (i+1)*(i/4)
       Var = (i+1)*i*(2*(i+1)+5)/72
       UBk[i] = -(Sk2[i] - E)/np.sqrt(Var)
   UBk2 = UBk[::-1]
   return UFk, UBk2
定义函数计算变量
```python
def mktest(inputdata):
   import numpy as np
   inputdata = np.array(inputdata)
   n=inputdata.shape[0]
   s              =  0
   Sk = np.zeros(n)
   UFk = np.zeros(n)
   for i in range(1,n):
       for j in range(i):
           if inputdata[i] > inputdata[j]:
               s = s+1
           else:
               s = s+0
       Sk[i] = s
       E = (i+1)*(i/4)
       Var = (i+1)*i*(2*(i+1)+5)/72
       UFk[i] = (Sk[i] - E)/np.sqrt(Var)
   Sk2 = np.zeros(n)
   UBk = np.zeros(n)
   s  =  0
   inputdataT = inputdata[::-1]
   for i in range(1,n):
       for j in range(i):
           if inputdataT[i] > inputdataT[j]:
               s = s+1
           else:
               s = s+0
       Sk2[i] = s
       E = (i+1)*(i/4)
       Var = (i+1)*i*(2*(i+1)+5)/72
       UBk[i] = -(Sk2[i] - E)/np.sqrt(Var)
   UBk2 = UBk[::-1]
   return UFk, UBk2

导入变量 ,形成突变检验图

import matplotlib.dates as mdates    #處理日期
import matplotlib.pyplot as plt
import numpy as np
from pylab import mpl
from matplotlib.pyplot import MultipleLocator
mpl.rcParams['font.sans-serif'] = ['SimHei'] #防止标题出现乱码。
plt.rcParams['axes.unicode_minus'] = False   #防止出现图上的负数为方框。
# y值和x值   分别输入六个站点的最大冻土深度值,将值以列表的方式导入
a = [150,150,114,109,96,95,83,76,109,80,115,80,94,86,133,91,110,116,114,128,172,172,
162,121,175,151,110,92,116,156,134,110,89,97,109,157,153,105,76,87,122,78,97,93,141,162,
123,133,161,128,138,104,133,102,140,109,118,86,126,92,121,149,116]  #这个部分值可以替换成为要检验的气温、水文等值
x_values=list(range(1961,2022))
uf,ub = mktest(a)
plt.figure(figsize=(8,4))   #图片的大小
plt.plot(uf,'r',label='UFk')
plt.plot(ub,'b',label='UBk')
plt.xticks([0,5,10,15,20,25,30,35,40,45,50,55,60],['1960','1965','1970','1975','1980','1985','1990','1995','2000','2005','2010','2015','2020',])
#将默认的x轴数值替换为年份的X轴,默认是0-61,一共62个值,代表X轴内容。
# 0.01显著性检验
plt.legend()
plt.axhline(1.96)
plt.axhline(-1.96)
#设置图片的标签(标题)
plt.title("富蕴点最大冻土深度突变检验结果")#x轴上的名字
plt.xlabel("年份(1960年-2022年)")#x轴上的名字
plt.ylabel("突变值波动参数")#y轴上的名字
plt.grid() #形成网格线输出
x_major_locator=MultipleLocator(5)
plt.show()

python如何实现MK突变检验方法,代码复制修改可用

最后成图以后的样子。

来源:https://blog.csdn.net/weixin_52753312/article/details/127953122

标签:python,MK,突变检验
0
投稿

猜你喜欢

  • python 破解加密zip文件的密码

    2021-01-10 19:59:39
  • PHP基于phpqrcode类生成二维码的方法示例详解

    2023-07-15 22:57:52
  • Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题

    2021-05-15 23:31:46
  • Python 等分切分数据及规则命名的实例代码

    2023-03-26 05:01:17
  • python添加列表元素append(),extend()及 insert()

    2021-03-07 06:17:50
  • Python实现信息轰炸工具(再也不怕说不过别人了)

    2021-10-05 17:01:08
  • PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)

    2022-06-20 13:08:13
  • GO语言常用的文件读取方式

    2024-05-21 10:21:30
  • 探讨SQL利用INFORMATION_SCHEMA系统视图如何获取表的主外键信息

    2024-01-23 04:16:36
  • 基于Python创建可定制的HTTP服务器

    2023-08-09 22:46:09
  • mysql中的跨库关联查询方法

    2024-01-25 22:48:06
  • 用python打印菱形的实操方法和代码

    2023-03-18 19:17:18
  • java-jsp springmvc-controller 传值到页面的方法

    2023-06-16 18:19:52
  • Python模块的加载讲解

    2023-04-05 08:42:01
  • PHP生成sitemap.xml地图函数

    2024-06-05 09:23:16
  • python实现一个简单的udp通信的示例代码

    2023-07-23 16:08:43
  • SQLServer 快速备份的十种方法

    2024-01-21 01:04:32
  • 几个比较重要的MySQL变量

    2024-01-23 20:22:36
  • jquery表单验证使用插件formValidator

    2023-07-02 05:30:54
  • python tqdm用法及实例详解

    2023-11-03 01:54:53
  • asp之家 网络编程 m.aspxhome.com