Ich arbeite mich, im Rahmen einer Datenanyalse, in pandas 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.
[Aufgewärmt] Python: pandas für Anwendungsdaten?
[Aufgewärmt] Python: pandas für Anwendungsdaten?
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 (backintime)
Teil des Upstream Betreuer Teams von Back In Time (backintime)
Re: Python: pandas für Anwendungsdaten?
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.
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.
Klar macht das auf den meisten Rechnern heute keinen Unterschied. Gering find ich den Unterschied aber nicht gerade.buhtz hat geschrieben:02.06.2021 17:22:07OK, 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.
Manchmal bekannt als Just (another) Terminal Hacker.
Re: [Erledigt] Python: pandas für Anwendungsdaten?
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.
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 (backintime)
Teil des Upstream Betreuer Teams von Back In Time (backintime)
Re: [Aufgewärmt] Python: pandas für Anwendungsdaten?
Man kann C/C++/Fortan recht einfach an Python anbinden. Früher schrieb man die Wrapper Funktionen in C selber, heute gibts dafür swig - 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.
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.
Re: [Aufgewärmt] Python: pandas für Anwendungsdaten?
Es sind überwiegend Strings, also numpy ist nicht die Wahl.reox hat geschrieben:06.12.2021 15:57:23Die 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.
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 (backintime)
Teil des Upstream Betreuer Teams von Back In Time (backintime)
Re: [Aufgewärmt] Python: pandas für Anwendungsdaten?
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 python3-joblib
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 python3-joblib
Re: [Aufgewärmt] Python: pandas für Anwendungsdaten?
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.reox hat geschrieben:06.12.2021 17:17:12Ansonsten kannst du immer probieren die Sachen zu parallelisiern, zB mit python3-joblib
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (backintime)
Teil des Upstream Betreuer Teams von Back In Time (backintime)
Re: [Aufgewärmt] Python: pandas für Anwendungsdaten?
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.