[PYTHON] Merkmalsmenge, die aus Zeitreihendaten extrahiert werden kann

Bei der Analyse von Zeitreihendaten ist es manchmal erforderlich, eine Teilzeitreihe zu extrahieren und Merkmale zu extrahieren. Die folgenden Funktionen können extrahiert werden.

from scipy import fftpack, signal
import scipy
import numpy as np
import matplotlib.pyplot as plt


def pentropy(y, fs):
    f, Pxx = signal.periodogram(y, fs)
    pk = Pxx / np.mean(Pxx)
    S = scipy.stats.entropy(pk)
    return S


def generate_features(y, x, fs=1, order=5):
    """
    Parameters
    ----------
    y : np.ndarray
Wellendaten
        
    x : np.ndarray
Zeit etc.
    
    fs : int
Abtastfrequenz
    
    order : int
Spitzenerkennungsintervall

    Returns
    ----------
    np.ndarray
Merkmalsvektor
    """
        
    # norm
    L1 = np.linalg.norm(y, ord=1)
    L2 = np.linalg.norm(y, ord=2)
    
    # mean
    mean = np.mean(y)
    
    # Standard deviation
    std = np.std(y)
    
    # skewness
    skew = scipy.stats.skew(y)
    
    # kurtosis
    kurtosis = scipy.stats.kurtosis(y)
    
    # mad
    mad = np.linalg.norm(y - mean, ord=1)
    
    # percentile
    percentil_calc = np.percentile(y, [0, 1, 25, 50, 75, 99, 100])
    
    # relative_percentile
    relative_percentile = percentil_calc - mean
    
    # value range
    max_range = percentil_calc[-1] - percentil_calc[0]
    
    # asymmetry
    v_max = relative_percentile[-1]
    v_min = relative_percentile[0]
    asymmetry = v_max + v_min

    #Index des Spitzenwerts abrufen
    maxid = signal.argrelmax(y, order=order)  #Maximalwert
    minid = signal.argrelmin(y, order=order)  #Mindestwert
    
    # max height of peaks
    max_height = np.max(y[maxid])
    
    # min height of peaks
    min_height = np.min(y[minid])
    
    # peak height diff
    peak_width = max_height - min_height
    
    # mean value of peak's width
    x_p = np.append(x[maxid], x[minid])
    mean_width_all = np.mean(x_p)
    
    # number of peaks
    num_peak = len(x_p)
    
    # max, min and their diff, mean of peak's width
    diff1 = np.diff(x_p)
    width_max = np.max(diff1)
    width_min = np.min(diff1)
    width_diff = width_max - width_min
    width_mean = np.mean(diff1)
    width_median = np.median(diff1)
    
    # spectral entropy
    se = pentropy(y, fs)

    # merge to features (15features)
    features = np.concatenate([np.asarray(
        [L1, L2, mean, std, skew, kurtosis, mad, max_range,
         asymmetry, max_height, min_height, peak_width,
         mean_width_all, num_peak, width_max, width_min, width_diff,
         width_mean, width_median, se]
    ), relative_percentile])

    return features


x = np.linspace(0, 10, 100)
yorg = np.sin(x)
y = yorg + np.random.randn(100)*0.5

features = generate_features(y, x, order=5)

Recommended Posts

Merkmalsmenge, die aus Zeitreihendaten extrahiert werden kann
Bibliothek tsfresh, die Features automatisch aus Zeitreihendaten extrahiert
Holen Sie sich mit Python Zeitreihendaten von k-db.com
Extrahieren Sie Perioden, die einem bestimmten Muster entsprechen, aus den qualitativen Daten der Pandas-Zeitreihen
[Python] Zeichnen Sie Zeitreihendaten
Python-Programm, das die Zeitnutzung aus icalendar-Daten aggregiert
Installieren Sie Mecab und CaboCha auf ubuntu16.04LTS, damit es aus der Python3-Serie verwendet werden kann
Konvertieren Sie aus SpriteUV2 exportierte Netzdaten in ein Format, das von Spine importiert werden kann
So extrahieren Sie Funktionen von Zeitreihendaten mit PySpark Basics
Kann ich Datenwissenschaftler werden?
Python: Zeitreihenanalyse: Vorverarbeitung von Zeitreihendaten
[numpy] Erstellen Sie eine sich bewegende Fenstermatrix aus mehrdimensionalen Zeitreihendaten
Über Zeitreihendaten und Übertraining
Bestätigung, dass rkhunter installiert werden kann
Differenzierung von Zeitreihendaten (diskret)
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
Einfaches Auffüllen von Daten, die in der Verarbeitung natürlicher Sprache verwendet werden können
Über "spleeter", der Gesang und Musikinstrumente von Musikdaten trennen kann
Ich habe einen einfachen Timer erstellt, der vom Terminal aus gestartet werden kann
ConSinGAN: Ich habe versucht, GAN zu verwenden, das aus einem Bild generiert werden kann
Vorhersage von Zeitreihendaten durch Simplex-Projektion
Vorhersage von Zeitreihendaten mit einem neuronalen Netzwerk
Erkennung von Zeitreihendatenanomalien für Anfänger
Umgang mit Zeitreihendaten (Implementierung)
OpenFOAM-Zeitreihendaten lesen und Daten einstellen
Zusammenfassung der Scikit-Learn-Datenquellen, die beim Schreiben von Analyseartikeln verwendet werden können
Formatieren Sie DataFrame-Daten mit Pytorch in ein Formular, das mit NN trainiert werden kann
Linux-Befehl (Basic Edition), der ab heute verwendet werden kann, wenn Sie wissen
Dateitypen, die mit Go verwendet werden können
Funktionen, die in der for-Anweisung verwendet werden können
Erstellen von Sphinx, das mit Markdown geschrieben werden kann
Zusammenfassung der Kaggle-Kernel-Methode [Tabelle Zeitreihendaten]
Erfassung von Zeitreihendaten (täglich) von Aktienkursen
Glättung von Zeitreihen und Wellenformdaten 3 Methoden (Glättung)
Listen Sie Pakete auf, die mit pip aktualisiert werden können
Zeigen Sie Details zu Zeitreihendaten mit Remotte an
Lesen von Zeitreihendaten in PyTorch
Übersicht und nützliche Funktionen von Scikit-Learn, die auch für Deep Learning verwendet werden können
Konvertieren Sie Bilder aus dem FlyCapture SDK in ein Formular, das mit openCV verwendet werden kann
Zusammenfassung der statistischen Datenanalysemethoden mit Python, die im Geschäftsleben verwendet werden können
"Abrufen von Zeitreihendaten von k-db.com mit Python" Memo zur Erstellung der Programmumgebung
Ein Mechanismus zum Aufrufen von Ruby-Methoden aus Python, der in 200 Zeilen ausgeführt werden kann
Vorhersage aus verschiedenen Daten in Python mit dem Zeitreihen-Vorhersage-Tool Facebook Prophet