[Aufgewärmt] Python: pandas für Anwendungsdaten?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
buhtz
Beiträge: 1205
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

[Aufgewärmt] Python: pandas für Anwendungsdaten?

Beitrag von buhtz » 02.06.2021 17:22:07

Ich arbeite mich, im Rahmen einer Datenanyalse, in Debianpandas ein. Die DatenFrame's lassen sich ja auch in verschiedenen Format persistent auf der Platte speichern. Vom Laden/Speichern her ist feather wohl am schnellsten. Es geht aber nicht nur, um die Lade-Geschwindigkeit, sondern auch um das effiziente Handhaben, Manipulieren und Durchsuchen der Daten.

Nun stelle ich mir die Frage, ob Abseits von DataScience sich pandas nicht auch als "Daten-Format" für Anwendungen eigenet. D.h. wo man normalerweise Text-Dateien, JSON, pickle, SQLlite usw nutzen würde, kann man doch pandas nehmen. Man stelle sich z.B. eine E-Mail Anwendung vor, oder einen News-Aggregator (RSS/Atom).

Aus meiner bescheidenen Perspektive ist es eine gute Idee. Da andere das scheinbar aber bisher nicht umgesetzt haben, gehe ich davon aus, dass es klar Gründe gibt, die dagegen sprechen. Gibt es triftige Gründe, die dagegen sprechen?

OK, laut Prozessbeobachtung verbraucht ein import json 0,5 mehr MB und ein import pandas ca 44 MB.
IMHO würde sicher der (geringe) Mehraufwand an RAM besonders bei datenintensiven Anwendungen wie E-Mail und News trotzdem lohnen.
Zuletzt geändert von buhtz am 01.12.2021 13:48:44, insgesamt 2-mal geändert.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

JTH
Moderator
Beiträge: 3077
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Python: pandas für Anwendungsdaten?

Beitrag von JTH » 02.06.2021 18:04:48

Der von dir verlinkte Artikel ist über 6 Jahre alt, ich würd den nicht mehr unbedingt als Referenz nehmen.

Aus meiner eigenen (eher kleinen) Erfahrung mit pandas zielt die Bibliothek nicht so sehr auf Speicherung, sondern effiziente oder zumindest elegante Verarbeitung von tabellarischen Daten, die schon im Speicher sind, ab. Wenn ich mir die unterstützen I/O-Varianten angucke, sind das alles dritte Formate, die teilweise an sich schon mehr oder weniger auf eben tabellarische Daten spezialisiert sind.

Da pandas (mit numpy im Hintergrund?) denk ich ja eher auf Verarbeitung numerischer Daten optimiert und abzielt, gibts für die von dir erwähnten Anwendungen einfach naheliegendere Formate. Wenn z.B. textuelle Daten schon in einer SQL-Datenbank stecken, die ähnliche Filterungen u.a. wie pandas erlaubt, würde man durch letzteres nix dazugewinnen.

Ein DataFrame zu serialisieren geht natürlich immer, das macht das Speicherformat aber dann nicht unbedingt effizient oder universell austauschbar.

buhtz hat geschrieben: ↑ zum Beitrag ↑
02.06.2021 17:22:07
OK, laut Prozessbeobachtung verbraucht ein import json 0,5 mehr MB und ein import pandas ca 44 MB.
IMHO würde sicher der (geringe) Mehraufwand an RAM besonders bei datenintensiven Anwendungen wie E-Mail und News trotzdem lohnen.
Klar macht das auf den meisten Rechnern heute keinen Unterschied. Gering find ich den Unterschied aber nicht gerade.
Manchmal bekannt als Just (another) Terminal Hacker.

buhtz
Beiträge: 1205
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: [Erledigt] Python: pandas für Anwendungsdaten?

Beitrag von buhtz » 01.12.2021 13:47:11

Ich muss das nochmal aufwärmen. Soweit ich mir das bisher überlegt habe, ist nicht die persistente Speicherung von Daten das Attraktive an pandas, sondern die Verarbeitungsgeschwindigkeit, wenn es um Filtern usw. geht. Also Dinge, die man normalerweise in einer langsamen Schleifen machen würde, erledigt Pandas in einem Bruchteil der Zeit, mit Hilfe von Vektorisieren.

Nun habe ich mir die Frage gestellt, ob es andere und insbesondere leichtere Pakete gibt, mit denen ich ebenfalls solche vektorisierte Operationen auf Datenstrukturen (z.B. dictionaries, json, strings, ...) erledigen kann.

