美文网首页
数据处理-scipy中值滤波、pandas重采样

数据处理-scipy中值滤波、pandas重采样

作者: 洗洗睡吧i | 来源:发表于2020-02-23 23:30 被阅读0次

    1. scipy中值滤波

    使用scipy中的signal.medfilt对数组进行中值滤波。

    方法: scipy.signal.medfilt

    • 滤波器的kernel_size必须是奇数
    • 输出数组的size与输入的数组一致
    import scipy.signal as signal
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    
    n = 51 
    y = np.sin(np.linspace(0, 10, n)) + np.random.rand(n)
    y_med = signal.medfilt(y, kernel_size=5)
    
    plt.figure()
    plt.plot(y, 'r--', label='y')
    plt.plot(y_med, 'b-.', label='y_med')
    plt.legend()
    plt.show()
    

    signal.medfilt还可以对矩阵(图像)进行滤波处理,以消除噪音。

    ref: https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.medfilt.html

    2. pandas重采样

    (1) pandas可对时间序列进行重采样

    对带有时间序列的DataFrame,pandas中内置了重采样的功能,可以灵活的自定义各种频率以及统计函数。

    n = 51
    index = pd.date_range('2019-01-01 00:00:00', periods=n, freq='S')
    y = np.sin(np.linspace(0, 10, n)) + np.random.rand(n)
    
    dt = pd.DataFrame({'value': y}, index=index)
    dt = dt.resample('5S').mean()
    print(dt.head())
    
    plt.figure()
    plt.plot(index, y, 'r--', label='y')
    plt.plot(dt.index, dt['value'], 'b-.', label='y_resample')
    plt.legend()
    plt.show()
    

    (2) 对非时间序列的重采样

    引入时间差序列: timedelta_range

    n = 51
    t = np.linspace(0, 10, n)
    x = np.sin(t) + np.random.rand(n)
    
    index = pd.timedelta_range(0, periods=n, freq='s')
    dt = pd.DataFrame({'key': np.arange(n), 'value': x}, index=index)
    dt = dt.resample('5s').mean()
    print(dt.head())
    
    plt.figure()
    plt.plot(np.arange(n), x, 'r--', label='x')
    plt.plot(dt['key'], dt['value'], 'b-.', label='x_resample')
    plt.legend()
    plt.show()
    

    ref:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.resample.html

    相关文章

      网友评论

          本文标题:数据处理-scipy中值滤波、pandas重采样

          本文链接:https://www.haomeiwen.com/subject/zbflqhtx.html