Pandas处理时间序列之光谱分析与聚类

import matplotlib.pylab as plt
%matplotlib inline
import numpy as np
from numpy import fft
import pandas as pd

一、光谱分析

• 将时间序列分解为许多正弦或余弦函数的总和
• 这些函数的系数应该具有不相关的值
• 对正弦函数进行回归

光谱分析应用场景

基于光谱的拟合

基于光谱的拟合是一种常见的分析方法,它通过将实际观测到的光谱数据与已知的光谱模型进行比较和匹配,来获得对未知样品的估计或预测。该方法可以用于光谱分析、化学定量分析、物质识别等领域

示例

#傅里叶外推算法
def fourierExtrapolation(x, n_predict):n = x.sizen_harm = 5                     # 设置了模型中的谐波数量,即傅里叶级数中所包含的谐波数量t = np.arange(0, n)p = np.polyfit(t, x, 1)         # 利用线性回归找到了序列 x 中的线性趋势x_notrend = x - p[0] * t        # 通过减去线性趋势,将原始数据 x 去趋势化x_freqdom = fft.fft(x_notrend)  # 对去趋势化后的数据进行傅里叶变换,将数据从时域转换到频域f = fft.fftfreq(n)              # 生成频率数组,用于表示傅里叶变换结果中每个频率对应的频率值indexes = list(range(n))# 对频率数组进行排序,以便从低到高选择频率成分indexes.sort(key = lambda i: np.absolute(f[i]))t = np.arange(0, n + n_predict)restored_sig = np.zeros(t.size)for i in indexes[:1 + n_harm * 2]:ampli = np.absolute(x_freqdom[i]) / n   # 振幅phase = np.angle(x_freqdom[i])          # 相位2restored_sig += ampli * np.cos(2 * np.pi * f[i] * t + phase)return restored_sig + p[0] * t# 利用傅立叶变换原理,通过拟合周期函数来预测时间序列的未来值
x = np.array([669, 592, 664, 1005, 699, 401, 646, 472, 598, 681, 1126, 1260, 562, 491, 714, 530, 521, 687, 776, 802, 499, 536, 871, 801, 965, 768, 381, 497, 458, 699, 549, 427, 358, 219, 635, 756, 775, 969, 598, 630, 649, 722, 835, 812, 724, 966, 778, 584, 697, 737, 777, 1059, 1218, 848, 713, 884, 879, 1056, 1273, 1848, 780, 1206, 1404, 1444, 1412, 1493, 1576, 1178, 836, 1087, 1101, 1082, 775, 698, 620, 651, 731, 906, 958, 1039, 1105, 620, 576, 707, 888, 1052, 1072, 1357, 768, 986, 816, 889, 973, 983, 1351, 1266, 1053, 1879, 2085, 2419, 1880, 2045, 2212, 1491, 1378, 1524, 1231, 1577, 2459, 1848, 1506, 1589, 1386, 1111, 1180, 1075, 1595, 1309, 2092, 1846, 2321, 2036, 3587, 1637, 1416, 1432, 1110, 1135, 1233, 1439, 894, 628, 967, 1176, 1069, 1193, 1771, 1199, 888, 1155, 1254, 1403, 1502, 1692, 1187, 1110, 1382, 1808, 2039, 1810, 1819, 1408, 803, 1568, 1227, 1270, 1268, 1535, 873, 1006, 1328, 1733, 1352, 1906, 2029, 1734, 1314, 1810, 1540, 1958, 1420, 1530, 1126, 721, 771, 874, 997, 1186, 1415, 973, 1146, 1147, 1079, 3854, 3407, 2257, 1200, 734, 1051, 1030, 1370, 2422, 1531, 1062, 530, 1030, 1061, 1249, 2080, 2251, 1190, 756, 1161, 1053, 1063, 932, 1604, 1130, 744, 930, 948, 1107, 1161, 1194, 1366, 1155, 785, 602, 903, 1142, 1410, 1256, 742, 985, 1037, 1067, 1196, 1412, 1127, 779, 911, 989, 946, 888, 1349, 1124, 761, 994, 1068, 971, 1157, 1558, 1223, 782, 2790, 1835, 1444, 1098, 1399, 1255, 950, 1110, 1345, 1224, 1092, 1446, 1210, 1122, 1259, 1181, 1035, 1325, 1481, 1278, 769, 911, 876, 877, 950, 1383, 980, 705, 888, 877, 638, 1065, 1142, 1090, 1316, 1270, 1048, 1256, 1009, 1175, 1176, 870, 856, 860])#原始时间序列数据
n_predict = 100 # 未来进行预测的数据点数目
extrapolation = fourierExtrapolation(x, n_predict) # 调用fourierExtrapolation函数,使用原始数据和预测数据点数目作为参数,得到外推的结果
# 使用Matplotlib库绘制了两条曲线,一条代表原始数据x,另一条代表外推的结果extrapolation
plt.plot(np.arange(0, x.size), x, 'b', label = 'x', linewidth = 3)
plt.plot(np.arange(0, extrapolation.size), extrapolation, 'r', label = 'extrapolation')
plt.legend()# 添加图例以便区分曲线