Oder wie wird so etwas implementiert?
C ist mir nicht fremd; ist nur 20 Jahre her.
Ich kann mir sowas nicht in Code vorstellen. Geht sowas in C, oder haben die Panda-Leute da Assembler geschrieben?

Ob es sich am Ende für meine Situation lohnt, eine separate lib in C zu schreiben, um diese mit Python dann zu nutzen, muss ich noch weiter durchdenken und probieren. Aber bisher habe ich noch keine reale Vorstellung davon, wie man sowas mit Python und C überhaupt tun würde.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

reox
Beiträge: 2515
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: [Aufgewärmt] Python: pandas für Anwendungsdaten?

Beitrag von reox » 06.12.2021 15:57:23

Man kann C/C++/Fortan recht einfach an Python anbinden. Früher schrieb man die Wrapper Funktionen in C selber, heute gibts dafür Debianswig - wobei ich gestehen muss, dass ich mich damit noch nicht allzusehr beschäftigt habe...

Die Frage ist immer: was sind das für Daten? Wenn es nur Zahlen sind, dann ist numpy sicherlich das Mittel der Wahl.
Ansonsten könntest du überlegen auch einfach eine Relationale Datenbank zu verwenden. Kommt halt darauf an wie viel Rechenzeit du in Indizierung etc stecken willst.

buhtz
Beiträge: 1205
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: [Aufgewärmt] Python: pandas für Anwendungsdaten?

Beitrag von buhtz » 06.12.2021 16:31:18

reox hat geschrieben: ↑ zum Beitrag ↑
06.12.2021 15:57:23
Die Frage ist immer: was sind das für Daten? Wenn es nur Zahlen sind, dann ist numpy sicherlich das Mittel der Wahl.
Ansonsten könntest du überlegen auch einfach eine Relationale Datenbank zu verwenden. Kommt halt darauf an wie viel Rechenzeit du in Indizierung etc stecken willst.
Es sind überwiegend Strings, also numpy ist nicht die Wahl.
Ein RDBMS ist wegen dem Ratenschwanz an Abhängigkeiten, sinkende Wartbarkeit und steigendes Fehlerpotential durch zusätzlichen (komplexeren) Code keine Option - auch mit Zwischenschichten wie sqlalchemy. Damit habe ich bereits gute Erfahrungen für geeignetere Szenarien gesammelt. Kosten-Nutzen sind hier nicht ausgewogen.

Deswegen denke ich ja über so exotische Wege wie Pandas oder selbstgeschriebene Vektorisierungssachen nach. Ich werde es wohl auf mich zukommen lassen müssen und sehen, ob der Performanceeinbruch den Aufwand (nach was auch immer) lohnt.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

reox
Beiträge: 2515
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: [Aufgewärmt] Python: pandas für Anwendungsdaten?

Beitrag von reox » 06.12.2021 17:17:12

Du kannst auch binärdaten in numpy verarbeiten - also solang deine strings alle gleich lang sind oder füllbytes OK sind...

Ich glaube aber auch, dass das sicherlich ein Problem sein könnte. Ich kenn mich nicht genau aus wie numpy intern die Daten verarbeitet aber bin mir sicher, dass es auch so schnell geht weil die Daten effizient im Speicher liegen.
Ansonsten kannst du immer probieren die Sachen zu parallelisiern, zB mit Debianpython3-joblib

buhtz
Beiträge: 1205
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: [Aufgewärmt] Python: pandas für Anwendungsdaten?

Beitrag von buhtz » 07.12.2021 07:47:14

reox hat geschrieben: ↑ zum Beitrag ↑
06.12.2021 17:17:12
Ansonsten kannst du immer probieren die Sachen zu parallelisiern, zB mit Debianpython3-joblib
Das muss ich mir mal genauer anschauen, was an diesem Drittpaket der Vorteil gegenüber der Python eigenen Pakete mutlithreading und multiprocessing ist. An die letzten beiden hatte ich aber auch schon gedacht, da ich beides (incl. asyncio) für in einem anderen Aufgabenkomplex bereits kombiniert einsetze.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

reox
Beiträge: 2515
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: [Aufgewärmt] Python: pandas für Anwendungsdaten?

Beitrag von reox » 07.12.2021 10:31:51

du kannst eh auch mutliprocessing oder ähnliche nehmen aber joblib hat auch gleich tools dabei es auf verteilten system laufen zu lassen. Ist nur eine möglichkeit von vielen.

Antworten