[Konzept-Frage] Größere Datenmenge in Diagramm auswerten

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
Benutzeravatar
Dennis89
User
Beiträge: 1516
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo zusammen,

ich habe eine grundsätzliche Frage/Anliegen.
Auf längere Sicht gesehen benötigen wir hier ein Programm, das Daten aus einer CSV-Datei in einem Diagramm darstellt. Soweit ist das erst mal kein Problem mit `matplotlib` und meinen Python-Kenntnissen. Die Datei enthält Daten von mehreren Sensoren (Druck, Temperatur, Volumenstrom), es sollten mehrere Werte in dem Diagramm dargestellt werden und wenn nötig mit entsprechender Y-Achse. Der Zeitbereich bleibt ja gleich, da zu einem Zeitpunkt alle Sensorwerte geschrieben werden. Auch das habe ich mit `matplotlib` hinbekommen. Auch das Zoomen "in" das Diagramm geht gut.
Jetzt kommen wir endlich zum "aber". Die größte Datei, die ich eingelesen habe, hatte ~190MB und das war schon zäh, wenn ich dann noch mehrere Daten in einem Diagramm anzeigen wollte, musste man schon etwas warten. An der Stelle kann man den Fehler sicherlich auch noch bei mir suchen und das Ganze so programmieren, das es schneller geht. Es ist nur so, dass die Datei auf jeden Fall wesentlich größer wird und das Programm sollte flüssig laufen.

Sagen wir mal es geht um eine Datenmenge von 10 GB. Bin ich hier mit Python und `matplotlib` noch richtig aufgehoben? Es ist jetzt kein muss, dass ich das umsetzen kann. Erst mal geht es mir darum, wenn ihr das beruflich als Auftrag machen müsstet, wie würdet ihr vorgehen? Bzw. was würdet ihr an Programmiersprache und Bibliotheken nutzen? Ob das in einem Browser oder als normale GUI-Anwendung läuft ist egal, je nach dem was für den Fall "besser" geeignet ist.

Ich muss mich auch mal noch über fertige Lösungen schlau machen, aber wie immer bin ich schon aus persönlicher Interesse daran interessiert, wie man sowas richtig und robust umsetzt, daher meine Frage an euch.


Vielen Dank und Grüße
Dennis

P.S. Es soll nicht Thema sein, wie ich meinen Code verbessere. Wenn ihr sagt, zu 100% ist hier Python die aller erste Wahl, dann wird es ziemlich sicher in naher Zukunft ein Thema geben, in dem ich euch die Probleme mit meinem Code vorstelle.
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
sparrow
User
Beiträge: 4525
Registriert: Freitag 17. April 2009, 10:28

Mein erster Impuls bei der Datenmenge ist eher, ob da noch eine .CSV-Datei die richtige Wahl ist.
Es gibt Datenbanken, die sich auf so etwas spezialisiert haben. Und wenn die Datenbank die Aggregation vornimmt, wäre das Nadelöhr schon einmal weg.
Zuletzt geändert von sparrow am Freitag 11. Oktober 2024, 13:10, insgesamt 1-mal geändert.
Benutzeravatar
Dennis89
User
Beiträge: 1516
Registriert: Freitag 11. Dezember 2020, 15:13

Danke für die Antwort.
Als Info, die ich vergessen habe, aktuell schreibt uns eine SPS die Daten auf eine SD-Karte und da habe ich bis jetzt das CSV-Format gewählt. Vorhin habe ich ein Dokument von Siemens gefunden, dass die Daten wohl auch in eine SQL-Datenbank geschrieben werden können. Für die Details zur Umsetzung bin ich aber noch nicht gekommen. Die Datenbank müsste dann halt, falls es zu einem produktiven Einsatz kommt, von der SPS auf einen PC geclont werden, damit dort die Auswertung stattfinden kann. Viele Kunden erlauben nicht, dass irgendwelche Geräte Verbindung zum Internet hat.

Das mit der Speicherung sind gerade alles noch Versuche, davon ist nichts im produktiven Einsatz. Wegen Personalmangel versuche ich mich immer mal wieder etwas da einzuarbeiten und schauen was es für Möglichkeiten gibt.


Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Sirius3
User
Beiträge: 18250
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie immer gilt, bei Performance-Problemen: zuerst Messen. Also wo geht wirklich die Zeit verloren? Eine 190MB-csv-Datei ist mit pandas in Bruchteilen einer Sekunde gelesen.
Benutzeravatar
grubenfox
User
Beiträge: 601
Registriert: Freitag 2. Dezember 2022, 15:49

