ToB企服应用市场:ToB评测及商务社交产业平台

标题: 基于Python举行小波分析 [打印本页]

作者: 梦见你的名字    时间: 2024-7-29 19:05
标题: 基于Python举行小波分析
在气象学和环境科学的研究中,明白和预测气象数据的周期性变化至关紧张。小波分析作为一种高效的数学工具,近年来在气象数据的周期性分析中得到了广泛应用。本文将详细介绍如何通过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 等值线及方差图示例




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4