Beispiel für das Aggregieren einer großen Menge von Zeitreihendaten mit Python in einer kleinen Speicherumgebung mit einer angemessenen Geschwindigkeit

Einführung

Es gab ein Problem beim Lesen der 30-Sekunden-Zyklusdaten, die in einem Jahr an mehreren Basen gesammelt wurden, und beim Berechnen des Gesamtwerts jedes Mal, und ich konnte es überhaupt nicht verarbeiten, wenn ich es mit der einfachen Methode tat, also werde ich den Inhalt notieren, den ich ein wenig entwickelt habe.

Datenformular

Datum, Uhrzeit und Wert werden für jede Basis im CSV-Format eingegeben.

Datum (und Uhrzeit Wert
2018-10-01 00:00:00 4
2018-10-01 00:00:30 1
2018-10-01 00:01:00 2
2018-10-01 00:01:30 6
2018-10-01 00:02:00 7
2018-10-01 00:02:30 7
2019-09-31 23:59:30 7

Diese Daten werden an mehr als 100 Standorten gesammelt. Außerdem war es nicht in Echtzeit, sondern der Inhalt sollte nach einer bestimmten Zeit aggregiert werden.

Nach einfacher Berechnung beträgt ein Standort 1.051.200, und 100 Standorte umfassen insgesamt 105.120.000 Daten.

...Milliarde(-_-;)

Das erste was ich getan habe

Lesen Sie alle Dateien auf einmal, gruppieren Sie sie nach Datum und Uhrzeit und erhalten Sie den Gesamtwert!

python


from glob import glob
import pandas as pd

files = glob("data/*.csv")

df = pd.DataFrame()

for file in files:
    df = pd.concat([df, pd.read_csv(file)])

df = df.groupby("Datum (und Uhrzeit").sum()

df.to_csv("Gesamtwert.csv")

... Die RAM-Nutzung nutzt ständig den Swap-Bereich und endet mit einem Fehler, wenn er nach einem halben Tag 80 GB überschreitet.

Ich habe versucht, die Anzahl der Dateien zu reduzieren und den Gesamtwert nach und nach zu berechnen, aber es scheint nicht zu funktionieren.

Das Letzte, was ich getan habe

Ich habe jedes Mal versucht, die Datei zu lesen und den Gesamtwert zu berechnen.

python


from glob import glob
import pandas as pd

files = glob("data/*.csv")

df = pd.DataFrame()

for file in files:
    df = pd.concat([df, pd.read_csv(file)])
    df = df.groupby("Datum (und Uhrzeit").sum().reset_index()

df.to_csv("Gesamtwert.csv")

Infolgedessen dauerte es nur wenige Minuten, ohne den Arbeitsspeicher zu überlasten.

Es mag selbstverständlich sein, und wenn ich es erst einmal verstanden habe, ist es nichts mehr zu tun, aber da ich ein wenig Zeit verbracht habe, dachte ich, es wäre gut, wenn auch nur eine Person mit den gleichen Schwierigkeiten reduziert werden könnte, also habe ich es aufgenommen.

Meine Arbeit beginnt übrigens hier. Datenanalyse, lasst uns unser Bestes geben ... (-_-;)

Recommended Posts

Beispiel für das Aggregieren einer großen Menge von Zeitreihendaten mit Python in einer kleinen Speicherumgebung mit einer angemessenen Geschwindigkeit
Wie erstelle ich eine große Menge an Testdaten in MySQL? ??
[TensorFlow 2.x-kompatible Version] So trainieren Sie eine große Datenmenge mit TFRecord & DataSet in TensorFlow (Keras)
So entwickeln Sie in einer virtuellen Python-Umgebung [Memo]
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
<Pandas> Umgang mit Zeitreihendaten in der Pivot-Tabelle
So senden Sie ein visualisiertes Bild der in Python erstellten Daten an Typetalk
Lesen von Zeitreihendaten in PyTorch
So richten Sie eine Python-Umgebung mit pyenv ein
So führen Sie einen Befehl mit einem Unterprozess in Python aus
So testen Sie eine Funktion, die die aktuelle Zeit enthält, mit Freezegun in Python
Vorhersage aus verschiedenen Daten in Python mit dem Zeitreihen-Vorhersage-Tool Facebook Prophet
So mischen Sie einen Teil der Python-Liste (at random.shuffle)
So erstellen Sie eine Instanz einer bestimmten Klasse aus dict mit __new__ () in Python
So berechnen Sie die Summe oder den Durchschnitt von Zeitreihen-CSV-Daten in einem Augenblick
So erhalten Sie eine Liste der integrierten Ausnahmen für Python
Erstellen einer Entwicklungsumgebung für die Python2.7-Serie mit Vagrant
Zeichnen Sie Zeitreihendaten in Python mit Pandas und Matplotlib
So extrahieren Sie Funktionen von Zeitreihendaten mit PySpark Basics
So bestimmen Sie die Existenz eines Selenelements in Python
Ich habe versucht, mit Python einen regulären Ausdruck für "Betrag" zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
So erstellen Sie eine Python-Umgebung mit Virtualenv unter Ubuntu 18.04 LTS
So aktualisieren Sie eine in Tableau gepackte Arbeitsmappen-Datenquelle mit Python
So generieren Sie eine neue Protokollgruppe in CloudWatch mit Python in Lambda
[Python] So fügen Sie eine beliebige Anzahl von Standardeingaben in die Liste ein
So erhalten Sie den Wert aus dem Parameterspeicher in Lambda (mit Python)
So installieren Sie das Python-Paket in einer lokalen Umgebung als allgemeiner Benutzer
Zeichnen von Daten einer Galaxie mit sichtbarem Licht mithilfe der OpenNGC-Datenbank in Python
[Mac] Erstellen Sie mit Docker eine Python 3.x-Umgebung mit der schnellsten Geschwindigkeit
Zeichnen Sie die CSV von Zeitreihendaten mit einem Unixtime-Wert in Python (matplotlib).
So formatieren Sie eine Liste von Wörterbüchern (oder Instanzen) in Python
Holen Sie sich zu jeder Tageszeit eine Datums- / Uhrzeitinstanz in Python
[Python] [Word] [python-docx] Versuchen Sie, mit python-docx eine Vorlage für einen Wortsatz in Python zu erstellen
So stoppen Sie das Programm bis zu einem bestimmten Datum und einer bestimmten Uhrzeit in Python
Wie bekomme ich Stacktrace in Python?
Umgang mit Zeitreihendaten (Implementierung)
Teil 1 Ich habe ein Beispiel für die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
Ich habe in Python ein Programm erstellt, das FX-CSV-Daten liest und eine große Anzahl von Diagrammbildern erstellt
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
Datenanalyse in Python Zusammenfassung der Quellen, die Anfänger zuerst betrachten sollten
Eine kleine Geschichte, die Tabellendaten im CSV-Format mit hoher Geschwindigkeit ausgibt
[Circuit x Python] So ermitteln Sie die Übertragungsfunktion eines Schaltkreises mit Lcapy
So erstellen Sie eine Umgebung für die Verwendung mehrerer Python-Versionen auf einem Mac
Ein Programm, das von Python zu einem bestimmten Zeitpunkt eine feste E-Mail-Menge sendet
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
So erstellen Sie große Dateien mit hoher Geschwindigkeit
So löschen Sie einen Taple in einer Liste (Python)
Einbetten von Variablen in Python-Strings
Zusammenfassung zum Importieren von Dateien in Python 3
Verwendung der Python-Bildbibliothek in der Python3-Serie
So implementieren Sie Shared Memory in Python (mmap.mmap)
Zusammenfassung der Verwendung von MNIST mit Python
Eine clevere Möglichkeit zur Zeitverarbeitung mit Python
So benachrichtigen Sie Discord-Kanäle in Python