Dennis89 hat geschrieben: Freitag 11. Oktober 2024, 12:12 Wenn ihr sagt, zu 100% ist hier Python die aller erste Wahl
Dazu sage ich jetzt nichts , ... aber nur mal aus Neugier (und weil ich nicht weiß wie kompatibel das ist) würde mich mal interessieren was passiert wenn man zum ausführen des Python-programmes nicht das übliche CPython (das wurde doch genommen, oder?) nutzt,, sondern es von PyPy (https://pypy.org/) ausführen lässt.

Ich habe bisher PyPy nur einmal mit einem kleinem Programm, welches in ein paar Schleifen für sich in rechnet, ausprobiert und war doch etwas überrascht.

Ansonsten wie schon Sirus3 hier drüber schrieb: Messen, Messen, Messen... (ich würde da auch mal mit einer anderen zweite SD-Karte messen und eben auch auf einem 'richtigen' PC. SD-Karten traue ich da so manches zu (meistens nicht positives) und wenn die Karte schon eine längere Zeit in der SPS steckte und dauerhaft immer mit den aktuellen Daten beschrieben wurde, dann ist sie vielleicht schon etwas ausgeleiert..
nezzcarth
User
Beiträge: 1749
Registriert: Samstag 16. April 2011, 12:47

Dennis89 hat geschrieben: Freitag 11. Oktober 2024, 12:12 Sagen wir mal es geht um eine Datenmenge von 10 GB. Bin ich hier mit Python und `matplotlib` noch richtig aufgehoben? Es ist jetzt kein muss, dass ich das umsetzen kann. Erst mal geht es mir darum, wenn ihr das beruflich als Auftrag machen müsstet, wie würdet ihr vorgehen?
Auch wenn ich Python sehr mag und nicht behaupten möchte, dass es mit Python nicht geht, würde ich solche Aufgaben erst einmal mit Gnuplot angehen. Ist natürlich auch Geschmackssache, aber das ist m.M.m. das klassische Standardwerkzeug für das Erzeugen von Diagrammen und macht auch bei großen Datenmengen keine Probleme, vorausgesetzt natürlich die Hardware spielt mit. Allerdings: 10 GB an Messdaten dürften in den allermeisten Fällen so immens viele Messpunkte sein, dass eine 1:1 Darstellung der kompletten Daten praktisch eh wenig sinnvoll ist, egal, selbst wenn die Software das mitmacht. Bei solchen Datenmengen würde man daher filtern/splitten/aggregieren/gruppieren/usw. Das kann man dann auch gerne in Python machen; Sprachmittel wie Generatoren erlauben, so etwas elegant und RAM-freundlich umzusetzen. (Wobei ich persönlich für so etwas auch gerne zu awk greife).
Benutzeravatar
Dennis89
User
Beiträge: 1516
Registriert: Freitag 11. Dezember 2020, 15:13

Danke für eure weiteren Antworten.

@Sirius3 Messen würde oder werde ich machen, wenn ich mich dazu entscheide meinen aktuellen Python-Versuch in ein fertiges Programm umzusetzen. Gerade geht es mir darum, das ich nicht durch Unwissenheit einen falschen Weg gehe um später zu merken, das ich nicht richtig vorbereitet war. Deswegen speziell die Frage wie ihr vorgehen würdet, bzw. was ihr nutzen würdet. Wenn ich dann trotz aller Warnungen einen falschen Weg gehe, dann bin "gescheitert wegen Dummheit" und nicht "gescheitert wegen zu faul zum vorbereiten".

@grubenfox Ja das wurde mit CPython ausgeführt, ich habe noch nie etwas anderes genutzt. Die Daten werden auf einer SD-Karte gespeichert, aber ich kopiere die Datei lokal auf den PC und von dort aus lese ich die dann erst. Da das unsere ersten Versuche in die Richtung sind, ist die Karte auch noch relativ neu.

@nezzcarth Irgendwann war ich schon mal auf der Webseite, zumindest kommt sie mir bekannt vor. Genutzt habe ich das aber nie, schaue ich mir auf jeden Fall an.
Es muss natürlich nicht sein, dass man die gesamte Aufnahmezeit auf einmal sieht. Zumindest nach Tagen sollte man die Daten zusammen fassen und dann mit der Option in gewünschte Zeitbereiche zu zoomen um die detaillierter zu sehen. Ist das mit `awk` einfach ein persönlicher Grund? So lese ich es zu mindest.


Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
nezzcarth
User
Beiträge: 1749
Registriert: Samstag 16. April 2011, 12:47

Dennis89 hat geschrieben: Freitag 11. Oktober 2024, 17:20 Ist das mit `awk` einfach ein persönlicher Grund? So lese ich es zu mindest.
Na ja, das ist halt unter anderem genau dafür gedacht, Text-Datenströme anhand von Mustern zu verarbeiten, in dem man für Muster Aktionen definiert. Also zum Beispiel Messwerte rausfiltern, die in einem bestimmten Wertebereich und Zeitrahmen liegen etc. Wenn man das ein bisschen kennt, lassen sich damit auf der Shell in kurzer Zeit Aufgaben lösen, für die man sonst in Python vielleicht deutlich länger brauchen würde. Dafür ist die Python-Lösung mit Generatoren usw. im Zweifelsfall natürlich robuster. Es kann schon oft ein sehr gutes Werkzeug für solche Aufgaben sein (insb., wenn man es schon kennt und mit anderen gängigen UNIX-Tools verbindet), aber nicht das einzige; wenn man solche Workflows mag, kann es sich anbieten, es ist also "persönlich" in dem Sinne.
Benutzeravatar
Dennis89
User
Beiträge: 1516
Registriert: Freitag 11. Dezember 2020, 15:13

Okay danke für die Erklärung, das habe ich soweit verstanden.


Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Antworten