[PYTHON] Vorsichtsmaßnahmen bei Verwendung der for-Anweisung in Pandas

Hinweise zur Beschleunigung des Python-Codes mit Numba Es ist eine Fortsetzung oder eine Ergänzung.

pandas ist praktisch für die Verarbeitung von Zeitreihendaten, aber wenn Sie die for-Anweisung so verwenden, wie sie ist, ist sie extrem langsam.

import numpy as np
import pandas as pd
dataM1 = pd.read_csv('DAT_ASCII_EURUSD_M1_2015.csv', sep=';',
                     names=('Time','Open','High','Low','Close', ''),
                     index_col='Time', parse_dates=True)

def LWMA(s, ma_period):
    y = pd.Series(0.0, index=s.index)
    for i in range(len(y)):
        for j in range(ma_period):
            y[i] += s[i-j]*(ma_period-j)
        y[i] /= ma_period*(ma_period+1)/2
    return y

%time MA = LWMA(dataM1['Close'], 10)
Wall time: 3min 10s

Die Anzahl der Daten beträgt 370.000, bei einem gleitenden Durchschnitt von 10 Stichproben ist es jedoch schwierig, 3 Minuten zu dauern. Für längere Zeiträume kann es 10 Minuten oder länger dauern. (Core i7-6700 3,4 GHz)

In Vorheriger Artikel habe ich es durch ein Array ersetzt und versucht, es mit Numba zu beschleunigen, aber tatsächlich wird es nur durch die Verwendung eines Arrays schneller.

def LWMA1(s, ma_period):
    a = s.values
    y = np.zeros(len(a))
    for i in range(len(y)):
        for j in range(ma_period):
            y[i] += a[i-j]*(ma_period-j)
        y[i] /= ma_period*(ma_period+1)/2
    return pd.Series(y, index=s.index)

%timeit MA = LWMA1(dataM1['Close'], 10)
1 loop, best of 3: 1.92 s per loop

Auch ohne Numba ist es etwa 100-mal schneller als Pandas.

In diesem Zustand wird die Verwendung von Numba natürlich noch schneller.

from numba import jit
@jit
def LWMA2(s, ma_period):
    a = s.values
    y = np.zeros(len(a))
    for i in range(len(y)):
        for j in range(ma_period):
            y[i] += a[i-j]*(ma_period-j)
        y[i] /= ma_period*(ma_period+1)/2
    return pd.Series(y, index=s.index)

%timeit MA = LWMA2(dataM1['Close'], 10)
100 loops, best of 3: 5.31 ms per loop

Selbst wenn Sie die for-Anweisung in Pandas verwenden, ist es ratsam, dies in Fällen zu tun, in denen sie durch ein Array ersetzt werden kann (Index ist irrelevant). Es scheint, dass ein kleiner Trick nötig ist, um mit Pandas gut auszukommen.

Recommended Posts

