Opnieuw bemonsteren van tijdreeksen / spectrumgegevens om dimensies te verkleinen [Python: SciPy]

2019 年 3 月 26 日

Dit is een methode wanneer u de tijdreeks- / spectrumgegevens in het DataFrame in Python wilt uitdunnen.

Met "pandas.DataFrame.resample" moet je de tijd instellen zoals D (dagelijks) en W (wekelijks) met het argument.Als u tijdreeksgegevens of spectrumgegevens wilt uitdunnen die geen datum- en tijdkolom hebben, kunt u de volgende methode gebruiken.

Wat zijn tijdreeksen / spectrumgegevens?

Tijdreeksen / spectrale gegevens worden met regelmatige tussenpozen langs een bepaalde as waargenomen.De gegevensreeks is van toepassing.Bijvoorbeeld veranderingen in aandelenkoersen en absorptiespectra.

Voorbeeld van tijdreeksgegevens Spectrale gegevensvoorbeeld
・ Overgang van temperatuur en neerslagcondities
・ Veranderingen in verkeersomstandigheden
· Dagelijkse verkoop
・ Veranderingen in aandelenkoersen
・ Veranderingen in Bitcoin-prijzen
・ Spraakgegevens
- Samengesteld absorptiespectrum (IR, UV)
・ Spectrum van hemellichamen

Hoewel elke classificatie anders is, hebben de gegevens de volgende vergelijkbare kenmerken.

  1. Punten grenzend aan een meetpunt nemen waarden van dichtbij aan
  2. Ruis wordt op lange termijn meegenomen (breed bereik)

参照: 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/

Herbemonstering van tijdreeksen / spectrale gegevens

Bij het maken van een voorspellingsmodel op basis van tijdreeksen / spectrumgegevens, als gegevens op alle meetpunten worden gebruikt, zal een groot aantal functies worden gecreëerd.Aangezien dit tot overfitting leidt, is dimensiereductie door downsampling effectief voor het verbeteren van de generalisatieprestaties.

Wat te gebruiken: SciPy (scipy.signal)

Open source software voor wiskunde, wetenschap en techniekWare ecosysteem (een assortiment van geavanceerde wetenschappelijke computerbibliotheken).

Het kan meer geavanceerde numerieke rekenkundige bewerkingen uitvoeren dan NumPy, en kan gemakkelijk numerieke integratie, signaalverwerking, optimalisatie, statistieken, enz. Uitvoeren op basis van fysieke constanten, schaarse matrices en kansverdelingen.

scipy.signal is een module met betrekking tot golfvormverwerking in scipy.

  • scipy.signaal.decimeren

import numpy als np van scipy import signal # Maak de onderliggende 40-punts golfvormgegevens x = np.linspace (0, 10, 40, endpoint = False) y = np.cos (-x ** 2/6) # Downsampling naar 20 punten gebaseerd op data x_down = np.linspace (0, 10, 20, endpoint = False) y_down = signal.decimate (y, 2) #Downsampling tot 2/1 #Plot het resultaat op een grafiek% matplotlib inline plt.plot (x, y, '.-', label = 'data') plt.plot (x_down, y_down, 'rs-', label = 'downsampled', alpha = 0.5) plt.legend () plt.show ( )
Downsampling met scipy.signal.decimate
Downsampling met scipy.signal.decimate

scipy.signal.decimate voert anti-aliasing-verwerking en downsamples uit (anti-aliasing-verwerking is verwerking om vervorming te elimineren bij het nemen van monsters uit continue gegevens met regelmatige tussenpozen).Het wordt opnieuw bemonsterd in een vorm die lijkt op de vorm waarin de gegevenspunten zijn gereduceerd zoals het is.

Zie ook:https://docs.scipy.org/doc/scipy-1.2.1/reference/generated/scipy.signal.decimate.html

  • scipy.signal.resample

# Maak 40 basisgolfvormgegevens x = np.linspace (0, 10, 40, eindpunt = False) y = np.cos (-x ** 2/6) # 2.5 keer op basis van de gegevens Upsampling naar 100 punten x_up = np .linspace (0, 10, 100, endpoint = False) y_up = signal.resample (y, 100) # Downsampling naar de helft van 20 punten op basis van data x_down = np.linspace (0, 10, 20, endpoint = False) y_down = signal.resample (y, 20) #Plot het resultaat op een grafiekimport matplotlib.pyplot als 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 = 'downsampled', alpha = 0.5) plt.legend () plt.show ()
Golfvormgegevens verwerkt door scipy.signal.resample
Golfvormgegevens verwerkt door scipy.signal.resample

Aangezien scipy.signal.resample resampling is met behulp van de Fourier-transformatie, is het gebaseerd op de aanname dat het signaal periodiek is.Als niet aan de periodiciteit wordt voldaan, zoals aan het einde van de bovenstaande gegevens, zal de waarde aanzienlijk afwijken.

Overigens kan scipy.signal.resample ook up-sampling zijn.
De blauwe lijn is het oorspronkelijke gegevenspunt, de groene is de plot na upsampling en de rode is de plot na downsampling.

 

kaggle voice analyse concurrentieEr is ook een gebruiksvoorbeeld in, dus het zal nuttig zijn.

Zie ook:https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.signal.resample.html

Toepassen op DataFrame

Rijen zijn voor elk meetpunt en kolommen zijn voor elk voorbeeldgegevensframe.

importeer panda's als pd # Creëer gegevens om op te slaan in het dataframe 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, kolommen = ['y_down ',' y1_down ',' y2_down '], index = np.linspace (0, 10, 20, endpoint = False)) # Toon gedownsamplede data & plot print (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)
Gegevenspunten voor en na downsampling
Voor het downsamplen Na het downsamplen

Zelfs als het wordt gedownsampled van de oorspronkelijke 40 punten naar 1 punten, wat 2/20 is, wordt de golfvorm met hoge nauwkeurigheid gehandhaafd, en het lijkt erop dat er weinig informatie verloren gaat, zelfs als deze wordt gebruikt als een feature-hoeveelheid.

Een voorbeeld van een dataframe met rijen voor elk monster en kolommen voor elk meetpunt
Wanneer de rij elk monster is en de kolom elk meetpunt is

Als de bovenstaande rij elk monster is en de kolom een ​​dataframe is van elk meetpunt (zogenaamde geordende gegevens), is het argumentaxis=1Als dat zo is, is het oké.