1 回顾
最早分享过Sen+MK趋势分析,当时是基于栅格逐像元的处理,详细内容见第一篇分享。很多时候也会遇到如下情况,分析的数据是站点的连续数据,然后想分析站点数据的趋势分析以及显著性检验。2 样例数据
把数据在Excel中准备好,如下3 代码块
用到的函数:
使用mk.original_test
计算各种指标.
# coding:utf-8import pandas as pdimport pymannkendall as mk"""Author:俊哥的地理空间 Date:/12/30excel数据样例:20001120011219182002131817221516241615221714131819121614211012"""data = pd.read_excel('D:/data.xlsx')rows = data.shape[0]cols = data.shape[1]print(rows,cols)for i in range(1,cols):r = data.iloc[:,i] # 循环读取每一列数据res = mk.original_test(r)print(res)print(f'trend:{res.trend}','p_value:{:.2f}'.format(res.p),'slope:{:.2f}'.format(res.slope),sep = ',')
4 结果
D:\Python3.9\python.exe D:/PyCode/applyscript/MK趋势分析Excel.py10 4Mann_Kendall_Test(trend='increasing', h=True, p=8.303070332638107e-05, z=3.9354796403996297, Tau=1.0, s=45.0, var_s=125.0, slope=1.0, intercept=12.0)trend:increasing,p_value:0.00,slope:1.00Mann_Kendall_Test(trend='decreasing', h=True, p=8.303070332638107e-05, z=-3.9354796403996297, Tau=-1.0, s=-45.0, var_s=125.0, slope=-1.0, intercept=19.0)trend:decreasing,p_value:0.00,slope:-1.00Mann_Kendall_Test(trend='decreasing', h=True, p=0.0373130539125, z=-2.082322158977926, Tau=-0.5333333333333333, s=-24.0, var_s=122.0, slope=-1.3333333333333333, intercept=25.0)trend:decreasing,p_value:0.04,slope:-1.33Process finished with exit code 0
该函数可以计算很多的指标,如trend,h,p,z,Tau,s,var_s,slope,intercept这里做Sen+MK只需要保留trend,p,slope;trend:整体变化趋势,p代表显著性,slope表示增加/减少
终于出羊圈了,不过还有一点点咳嗽…
更多代码和软件操作可以关注个人公粽号:俊哥的地理空间 欢迎留言交流