Vorsichtsmaßnahmen bei Verwendung der for-Anweisung in Pandas
Vorsichtsmaßnahmen bei der Verwendung von Pit mit Python
Vorsichtsmaßnahmen bei der Verwendung von Codecs und Pandas
Vorsichtsmaßnahmen bei der Verwendung von Chainer
Vorsichtsmaßnahmen bei der Verwendung von tf.keras.layers.TimeDistributed für die benutzerdefinierte Ebene von tf.keras
Vorsichtsmaßnahmen beim Ändern der Unix-Zeit in Datetime-Typ in Pandas
Vorsichtsmaßnahmen bei der Verwendung der TextBlob-Merkmalsanalyse
Vorsichtsmaßnahmen bei Verwendung der Funktion urllib.parse.quote
[TouchDesigner] Tipps für die Anweisung von Python
Vorsichtsmaßnahmen bei der Verwendung von Phantomjs aus Python
Vorsichtsmaßnahmen bei Verwendung von sechs mit Python 2.5
Bei Verwendung regulärer Ausdrücke in Python
Dinge, auf die Sie achten müssen, wenn Sie Standardargumente in Python verwenden
Zeigen Sie die Beschriftung jedes Elements an, wenn Sie ein Streudiagramm in Pandas zeichnen
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
[Python, Multiprocessing] Verhalten für Ausnahmen bei Verwendung von Multiprocessing
Hinweise zur Verwendung von Python (Pydev) mit Eclipse
Ein nützlicher Hinweis, wenn Sie Python nach langer Zeit verwenden
Japanische Textvorverarbeitung ohne Aussage in Pandas
Funktionen, die in der for-Anweisung verwendet werden können
Tipps zur Verwendung von Realsense SR300 auf einem MacBook im Jahr 2020
Python-Pandas: Suchen Sie mit regulären Ausdrücken nach DataFrame
Vorsichtsmaßnahmen beim Umgang mit Kontrollstrukturen in Python 2.6
Vorsichtsmaßnahmen beim Hinzufügen von Elementen mit DateField zu einem vorhandenen Modell später in Django
Vorsichtsmaßnahmen bei der Installation von Paketen in der Conda-Umgebung
Dinge, die Sie bei der Verwendung von Python beachten sollten, wenn Sie MATLAB verwenden
Vorsichtsmaßnahmen bei Verwendung der Google Cloud-Bibliothek mit GAE / py
Tipps für eine gute Verwendung von Elastic Search
Vorsichtsmaßnahmen für cv2.cvtcolor
Fehler, der in OpenCV3 und seiner Lösung aufgetreten ist. Vorsichtsmaßnahmen bei Verwendung von OpenCV3 auf dem Mac
Verzeichnisstruktur für die testgetriebene Entwicklung mit pytest in python
Vorsichtsmaßnahmen bei Verwendung von sqlite3 von macOS Sierra (10.12) mit Multiprocessing
Grundeinstellungen bei Verwendung der foursquare-API mit Python
Vorsichtsmaßnahmen beim Umgang mit ROS MultiArray in Python
Zugriff mit dem Cache beim Lesen von_json mit Pandas
Beenden bei Verwendung von Python in Terminal (Mac)
Code-Änderungsort bei kostenloser Verwendung von Plotly
Eine Sammlung von Befehlszeilen, die virtuelle Umgebungen mit Anaconda verwenden
Zusammenfassung der Dinge, die bei der Verwendung von Pandas praktisch waren
Wenn Sie in der for-Anweisung plt.save möchten
[Memo] Textabgleich im Pandas-Datenrahmen mit Flashtext
[Einführung in Python] So schreiben Sie sich wiederholende Anweisungen mit for-Anweisungen
Python3> Slice-Kopie / Slice-Notation> wird für Anweisungen usw. verwendet.
Vorsichtsmaßnahmen bei der Berechnung mit Zeichenfolge für TmeStampType von PySpark
[Zur Aufnahme] Pandas Memorandum
Zusammenfassung bei Verwendung von Fabric
Lerne Pandas in 10 Minuten
Vorsichtsmaßnahmen beim Umgang mit Luigi
Kreuztabelle mit Pandas
UnicodeDecodeError in pandas read_csv
Vorsichtsmaßnahmen bei der Installation von fbprophet
Konvertieren Sie mit Python für .NET von Pandas DataFrame in System.Data.DataTable
Ein Hinweis beim Erstellen eines gerichteten Diagramms mit Graphviz in Python
Verhalten in jeder Sprache, wenn Collouts mit for wiederverwendet werden
Nützliche Tricks in Bezug auf Listen und Anweisungen in Python
Verwenden Sie "% tensorflow_version 2.x", wenn Sie TPU mit Tensorflow 2.1.0 in Colaboratory verwenden
Lösen Sie das japanische Problem, wenn Sie das CSV-Modul in Python verwenden.
Zeichnen Sie Zeitreihendaten in Python mit Pandas und Matplotlib
Probleme und Lösungen bei der Frage nach MySQL db in Python 3