翼度科技»论坛 编程开发 python 查看内容

基于Python进行小波分析

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
在气象学和环境科学的研究中,理解和预测气象数据的周期性变化至关重要。小波分析作为一种高效的数学工具,近年来在气象数据的周期性分析中得到了广泛应用。本文将详细介绍如何通过Python进行小波分析,以探究气象数据中的周期性变化。
1 数据来源及下载方式

西北农林科技大学的彭守璋研究员在国家青藏高原科学数据中心公开发布了气温、降水、干燥度等气象数据,本文所使用的数据为基于其中的 中国1km分辨率逐月降水量数据集 转换得到的某地区历年降水量数据,可通过FTP进行下载。
Filezilla 桌面版软件为例,输入官网中给定的主机号、用户名、密码、端口等信息后即可将数据从远程站点下载至本地。

2 代码编写

2.1 导入相关模块
  1. import openpyxl
  2. import pywt
  3. import numpy as np
  4. import pandas as pd
  5. import matplotlib.pyplot as plt
  6. from matplotlib import rcParams
复制代码
2.2 设置地图字体及字号
  1. config = {
  2.     "mathtext.fontset": "stix",
  3.     "font.family": "serif",
  4.     "font.serif": ["Times New Roman"],
  5.     "font.size": 24,
  6.     "axes.unicode_minus": False # 处理负号,即-号
  7. }
  8. rcParams.update(config)
复制代码
2.3 从Excel表读取数据
  1. # 通过pandas模块读取Excel表,并提取表格中的年份及降水量数据
  2. file_path = "file_path"        # 此处为Excel文件路径
  3. data = pd.read_excel(file_path)
  4. Year_list = list(data["Year"])
  5. Pre_list = list(data["Pre"])
复制代码
2.4 进行小波变换,绘制小波等值线图
  1. scales = np.arange(1, 31)        # 设置小波分析的时间尺度
  2. coef, freqs = pywt.cwt(Pre_list, scales, "morl")        # 对降水量数据进行Morlet小波变换
  3. fig, ax = plt.subplots(figsize=(15, 10))
  4. # 绘制小波系数图像
  5. im = plt.imshow(abs(coef), extent=[Year_list[0], Year_list[-1], 30, 1],
  6.                 interpolation="bilinear", cmap="gray", aspect="auto",
  7.                 vmax=abs(coef).max(), vmin=-abs(coef).max())
  8. plt.colorbar(im, ax=ax)  # 添加色带图例
  9. # 绘制小波系数等值线
  10. contour = plt.contour(Year_list, scales, coef.real, colors="black", linewidths=1)
  11. ax.invert_yaxis()   # 反转Y轴,使时间尺度从大到小排列
  12. ax.set_xticks(np.arange(1901, 2024, 20))
  13. ax.set_yticks(np.arange(5, 31, 5))
  14. ax.set_xlabel("Year")
  15. ax.set_ylabel("Scale")
  16. fig.savefig("小波等值线图.jpg", dpi=600)
复制代码
2.5 计算小波方差,绘制小波方差图
  1. variance = np.var(coef, axis=1)        # 计算小波方差
  2. variance1 = variance / 10000        # 数值较大,将数值缩小10000倍后显示在结果图中
  3. fig, ax = plt.subplots(figsize=(15, 10))
  4. ax.plot(scales, variance1, "k-")        # 绘制方差曲线
  5. ax.set_xlabel("Scale (a)")
  6. # \times为LaTeX语法中的叉乘号
  7. # 在Python中,反斜杠""为转义字符,此处需同时输入两个反斜杠
  8. ax.set_ylabel("Variance $\mathrm{(\\times 10^4)}$")
  9. ax.set_xticks(np.arange(0, 31, 5))
  10. ax.set_yticks(np.arange(0, 9, 2))
  11. fig.savefig("小波方差图.jpg", dpi=600)
复制代码
3 等值线及方差图示例




来源:https://www.cnblogs.com/qsgeo/p/18330961
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具