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.size
    n_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])          # 相位2
        restored_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,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值