Повторная выборка временных рядов / данных спектра для уменьшения размеров [Python: SciPy]

2019 год 3 месяц 26 день

Это метод, когда вы хотите проредить данные временного ряда / спектра в DataFrame в Python.

С «pandas.DataFrame.resample» вы должны установить время, такое как D (ежедневно) и W (еженедельно) с аргументом.Если вы хотите прореживать данные временных рядов или данные спектра, у которых нет столбца даты и времени, вы можете использовать следующий метод.

Что такое данные временного ряда / спектра?

Временные ряды / спектральные данные наблюдаются через равные промежутки времени вдоль определенной оси.Применяется ряд данных.Например, изменение цен на акции и спектры поглощения.

Пример данных временного ряда Пример спектральных данных
・ Переход температуры и условий осадков
・ Изменения условий движения
・ Ежедневные распродажи
・ Изменения цен на акции
・ Изменения цен на биткойны
・ Голосовые данные
-Спектр поглощения соединения (ИК, УФ)
・ Спектр от небесных тел

Хотя каждая классификация отличается, данные имеют следующие сходные характеристики.

  1. Точки, смежные с точкой измерения, принимают близкие значения
  2. Шум включен в долгосрочную перспективу (широкий диапазон)

参照: https://kotobank.jp/word/%E6%99%82%E7%B3%BB%E5%88%97%E3%83%87%E3%83%BC%E3%82%BF-1329677 https://datachemeng.com/preprocessspectratimeseriesdata/

Повторная выборка временных рядов / спектральных данных

При создании модели прогнозирования на основе временных рядов / спектральных данных, если используются данные во всех точках измерения, будет создано огромное количество функций.Поскольку это приводит к переобучению, уменьшение размерности за счет понижающей дискретизации эффективно для повышения производительности обобщения.

Что использовать: SciPy (scipy.signal)

Программное обеспечение с открытым исходным кодом для математики, естествознания и инженерииЭкосистема ПО (набор передовых научных компьютерных библиотек).

Он может выполнять более продвинутую числовую арифметическую обработку, чем NumPy, и может легко выполнять численное интегрирование, обработку сигналов, оптимизацию, статистику и т. Д. На основе физических констант, разреженных матриц и распределений вероятностей.

scipy.signal - это модуль, связанный с обработкой сигналов в scipy.

  • scipy.signal.decimate

import numpy as np from scipy import signal # Создать базовые 40-точечные данные сигнала x = np.linspace (0, 10, 40, endpoint = False) y = np.cos (-x ** 2/6) # Понижение дискретизации до 20 точек на основе данных x_down = np.linspace (0, 10, 20, endpoint = False) y_down = signal.decimate (y, 2) # Понижение дискретизации до 2/1 # Отобразить результат на графике% matplotlib inline plt.plot (x, y, '.-', label = 'data') plt.plot (x_down, y_down, 'rs-', label = 'down-sampled', alpha = 0.5) plt.legend () plt.show ( )
Понижение частоты дискретизации с помощью scipy.signal.decimate
Понижение частоты дискретизации с помощью scipy.signal.decimate

scipy.signal.decimate выполняет обработку сглаживания и субдискретизацию (обработка сглаживания - это обработка для устранения искажений при выборке из непрерывных данных через равные промежутки времени).Он передискретизируется в форме, аналогичной той, в которой точки данных уменьшены как есть.

Смотрите также:https://docs.scipy.org/doc/scipy-1.2.1/reference/generated/scipy.signal.decimate.html

  • scipy.signal.resample

# Создать 40 базовых данных осциллограммы x = np.linspace (0, 10, 40, endpoint = False) y = np.cos (-x ** 2/6) # 2.5 раза на основе данных Повышение дискретизации до 100 точек x_up = np .linspace (0, 10, 100, endpoint = False) y_up = signal.resample (y, 100) # Понижение частоты дискретизации до половины 20 точек на основе данных x_down = np.linspace (0, 10, 20, endpoint = False) y_down = signal.resample (y, 20) # Постройте результат на графике import matplotlib.pyplot as plt% matplotlib inline plt.plot (x, y, '.-', label = 'data') plt.plot (x_up, y_up , 'go-', label = 'up-sampled', alpha = 0.3) plt.legend () plt.show () plt.plot (x, y, '.-', label = 'data') plt.plot (x_down, y_down, 'rs-', label = 'down-sampled', alpha = 0.5) plt.legend () plt.show ()
Данные формы сигнала обрабатываются scipy.signal.resample
Данные формы сигнала обрабатываются scipy.signal.resample

Поскольку scipy.signal.resample передискретизирует с использованием преобразования Фурье, он основан на предположении, что сигнал является периодическим.Если периодичность не соблюдается, например, в конце приведенных выше данных, значение будет значительно отклоняться.

Кстати, scipy.signal.resample также может быть передискретизирован.
Синяя линия - исходная точка данных, зеленая - график после повышающей дискретизации, а красная - график после понижающей дискретизации.

 

конкурс голосового анализа kaggleТакже есть пример использования, так что он будет полезен.

Смотрите также:https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.signal.resample.html

Применить к DataFrame

Строки соответствуют каждой точке измерения, а столбцы - каждому кадру данных выборки.

import pandas as pd # Создание данных для хранения во фрейме данных y1 = np.cos (-x ** 2/6) * 1/2 y2 = np.cos (x) * 1/3 df1 = pd.DataFrame ( {{'y': y, 'y1': y1, 'y2': y2}) # Понижение частоты дискретизации df1_down = signal.decimate (df1, 2, axis = 0) df1_down = pd.DataFrame (df1_down, columns = ['y_down ',' y1_down ',' y2_down '], index = np.linspace (0, 10, 20, endpoint = False)) # Отображение данных с пониженной дискретизацией и печать графика (df1.head (10)) print (df1_down.head) ( 10)) df1.plot (kind = 'line', marker = '.') Df1_down.plot (kind = 'line', marker = '.')
df1.head (10) df1_down.head (10)
 df1.head (10) df1_down.head (10)
Точки данных до и после понижающей дискретизации
До понижающей дискретизации После понижающей дискретизации

Даже если он субдискретизируется с исходных 40 до 1 точек, что составляет 2/20, форма сигнала сохраняется с высокой точностью, и кажется, что есть небольшая потеря информации, даже если она используется в качестве значения функции.

Пример фрейма данных со строками для каждой выборки и столбцами для каждой точки измерения
Когда строка - это каждая проба, а столбец - каждая точка измерения

Если строка выше представляет собой каждую выборку, а столбец представляет собой фрейм данных каждой точки измерения (так называемые упорядоченные данные), аргументaxis=1Если да, то ничего страшного.