# 通过Fourier外推方法对航空乘客数量的时间序列数据进行预测,并将原始数据和预测结果可视化
air_passengers = pd.read_csv('/home/mw/input/demo2813/AirPassengers.csv') # 读取了包含航空乘客数量的时间序列数据的CSV文件
x = np.array(air_passengers['#Passengers'].values) # 将CSV文件中的乘客数量数据提取出来并转换为Numpy数组,存储在变量x中
n_predict = 300 # 定义外推预测的数据点数目
extrapolation = fourierExtrapolation(x, n_predict) # 调用fourierExtrapolation函数,使用变量x和n_predict作为参数,得到外推的结果
plt.plot(np.arange(0, x.size), x, 'b', label = 'x', linewidth = 3) # 绘制原始数据x的曲线,颜色为蓝色
plt.plot(np.arange(0, extrapolation.size), extrapolation, 'r', label = 'extrapolation') # 绘制外推结果extrapolation的曲线,颜色为红色
plt.legend() # 添加图例,用于区分原始数据和外推结果的曲线

!pip install pandas-datareader -i https://pypi.tuna.tsinghua.edu.cn/simple

!pip install tqdm -i https://pypi.tuna.tsinghua.edu.cn/simple

二、聚类和分类

距离度量

在机器学习和数据挖掘中,分类和聚类是两种常见的任务。虽然它们的目标和方法有所不同,但两者都经常涉及到数据点之间的距离度量。距离度量标准的选择对于分类和聚类的效果至关重要,因为它决定了数据点之间的相似性或差异性的计算方式

应用

基于DTW的聚类
基于DTW的最近邻分类法

