首页 > 编程语言 >基于Python进行小波分析

基于Python进行小波分析

时间:2024-07-29 20:17:34浏览次数:16  
标签:分析 基于 set Python list plt import np ax

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

1 数据来源及下载方式

西北农林科技大学的彭守璋研究员在国家青藏高原科学数据中心公开发布了气温、降水、干燥度等气象数据,本文所使用的数据为基于其中的 中国1km分辨率逐月降水量数据集 转换得到的某地区历年降水量数据,可通过FTP进行下载。

Filezilla 桌面版软件为例,输入官网中给定的主机号、用户名、密码、端口等信息后即可将数据从远程站点下载至本地。

image

2 代码编写

2.1 导入相关模块

import openpyxl
import pywt
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rcParams

2.2 设置地图字体及字号

config = {
    "mathtext.fontset": "stix",
    "font.family": "serif",
    "font.serif": ["Times New Roman"],
    "font.size": 24,
    "axes.unicode_minus": False # 处理负号,即-号
}
rcParams.update(config)

2.3 从Excel表读取数据

# 通过pandas模块读取Excel表,并提取表格中的年份及降水量数据
file_path = "file_path"	# 此处为Excel文件路径
data = pd.read_excel(file_path)
Year_list = list(data["Year"])
Pre_list = list(data["Pre"])

2.4 进行小波变换,绘制小波等值线图

scales = np.arange(1, 31)	# 设置小波分析的时间尺度
coef, freqs = pywt.cwt(Pre_list, scales, "morl")	# 对降水量数据进行Morlet小波变换

fig, ax = plt.subplots(figsize=(15, 10))

# 绘制小波系数图像
im = plt.imshow(abs(coef), extent=[Year_list[0], Year_list[-1], 30, 1],
                interpolation="bilinear", cmap="gray", aspect="auto",
                vmax=abs(coef).max(), vmin=-abs(coef).max())
plt.colorbar(im, ax=ax)  # 添加色带图例

# 绘制小波系数等值线
contour = plt.contour(Year_list, scales, coef.real, colors="black", linewidths=1)

ax.invert_yaxis()   # 反转Y轴,使时间尺度从大到小排列
ax.set_xticks(np.arange(1901, 2024, 20))
ax.set_yticks(np.arange(5, 31, 5))
ax.set_xlabel("Year")
ax.set_ylabel("Scale")

2.5 计算小波方差,绘制小波方差图

variance = np.var(coef, axis=1)	# 计算小波方差
variance1 = variance / 10000	# 数值较大,将数值缩小10000倍后显示在结果图中


fig, ax = plt.subplots(figsize=(15, 10))

ax.plot(scales, variance1, "k-")	# 绘制方差曲线
ax.set_xlabel("Scale (a)")
# \times为LaTeX语法中的叉乘号
# 在Python中,反斜杠"\"为转义字符,此处需同时输入两个反斜杠
ax.set_ylabel("Variance $\mathrm{(\\times 10^4)}$")
ax.set_xticks(np.arange(0, 31, 5))
ax.set_yticks(np.arange(0, 9, 2))
fig.savefig("小波方差图.jpg", dpi=600)

3 等值线及方差图示例

image

image

标签:分析,基于,set,Python,list,plt,import,np,ax
From: https://www.cnblogs.com/qsgeo/p/18330961

相关文章

  • Python - Using a list with functions from the random module
    Toselectarandomitemfromthelistorshufflethelist,youcanusethechoiceandshufflefunctionsfromtherandommoduleofthestandardlibrary.Therandom.choice()functionreturnsarandomlyselectedelementfromthelist.>>>importran......
  • Python 教程(六):函数式编程
    目录专栏列表前言函数定义参数返回值示例函数类型普通函数空函数匿名函数(Lambda函数)嵌套函数函数装饰器高阶函数函数参数位置参数默认参数可变位置参数可变关键字参数函数属性和方法`__name__``__doc__``func.__dict__``func.__defaults__``func.__annotations__`函......
  • Python操作MySQL数据库的5种方式
    不管你是做数据分析,还是网络爬虫,Web开发、亦或是机器学习,你都离不开要和数据库打交道,而MySQL又是最流行的一种数据库,这篇文章介绍Python操作MySQL的5种方式,你可以在实际开发过程中根据实际情况合理选择。1、MySQLdbMySQLdb又叫MySQL-python,是Python连接MySQL最流行......
  • Python自定义排序
    Python封装了成熟的排序函数,我们只需要调用内部的sort函数,就可以完成排序。但是实际场景当中,排序的应用往往比较复杂,比如对象类型,当中有多个字段,我们希望按照指定字段排序,或者是希望按照多关键字排序,这个时候就不能简单的函数调用来解决了。1.字典排序我们先来看下最常见的字典......
  • Python中清空list的几种方法
    本文介绍清空list的四种方法,以及list=[]和list.clear()在使用中的区别(坑)。1、使用clear()方法lists=[1,2,1,1,5]lists.clear()print(lists)>>>[]2、重新初始化列表:初始化该范围内的列表,初始化列表没有值,即大小为0的列表lists=[1,2,1,1,5]lists=[]print......
  • 小一保姆级 python三大核心多态、抽象类、动态添加内容详解
    一.多态多态是面向对象编程中的一个核心概念,它允许一个接口被多个数据类型实现。这意味着,即使多个类具有不同的内部实现,它们也可以共享一个公共接口。多态的实现通常依赖于继承和方法重写。继承:子类继承父类的属性和方法。方法重写:子类重写父类中的方法,以提供特定的实现。......
  • python找出字典中value最大值的几种方法
    假设定义一字典,m={"a":3,"e":6,"b":2,"g":7,"f":7,"c":1,"d":5},在不知道key的情况下如何找出字典中value最大的所有key-value对?下面讨论几种方法。1)通过m.values()和max()函数第一步,通过max()函数找到字典中的value最大值。max(m.values())结果为7第二步,再通......
  • 计算机毕业设计选题推荐-音乐播放系统-Java/Python项目实战
    ✨作者主页:IT毕设梦工厂✨个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。☑文末获取源码☑精彩专栏推荐⬇⬇⬇Java项目Python项目安卓项目微信小程序项目......
  • cesium 剖面分析
    cesium剖面分析实现思路通过采样点方式在一条线上平均分布相应的采样点,通过采样点的位置和高程数据获取每个采样点的高度,用采样点高度画海拔走势折线图;示例代码<!DOCTYPEhtml><htmllang="en"</......
  • 轻松拿捏python推导式
    推导式定义推导式 comprehensions(又称解析式),是Python的一种独有特性。推导式最主要的特点就是可以从一个数据序列构建另一个新的数据序列。在Python中目前常用的推导式有列表推导式、字典推导式和集合推导式。列表推导式(ListComprehensions)列表推导式是我们最常使用的......