Ricampionamento di serie temporali / dati dello spettro per ridurre le dimensioni [Python: SciPy]
Questo è un metodo quando si desidera ridurre i dati delle serie temporali / dello spettro nel DataFrame in Python.
Con "pandas.DataFrame.resample", devi impostare l'ora come D (giornaliero) e W (settimanale) con l'argomento.Se si desidera ridurre i dati delle serie temporali o i dati dello spettro che non hanno una colonna di data e ora, è possibile utilizzare il metodo seguente.
Cosa sono i dati delle serie temporali / dello spettro?
I dati di serie temporali / spettrali vengono osservati a intervalli regolari lungo un certo asse.Si applica la serie di dati.Ad esempio, variazioni dei prezzi delle azioni e spettri di assorbimento.
Esempio di dati di serie temporali | Esempio di dati spettrali |
・ Transizione delle condizioni di temperatura e precipitazione ・ Cambiamenti nelle condizioni del traffico ・ Vendite giornaliere ・ Variazioni dei prezzi delle azioni ・ Cambiamenti nei prezzi dei Bitcoin |
・ Dati vocali -Spettro di assorbimento composto (IR, UV) ・ Spettro dei corpi celesti |
Sebbene ogni classificazione sia diversa, i dati hanno le seguenti caratteristiche simili.
- I punti adiacenti a un punto di misurazione assumono valori vicini
- Il rumore è incluso a lungo termine (ampia gamma)
参照: 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/
Ricampionamento di serie temporali / dati spettrali
Quando si crea un modello di previsione basato su serie temporali / dati spettrali, se vengono utilizzati dati in tutti i punti di misurazione, verrà creato un numero enorme di caratteristiche.Poiché questo porta all'overfitting, la riduzione delle dimensioni mediante il downsampling è efficace per migliorare le prestazioni di generalizzazione.
Cosa usare: SciPy (scipy.signal)
Software open source per matematica, scienza e ingegneriaEcosistema Ware (un assortimento di librerie di calcolo scientifico avanzato).
Può eseguire un'elaborazione aritmetica numerica più avanzata di NumPy e può eseguire facilmente l'integrazione numerica, l'elaborazione del segnale, l'ottimizzazione, le statistiche, ecc. Da costanti fisiche, matrici sparse e distribuzioni di probabilità.
scipy.signal è un modulo relativo all'elaborazione della forma d'onda in scipy.
-
segnale.scipy.decimare
import numpy as np from scipy import signal # Crea i dati sottostanti della forma d'onda a 40 punti x = np.linspace (0, 10, 40, endpoint = False) y = np.cos (-x ** 2/6) # Downsampling a 20 punti in base ai dati x_down = np.linspace (0, 10, 20, endpoint = False) y_down = signal.decimate (y, 2) #Downsampling a 2/1 #Plot il risultato su un grafico% 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 esegue l'elaborazione anti-aliasing e downsamples (l'elaborazione anti-aliasing è l'elaborazione per eliminare la distorsione durante il campionamento da dati continui a intervalli regolari).Viene ricampionato in una forma simile a quella con i punti dati ridotti così com'è.
Vedi anche:https://docs.scipy.org/doc/scipy-1.2.1/reference/generated/scipy.signal.decimate.html
-
scipy.signal.resample
# Crea 40 dati di forma d'onda di base x = np.linspace (0, 10, 40, endpoint = False) y = np.cos (-x ** 2/6) # 2.5 volte in base ai dati Upsampling a 100 punti x_up = np .linspace (0, 10, 100, endpoint = False) y_up = signal.resample (y, 100) # Downsampling a metà 20 punti in base ai dati x_down = np.linspace (0, 10, 20, endpoint = False) y_down = signal.resample (y, 20) #Porta il risultato su un grafico import matplotlib.pyplot come 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 ()
Poiché scipy.signal.resample è un ricampionamento che utilizza la trasformata di Fourier, si basa sul presupposto che il segnale sia periodico.Se la periodicità non è soddisfatta, come alla fine dei dati di cui sopra, il valore si discosterà in modo significativo.
A proposito, scipy.signal.resample può anche essere un up-sampling.
La linea blu è il punto dati originale, il verde è il grafico dopo l'upsampling e il rosso è il grafico dopo il downsampling.
concorso di analisi vocale kaggleC'è anche un esempio di utilizzo in, quindi sarà utile.
Vedi anche:https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.signal.resample.html
Applica a DataFrame
Le righe sono per ogni punto di misurazione e le colonne per ogni frame di dati campione.
import pandas as pd # Crea i dati da memorizzare nel data frame y1 = np.cos (-x ** 2/6) * 1/2 y2 = np.cos (x) * 1/3 df1 = pd.DataFrame ( {{'y': y, 'y1': y1, 'y2': y2}) # Downsampling df1_down = signal.decimate (df1, 2, axis = 0) df1_down = pd.DataFrame (df1_down, colonne = ['y_down ',' y1_down ',' y2_down '], index = np.linspace (0, 10, 20, endpoint = False)) # Visualizza dati sottocampionati e stampa grafico (df1.head (10)) print (df1_down.head) ( 10)) df1.plot (kind = 'line', marker = '.') Df1_down.plot (kind = 'line', marker = '.')
Anche se viene sottocampionato dai 40 punti originali a 1 punti, che è 2/20, la forma d'onda viene mantenuta con elevata precisione e sembra che ci sia poca perdita di informazioni anche se viene utilizzata come quantità di caratteristiche.
Se la riga sopra è ogni campione e la colonna è un frame di dati di ogni punto di misurazione (i cosiddetti dati ordinati), l'argomentoaxis=1
Se è così, va bene.
discussione
Elenco dei commenti
Non ci sono ancora commenti