pyMannKendall 使用教程
【免费下载链接】pyMannKendall 项目地址: https://gitcode.com/gh_mirrors/py/pyMannKendall
项目介绍
pyMannKendall 是一个用于非参数 Mann-Kendall 趋势检验的 Python 包。Mann-Kendall 检验是一种广泛使用的非参数统计方法,用于检测时间序列数据中的趋势。该包提供了多种 Mann-Kendall 家族的检验方法,适用于各种趋势分析场景。
项目快速启动
安装
首先,你需要安装 pyMannKendall 包。你可以使用 pip 进行安装:
pip install pymannkendall
或者使用 conda 安装:
conda install -c conda-forge pymannkendall
或者从源码安装:
git clone https://gitcode.com/gh_mirrors/py/pyMannKendall
cd pyMannKendall
python setup.py install
依赖包
pyMannKendall 需要以下依赖包:
- numpy
- scipy
功能概述
pyMannKendall 提供了 11 种不同的 Mann-Kendall 检验方法和 2 种 Sen's 斜率估计器:
- 原始 Mann-Kendall 检验 (original_test):基本的非参数趋势检验
- Hamed 和 Rao 修正 MK 检验 (hamed_rao_modification_test):处理序列自相关问题
- Yue 和 Wang 修正 MK 检验 (yue_wang_modification_test):方差修正方法
- 预白化修正 MK 检验 (pre_whitening_modification_test):预白化时间序列
- 趋势自由预白化修正 MK 检验 (trend_free_pre_whitening_modification_test):移除趋势分量后预白化
- 多元 MK 检验 (multivariate_test):多参数趋势分析
- 季节性 MK 检验 (seasonal_test):处理季节性时间序列
- 区域 MK 检验 (regional_test):区域尺度趋势分析
- 相关多元 MK 检验 (correlated_multivariate_test):参数相关时的趋势分析
- 相关季节性 MK 检验 (correlated_seasonal_test):季节性相关数据趋势分析
- 偏 MK 检验 (partial_test):考虑独立变量影响的趋势分析
- Theil-Sen 斜率估计器 (sens_slope):估计单调趋势幅度
- 季节性 Theil-Sen 斜率估计器 (seasonal_sens_slope):季节性数据的趋势幅度估计
基本使用
以下是一个简单的示例,展示如何使用 pyMannKendall 进行 Mann-Kendall 趋势检验:
import numpy as np
import pymannkendall as mk
# 示例数据
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 进行 Mann-Kendall 检验
result = mk.original_test(data)
# 输出结果
print(result)
输出结果将包含趋势、p 值、z 值等信息。
详细示例
数据准备
项目中提供了几个示例数据集,位于 Examples 目录下:
- daily-total-female-births.csv:1959年加利福尼亚每日女性出生数据
- shampoo.csv:3年期间洗发水月销售数据
- AirPassengers.csv:1949-1960年国际航空公司月乘客数据
完整分析示例
import numpy as np
import pandas as pd
import pymannkendall as mk
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_csv("Examples/daily-total-female-births.csv", parse_dates=['Date'], index_col='Date')
# 进行趋势分析
result = mk.original_test(data['Births'])
# 输出详细结果
print(f"趋势: {result.trend}")
print(f"显著性: {result.h}")
print(f"p值: {result.p}")
print(f"z值: {result.z}")
print(f"Kendall Tau: {result.Tau}")
print(f"斜率: {result.slope}")
print(f"截距: {result.intercept}")
结果解释
Mann-Kendall 检验返回的结果包含以下字段:
- trend:趋势方向(增加、减少或无趋势)
- h:是否存在趋势(True/False)
- p:显著性检验的 p 值
- z:标准化检验统计量
- Tau:Kendall Tau 系数
- s:Mann-Kendall 得分
- var_s:方差 S
- slope:Theil-Sen 估计器/斜率
- intercept:Kendall-Theil 稳健线的截距
应用案例
气候数据分析
pyMannKendall 可以应用于气候变化分析、水文数据分析、股票市场趋势分析等场景:
import pymannkendall as mk
# 示例气候数据
climate_data = [23.4, 24.5, 25.6, 26.7, 27.8, 28.9, 30.0, 31.1, 32.2, 33.3]
# 进行 Mann-Kendall 检验
result = mk.original_test(climate_data)
# 输出结果
print(f"气候数据趋势: {result.trend}")
print(f"显著性水平: {result.p}")
季节性数据分析
对于具有季节性模式的数据,可以使用季节性检验:
# 季节性数据趋势分析
seasonal_result = mk.seasonal_test(seasonal_data, period=12)
print(f"季节性趋势: {seasonal_result.trend}")
最佳实践
-
数据预处理:在进行趋势检验之前,确保数据已经过适当的预处理,如去除异常值、填补缺失值等。
-
方法选择:根据数据特性选择合适的检验方法:
- 无自相关:使用原始检验
- 存在自相关:使用修正方法(Hamed-Rao 或 Yue-Wang)
- 季节性数据:使用季节性检验
- 多变量数据:使用多元检验
-
结果解释:理解 Mann-Kendall 检验结果的含义,特别是 p 值和趋势的解释。通常 p < 0.05 表示统计显著性。
-
可视化:结合 matplotlib 或 seaborn 进行数据可视化,更直观地展示趋势。
测试验证
项目包含完整的测试套件,可以使用 pytest 运行测试:
pytest -v
典型生态项目
pyMannKendall 可以与其他数据分析和可视化工具结合使用:
- Pandas:用于数据处理和分析
- Matplotlib 和 Seaborn:用于数据可视化
- SciPy:用于更高级的统计分析
通过这些工具的结合使用,可以更全面地分析和展示数据的趋势和特征。
注意事项
- Mann-Kendall 检验要求数据没有序列相关性,如果存在序列相关,可能会影响显著性水平。
- 对于季节性数据,务必使用季节性检验方法。
- 结果解释时应考虑实际应用背景,统计显著性不一定代表实际重要性。
pyMannKendall 提供了一个强大而灵活的工具集,用于各种时间序列数据的趋势分析,是环境科学、气候研究、经济学等领域研究人员的宝贵工具。
【免费下载链接】pyMannKendall 项目地址: https://gitcode.com/gh_mirrors/py/pyMannKendall
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