import matplotlib.pylab as plt
%matplotlib inline
from matplotlib.pylab import rcParams
rcParams['figure.figsize'] = 15, 6
from pandas_datareader.data import DataReader
from datetime import datetime
from scipy.cluster.hierarchy import dendrogram, linkage
from pandas_datareader.data import DataReader
from datetime import datetime
import pandas as pd
import numpy as np
from sklearn.metrics.pairwise import pairwise_distances
from math import sqrt
from scipy.spatial.distance import squareform
from tqdm import tqdm#读取文件
words = pd.read_csv('/home/mw/input/demo2813/50words_TEST.csv')#从数据框 words 中提取除第一列之外的所有数据,将其转换为矩阵形式,存储在名为 test 的变量中
test = words.ix[:, 1:].as_matrix()'''
/opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:2: DeprecationWarning: 
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexingSee the documentation here:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated/opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:2: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.
'''test.shape
# (454, 270)a = lambda x, y: x[0] + y[0]# 计算两个序列之间的动态时间规整(DTW)距离的函数
# DWT是用于衡量两个序列之间相似度的方法,它可以处理序列在时间轴上的扭曲和偏移
def DTWDistance(s1, s2):# 将输入序列转换为NumPy数组s1, s2 = np.array(s1), np.array(s2)n, m = len(s1), len(s2)# 初始化DTW矩阵DTW = np.full((n+1, m+1), float('inf'))DTW[0, 0] = 0# 计算DTW距离for i in range(1, n+1):for j in range(1, m+1):dist = (s1[i-1] - s2[j-1]) ** 2DTW[i, j] = dist + min(DTW[i-1, j], DTW[i, j-1], DTW[i-1, j-1])return np.sqrt(DTW[n, m])# 使用动态时间规整(DTW)距离来计算测试数据集中每对样本之间的距离
# size = test.shape[0]
# distance_matrix = np.zeros((size, size))# for i in tqdm(range(size), desc="计算DTW距离"):
#     for j in range(i, size):
#         distance_matrix[i, j] = DTWDistance(test[i], test[j])
#         distance_matrix[j, i] = distance_matrix[i, j]# 返回distance_matrix的行列数
# distance_matrix.shape# 使用 linkage 函数来对距离矩阵 p 进行层次聚类,聚类方法是 Ward 方法
# z = linkage(distance_matrix, 'ward')# z# np.savetxt('linkage_matrix.txt', z)'''
--------------------------------------------------------------------------------------------------------------------------
注释到这
将下面读取已经在project目录里预存好的数据的代码取消注释
'''from scipy.cluster.hierarchy import dendrogram
# 加载链接矩阵
z = np.loadtxt('linkage_matrix.txt')  #读取预存数据
dendrogram(z)
plt.title('层次聚类树状图')
plt.xlabel('样本索引')
plt.ylabel('聚类距离')
plt.show()

#显示前几行数据
words.head()
4-0.89094-0.86099-0.82438-0.78214-0.73573-0.68691-0.63754-0.58937-0.54342...-0.86309-0.86791-0.87271-0.87846-0.88592-0.89619-0.90783-0.91942-0.93018-0.93939
012-0.78346-0.68562-0.58409-0.47946-0.37398-0.27008-0.17225-0.087463-0.019191...-0.88318-0.89189-0.90290-0.91427-0.92668-0.93966-0.95244-0.96623-0.9805-0.99178
113-1.32560-1.28430-1.21970-1.15670-1.09980-1.04960-1.01550-0.996720-0.985040...-0.83499-0.86204-0.88559-0.90454-0.93353-0.99135-1.06910-1.13680-1.1980-1.27000
223-1.09370-1.04200-0.99840-0.95997-0.93997-0.93764-0.92649-0.857090-0.693320...-0.72810-0.74512-0.76376-0.78068-0.80593-0.84350-0.89531-0.96052-1.0509-1.12830
34-0.90138-0.85228-0.80196-0.74932-0.69298-0.63316-0.57038-0.506920-0.446040...-0.95452-0.97322-0.98984-1.00520-1.01880-1.02960-1.03700-1.04110-1.0418-1.04030
413-1.24470-1.22000-1.16940-1.09130-0.98968-0.86828-0.73462-0.595370-0.457100...-0.59899-0.69078-0.78410-0.87322-0.95100-1.01550-1.07050-1.12200-1.1728-1.21670
# 创建名为 type 的新列,并将数据框 words 中第一列的数据复制到这个新列中
words['type']  = words.ix[:, 1]'''
/opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:2: DeprecationWarning: 
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexingSee the documentation here:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated
'''# 筛选出 words 数据框中 type 列的取值小于5的行,并将这些行存储在新的数据框 w 中
w = words[words['type'] < 5]#数据框的行列数
w.shape
# (454, 272)# 绘制数据框 w 中第一行从第二列开始的所有数据的图表
w.ix[0, 1:].plot()

# 绘制数据框 w 中第三行从第二列开始的所有数据的图表
w.ix[2, 1:].plot()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/56172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集师知识付费小程序:打造培训机构在线教育的金字招牌 集师知识付费系统 集师知识付费小程序 集师知识服务系统 集师线上培训系统 集师线上卖课小程序

在数字化浪潮的推动下&#xff0c;在线教育已成为教育领域的热门话题。而在众多在线教育平台中&#xff0c;集师知识付费小程序凭借其独特的定位和创新的模式&#xff0c;成功为培训机构打造了一张闪亮的在线教育金字招牌。 集师知识付费小程序&#xff0c;是一个集课程展示、…

哪款宠物空气净化器性价比高?希喂、米家和范罗士哪款更好?

这次我真的不是很想抱怨&#xff0c;是我男朋友真的很过分&#xff01;真的很过分&#xff0c;差点让我们两个分道扬镳。先听我说&#xff0c;这不是我和他都嫌家里太安静了吗&#xff0c;每天下班后两个人吃完饭就各玩各的手机&#xff0c;生活太无趣了&#xff0c;加上这几年…

软件功能测试重点和流程有哪些?专业软件测评服务公司推荐

软件功能测试就是对产品的各功能进行验证&#xff0c;根据功能测试用例&#xff0c;逐项测试&#xff0c;检查产品是否达到用户要求的功能。功能测试也叫黑盒测试或数据驱动测试&#xff0c;只需考虑需要测试的各个功能&#xff0c;不需要考虑整个软件的内部结构及代码.一般从软…

windows 安装 ElasticSearch

1、下载安装包 下载地址&#xff1a;https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.3-windows-x86_64.zip ElasticSearch 目录结构如下&#xff1a; 2、配置JDK环境 ES比较耗内存&#xff0c;建议虚拟机4G或以上内存&#xff0c;jvm1g以上的内存分…

告别信息过载!NotebookLM:你的AI学习与研究助手

在信息爆炸的时代&#xff0c;我们每天都面临着海量的信息&#xff0c;如何高效地处理和理解这些信息&#xff0c;成为了许多人面临的挑战。 Google 推出的 NotebookLM&#xff0c;或许能成为你的答案。这款结合了大语言模型 (LLM) 与用户笔记的 AI 笔记本&#xff0c;正在重新…

【网络安全】一篇文章带你了解CTF那些事儿

文章目录 一、什么是CTF&#xff1f;二、CTF需要学习那些知识&#xff1f;新书推荐适合新手自学的网络安全基础技能“蓝宝书”&#xff1a;《CTF那些事儿》内容简介读者对象专家推荐三、网络安全学习路线四、网络安全学习资料 一、什么是CTF&#xff1f; CTF&#xff08;Captu…

vue+element的confirm提示消息文字变色和换行

效果: 思路: 可以考虑采用模板字符串的思路实现 代码: this.confirm(您确定要<b style"Color: red">${text}</b>的数据项&#xff1f;<br/>单位名称: ${row.companyName} <br/>属性: ${row.attributeName}).then(() > {console.log(确定…

深入理解Java并发读写锁——ReentrantReadWriteLock

ReentrantReadWriteLock使用场景 ReentrantReadWriteLock 是 Java 的一种读写锁&#xff0c;它允许多个读线程同时访问&#xff0c;但只允许一个写线程访问&#xff08;会阻塞所有的读写线程&#xff09;。这种锁的设计可以提高性能&#xff0c;特别是在读操作的数量远远超过写…

预算不变,数据安全大升级!揭秘TRAID+的神奇之处

假期过后&#xff0c;公司弥漫着一股低沉的气息&#xff0c;公司的CTO&#xff0c;小威&#xff0c;正面对着一个令人头疼的问题——如何在不增加预算的情况下&#xff0c;提高公司的数据安全性。 如今各种勒索病毒层出不穷&#xff0c;或是因为硬盘的损坏或者员工的马虎使数据…

通信工程学习:什么是UART通用异步收发器

UART&#xff1a;通用异步收发器 UART&#xff0c;全称Universal Asynchronous Receiver/Transmitter&#xff0c;即通用异步收发传输器&#xff0c;是一种广泛应用于嵌入式领域的串行、异步、全双工通信协议。以下是关于UART的详细介绍&#xff1a; 一、定义与特点 定义&…

Docker安装ActiveMQ镜像以及通过Java生产消费activemq示例

拉取镜像 docker pull docker.io/webcenter/activemq 启动容器 docker run -d --name myactivemq -p 61616:61616 -p 8162:8161 docker.io/webcenter/activemq:latest 这样就代表启动成功了 浏览器访问 http://localhost:8162/ admin admin 开启验证 修改配置文件/opt/ac…

【工具推荐】Hikvision - 一款海康威视综合漏洞利用工具,适用于漏洞挖掘、SRC漏洞挖掘、护网红队、渗透测试,支持一键获取 shell。

0x00 工具介绍 Hikvision 是一款海康威视综合漏洞利用工具。 0x01 下载链接 Hikvision 下载链接: Hikvision下载 0x02 功能介绍 Hikvision 摄像头未授权访问漏洞Hikvision 远程代码执行漏洞Hikvision iVMS 综合安防系统任意文件上传漏洞Hikvision 综合安防管理平台 isecur…

三款GIS工具多角度对比:免费的倾斜摄影OSGB/3Dtiles编辑转换发布平台

GIS数据处理工具在现代技术与应用中扮演着至关重要的角色&#xff0c;它们不仅是连接原始地理信息与可分析、可视化数据的桥梁&#xff0c;更是推动地理信息系统&#xff08;GIS&#xff09;在各个行业领域深入发展与应用不可或缺的关键工具。选择一款合适的工具直接关系到数据…

CentOS 7 安装并部署 Mysql

安装 Mysql 下载并添加库&#xff08;自动安装&#xff09; sudo yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm安装 Mysql 包&#xff08;一路键入y即可&#xff09; yum -y install mysql mysql-server --nogpgcheck- -nogpgc…

SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(多数据源配置)

SpringBoot教程&#xff08;二十四&#xff09; | SpringBoot实现分布式定时任务之Quartz&#xff08;多数据源配置&#xff09; 前言多数据源配置引入aop依赖1. properties配置多数据源2. 创建数据源枚举类3. 线程参数配置类4. 数据源动态切换类5. 多数据源配置类HikariCP 版本…

如何用好 CloudFlare 的速率限制防御攻击

最近也不知道咋回事儿,群里好多站长都反映被CC 攻击了。有人说依旧是 PCDN 干的,但明月感觉不像,因为有几个站长被 CC 攻击都是各种动态请求(这里的动态请求指的是.php 文件的请求)。经常被攻击的站长们都知道,WordPress /Typecho 这类动态博客系统最怕的就是这种动态请求…

删除 Word 空白页的 3 种方法总结

在使用 Word 进行文档编辑的时候&#xff0c;空白页的出现常常会让用户感到困扰&#xff0c;Word 空白页的出现可能是由于分页、段落设置以及格式问题&#xff0c;空白页可能会出现在文档的开始、中间及结尾&#xff0c;如果需要打印文档还会影响打印效果&#xff0c;那么 Word…

Visual Studio--VS安装配置使用教程

Visual Studio Visual Studio 是一款功能强大的开发人员工具&#xff0c;可用于在一个位置完成整个开发周期。 它是一种全面的集成开发环境 (IDE)。对新手特别友好&#xff0c;使用方便&#xff0c;不需要复杂的去配置环境。用它学习很方便。 Studio安装教程 Visual Studio官…

基于Data+AI构建真正的流批一体!

基于DataAI构建真正的流批一体&#xff01; 前言流批一体的前世今生如何构建真正的流批一体架构数据架构统一数据处理引擎的选择数据治理与数据质量 流批一体的实践案例结语 前言 你是不是也有过这种感觉&#xff1f; 当你坐在电脑前&#xff0c;面对海量数据&#xff0c;心里…

第十四届单片机嵌入式蓝桥杯

一、CubeMx配置 &#xff08;1&#xff09;LED配置 &#xff08;1&#xff09;LED灯里面用到了SN74HC573ADWR锁存器&#xff0c;这个锁存器有一个LE引脚,这个是我们芯片的锁存引脚&#xff08;使能引脚&#xff09;&#xff0c;由PD2这个端口来控制的 &#xff08;2&#xff…