Transkript: PP06 - Pandas

· Zurück zur Episode

Vollständiges Transkript der Episode. Zeitstempel beziehen sich auf die Audiowiedergabe.

Dominik

Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python Podcast in der mittlerweile sechsten Episode.

Dominik

Heute geht es um Pandas.

Dominik

Ja, was machen wir eigentlich?

Dominik

Wir sind wie fast immer in Jochens Wintergarten.

Dominik

Ich bin der Dominik, dabei ist wie immer der Jochen und mein unser Gast, der Simon.

Jochen

Ja, hallo Simon.

Jochen

Genau, vielleicht kannst du dich einfach mal kurz vorstellen, dann genau, bevor wir über das Thema reden.

Simon

Klar.

Simon

Ja, ich bin Simon.

Simon

Ich bin von Haus aus Biologe, immer mit Interesse für Informatik und Spieleentwicklung gesegnet gewesen.

Simon

Und habe das dann irgendwie auch zu meinem Beruf gemacht.

Simon

Also ich habe nach meinem Biostudium ein bisschen geforscht in der Bioinformatik.

Simon

Da ging es dann viel um Datenanalyse von DNA-Sequenzen und so Dingen.

Dominik

Game of Life.

Simon

Game of Life, ja, quasi.

Simon

Nur in echt echt.

Simon

Und zusammen mit dem Wissen, was ich daraus getragen habe und meinem Interesse an Informatik und Spieleentwicklung mache ich heute als selbstständiger IT-Trainer Trainings für Game Engines und Trainings für Softwareentwicklung.

Simon

Und parallel noch ein paar Softwareprojekte.

Dominik

Das Gaming haben wir jetzt schon ein bisschen unterhalten, das machen wir auch nach der Folge ein bisschen intensiver.

Dominik

Aber heute soll es ja um Pandas gehen.

Jochen

Genau, heute.

Dominik

Deswegen, ja, super, dass du da auch ganz viel mit deinen zu tun hattest in deinem Fach, in deiner Wissenschaft.

Dominik

Bevor wir aber jetzt auf das Pandas-Thema eingehen, würde ich gerne noch so ein bisschen wieder Formalkrams abarbeiten.

Dominik

Wenn ihr Fragen, Anmerkungen habt, Lob, Kommentare, Hass, dann schreibt uns doch an hallo.pytes-podcast.de.

Dominik

Ihr findet natürlich die Links und alle zulessen Informationen wie in den Shownotes.

Dominik

Es gab noch ein bisschen User-Feedback und zwar sollten wir irgendwann mal eine Folge machen über Do's und Don'ts im Programmieren.

Dominik

Also seid doch bitte so nett und schickt uns einfach per E-Mail eure Do's und eure Don'ts.

Dominik

Das wäre super, dann schneiden wir das ein bisschen zusammen und fragen euch in einer der nächsten Folgen bestimmt irgendwann mal danach.

Dominik

Ja.

Jochen

Doch, es gab auch noch ein anderes eben zu der Datenbankfolge, dass sie gar nicht so schlimm gewesen wäre mit der Länge.

Jochen

Und das fand ich auch ganz gut.

Jochen

Das ist übrigens vielleicht ganz interessant.

Jochen

Also wenn man sich anguckt, welche Folgen komplett runtergeladen wurden, dann hat die beste Quote tatsächlich die Datenbankfolge zurzeit.

Jochen

Was ich ein bisschen überraschend finde.

Jochen

Ich hätte jetzt auch erwartet, dass es eher ein bisschen runter geht, aber.

Dominik

Vielleicht müssen wir noch mehr so Buzzword-Bingo-Sachen machen und dann ganz viele tolle Klickteilen bekommen.

Dominik

Nein, der macht das natürlich für alle unsere Hörer, vor allen Dingen für die, die sich dafür wirklich interessieren.

Dominik

Und natürlich auch für die Leute, die was lernen wollen und für alle Leute, die einfach so reinhören oder denen langweilig ist.

Dominik

Oder ihr wisst ja, ne?

Dominik

Morgens, abends, nachts, beim Aufstehen im Flugzeug, könnt ihr immer hören.

Dominik

Ja, bevor wir in das Thema gehen, jetzt weiterhin.

Dominik

Noch ein paar News aus der Szene.

Dominik

Und zwar gab es so ein bisschen was Neues, glaube ich.

Dominik

Python 3.8, zweiter Alpha.

Ja.

Dominik

Ja, da gab es so ein paar coole neue Sachen mit.

Dominik

Shared Memory for Multiprocessing.

Dominik

Jochen, was ist das denn?

Jochen

Ja, das ist eine gute Frage.

Jochen

Wann habe ich denn das da reingeschrieben?

Jochen

Oh, ja, das ist auch schon ein bisschen her, kann ich gar nicht.

Jochen

Ach doch, ja, alles klar.

Jochen

Das ist ja immer so.

Jochen

Das ist das war ja immer so ein Problem.

Jochen

Also man muss ja, wenn man jetzt über mehrere Prozessoren Berechnungen verteilen will, in Python das auf mehreren Prozessen machen, weil man ja irgendwie so ein Global Interpreter Log hat, das halt verhindert, dass man das innerhalb von einem Prozess irgendwie mehrere Prozessoren benutzen kann.

Jochen

Und ja, früher hat man halt dann immer so das, oder hat man jetzt immer noch in der stabilen Version, aber vielleicht hat man das mit drei Achter nicht mehr so.

Jochen

Das Problem, dass man, wenn man jetzt eine Funktion aufrufen möchte, und sag mal so, man startet halt ein Pool von fünf Prozessen oder sowas oder zehn und eben so viele, üblicherweise wie man Prozessoren hat und ruft jetzt eine Funktion auf jedem Prozessor sozusagen auf.

Jochen

Also man hat jetzt eine Liste von Dingen, die man irgendwie abarbeiten möchte, man hat eine Funktion, die das dann halt tut, dann sagt man, okay, ich starte mit diesem Job irgendwie diese Funktion und das geht dann halt irgendwie auf jeden Prozess, der halt in diesem Pool ist, wird dann halt das irgendwie gestartet.

Dominik

Also wie man im Supermarkt ganz viele verschiedene Kassen aufmacht und machen ganz ein paar Kassen auf einmal auf.

Ja, ja, ja.

Jochen

Das Problem ist jetzt, dass man, wenn man da irgendwie auch Daten hat, auf denen da gearbeitet wird, dann muss man die Daten irgendwie zu diesen Prozessen bringen.

Jochen

Das ist jetzt ein anderer Prozess.

Jochen

Das heißt, man kann nicht einfach das in, also im Code ist es schon so, dass man einfach einen Funktionsaufruf macht.

Jochen

Aber was dann im Hintergrund passieren muss, ist ja irgendwie, dass die Daten serialisiert werden, dann müssen sie irgendwie durch die Gegend geschoben werden und dann auf der anderen Seite wieder deserialisiert werden.

Dominik

In so kleine Häppchen und dass alle die ganze große Bestellung an verschiedenen Kasten abgearbeitet wird, um danach wieder in der richtigen Reihenfolge im Einkaufsgraub zu landen.

Dominik

So ungefähr.

Jochen

Ich weiß nicht, ob die Analogie da an der Stelle so gut passt.

Jochen

Ich weiß auch nicht genau, ja, man muss es, ja.

Jochen

Man kann sich vielleicht vorstellen, dass man, wenn man jetzt einen riesen Einkaufswagen voll Zeug hat und möchte jetzt das an fünf Kassen aber bezahlen, dann muss man halt auch fünf Einkaufswagen haben, indem man das jetzt aufteilt und mit jedem Einkaufswagen einzeln zu einer Kasse.

Dominik

Und muss die irgendwer umpacken.

Jochen

Dann muss man die umpacken, genau.

Jochen

Und das ist halt alles halbwegs aufwendig.

Jochen

Und kann halt auch zu Problemen führen, wenn die Daten sehr groß werden zum Beispiel, dann kann es sein, dass irgendwelche Dinge dazwischen halt aussteigen und das ist alles nicht so schön.

Jochen

Und es ist halt unter Umständen auch etwas, was Dinge langsam macht.

Jochen

Und jetzt geht es aber transparent mit Chat-Memory sozusagen.

Jochen

Das heißt, man hat halt die Daten, genau, das ist ja auch so ein Problem.

Jochen

Wenn man jetzt Daten seralisiert und deserialisieren muss, dann kopiert man sie damit natürlich auch.

Jochen

Das heißt, wenn man große Daten hat, die jetzt vielleicht insgesamt nur einmal in den Hauptspeicher passen, aber nicht zweimal.

Jochen

Wenn man sie kopiert, dann hat man sie halt zweimal drin und dann hat man sie wenig Hauptspeicher, ist ja auch blöd.

Jochen

Und was halt schon immer viel cooler war, ist, wenn man halt einfach Shared Memory reservieren kann und sagt dann den einzelnen Prozessen, gibt denen nur einen Pointer auf diese Shared Memory und sagt so, da sind deine Datenstrukturen drin.

Dominik

Also das heißt, jemand nimmt sich einfach so einen Unterkorb aus dem Einkaufswagen raus, der schon fertig ist und der Einkaufskorb, der fährt dann automatisch auf das richtige Förderband.

Jochen

Ja, nee, aber das ist, ja, mal überlegen, ob man diese Analogie da noch irgendwie hat.

Dominik

Shared Memory, ein geteilter Einkaufswagen, fährt mir jetzt auch tatsächlich so.

Simon

Es wäre der eine Einkaufswagen, der an allen fünf Kassen steht.

Simon

Jede Kasse greift nur auf einen Teil von dem Korb selber zu.

Dominik

Stimmt, wir haben eine Ruhre von Kassen.

Dominik

Die Kasse ist oben, unten, rechts und links, aber man kann einfach eingreifen.

Das ist schön, ja.

Jochen

Genau, so könnte man sich das vorstellen.

Jochen

Und das heißt, man hat halt, selbst wenn man, wenn man jetzt Daten hat, die so gerade in den Hauptsprecher vielleicht passen, dann kann man die trotzdem auf mehreren Prozessen verarbeiten und das macht natürlich Multiprocessing auf Python deutlich attraktiver und das ist irgendwie eine ziemlich coole Geschichte, wenn die jetzt in 3 abkommt.

Dominik

Da wird Python ja schneller.

Jochen

Ja.

Jochen

Also, oder es wird einfacher damit, also man kann ja auch, das konnte man auch sowieso schon immer machen.

Jochen

Man konnte ja auch einfach Chatmemerie reservieren, da Dinge reinpacken.

Jochen

Also da gibt es übrigens auch ein schönes Modul in der Standardbibliothek, das heißt Struct.

Jochen

Genau.

Jochen

Damit kann man zum Beispiel Daten halt so binär irgendwie in den Hauptspeicher schreiben.

Jochen

Und das zum Beispiel so tun, dass das halt C-Structs sind.

Jochen

Und dann kann man das halt, also das ist halt so etwas, so haben wir das früher halt gemacht, wenn wir Daten so groß waren, dass man da nicht einfach irgendwas mit tun konnte.

Jochen

Das heißt, man hat halt irgendwie einen Chat-Memory-Bereich, in den schreibt man halt irgendwie mit per Struct irgendwie sozusagen C-Struct-Daten irgendwie rein und hat halt halt Prozesse, die wiederum einen Pointer auf diese Chat-Memory kriegen und die dann halt wieder ein C-Modul haben, das dann halt irgendwas mit den Daten macht und so.

Jochen

Und dann geht das auch schon, aber es ist halt viel Handarbeit und jetzt kriegt man das quasi so geschenkt und das passiert alles automatisch und das ist halt schon sehr, sehr nett.

Dominik

Ich hört ja auch gerade diese Hintergrundmusik, das ist so ein bisschen wie in Battlestar Galactica, ne?

Dominik

Diese.

Dominik

Guck mal, kleine Oblinie.

Dominik

Ja, die nächsten News aus der Szene, doppelte Keys, gab es einen Post von Guido irgendwo, der hat irgendwas geschert?

Jochen

Es gibt ein neues Python-Enhancement Proposal, das eine ganz interessante Geschichte vorschlägt.

Jochen

Und zwar geht es darum, dass man halt für Dicts vielleicht auch die Plus und Minus als Operatoren haben möchte, sodass man halt sagen kann, irgendwie Dikt A plus Dikt B.

Jochen

Und dann werden sozusagen die Keys hinzugefügt oder halt wird das eine, werden halt die Keys, die in einem einen Ding drin sind, entfernt und man das halt abzieht.

Jochen

Und das ist natürlich auch eine ganz, also es ist eigentlich relativ naheliegend.

Jochen

Wundert mich, dass da bisher noch niemand drauf gekommen ist, dass man das irgendwie mal machen könnte, aber das ist auf jeden Fall eine ganz interessante Idee und Guido hat da einen Artikel zugeschrieben.

Dominik

Ja, genau, irgendwie, der hat zweimal den Key irgendwie draus zugewiesen und dann quasi ein Dictionary mit zwei identischen Keys erzeugt, wo dann nur einer von überlebt hat.

Jochen

Äh, ja.

Dominik

Irgendwie so, also wenn man halt, ich glaube, welches welcher Post war das?

Dominik

Wo er A einmal die Nullen, A einmal die Eins zugewiesen hat und dann war eins übrig, weil das die letzte Zuweisung war.

Dominik

Wenn ich das richtig verstanden habe.

Jochen

Genau, das war das Verhalten, was mich irgendwie gewundert hat, aber das ist, das ist, das ist generell so, das war schon immer so, offenbar.

Jochen

Wenn man halt, äh, also insofern ist es halt kompatibel mit diesem Verhalten, dass wenn man jetzt irgendwie ein Key mehrfach an einem Dikt hat, dass dann halt immer das Letzte genommen wird.

Jochen

Und das war mir auch gar nicht klar, dass das so ist, aber.

Dominik

Also kein Duplicate-Value oder Key Pair

Jochen

oder sowas.

Jochen

Nein, nein, es wird einfach das Letzte genommen.

Jochen

Und da hat er halt dazu, oder Frau Menning zu geschrieben, dass ja, er hat damals lange darüber nachgedacht, dass er, weil irgendjemand die Frage gestellt hat, ob das Absicht wäre oder nicht.

Jochen

Er meinte so, ich habe damals lange darüber nachgedacht und es ist Absicht.

Dominik

Ich erinnere mich an ein Programm, wo ich das dachte, wo ich irgendwie komischen Fehler hatte und das, glaube ich, genau daran gelegen hat, weil ja irgendwelche Duplikate dann zwar drin waren, ich habe es aber nicht gemerkt habe, erst irgendwann später, als mir um die oben flog.

Jochen

Ja, aber Guido hatte auch noch einen Blogpost dazu geschrieben, wo er überlegt hat, ob das mit diesen Operatoren halt eine gute Idee ist oder nicht.

Dieses Code-Active State.

Dominik

Heißen Ideas.

Jochen

Ja, in seinem Blog war das Ding drin.

Jochen

Und ja, da macht er tatsächlich den Punkt, dass das halt schon eine gute Idee ist und hat er so das als Beispiel quasi, wenn man jetzt mathematische, also arithmetische Geschichten halt nicht als Operatoren hätte, sondern wenn man da Funktionen mit Funktionen ausschreiben würde, dann wird es halt sehr viel unklarer, was eigentlich gemeint ist, jedenfalls, wenn das irgendwie komplizierter wird, weil man dann halt immer erst die Operatoren, äh, immer erst die Funktion mit den Klammern auflösen muss, bevor man sieht, was passiert.

Jochen

Und während man quasi, wenn man das als Operatoren hinschreibt, hat man so eine Art visuelles Pattern-Matching direkt schon, das einem sagt, was da, was da passiert.

Jochen

Und daher sind für so arithmetische Geschichten, um zu sehen, was da passiert, ist es halt viel sinnvoller, das mit Operatoren schreibweise hinzuschreiben als mit Funktionen, was man ja auch tun könnte.

Jochen

Und für Dicks ist es halt die Frage, ob das Sinn macht.

Jochen

Aber also immer dann, wenn einem das dabei beim Verständnis hilft, wenn man das anders hinschreiben kann, dann kann es natürlich schon gut sein, dass das irgendwie sinnvoll ist.

Jochen

Und ja, das ist auf jeden Fall, glaube ich, hier ein starkes Argument dafür.

Jochen

Und mal sehen.

Jochen

Ich bin mir nicht sicher, ob wir das in Python 3.8 dann schon direkt sehen werden, aber es wäre auf jeden Fall irgendwie eine interessante Idee.

Jochen

Und ja, ich bin mal gespannt, wie das sich so weiterentwickelt.

Dominik

Okay, okay.

Dominik

Ja, noch eine kleine News hatten wir, glaube ich, und das war der Django-Chat-Podcast.

Jochen

Genau.

Jochen

Ja, es kommen ab und zu neue Podcasts dazu und jetzt fand ich besonders interessant eben auch Django, einen Podcast, der sich nur Django widmet, da einer der beiden ist irgendwie einer der beiden Django-Fellows, die halt quasi sich, also dafür auch bezahlt werden, da tatsächlich an Django zu arbeiten und so die ganzen Sachen zu machen, die halt normalerweise niemand tut, wenn er nicht dafür bezahlt wird, halt irgendwie sich um Issue-Tracker kümmern und Releases machen und so.

Jochen

Ja, und das war schon die ersten beiden Episoden sind erschienen.

Jochen

Die erste war irgendwie relativ interessant.

Jochen

Ich fand, es war auch so, dass da irgendwie eine ganze Menge Überschneidung war zu dem, was wir in unserer Djungo-Folge irgendwie erzählt haben, so von dem Rundtenor.

Dominik

Ich hatte gerade, ich habe ihn auch gehört, ich bin begeistert.

Ja.

Gefällt mir sehr gut.

Jochen

Also es ist wirklich toll.

Jochen

Jetzt kam noch eine zweite Folge, es war so eine kurze Folge dazu.

Fünf Minuten.

Dominik

Könnt ihr mal sehen, wie man den Kürze die Wörter finden kann.

Ja.

Jochen

Weil sie halt irgendwie mal ein Release von Django kaputt gemacht haben.

Jochen

Ja.

Jochen

Und ich bin mal gespannt, wie sich das so weiterentwickelt.

Jochen

Das ist auf jeden Fall eine sehr empfehlenswerte Geschichte.

Jochen

Dann gab es noch einen anderen Powted Pattern out louder, aber da muss man nochmal gucken.

Jochen

Also den fand ich jetzt gar nicht so interessant am Anfang.

Dominik

Ja, falls ihr noch einen Podcast kennt, den wir noch nicht kennen, dann schickt ihn uns.

Dominik

Wir sind neugericht natürlich.

Dominik

Ja, ich würde sagen, am Ende stellen wir nochmal so ein bisschen die Picks der Woche, der Woche, des Monats vor.

Dominik

Aber wir sind, glaube ich, mittlerweile so weit, dass wir so ein bisschen jetzt was.

Ja, wir können eigentlich mal erzählen.

Dominik

Ja, Pandas, was ist das denn überhaupt?

Dominik

Also beim Eishockey, ich bin ja Eishockeyfinder, haben die Schiedsrichter jetzt so ein Panda-Symbol gehabt auf den Trikots, weil die eine Kooperation mit dem WWF haben und dann waren sie am Ende ein bisschen enttäuscht, dass der WWF da so eine Spendenaffäre hatte.

Dominik

Aber ja, manchmal so, aber Pandas und Spendaffäre hat wahrscheinlich jetzt bei uns so viel nicht miteinander zu tun.

Jochen

Nee, aber der Name bietet natürlich schon so ein bisschen Verwechslungspotenzial.

Jochen

Wir hatten da auch genau, als wir drüber gesprochen haben, ob wir nicht irgendwie mal zusammen irgendwie eine Podcast-Episode machen wollen, hatte Simon auch irgendwie zuerst was anderes verstanden, glaube ich.

Simon

Ja, genau, also es gibt nicht nur Python Pandas das Data Framework, sondern auch Python Pandas 3D, die Game Engine.

Simon

Und weil ich ja irgendwie beide Themen abdecke, war das, was ich gerade zuletzt gemacht hatte, das erste, was im Kopf wieder aufgetaucht ist und das war die Game Engine und dann haben wir, weiß ich nicht, fünf Minuten aneinander vorbeigeredet.

Dominik

Wir können doch jetzt gerne noch mal fünf Minuten über die Game Engine, Pandas 3D reden, wie du magst.

Ist sie in Python?

Simon

Also ich glaube, Game-Entwicklung in Python ist vielleicht eine Folge, zu der ich nochmal wiederkommen sollte.

Simon

Oh ja.

Simon

Einfach weil das sehr, sehr umfangreich ist.

Simon

Also gibt es im Wesentlichen irgendwie Pygame und Pandas als die beiden großen etablierten.

Simon

Dann gibt es noch so ein paar kleinere.

Dominik

Und damit kann man wirklich auch Spiele machen, die auch gehen und die auch aussehen oder sowas?

Dominik

Oder braucht man dafür noch Cute oder sowas?

Simon

Ich sage es mal vorsichtig, ja, damit kann man Spiele machen.

Simon

Mit Pi Game 2D-Spiele, mit Pandas 3D sogar 3D-Spiele.

Simon

Was man damit sehr gut machen kann, ist zu lernen, wie so eine Game-Engine wirklich funktioniert.

Simon

Ich glaube aber nicht, dass man AAA-Titel darin machen möchte, weil es dann doch irgendwann umständlicher ist als eine von den großen 3D-Game-Engines, die so am Markt sind, die vielleicht auch ein bisschen mehr klickbar sind.

Dominik

Das war Unreal.

Unreal Unit U3D und

Simon

Cry Engine.

Dominik

Ja, okay.

Dominik

Craig ist ja nicht frei, it7 oder so acht.

Weiß ich gerade gar nicht.

Dominik

Ich glaube, wir sind gerade völlig off-Topic.

Wir wollten über Pandas.

Simon

Genau, also Pandas 3D ist die Game Engine, darüber sprechen wir heute dann nicht.

Simon

Und Pandas ist im Wesentlichen eins der Python-Tools, an denen man nicht vorbeikommt, wenn man Datenanalyse betreibt.

Dominik

Okay, wir sind wieder mal bei der Datenanalyse.

Dominik

Datenbanken hatten wir übrigens in der letzten Folge, für alle, die sich das noch nicht angehört haben.

Dominik

Eine ziemliche Mammutfolge mit wie lange drei Stunden haben wir gebraucht?

Jochen

Ja, ein bisschen mehr.

Jochen

Aber genau, um eine Dreh.

Dominik

Wenn ihr mal wieder die Wohnung richtig putzen wollt, dann was euch die Ohren.

Simon

Ja, an der Stelle würde ich ganz gerne noch kurz meinen Hintergrund in der Datenanalyse erwähnen, damit man so ein bisschen einordnen kann, aus welcher Richtung meine Kommentare kommen.

Simon

Als Biologe war damals Perl das große, die große Programmiersprache, um alles zu lösen.

Simon

Und erst zum Ende meiner Forschungszeit hat sich dann irgendwann Python durchgesetzt.

Simon

Das heißt, ich habe noch sehr viel in Pearl gemacht.

Simon

Und was man in Pearl gar nicht gut konnte, zumindest ich konnte das nicht, ist, Daten nachher analysieren und visualisieren.

Simon

Aber die Aufbereitung war da sehr gut.

Simon

Das heißt, für die Analyse und die Visualisierung sind wir dann immer zu R rübergewechselt.

Simon

R ist auch eine Programmiersprache, ist eine eher mathematische Annotation zur Datenanalyse.

Simon

Und wenn ich so die Branche, sage ich mal, richtig überblicke, dann wird am meisten R und Python benutzt und vielleicht dann noch MATLAB als dritte Alternative, wenn Leute heute Datenanalyse machen.

Dominik

Was meinst du denn mit Datenbereinigung?

Simon

In der Biologie ist das so, dass die Daten immer unheimlich fuzzy sind.

Simon

Also man hat nie ganz konkrete Messwerte, sondern man hat immer super viele Abweichungen, mal Fehlmessungen, mal Werte, die man gar nicht erheben konnte.

Simon

Du musst dich

Dominik

dann entscheiden, ob du eine Rundung anwendest oder nicht.

Simon

Vieles davon führt dann erstmal dazu, dass die Daten nicht mehr so strukturiert sind, wie man das eigentlich dachte in einer Tabelle.

Simon

Das kommt auf die Messinstrumente im Wesentlichen an.

Simon

Das heißt, die erste Aufbereitung ist erstmal die Daten in ein maschinenlesbares Format zu bringen.

Simon

Und da ist es von unfassbarem Wert, wenn man programmieren kann.

Dominik

Das muss man jede einzelne Teile oder Zelle durchgehen und die manuell korrigieren.

Simon

Genau, also ich habe auch tatsächlich schon Kollegen damals gesehen, die von Programmierung gar keine Ahnung hatten, die dann angefangen haben, in Excel sich das händisch zusammenzustellen.

Simon

Und dann haben wir uns kurz zusammengesetzt, ein Makro geschrieben und dann ging das irgendwie doch schneller.

Simon

Und fehlerfreier an der Stelle auch.

Simon

So, und dieser erste Schritt, überhaupt die Daten erstmal maschinenlesbar zu kriegen, der ist im Wesentlichen unabhängig von der Analyse.

Dominik

Aber nochmal für unsere Ganzanfänger nochmal bitte erkennen, was denn überhaupt maschinenlesbar bedeutet.

Simon

Ich habe da mal irgendwann ein Beispiel vorbereitet für Mediziner, die von Excel zu R wechseln wollten.

Simon

Und das Beispiel war eine Tabelle, eine Excel-Tabelle aus meinem Laboralltag, wo dann in einem Tabellenblatt an mehreren verschiedenen Stellen so kleine Subtabellen zu sehen waren, wo die Messdaten drin standen.

Simon

Da gab es dann quasi einmal Experiment A war so ein 5x4 Raster, Experiment B war so ein 5x4 Raster, was irgendwie rechts daneben stand.

Simon

Und dann gab es noch ein Experiment C, was dann mittig darunter stand, auch 5x4 Raster.

Simon

Das ist für einen Menschen super lesbar, weil man kann sofort die Blöcke identifizieren und sich die Messdaten angucken.

Simon

Für eine Maschine ist das aber nicht mehr strukturiert lesbar.

Simon

Weil die Koordinaten nicht klar sind, genau.

Simon

Und was häufig passiert, ist, wenn Menschen Tabellen ausfüllen, um die visuell ansprechend zu machen, verletzen die ein wichtiges Kriterium, das in jeder Zeile oder Spalte, je nachdem, woran man sich orientieren möchte, nur ein Datensatz wirklich drinsteht.

Dominik

Oder stehen sollte, weil da unterschiedliche Informationen, die nicht voneinander getrennt sind.

Dominik

Dann stehen zum Beispiel sowas wie eine Spalte, wo zwei verschiedene Datensachen auf einmal drinstehen.

Dominik

Genau.

Dominik

Einmal Temperatur in Celsius, einmal in Fahrenheit oder sowas.

Dominik

Oder ist das legitim?

Simon

Das könnte ja noch zusammenpassen, aber einmal die Temperaturen in Celsius und Fahrenheit für das eine Experiment und dann das Ganze nochmal für das andere Experiment, irgendwo weiter hinten in der gleichen Zeile, aber nicht klar strukturiert abgrenzbar.

Jochen

Ja, also das halt quasi bei Datenbanken wäre das halt die erste Normalform, dass halt man in einer Spalte immer nur einen Wert stehen hat und nicht irgendwie mehrere zum Beispiel, was halt dann manche Leute dafür hat.

Dominik

Also Fahrenheit und Zeltus wäre okay, wenn man die

Jochen

Wenn die Spalte, wenn das.

Dominik

Wenn die Mission enthalten wäre in der Zelle, ob es Celtus-Erfahrenheit wäre.

Dominik

Weil das wäre sonst problematisch, wenn man irgendwie.

Simon

Ja, also wir kommen da sicherlich gleich nochmal zu, so gut das geht, in einem Podcast Tabellen zu beschreiben.

Dominik

Ja, wir versuchen, dass das so organisieren.

Simon

Grundsätzlich, wenn man so eine Tabelle hat, wo man Zeilenbeschriftungen hat und Spaltenbeschriftungen hat und die ganze Tabelle ist rechteckig, dann kriegt man die auch sinnvoll maschinenlesbar ausgewertet.

Dominik

Die Probleme höre ich, fangen dann an, wenn man keine zweidimensionalen Tabellen mehr hat, keine, die man mal eben so auf seinem Whiteboard malen kann.

Dominik

Welche, die man bauen müsste oder wo man irgendwelche Dimensionen verbraucht, die wir uns jetzt nicht so räumlich vorstehen können.

Genau.

Simon

Oder wo tatsächlich Lücken drin sind und die Muster für Menschen zwar noch erkennbar bleiben, aber für eine Maschine die Koordinaten dann zum Beispiel nicht mehr zusammenpassen.

Okay.

Dominik

Ja, okay, das haben wir so ungefähr verstanden, was so Maschinenlesbar dann bedeutet für die einzelnen Daten.

Dominik

Und wo kommt jetzt Pandas dann ins Spiel, wenn du jetzt diese.

Simon

Ich hab mal, ich glaube, das war Python User Group-Treffen oder irgendwie sowas in der Richtung, habe ich mal eine Folie gesehen in einem Vortrag.

Simon

Ich habe die leider nie wiedergefunden.

Simon

Da fand ich das ganz schön beschrieben.

Simon

Da waren irgendwie so Python-Module konzentrisch angeordnet und im innersten Kreis war NumPy oder NumPy SciPy und Matplotlib für die Darstellung von Vektoren NumPy und für einfache statistische Analysen SciPy und für Visualisierung Matplotlib.

Simon

Und dann war der Kreis 1 weiter draußen so ein bisschen das, was darauf aufbaut.

Simon

Das war dann Pandas, das war Stats Models, war das, glaube ich.

Jochen

Achso, für Zeitreihen und

so weiter.

Simon

Genau.

Simon

Und C-Born.

Simon

Und das waren dann die Pendants.

Simon

Also CBON auch wieder zur Visualisierung und Stats Models im Prinzip zur statistischen Auswertung und Pandas eben zum Data Handling, aber jenseits von einfachen Vektoren.

Dominik

Aha, okay.

Simon

So, und da kommen wir im Prinzip auch schon wieder in den Bereich, wo man immer den Vergleich zwischen Excel normalerweise führt, wenn man das mit Leuten bespricht, mit denen man zusammenarbeitet.

Simon

Weil Excel kennt irgendwie jeder.

Simon

Also Tabellenkalkulation ist jedem sofort ein Begriff und alle wissen auch sofort, okay, es gibt Zeilen und Spalten.

Simon

Das ist so das Bärminimum, was man wissen muss, um mit Pandas was anfangen zu können.

Dominik

Das hat man wahrscheinlich in der Schule schon mal aufgemacht oder so oder aufmachen müssen.

Simon

In der Regel schon, ja.

Simon

Genau, das heißt, bei Pandas sind wir jetzt in dem Bereich von Data Handling.

Simon

Also wie kann ich meine Daten laden, verarbeiten, zur Verfügung stellen für Analysen.

Dominik

Und wie macht Pandas das?

Gibt es

das Problem?

Jochen

Also ich würde sagen, dass auch das, denke ich, Hauptfeature von Pandas ist, dass man damit die Daten überhaupt erstmal irgendwie in so ein reinbekommt irgendwie.

Jochen

Also Wesmerkin hat das auch mal gesagt, dass die populärste und wichtigste Methode, die die Pandas halt hat, ist halt ReCSV, die sehr, sehr flexibel ist und man kann irgendwie so ungefähr jedes CSV, was irgendwo, ein CSV ist ein sehr hässliches Format und Leute machen unglaubliche und unheilige Dinge damit.

Jochen

Aber man kann irgendwie mit dieser Funktion kann man das fast alles parsen.

Jochen

Die hat sehr viele Argumente und sehr viele Dinge, an denen man da irgendwie was drehen kann und man kriegt fast alles damit gepasst.

Jochen

Und das heißt, ja, egal wie komisch die Daten aussehen, die man so hat, man kriegt sie irgendwie mit Read CSV oft irgendwie in Pandas rein und hat sie dann halt in einem sauberen Format und kann das dann halt wieder in anderen Formaten rausschreiben.

Jochen

Aber gut, Pandas kann nicht nur CSV lesen, sondern halt auch diverse andere Formate von JSON über, keine Ahnung, XML oder was auch immer.

Jochen

Teilweise werden dann halt andere Bibliotheken unten drunter verwendet, um das halt einzulesen.

Jochen

Aber das ist halt, also Pandas ist eigentlich immer so der erste Schritt, wenn man irgendwo Daten herbekommt, um die halt in ein Format zu bringen, mit dem man irgendwas machen kann, um es halt irgendwie einzulesen in Programmen.

Jochen

Da nimmt man halt eigentlich immer Pandas, weil das halt so.

Dominik

Pandas hat also vorbereitete Funktion für weiß nicht eine Zeitreihen-Analyse oder sowas.

Jochen

Nein, nein, der Analyseteil ist nochmal ein bisschen, also ja, Pandas kommt auch daher.

Jochen

Also das ist mal entwickelt worden, Westman Kenny hat das gestartet, das Projekt 2008, als er bei RQ Capital, glaube ich, irgendwie wie so ein Hedgefonds Investment-Dings da gearbeitet hat.

Jochen

Und da ging es um Zeitreihen und tatsächlich ist bei Pandas immer noch so der Hauptfokus, oder es ist halt das, was Pannas auch besonders gut kann, sind halt so Zeitreihen-Geschichten.

Jochen

Aber man kann auch diverse andere Dinge damit machen.

Jochen

Und ja, da gab es halt noch nichts in Python.

Jochen

Die Leute haben damals Excel verwendet oder halt irgendwie kommerzielle Software.

Jochen

Und ja, da wurde halt dann, dann ist halt dieses Projekt gestartet.

Jochen

Und so ein bisschen, auch heute ist es halt noch so, dass viel Geld geht halt so in Deep Learning-Geschichten.

Jochen

Also man sich anguckt, wie viel Geld wird halt eigentlich ausgegeben für Open Source Entwicklungen.

Jochen

Also sowieso irgendwie relativ erschreckend, wie wenig Ressourcen sozusagen Open Source-Projekte haben und wie viele Leute dann und wie viele Firmen im Grunde darauf angewiesen sind, weil wenn man dann anguckt, was Firmen machen, auch große Firmen, dann ist das ja doch.

Jochen

Im Endeffekt machen die halt ganz viel mit so freier Infrastruktur, Software, die halt irgendwie auch alle Leute kennen und so.

Jochen

Aber die wird wenig, wenig, bekommt eigentlich wenig Ressourcen, da gibt es wenig Geld, da gibt es wenig Leute, die hauptberuflich dran arbeiten.

Jochen

Und die Projekte, die am meisten Geld bekommen, sind sowas wie Tensorflow oder so, weil man drüber schreiben kann, inwiefern das halt noch Open Source ist, aber.

Jochen

Und auch die ganzen Cloud-Dienste oder so, die haben alle irgendwie Methoden, Daten da reinzubekommen, Daten wieder rauszubekommen.

Jochen

Und auch in denen steckt relativ viel Geld drin, aber diese Sachen sind alle ziemlich schlecht irgendwie.

Jochen

Und Pandas füllte halt so eine Lücke, ist halt eigentlich ultra wichtig.

Jochen

Weil irgendwie diese ganzen Daten-Import-Export-Geschichten sind halt etwas, was man immer braucht.

Jochen

Und irgendwie, es gibt außer Pandas gibt es keine Projekte, die das irgendwie ordentlich gemacht haben.

Jochen

Und du kannst natürlich irgendwie deine tolle Deep Learning-Tensor-Flow-Geschichte nehmen, irgendwie, aber wenn du die Daten halt nicht hast, um damit irgendwas machen zu können, dann hilft dir das alles nichts.

Jochen

Und ja, das, ja, eben, weiß manken, ihr erzählt davon halt auch immer, dass er ihn das total wundert und dass er das total seltsam findet, dass halt so ein wichtiger Teil der Infrastruktur so wenig Liebe erfährt, quasi und dass seine Hauptmotivation war zu sagen, okay, da muss man mal was tun, da muss man doch, das muss doch irgendwie, dieses Problem muss man doch lösen.

Jochen

Das ist halt irgendwie ein Problem, was alle haben und was irgendwie sehr ärgerlich ist und ja, und das ist halt, das macht Pandas auch sehr gut irgendwie.

Jochen

Und das ist immer so ein erster Schritt, wenn man irgendwie Daten, auch wenn man jetzt hinterher Machine Learning machen möchte oder so, hat man trotzdem immer Pandas mit dabei, weil man die Daten ja erstmal in irgendwie ein Format bringen muss vorher und vielleicht aufräumen muss, sauber machen muss.

Jochen

Da gibt es auch so einen schönen Spruch.

Jochen

Irgendwie Data Science ist halt so, oder auch Machine Learning ist halt 80% ist halt Data Cleaning.

Jochen

Und 20% ist sich darüber beschweren, dass irgendwie 80% Data Cleaning sind.

Jochen

Ja, das ist sehr gut.

Simon

Ja, ich meine, die andere Sache ist, als Mensch möchte man ja auch sich die Daten vielleicht zwischendurch mal angucken können.

Simon

Und dafür braucht man irgendwie eine Datenstruktur, in der man sehr schnell zu Rahmendaten kommt.

Simon

Vielleicht braucht man mal einen Mittelwert oder will sich mal die Verteilung angucken, gruppiert bei irgendwelchen Kategorien oder sowas.

Simon

Also sicherlich ist diese Import-Geschichte von Pandas eine der mächtigsten, die ich bisher gesehen habe, was auch so fehlende Datenpunkte angeht.

Simon

Und wenn die Struktur mal nicht ganz stimmt und man kann einzelne Zeilen überspringen, wenn da mal was kaputt geht oder sowas.

Dominik

Da habe ich jetzt übrigens direkt eine doofe Frage zu, weil es gibt ja irgendwie bei Pandas so ein paar Werte, die, wenn die halt nicht da sind, die man irgendwie füllen kann.

Dominik

Da gibt es ja irgendwie jetzt aber so drei Typen.

Dominik

So Null und None und None.

Dominik

Was, warum, wieso braucht man da drei?

Jochen

In Pandas, also ich wüsste jetzt eigentlich nur, dass es da Not a Number gibt.

Ja.

Jochen

Und das ist historisch sozusagen der, äh, hier ist kein Wert, äh, Wert von NumPy.

Jochen

Das ist auch irgendwie sozusagen ganz unten drunter, ist das tatsächlich ein Float kann man das halt ausdrücken und ja, das hat halt auch so das leichte Problem, dass man im Grunde immer dann, wenn man solche Werte hat, dann halt auch der Datentyp irgendwie Float sein muss, was so ein bisschen doof ist.

Jochen

Das war bis vor ganz kurzem war das noch so, dass man halt, wenn man jetzt eine Integer-Spalte hatte und da fehlt halt jetzt ein Wert oder man hat halt gesagt, okay, da kommt irgendwie was dazu, was halt irgendwie fehlt oder so und man macht einen Re-Index und guckt, dann hat sich plötzlich der Typ der Spalte in Float geändert, weil es halt keine fehlenden Werte in Integer-Typ, äh, die Type-Spalten gibt.

Jochen

Und das ist ein, das ist ein ziemlich blödes Problem.

Jochen

Aber jetzt gibt es halt irgendwie seit einiger Zeit diese Array-Extensions, äh, äh, Array-A-Extensions-API für Pandas.

Jochen

Und die halt mit Cyber-Pandas dazugekommen ist.

Jochen

Ich weiß gar nicht, welche Version das genau war.

Jochen

Und jetzt hat auch die, am Ende Ende Januar ist die letzte größere Release von Pandas erschienen, ich glaube 0.24 oder so.

024, ja.

Jochen

Und da ist jetzt halt auch ein native, natives Integer-Spaltenformat drin, das halt auch nunnen kann.

Jochen

Und das ist natürlich total cool irgendwie.

Jochen

Und man kann jetzt für, also da ist man jetzt, dadurch, dass man jetzt quasi nicht mehr NumPy unten drunter liegen hat, kann man da auch diverse andere coole Datentypen irgendwie verwenden, die vorher so nicht möglich waren, weil man ja immer auf NumPy angewiesen war.

Jochen

Also NumPy ist auch ganz cool, aber NumPy hat halt das Problem, dass das grundlegende Design dafür ist halt jetzt doch schon wahrscheinlich fast 20 Jahre alt und passt halt auch nicht mehr so richtig auf die Anforderungen von heute.

Jochen

Und dummerweise hat Panas aber viele der Implementationsdetails in NumPy halt rausgelegt.

Jochen

Und das kann man jetzt auch nicht mehr so einfach ändern, weil das halt schon, also wenn man das wieder ändern würde, dann würde das Code brechen und dann, also wäre keine abwärtskompatiblen Änderungen mehr.

Jochen

Und das ist natürlich alles so ein bisschen blöde Situation.

Jochen

Aber irgendwie mit dieser Array-Extension-AP hat man auf jeden Fall eine Möglichkeit, wenn man den Typ ändert, dann ist das alles eigentlich in Ordnung und dann kann man da auch schöne neue Sachen machen, ohne dass man auf NumPy irgendwie angewiesen ist.

Jochen

Zum Beispiel, was halt, also das sind so Beschränkungen, die sind echt blöd.

Jochen

Also wenn man auf NumPy unten drunter basierendes Pandas hat, dann hat man halt sowas nicht wie zum Beispiel Decimal-Types.

Jochen

Also einmal man hat keinen fehlenden, keine Missing Value Support für sowas wie Integer, was auch schon schlimm ist, aber man hat halt auch, wenn man jetzt mit Geld zu tun hat, was man ja vielleicht auch irgendwie, dann hat man halt bloß Float, um da.

Jochen

Das will man auch nicht.

Jochen

Also man würde das dann irgendwie wahrscheinlich eher Geld in Integer, also in Cent Integer oder sowas verwenden.

Jochen

Viele werden wahrscheinlich irgendwie Float nehmen.

Jochen

So, und dann denken, ach, das wird schon irgendwie hinhauen und dann böse Überraschungen überleben, weil das funktioniert halt überhaupt gar nicht.

Jochen

Und man kriegt diverse richtig böse Probleme, wenn man das macht.

Jochen

Und in Datenbanken ist das Problem eigentlich auch schon lange gelöst.

Jochen

Da gibt es den Decimal-Type.

Jochen

Genau für sowas, der dann halt auch ordentlich rundet und so.

Jochen

Und in Python gibt es auch einen nativen Decimal-Type.

Jochen

Der ist blöderweise nur total super langsam.

Jochen

Also den kann man eigentlich auch nicht nehmen.

Jochen

Und jetzt gibt es halt sozusagen als Array-Extension-Type halt auch Decimal, sodass man das halt auch in Pandas Data Frames halt Geld quasi mit Kommastellen verwenden kann, ohne dass es da irgendwie, ohne dass man da mit schlimmen Konsequenzen rechnen muss.

Jochen

Und es gibt sowas wie Date Time mit Time-Zonen dran und so.

Jochen

Das ging vorher auch nicht.

Und das ist.

Dominik

Oh, also sowas wie Grad mit Celsius-Erfahrenheit vielleicht.

Jochen

Das ist nochmal ein anderes Ding, genau, dass man, das möchte man auch gerne haben.

Jochen

Ich weiß nicht, ich glaube, das ist nicht direkt in Panas drin.

Jochen

Es gibt Bibliotheken dafür, dass man halt an Spalten auch noch irgendwie so eine Maßeinheit dran klebt.

Simon

Die Annotationen und auch Skalierungsfaktoren kommen auch mitunter aus dem zugrunde liegenden Datenformat, aus dem man nachher importiert.

Simon

Also es gibt irgendwie wissenschaftliche Datenformate, die speichern sowas alles mit.

Simon

HDF5 oder NetCDF oder wie das inzwischen heißt.

Dominik

Wie sieht das denn aus, dass man eine Spalte ein Tupel drin?

Simon

Da gibt es im Prinzip irgendwie so eine Tabelle von Metadaten, wo drin steht, welche Spalten, welche Maßeinheit, welche Skalierungsfaktoren haben, wann die zuletzt bearbeitet wurden.

Simon

Und darunter stehen dann sehr realisiert die Daten drin.

Simon

Und dadurch hat man sehr, sehr schnellen sequentiellen Zugriff auf seine Daten, hat aber trotzdem die Möglichkeit, diese Skalierungen und Einheiten mitzuführen.

Simon

Und in Pandas weiß ich nicht, ob das inzwischen mit importiert wird, aber diese Erweiterung.

Jochen

Ja, ich habe jetzt normalerweise auch nicht mehr parat, wie die Bibliothek ist.

Jochen

Es gibt eine Bibliothek für so Maß-Einheiten und sowas.

Jochen

Ich weiß aber nicht genau, wie das gemacht ist.

Müssen wir nochmal nachgucken.

Jochen

Vielleicht können wir das einfach dann beim nächsten Mal nachreichen oder so.

Jochen

Auf jeden Fall, da gibt es etwas und das kriegt man schon irgendwie alles auch mit dazugeschrieben.

Jochen

Ja, also genau, das eigentlich, so wie früher, oder der Default ist immer noch bei Pandas, dass wie Sachen gespeichert werden, das nennt sich irgendwie Block Manager oder Block Storage.

Jochen

Und das sind immer 2D NumPy-Arrays.

Jochen

Und die sind halt immer sozusagen, also man würde eigentlich denken, dass ein Data Frame, dass jede Spalte irgendwie ein 1D, also ein eindimensionales NumPy-Array ist.

Jochen

Aber das ist halt nicht so, sondern ein Data Frame besteht aus Blocks von 2D NumPy-Arrays, jeweils zu einem, also unterteilt nach Datentyp.

Jochen

Also wenn ich jetzt sozusagen habe einen Data Frame, der drei Spalten hat, zwei davon Float, einer Integer, dann besteht das Ding aus zwei NumPy-Arrays, eins mit Integer und eins mit Float, das halt zwei Spalten hat.

Simon

Da muss man jetzt natürlich aufpassen, von welcher Seite man drauf guckt, weil aus Pandas Sicht ist das erstmal eine Liste von Pandas-Series.

Simon

Da haben wir auch noch nicht drüber gesprochen, was das ist.

Simon

Die Abbildung als NumPy-Arrays ist natürlich dann irgendwie die technische zugrunde liegende Abbildung.

Jochen

Ja, ja, genau.

Jochen

Das ist halt, eigentlich sollte das egal sein, wenn man sich, ne, sollte man sich eigentlich keine Gedanken drüber machen, sondern genau, eigentlich ist eine Series halt, quasi kann man es verstehen als Spalte oder eben Vektor-eindimensionale Datenstruktur mit halt vielleicht noch einem Index dran.

Jochen

Aber es ist halt nicht, so wird es halt nicht gespeichert und das Blöde ist, dass diese Abstraktion halt auch so liegt.

Jochen

Weil wenn man jetzt zum Beispiel eine Spalte hinzufügt zu einem Data Frame, dann hat man das Problem, dass dadurch, dass jetzt, wenn man schon ein paar Floatspalten da drin hat und man fügt jetzt eine dazu, dann geht das ja nicht mehr wirklich, sondern dann müssen die kompletten Daten alle kopiert werden dafür.

Jochen

Und wenn man jetzt in der Schleife irgendwie Spalten hinzufügt oder so, dann kann es sein, dass einem der Speicher platzt und man weiß überhaupt nicht, warum.

Jochen

Das heißt, man muss im Grunde wissen, dass Pandas das so macht.

Jochen

Und dann gibt es dann immer so Tipps, die dann gesagt haben, wenn man da irgendwie viele Spalten hinzufügt, dann immer erstmal die einzelnen Spalten sammeln und dann hinterher alle zusammenfügen oder so und nicht irgendwie auf einem großen Data Frame eine Spalte hinzufügen, dann noch einer hinzufügen, das ist schlecht.

Jochen

Und das sollte eigentlich natürlich, das sind also so Schwächen, weil Pandas, das sollte ja eigentlich nicht, das sollte einen gar nicht interessieren, wenn man das benutzt.

Jochen

Dummerweise muss man solche Sachen aber dann vielleicht doch wissen, weil man halt dieses Problem da an der Stelle noch hat.

Jochen

Aber das kann sein, dass das jetzt alles demnächst besser würde.

Jochen

Oder dass es jetzt, also mit dieser Version, mit der letzten Version ist es halt schon ein Stück besser geworden und da sind halt die einzelnen Spalten, haben ihren eigenen Typ und ihre eigene Speichergeschichte und dann ist das alles nicht mehr so ein Problem.

Jochen

Aber ja, das ist, ach, das ist vielleicht auch noch interessant.

Jochen

Also Panas ist gedacht für so Daten, also Small Data kann man quasi sagen, also Daten im Bereich von so ein paar Gigabyte, also einstellig Gigabyte, weil halt da fast alle Operationen dazu führen, dass das irgendwie kopiert wird, kann es sehr schnell sein, dass man halt irgendwie auch, dass man halt fünf oder vielleicht sogar bis zu Zehnfacher der Datenmenge, die tatsächlich auf der Platte landet oder so, man als Hauptspeicher braucht, weil man kopiert ein paar, aber man fügt ein paar Spalten hinzu, transformiert ein bisschen was und dann schon hat man irgendwie einen fünffachen Haupts

Jochen

peicher verbraucht.

Jochen

Und daher ist es halt nicht so richtig effizient.

Jochen

Kann auch sein, dass es jetzt dann halt besser wird.

Jochen

Aber also für größere Sachen kann man Pandas nicht so super benutzen.

Jochen

Aber für diese kleinen Datenmengen ist es halt sehr, sehr cool, weil es super interaktiv ist und da auch viel Optimierung reingesteckt wurde, die Operationen halt auf so, auf den Datenmengen halt schnell zu machen.

Jochen

So dass man halt oft dann nicht ein paar Sekunden warten muss, sondern eigentlich immer nur so ein paar hundert Millisekunden.

Jochen

Und dass gerade wenn man das jetzt zusammen zusammen mit Jupyter Notebooks halt interaktiv in einem Browser verwendet, ist es halt sehr wichtig, dass man da nicht irgendwie, wenn man irgendwas ausführt, halt lange warten muss, sondern man drückt irgendwo drauf, es wird ausgeführt, man sieht ein Ergebnis und kann damit direkt weiterarbeiten.

Genau.

Jochen

Ja.

Dominik

Ja, nur vielleicht noch mal kurz ein Jupyter Notebooks, also ein tolles Tool tatsächlich, wenn man sich so gerade so Daten aus der Wissenschaft angucken will, einfach ein Data-Frame laden, da die ganzen Daten reinkloppen und dann mit MarklopDip und C-Born irgendwo direkt live immer Anderungen verfolgen können.

Simon

Ja, ich würde fast noch sagen, also der ganz, ganz klassische Workflow ist, man ruft einmal Describe auf, dann kriegt man so einmal die Rahmendaten, Streumaß und

Dominik

auf den Data Frame-Levelmaß, auf dem Datenschutz.

Dominik

Dann kriegt man direkt alle statistischen Auswertungskennzahlen, die man so kennt.

Simon

Dot Describe, Klammer auf Klammer zu, fertig, dann kriegt man erstmal einen groben Überblick über seine Daten.

Simon

Dann kann man natürlich auch in die Daten direkt reingucken mit Head und Tail.

Simon

Und das ist in meiner Erfahrung auch das, was man bei einem neuen Datensatz als allererstes mal macht, um sich anzugucken, womit arbeite ich denn überhaupt.

Simon

Und spannenderweise, wir waren eben bei Datenimport, da ist noch eine Sache, meine Lieblingsfunktion ist an der Stelle tatsächlich Import from Clipboard.

Simon

Also man kann tatsächlich, wenn man gerade irgendwie mal in Excel war oder in OpenOffice und was kopiert hat, das in Pandas Data Frames direkt wieder einladen.

Simon

Das habe ich allerdings noch nie ausprobiert in Jupyter Notebooks.

Simon

Ich weiß nicht, ob der das hinkriegt, aber ich wüsste jetzt auch erstmal nicht, was dagegen spricht sollte.

Jochen

Es können gut sein, dass es funktioniert.

Simon

Also kann man sich halt auch ganz kleine Datenschunks, kleine Tabellen direkt aus der Zwischenablage in sein Dataframe reinladen.

Dominik

Das heißt, wenn wir jetzt so von diesen Gigabyte-Bereich liegen, ich glaube, für wissenschaftliche Anwendung müsste das in den meisten Fällen auch relativ ausreichend sein.

Jochen

Ja, ja, absolut.

Jochen

Also das ist sowieso so, die allermeisten Leute haben nicht mehr Daten.

Jochen

Also für die allermeisten Leute reicht es aus.

Jochen

Wenn man mehr hat, dann weiß man das und dann kann man auch was anderes nehmen.

Jochen

Ja, aber stimmt, wir hatten eben noch gar nicht, genau, vielleicht sollten wir da so ein bisschen systematisch auch nochmal kurz rangehen, was, also Panas, genau, das hat auch was damit zu tun, wo der Name herkommt.

Jochen

Also Panas steht eigentlich für Panel Data oder das war halt auch immer das, was halt so in dieser Finanzwelt, wo du Leute von geredet haben von Panel Data.

Jochen

Und dann meinten sie dann halt oft Excel-Sheets irgendwie oder mehrere davon.

Jochen

Und das kann Panas auch, ist aber irgendwie nicht mehr so.

Jochen

Also es gibt auch noch, es gibt halt einmal Series, es gibt Data Frames, das ist halt sozusagen die zweidimensionale Tabelle irgendwie.

Jochen

Series eindimensional und dann gibt es auch noch Panels, die sind halt dann mehrdimensional.

Jochen

Und die werden aber eigentlich nicht mehr verwendet, glaube ich, oder wurden eigentlich nie so wirklich viel verwendet und das ist, glaube ich, überliegen Leute auch gerade, ob sie das irgendwie wieder rausnehmen, weil es eigentlich ziemlich sinnlos ist und der Hauptnutzen irgendwie bei den Data Frames ist.

Jochen

Ja.

Jochen

Genau, daher kommt der Name.

Jochen

Es ist ein bisschen wie blöd, ne?

Jochen

Wenn man danach googeln will und dann hat man Tierbilder.

Dominik

Aber wir haben immer wieder Tierbilder dabei.

Jochen

Das Vorbild für Pandas ist ja R, denke ich mal.

Jochen

Das ist mit Googlen auch nicht viel einfacher, aber genau, ja, was, ich weiß nicht, du hast auch schon mal mit A gearbeitet, Simon.

Jochen

Was sind denn da so die, ja, wie kann man das eigentlich miteinander vergleichen?

Jochen

Ist ja vielleicht auch ganz interessant zu sehen, wo das herkommt.

Simon

Ja, also ich habe in meiner Forschungszeit sehr viel zwischen R und Excel hin und her gewechselt.

Simon

Und tatsächlich muss ich sagen, die R-Data Frames, die den Pandas-Data Frames sehr, sehr ähnlich sind, die hatten irgendwie so zwei, drei zentrale Vorteile gegenüber Excel, weswegen ich irgendwann komplett gewechselt bin.

Simon

Einer ist sicherlich, dass die Dataframes immer rechteckig sind.

Simon

Also man kann nicht eine Spalte mit weniger Daten füllen als die nächste Spalte.

Simon

Es muss zu jeder Zeile immer für jede Spalte auch einen Wert geben.

Dominik

Also es gibt für jeden Index irgendwie kein Error.

Simon

Genau, wenn es ein Not a Number ist, ist das okay.

Simon

Aber es muss auf jeden Fall irgendeinen Eintrag geben.

Simon

Das führt dann dazu, dass man keine Überprüfung mehr machen muss, wie lang ist denn meine Spalte gerade, in der ich bin.

Simon

Dann gibt es bei Data Frames grundsätzlich auch Typen je Spalte.

Simon

Das ist in Excel nicht so.

Simon

Da hat jede Zelle im Prinzip einen Typ, wenn man will.

Simon

Da kann man auch ganz viel bösen Schabernack mit treiben.

Simon

Und in Data Frames, dadurch einfach, dass man eine Series pro Spalte hat, hat auch eine Spalte immer nur einen Typ.

Simon

Und das Dritte, was ich an Data Frames unheimlich zu schätzen wusste, waren in A heißen die Factors, in Pandas heißen, glaube ich, einfach nur Categories oder haben gar keinen speziellen Namen.

Simon

Dass wenn man kategorische Daten hat, die erstmal als Text erscheinen, sowas wie, weiß ich nicht, ah, Beispiele.

Simon

Blau, rot, gelb als Farben in einer Spalte.

Simon

Dass die in dem zugrunde geliegenden Datenformat erstmal sowas wie Integer sind und entsprechend auch relativ schnell zum Indizieren benutzt werden können, aber für die Anzeige für das Menschenlesbare wieder als rot, gelb, grün, blau dargestellt werden.

Dominik

Okay.

Dominik

Wie macht Pandas das als Dictionary dann?

Jochen

Das war lange, ähm also in Pandas heißen die Dinger Categorials und das wurde dann quasi intern irgendwie auf Integers wurde das abgebildet.

Jochen

Man hatte die einfach durchnummeriert und dann war das halt, was halt natürlich auch viel weniger Platz braucht als Text, aber ja genau.

Jochen

Aber jetzt auch, glaube ich, mit der neuen 024 ist es jetzt so, das hat auch einen eigenen Datentyp bekommen, sodass es halt jetzt auch so ein First Class Citizen im Grunde ist.

Jochen

So vorher war es halt auch mal so, naja, es sind komische Dinge passiert.

Jochen

Ich hatte zum Beispiel mal irgendwann mit Categoricals auch so ein Problem.

Jochen

Ich habe da irgendwie größere Data Frames irgendwie zusammengebastelt und dann ist mir irgendwie so regelmäßig der Hauptspeicher explodiert und ich wusste nicht, warum habe ich dann auch einen Bug irgendwie bei Panas gefeilt und der war dann ziemlich lange offen.

Jochen

Das hatte halt auch damit zu tun, dass es nicht irgendwie nativ irgendwie da drin war, sondern das war halt mit den anderen Intelligenz-Geschichten irgendwie verknuselt.

Jochen

Und ja, alles schrecklich.

Jochen

Ja, aber genau, das ist natürlich eine sehr nette Sache, wenn man das halt so machen kann.

Jochen

Ja, das heißt, man sieht halt den Text in der Tabelle, aber in Wirklichkeit speichert man halt viel weniger Daten, halt nur eine Zahlen.

Praktisch.

Dominik

Wie schaut man sich denn so Daten dann an?

Dominik

Also ich musste dir ja irgendwie eine Struktur bringen.

Dominik

Ich habe jetzt irgendwie ganz viele Spalten irgendwie in meinem mit Zeilen, in meinem großen rechteckigen Datenfeld drin oder sowas.

Dominik

Und ich möchte jetzt irgendwie die kombinieren.

Jochen

Also man kann auch direkt auf dem, also das benutze ich tatsächlich ziemlich gerne, ist, man kann sagen, also Data Frame, man kürzt es normalerweise mal ab mit DF.

Jochen

Also das Standardobjekt, was man dann halt sozusagen hat, heißt einfach DF.

Jochen

Und da kann man einfach sagen, df.plot und dem halt noch so ein bisschen Parameter mitgeben und dann plottet das halt direkt.

Dominik

Dann kannst du dir ja dann Daten anzeigen, die du dann reingegeben hast.

Dominik

Also die Visualisierungsebene dann

damit quasi.

Jochen

Genau, genau.

Jochen

Und im Notebook sieht man halt auch dann direkt irgendwie quasi grafisch was.

Jochen

Standardmäßig ist es dann halt Mattplot-Lib.

Jochen

Aber man kann halt das auch das Plotting-Backend von Panda sozusagen austauschen.

Jochen

Das ist halt also Pluggable und man kann das austauschen.

Jochen

Und man kann halt auch Bouquet zum Beispiel nehmen oder weiß gar nicht, ob es doch noch viele andere.

Simon

Ich habe Plotly schon gesehen in dem Zusammenhang und C-Born ist ja im Prinzip Mattplot-Lib nochmal ein bisschen erweitert, kann man da auch reinpluggen.

Jochen

Genau, sodass es halt, man hat halt immer, man kann es dann anders aussehen lassen.

Jochen

So dass zum Beispiel bei Bouquet oder Plotly ist es halt so, wenn man dann sagt, DF-Plot irgendwas, dann kann man das, dann ist halt, ist das, was man sieht, dann halt auch scrollbar zum Beispiel, man kann da drin zoomen oder so, was man bei einem Matplot-Lib-Bild jetzt nicht machen kann, weil da ist einfach, das ist quasi dann halt so ein schadisch rausgerändertes PNG oder so.

Jochen

Und dann, wenn man da reinzoomt, wird es nur pixelig, aber man sieht nicht mehr, während halt bei eben dieser, bei Potly oder so hat man dann, kann man, wenn man reinsubt, sieht man einfach an der Stelle mehr.

Jochen

Und man muss an den Plottaufruf eigentlich nichts ändern, sondern man tauscht einfach nur das Backend aus.

Jochen

Und ja, das ist schon sehr nett.

Jochen

Und das verwende ich tatsächlich oft irgendwie, um Sachen zu visualisieren.

Dominik

Wenn man so einmal kurz schnell so einen Überblick bekommt.

Dominik

Wie suche ich mir die Daten denn aus?

Dominik

Also, wie grupiere ich denn da irgendwas von den Daten, wenn ich ja so ganz viele Spalten und Zeilen habe?

Simon

Also wenn man gar nicht weiß, wie man anfangen soll, wenn ich mich richtig erinnere, macht Plot standardmäßig einfach einen Perplot.

Simon

Alles gegen alles.

Simon

Dann sieht man schon mal, wie sind die Daten zueinander verteilt.

Simon

Dann kann man Effekte sehen, wie auf zwei bestimmten Variablen ist die Verteilung eher so bimodal.

Simon

Man hat zwei Felder von Punkten oder sowas.

Simon

Also da kann man schon grundsätzlich mal sehen, wie sind meine Daten überhaupt verteilt.

Ansonsten gibt es ja oft eine Fragestellung in

der ideellen Welt, wo es gibt.

Simon

Gibt es im Vorfeld eine Fragestellung und dann kann man auf diese Fragestellungen hinzuarbeiten.

Simon

Dann weiß man genau, welche Spalten brauche ich jetzt gleich.

Simon

Spaltenzugriffe sind in Pandas, finde ich, super, super easy und convenient.

Simon

Man gibt im Prinzip einfach nur von seinem Data Frame-Objekt per Dot-Syntax den Spaltennamen an.

Simon

Oder in eckigen Klammern wie bei einem Listenzugriff.

Simon

Das muss ich gerade genau überlegen.

Simon

Doch, da geht der Spaltenname auch.

Jochen

Ja, es gibt zwei Interface, es gibt halt mit man kann halt entweder den Namen nehmen oder man kann halt auch den numerischen Index nehmen.

Jochen

Das ist Log und I-Lock, glaube ich, sind die unterschiedlichen Funktionen, die man da aufrufen kann.

Jochen

Aber also ich würde auch eigentlich immer eher, also mit den Indizes ist eine ältere Geschichte und ich würde eher die Namen immer nehmen, weil das klarer ist was da eigentlich gemeint ist.

Und die

Dominik

werden dann irgendwie mit Group by irgendwie so vorsortiert oder sowas?

Dominik

Und dann gibt es irgendwelche Alternativen, dann kann man die in Beziehung setzen und dann alles plotten, was man macht.

Simon

Also erstmal hat man Zugriff auf seine tabellarischen Daten.

Simon

Und da kann man sagen, ich möchte jetzt Spalten A, B und E plotten auf einer X-Achse, die ist in Spalte D meinetwegen.

Dominik

Aber nur die roten.

Dominik

Oder die roten und die gelben vergleichen.

Simon

Genau, das ist dann der zweite Schritt, dass man anfängt, vorher zu aggregieren.

Simon

Man kann dann überlegen, will ich nur bestimmte Gruppierungen haben.

Simon

Es gibt Funktionen, die das ein Group by.

Simon

Es gibt auch Funktionen, um eine kumulative Summe über irgendeinen Datensatz direkt per Funktion aufzurufen.

Simon

Das ist was, was man auch einfach plotten möchte.

Simon

Dass man sagt, okay, ich habe jetzt hier meine Daten und ich plotte dahinter in der zweiten Serie auch noch die kumulative Summe.

Simon

Dann ist das quasi per einzelnem Funktionsaufruf in Pandas möglich.

Dominik

Spannend für die ganze Anwendung, wenn man irgendwie so kategorisierbare Daten, verschiedene Merkmalen hat und man dann bestimmten Merkmalen, bestimmte Wahrscheinlichkeiten zuordnen will, also mehrere Merkmale hat, also keine Ahnung, Leute ab zwei Meter und trotzdem unter 70 Kilo und welche Wahrscheinlichkeit haben die für bestimmte Dinge im Kinder.

Simon

Genau, da kommen wir in einen anderen Bereich so ein bisschen rein und das ist Indizierung auf Basis von Bool's Werten.

Simon

Also man kann jetzt zum Beispiel sagen, ich möchte aus meinem Datensatz eigentlich nur alle Zeilen auswählen, in denen Spalte A, was zum Beispiel die Höhe sein könnte, sagen wir Höhe eines Menschen kleiner als 1,80 Meter und größer als 1,60 Meter ist.

Simon

Und dann würde der mir entsprechenden einen Slice aus meinem Data Frame rausgeben, der nur dieser Bedingungen entspricht.

Dominik

Was wird denn der technischer Zeug?

Dominik

Also macht er eine Kopie der Tabelle mit diesen Werten oder setzt er halt dann noch eine neue Tabelle daneben mit so Boolean-Werten ist wahr, ist falsch oder und macht dadurch so irgendwie so einen Index, den er nur liest?

Jochen

Also meistens wird tatsächlich, wenn man jetzt irgendwie da irgendwas extrahiert, wird kopiert.

Jochen

Man kann aber auch sagen, dass es nicht kopiert werden soll.

Jochen

Ja, also das sind meistens diese Boolean, also im Grunde erzeugt das halt eine Spalte, wenn man jetzt zum Beispiel sowas hat, so eine DF-Eckige Klammer auf, irgendwie DF.Size größer irgendwas und dann und DF-Size kleiner irgendwas.

Jochen

Dieser bullshit-Ausdruck wird sozusagen dann halt irgendwie in eine Spalte verwandelt, halt, wo dann irgendwie in jeder Zeile true oder false drinsteht.

Jochen

Und dann wird das halt, wenn man jetzt zeilenweise filtert, werden halt alle Zeilen, die halt true sind, raus werden halt rausgesucht und alle anderen werden halt ignoriert quasi.

Jochen

Und ja, ganz genau wie das technisch drunter funktioniert, weiß ich jetzt aber auch nicht.

Jochen

Und ja, das sind halt so, ich kann mir vorstellen, dass irgendwie so ein NumPy halt irgendwie als Feature drin, dass man Sachen, dass man so Masken verwenden kann, aber ich bin mir nicht sicher, ob es wirklich verwendet wird.

Jochen

Keine Ahnung.

Jochen

Egal, muss man halt nochmal genauer nachlesen.

Jochen

Ja, und dann kann man da irgendwie weitere Dinge mitmachen.

Jochen

Das ist halt recht schöne Methode, um da halt irgendwie Sachen rauszuselecten.

Jochen

Vielleicht kann man an der Stelle auch mal gerade eine Blogartikelreihe erwähnen, das fällt mir ja gerade ein, die ich immer wieder, wenn ich irgendwie Leuten von Pandas erzähle, auch miterwähne, weil die so toll ist.

Jochen

Das von Tom Augsburger Blogartikelreihe, muss ich mal sagen.

Jochen

Ja, genau, das heißt Modern Pandas.

Jochen

Und das ist Teil 1 bis, ich weiß gar nicht wie viel es gibt.

Jochen

Bis 8 momentan.

Simon

Kenne ich noch gar nicht, muss ich auch mal reinschauen.

Simon

So lernt man immer dazu.

Jochen

Genau.

Jochen

Und der beschreibt halt sehr ausführlich, wie das mit diesem Indexing halt, ja, also aus Userperspektive, was man damit alles machen kann, funktioniert.

Jochen

Und ja, also gerade wenn man jetzt nicht nur einen Index hat, das ist auch etwas, was halt Pandas kennt, was ich von Datenbanken so nicht kenne.

Jochen

Also Datenbanken bedeuten Indizes ein bisschen was anderes als halt jetzt bei Pandas.

Jochen

Man kann halt bei Pandas auch mehrdimensionale Indizes haben und dann da halt irgendwie kreuz und quer verschachtelte Abfragen macht.

Jochen

Und da, wenn man das sich so zuerst anguckt, dann raucht einem doch relativ schnell so der Kopf.

Jochen

Aber wenn man tatsächlich diese Probleme hat, dann kann das ultra praktisch sein, wenn man da irgendwie sich mit auskennt.

Jochen

Und diese Modern Panda-Serie ist halt eine, wo man das sehr, sehr schön sehen kann, wie das funktioniert.

Jochen

Da werden halt eben diese, also im ersten Artikel werden, glaube ich, da irgendwie so halt diverse Indizes-Geschichten erklärt und dann gibt es halt einen Artikel nur zu Method Chaining und ja, dann einen zu Indizes und da wird dann halt nochmal das alte Interface gezeigt und dann halt, was man jetzt mit dem neuen Interface an Dingen machen kann.

Jochen

Und da gibt es halt wirklich verrückte Abfragen, die man also.

Dominik

Also das Ding auf jeden Fall ist wieder super spannend, was der neueste Heizescheiß.

Dominik

Also was ich jetzt da gekannt habe, es wird auch nur die einzige Quelle, deswegen habe ich jetzt den Vergleich natürlich wieder nicht, ist diese Einführung in Python mit Data Science oder Data Science mit Python von Jake Wanderplas.

Dominik

Da wird auch ein schönes Artikel zu Pandas drin.

Dominik

Das ist auch frei irgendwo bei GitHub.

Jochen

Ja, die Notebooks, ähm, unzoger

Dominik

als Notebooks, die alle verwirklicht hat.

Dominik

Der hat er irgendwie unter MIT-Lizenz da online gestellt.

Dominik

Und da kann man auch genau die Sachen als Notebooks direkt alle ausprobieren.

Dominik

Das ist ein tolles Beispiel für diese, glaube ich, die einfachen, so die Basissachen drin, dass man so das grundsätzliche alte Prinzip mal versteht, dass man direkt da mit Pandaspotten kann.

Dominik

Ich glaube über den Untergang der Titanic oder sowas.

Dominik

Ah ja.

Simon

Ja, sonst benutzen die Tutorials oft gerne den Iris-Datensatz.

Simon

Da geht es irgendwie um Blütenlänge und Breite.

Simon

Das war mir immer ein bisschen sympathischer als Biologe.

Dominik

Als welche Klassen jetzt wie oder welche, wie viele Frauen, Männer und wie viele Jungs und Kinder untergegangen sind, wie viel nicht, also wie viel.

Simon

Das ist auch super spannend mit diesen Multilevel-Indizes.

Simon

Da sollten wir gleich auch nochmal vielleicht ein paar Minuten uns Zeit für nehmen.

Simon

Für den Moment sei vielleicht auch nochmal erwähnt, wenn man jetzt ein Pandas DataFrame haben möchte und man importiert das nicht aus einer Datei oder aus der Zwischenablage.

Simon

Wie komme ich denn überhaupt zu meinem DataFrame-Objekt?

Simon

Und du hast eben gefragt, kann man da vielleicht Dictionaries benutzen?

Simon

Ja, kann man tatsächlich.

Simon

Also wenn ich in Python schon ein Dictionary habe, was Keys und als Values Listen hat, dann kann ich einfach mein DataFrame erzeugen mit Pandas.dataFrame oder PD.DataFrame, wenn man Pandas als PD importiert und da reingeben mein Dictionary.

Simon

Dann macht er automatisch aus den Keys Spaltennamen und aus den Values, aus den Listen macht er dann meine Series.

Simon

Hat natürlich zur Bedingung, dass die gleich lang sind.

Simon

Sonst gibt es da einen Fehler.

Simon

Ich weiß gar nicht, ob der da mit NA auffüllt oder ob der.

Jochen

Ja, gar nichts, müsst ihr ausprobieren.

Jochen

Außer dass ein Fehler wirft.

Jochen

Ich weiß es aber auch nicht.

Dominik

Es gibt da irgendwie so eine andere Funktion, ich weiß jetzt nicht, bei was es genau geht, wenn man halt so ein Data-Frame über so einen NumPy-Array hat oder sowas, dass der automatisch neue Spalten erzeugen kann, die er dann irgendwie fortsetzt.

Dominik

Habe ich irgendwie kurz entdeckt.

Dominik

Wenn man einfach eine neue Spalte erstellt, dann, wenn man schon drei oder vier hat, dass er dann, wenn du die fünfte erstellst, einfach dann neue Werte reinbaut.

Jochen

Kann sein, was ich nicht so gut.

Dominik

Okay, vielleicht habe ich auch wieder irgendwelchen Quatsch erzählt.

Simon

Ich weiß nicht, ob ich gerade nicht genau, was du da meinst.

Dominik

Jetzt habe ich das Buch natürlich zu Hause liegen lassen.

Irgendwo nachgeschlagen.

Simon

Buch ist aber auch ein gutes Stichwort.

Simon

Man kriegt ja immer den gut gemeinten Ratschlag, guckt doch mal ins Handbuch.

Simon

Das Pandashandbuch ist tatsächlich länglich.

Simon

Also es hat 2900 irgendwas Seiten.

Simon

Davon sind rund 900 so die Basisfunktionen, 1400 nur die API-Referenz und dann nochmal weiterführende Informationen.

Dominik

Hast du es durchgelesen?

Nee.

Simon

So bei aller Liebe, das ist dann doch etwas viel, aber man kann halt relativ schnell kapitelweise, wenn man was ganz Bestimmtes sucht, da reinspringen.

Dominik

Okay, so als Index.

Simon

Es ist auch alles, also verlinktes Table of Contents, Inhaltsverzeichnis, genau.

Simon

Verlinktes Inhaltsverzeichnis, man kommt schnell dahin.

Jochen

Ja, die Dokumentation von Panners ist auch sehr gut, ist aber auch manchmal, also die ist schon etwas trocken, also manchmal muss man sich schon so ein bisschen quälen, um dann.

Dominik

Vielleicht liegt das an dem Tabellenthema.

Jochen

Könnte auch vielleicht liegt es einfach am Thema.

Jochen

Sollte man vielleicht eher irgendwie Schreiner werden oder so.

Jochen

Ja, das überlege ich mir manchmal.

Jochen

Das wäre toll.

Jochen

Ja, aber genau, ja, ja, stimmt.

Jochen

Was hatten wir?

Jochen

Was gibt es für Datentypen, so in Serien-Data-Frames, Panels, was kann man damit machen?

Jochen

Ja, so, genau, man kann auch sehr viele Dinge, die man sonst vielleicht mit einer Datenbank machen würde, damit tun.

Jochen

Und das hat ja auch so den Vorteil.

Jochen

Also das kann ich auch nur, ich finde die Art, also das User-Interface von Pandas ist halt ziemlich angenehm und zwar auch relativ kurz.

Jochen

Also wenn jetzt mit einer Datenbank arbeitet und da SQL-Statements schreibt, das geht natürlich auch, aber das ist halt viel umständlicher.

Jochen

Und Pandas hat da halt eine sehr schöne UI eigentlich.

Jochen

Und man kann viel damit machen, was man halt auch mit einer Datenbank normalerweise tun würde.

Jochen

Und insofern kann ich das auch nur empfehlen, wenn man jetzt irgendwie so ein Datenbankproblem hat, man kann auch irgendwie die komplette Datenbank, meistens sind die ja nicht so groß, auch irgendwie in Pandas sich reinholen oder als Data Frames aus der Datenbank ziehen und dann da irgendwelche Dinge machen und dann schon mal, wenn man dann weiß, wie es geht, dann kann man es hinterher auch in SQL machen.

Jochen

Aber vieles von dem lässt sich auch locker in Pandas mal ausprobieren, weil Pandas hat ja eben auch solche Funktionen wie, man kann Joins machen, man kann halt Data Frames Merge, also da heißt das dann, also ich glaube, da verwendet man ja einen Aufruf Merge oder so.

Jochen

Aber im Grunde macht es dann halt auch einen Join zwischen zwei Dataframes.

Jochen

Dann kann man angeben, auf welchen Spalten gejoint werden soll und solche Dinge.

Jochen

Und genau, eben all diese Group-By-Geschichten.

Dominik

Es gibt tatsächlich so eine Funktion, wie man eine Datenbank in DataFrame bekommt und andersrum, wie man eine Dataframe, wie man irgendeinen Datenbanktypen speichert.

Ja, ja.

Jochen

Also für alle Datenbanken gibt es da Adapter, mit denen man die Daten rauslesen kann.

Simon

Genau, also diese Import-Export-Geschichten.

Simon

Also wir haben nur über Import geschrieben, aber gesprochen, aber Export gibt es halt auch für alle diese Datentypen.

Dominik

Warum schreibt dann irgendjemand noch SQL Statements?

Jochen

Ja, doch, also manchmal kann schon sinnvoll durchaus sinnvoll sein.

Jochen

Also wenn du in der Datenbank ja auch irgendwas manipulieren willst an Werten, dann musst du es ja tun.

Jochen

Du kannst ja gar nicht.

Jochen

Kannst du auch in Pandas machen, aber dann hast du das Problem, du musst ja irgendwo wieder zurück in die Datenbank schreiben.

Dominik

Man klöscht eine neue Datenbank.

Simon

Und gegebenenfalls ist das, was du in deinem Speicher bearbeiten kannst, auch kleiner als das, was in der gesamten Datenbank ist.

Simon

Das heißt, beim Import würdest du schon nur einen Teil aus der Datenbank nehmen, kannst damit aber dann relativ komfortabel rumspielen.

Simon

Tatsächlich, der Befehl ist Join, auch in Data Frames.

Simon

Ich verwechsle es auch immer wieder, deswegen habe ich gerade mal kurz nachgeguckt.

Simon

Und es gibt noch Concatenate, da kann man aus einem Data Frame irgendwie Spalten in ein anderes reinziehen.

Ja.

Jochen

Ja, und dann genau, solche, eben, es gibt als so Datenmanipulationsgeschichten, eben Join-Merch, dann gibt es noch solche Sachen wie, genau, das ist auch schwer zu erklären, wenn man das jetzt nur hört, fürchte ich.

Jochen

Sowas wie Pivot, Unpivot, Meld, Stack Unstack.

Jochen

Das sind ja praktische Geschichten, aber ich weiß jetzt ehrlich gesagt nicht genau, wie ich das.

Jochen

Ja, du kannst, also wenn du, okay, ich versuch's mal einfach, wenn du jetzt, du machst im Grunde aus einer aus Dingen, die in einer Spalte stehen, machst du mit Pivot irgendwie zusätzliche Spalten.

Dominik

Also ich bin gerade völlig auf den Kopf gefallen, ich habe es natürlich mit der Transformation gerade verwechseln.

Jochen

Das ist relativ einfach, aber Pivot macht schon so ein bisschen kompliziertere Dinge.

Dominik

Das aggregiert irgendwas zur besseren Auswertung.

Dominik

Nein, Widerfall.

Dominik

Doch?

Jochen

Nee, das, das, ja, also manchmal hat man Daten halt in einem Format, in dem man schlecht plotten kann.

Jochen

Und manchmal braucht man halt Dinge, die in einer Zeile, die irgendwo in der Zeile stehen, die möchte man als Spalte haben, um dann halt die Spalte besser plotten zu können.

Jochen

Und dafür verwendet man dann auf Pivot.

Jochen

Und dann, genau, die umgekehrte Funktion dazu ist Meld.

Jochen

Und die aber eigentlich noch allgemeineren Funktionen, die funktionieren dann eben auf so Multilevel-Inder indizes sind halt Stack und Unstack.

Jochen

Aber das kann auch sehr schnell so ein bisschen überfordern.

Simon

Also ich kann sagen, so aus dem Biologenalltag, dass ich Pivot und Meld nie benutzt habe.

Simon

Einfach, weil die vielleicht auch zu viel Magie im Hintergrund noch machen können.

Simon

Stack und Unstack aber sehr häufig, weil in der Realität sind, wir hatten ja eingangs über die Excel-Tabellen gesprochen, die nicht immer ganz maschinenlesbar sind.

Simon

Es gibt noch den Zwischenwert, wo die zwar maschinenlesbar sind, aber mehrere Level von Indizes haben.

Simon

Und wenn die mehrere Level von Indizes haben, man könnte sich das zum Beispiel vorstellen, wie weiß ich nicht, ein.

Simon

Ich hatte eben noch ein Beispiel im Kopf.

Simon

Sowas wie Klausurnoten nach Semestern in zwei verschiedenen Gruppen, sagen wir mal Biologen versus Chemiker oder sowas.

Simon

Wie die in einer Chemieklausur abschneiden im ersten Semester, im zweiten Semester.

Simon

Und dann hat man diese Gruppierung einmal, zu welcher Gruppe gehören die Personen an, aber dann hat man auch für jede Zeile im Prinzip eine spezifische Person.

Simon

Das heißt, mehrere Personen teilen die gleiche Gruppe, also Biologe oder Chemiker.

Simon

Aber jede Person hat eigene Noten in Semester 1, in Semester 2.

Simon

Wenn man das jetzt, jetzt muss ich kurz überlegen, in welche Richtung man das stacken würde, dann würde man im Prinzip sagen, ich schreibe jetzt jede Person einzeln als Zeile auf und habe eine neue Spalte, wo die Gruppe nochmal als sich wiederholender Wert mit drin steht.

Simon

So dass ich wegkomme von ich habe im Prinzip zwei Zeilen, die jeweils vier Unterzeilen beinhalten, zu ich habe einfach acht Zeilen, wo in jeder dieser Zeilen die Gruppe nochmal explizit drinsteht.

Simon

Das macht es dann einfacher, nachher Gruppierungen zu machen.

Simon

Außerdem könnte man dann mit Unstack in die andere Richtung wieder sagen, ich möchte das jetzt gar nicht nach den Gruppierungen Anstacken, sondern nach Semestern zum Beispiel.

Simon

Und dann tauscht man plötzlich die Spaltenidentitäten.

Simon

Aber ja, also Tabellentransformationen einfach nur in einem Audio-Podcast zu erklären, ist sehr schwierig.

Jochen

Genau.

Jochen

Ich weiß gar nicht, ob es zu dem Stack Unstack oder so Thema halt auch einen Modern Pandas-Artikel gibt.

Jochen

Ich fürchte nein.

Jochen

Schade.

Jochen

Ah ja, muss man einfach mal nach.

Jochen

Also, naja, wir verlinken da einfach mal einen Artikel zu, wie das so aussieht.

Jochen

Wenn man das sieht, ist es eigentlich, dann kann man es deutlich besser verstehen.

Jochen

Ja, genau, das sind so die Dinge, die man dann damit dann tut.

Jochen

Ja.

Dominik

Ja, vielleicht nochmal dieser Pivot kurz, das wart ihr gerade kurz dabei, da sind wir kurz abgeschreift.

Dominik

Also was macht man damit jetzt genau?

Dominik

Also, kennen das irgendwie jetzt irgendwie aus Excel, dass man irgendeine Auswertung hat.

Dominik

Man hat dann irgendwelche Datenblätter oder sowas und da möchte man dann irgendwelche Aggregate irgendeinem Endnutzer auf einem Auswertungsdashboard zur Verfügung stellen.

Dominik

Und da wird dann irgendwas zusammengerechnet.

Jochen

Ja, Excel genau kann ja auch sowas für Pivot-Tabellen machen.

Simon

Ja, also ich habe hier gerade mal das Data Science Cheat Sheet Pandas offen.

Simon

Die können wir auch nachher verlinken.

Simon

Und da steht im Wesentlichen drin, dass Pivot-Table, wie gesagt, ich habe es noch nie benutzt, aber dass es eine Pivot-Tabelle macht, die anhand von einer Spalte gruppiert und dann aber über andere Spalten eine Funktion aufruft.

Simon

Das kann zum Beispiel sowas sein wie ein Mittelwert oder eine Summe oder nahezu beliebige Funktionen.

Simon

Möglicherweise habe ich das auch nie benutzt, weil ich die Excel-Funktion nie benutzt habe.

Simon

Was ich allerdings öfter benutzt habe, ist die Funktion Apply.

Simon

Und Apply erlaubt einem jetzt innerhalb eines Data Frames auf Basis einer Achse sozusagen eine Funktion auszuführen.

Simon

Das kann auch wieder nur Mittelwert oder Standardabweichung sein.

Simon

Das können aber auch komplexere Funktionen sein.

Simon

Und also für die, die vielleicht schon einen Hintergrund in R haben, da gibt es T-Apply und L-Appply für Zeilenspalten und was weiß ich nicht alles.

Simon

In Pandas Data Frames gibt es im Wesentlichen Apply und man gibt die Achse an.

Simon

Also soll das auf Reihen, auf Spalten agieren.

Simon

Und dann gibt man eine Funktion an und die wird dann entsprechend für eine komplette Spalte oder eine komplette Zeile ausgeführt.

Jochen

Ja, das ist vielleicht eben genau, das ist auch noch ein ganz wichtiger Punkt, den wir noch gar nicht erwähnt haben.

Jochen

Dass man, man kann, was man nicht tun sollte, ist über Data Frames iterieren und dann in der Vorschleife da irgendwelche Dinge mitmachen.

Jochen

Das könnte man sich auch vorstellen, dass man das so tut, weil das, wenn man das, wenn man aus Python kommt, dann macht man das ja mit Listen normalerweise so.

Jochen

Aber das geht halt nicht, oder es geht schon, ist halt nur dann sehr, sehr langsam.

Jochen

Während halt, wenn man jetzt Apply aufruft, dann ist es halt ziemlich schnell.

Jochen

Weil unten drunter, weil eben, also Vorloops in Python sowieso langsam sind und man dann eben keine Vorloop machen muss, sondern das läuft halt alles irgendwie in den entsprechenden, also kommt, je nachdem, wie der Datentyp ist, aber möglicherweise halt landet das in einer dieser optimierten Vortrag-Bibliotheken, die unten drunter unter der NAMPA liegen.

Jochen

Und es ist halt auch so, dass es dann in gewisser Weise schon parallelisiert wird.

Jochen

Oder halt diese, diese, ich weiß jetzt gar nicht, wofür SIM-D steht, diese Instruktionssets, diese.

Simon

Single Instruction, Multiple Data.

Jochen

Ah, okay, ja, genau.

Jochen

Super.

Dankeschön.

Jochen

Ja, man spricht ja auch von Vektorisierung.

Jochen

Also man kann halt mit einem Takt-Zyklus halt mehrere Operationen oder ausführen, weil man hat so super lange Register, weiß ich nicht, vielleicht 512 Byte oder so.

Jochen

Und da sind dann halt viele, wenn man jetzt einen Integer hat, vier Byte-Werte drin und die werden dann halt alle addiert gleichzeitig oder multipliziert oder sowas.

Jochen

Und man zerlegt halt ein komplettes Array, sozusagen, auf dem man dann irgendwelche Dinge macht, halt in diese Blöcke und braucht dann halt viel weniger Takte, als wenn man da einen Vorluft drüber machen würde.

Jochen

Ja, und das macht Sachen super schnell.

Jochen

Man hat halt irgendwie so Python-Interface und einen Jupiter-Notebook, das sieht dann halt so aus, als hätte man so super, wäre man super high-levelig, aber wenn man eine Operation macht, kann es sein, dass dann tatsächlich etwas sehr, sehr Optimiertes passiert und es sehr schnell ist.

Jochen

Und man, wenn jemand da hingehen würde, würde es ein C schreiben, ist er möglicherweise deutlich langsamer, wenn er nicht genau weiß, was er tut.

Jochen

Und das ist natürlich für viele Leute auch total überraschend.

Jochen

Und das ist auch eine sehr, sehr, sehr, sehr schöne Geschichte.

Jochen

Aber ja, man muss halt, man muss halt auch so ein bisschen eine komische Syntax dafür halt in Kauf nehmen.

Jochen

Man kann halt nicht mehr Forloops machen, man muss halt immer Apply schreiben und dann halt eine Funktion übergeben.

Jochen

Oft übergibt man dann halt so anonyme Funktionen, schaut dann Apply und dann Lambda X und dann kriegt man halt irgendwie Wert übergeben, macht dann damit irgendwas.

Jochen

Ja.

Dominik

Comprehensions oder sowas kann man auch vergessen, genau, dasselbe Probleme.

Jochen

Genau, das geht alles nicht mehr.

Jochen

Man schreibt halt alles nur noch ja quasi, ja, man schreibt eigentlich fast alles in Apply.

Jochen

Ich weiß gar nicht, ob es da noch andere Funktionen gibt, die so ähnlich sind wie Apply.

Jochen

Naja.

Jochen

Nee, das ist eigentlich immer Apply.

Jochen

Ja, und dann chaint man halt die Sachen hintereinander.

Jochen

Man kann halt, dann diese Methode liefert dann halt das Ergebnis von dem Apply zurück.

Jochen

Dann ruft man darauf wieder was anderes auf und dann hat man halt eine ganze Reihe von so hintereinander gechainten Apply aufrufen unter Umständen.

Jochen

Und ja.

Jochen

Das ist auch witzig.

Jochen

Fällt mir gerade noch zu dieser Vektorisierungsgeschichte ein.

Jochen

Früher haben auch Leute irgendwie erzählt, naja, ach, das mit der Parallelisierung, das ist ja alles gar kein Problem.

Jochen

Wenn wir jetzt viele CPUs haben, so irgendwie die Steigerung der Taktikfrequenzen war ja dann irgendwann auch schon vor längerer Zeit irgendwie vorbei, mehr oder weniger.

Jochen

Und man muss halt, man kriegt halt mehr Prozessoren, also Moore's Law ist halt noch nicht wirklich weg, weil sich das eigentlich auch nur auf die Transistoren, nicht auf die Geschwindigkeit als solche irgendwie bezieht.

Jochen

Aber dann hieß es halt so, naja, das ist kein Problem, wenn man mehrere Prozessoren hat.

Jochen

Da gibt es ja bestimmt Kompiler, die das automatisch parallelisieren oder so.

Jochen

Nee, ist nicht passiert, wird auch nie passieren.

Jochen

Dass Sachen automatisch parallelisieren, geht halt nicht.

Jochen

Und das Schlimme ist, selbst sowas wie automatisch vektorisieren geht halt nicht.

Jochen

Weil dummerweise, wenn man jetzt in C, wenn man sich jetzt mal vorstellt, man schreibt eine Vorschleife, die jetzt zwei Vektoren addiert.

Jochen

Also, die macht einfach nur C gleich A plus B.

Jochen

Wobei jetzt C, A und B sind halt Vektoren der gleichen Länge.

Jochen

Naja, C ist der, der erzeugt wird.

Jochen

Und man macht halt einfach Vorloop, die das tut, dann denkt man sich jetzt, könnte doch eigentlich der Prozessor, der Compiler hingehen und das irgendwie in diese Single Instruction Multiple Data Prozessor-Befehle umwandeln und dann irgendwie das deutlich schneller machen.

Jochen

Schellst du die raus und nah, kann er nicht, weil in C ängt es halt die Semantik von deinem Programm.

Jochen

Weil es könnte ja auch sein, dass dieses C irgend wieder was mit deinem A und deinem B zu tun hat und die Reihenfolge, in der du Sachen addierst, sich auf die nächste Addition irgendwie auswirken.

Jochen

Sodass halt, wenn du das in der Vorloop machst, kommt halt was anderes raus, als wenn du das parallel machst.

Jochen

Und dann muss der Compiler natürlich sagen, so, nee, kann ich nicht automatisch optimieren, weil weiß er nicht, vielleicht ist das irgendwie, hat das, ist das die Programmlogik, dass das so sein muss.

Jochen

So, das heißt, sowas Simples geht schon nicht.

Jochen

Also man kann natürlich irgendwie dann so Hinweise an den Compiler dazu schreiben, dass man sagt, so hier ist okay, darfst du schon optimieren, mach da mal.

Jochen

Aber so generell kann ein Compiler das nicht machen.

Jochen

Und damit ist es natürlich schon irgendwie, ja, und einer der Gründe, warum das auch in Fortran so viel schöner funktioniert, ist, da gehen solche Sachen nicht.

Jochen

Da kannst du nicht, kann nicht das Ergebnis einer Addition, wenn du zwei solche Arrays addierst, kann nicht sich auswirken auf die nächste.

Jochen

Das C kann nicht irgendwie wieder zu A oder zu B gehören.

Jochen

Da das ausgeschlossen ist, kannst du in Fortran solche Operationen halt automatisch vektorisieren.

Jochen

Das ist einer der Gründe, warum das halt irgendwann auch alles irgendwie fortan ist.

Jochen

Auf der anderen Seite, es müsste nicht unbedingt.

Jochen

Du kannst auch ein C machen oder ein C<unk>, wenn du das halt dem Compiler entsprechende Hinweise gibst.

Jochen

Aber es ist alles irgendwie nicht so ganz einfach.

Jochen

Und ja.

Jochen

Wahrscheinlich will man sich da auch nicht mit rumschlagen.

Jochen

Aber wenn man einfach so Pannas verwendet, dann passiert das ja alles automatisch und man halt nichts damit zu tun.

Das ist gut.

Jochen

Ja, genau.

Jochen

Vektorisierung hatten wir dann.

Simon

Genau, was wir vielleicht nochmal ein bisschen detaillierter ansprechen können, ist irgendwie das Plotting.

Simon

Also es gibt für jedes Data Frame erstmal ein Dot-Plot und da kann man noch ein paar Parameter angeben und seinen Plot konfigurieren.

Simon

Es gibt auch noch eine Reihe von anderen Funktionen.

Simon

Ich habe die auch nie alle im Kopf, aber da gibt es irgendwie noch Scatter und Box und da hat man dann verschiedene Diagrammtypen auch standardmäßig schon vorimplementiert, damit man sich nicht mehr darum kümmern muss, die Plot-Funktion entsprechend durchzukonfigurieren.

Simon

Sondern man bekommt direkt die Plots, die man haben möchte.

Simon

Und eine Sache, die ich ganz schön finde, ist, man kann als Spalten da auch wieder die Spaltennamen angeben.

Simon

Man muss jetzt nicht irgendwelche Koordinaten in dem Dataframe angeben, sondern man sagt, Plotte bitte Höhe, Breite, Länge gegen Zeitachse und dann passiert das genau so.

Simon

Das ist einfach auch dann deutlich besser lesbarer und wartbarer Code, den man schreibt.

Dominik

Welche präferiert ihr von diesen Plotting-Bibliotheken?

Dominik

Also jetzt irgendwie Matplot mit C-Born oder dann doch Bookie oder?

Jochen

Ich verwende meistens C-Born tatsächlich in Notebooks, aber es kommt halt drauf an, auf den Einsatzzweck.

Jochen

Also meistens reicht mir das, meistens müssen die für mich nicht interaktiv sein und dann verwende ich halt C-Born, weil es einfach netter aussieht als Matplotlib direkt zu verwenden und das ist halt auch irgendwie einfacher.

Jochen

Es gibt halt manche Plots, da das geht auch mit Matplotlib, aber es ist halt schon so ein bisschen, also ehrlich gesagt, ich mache das meistens so, dass ich auf C-Born, auf der C-Born-Dokumentation halt dann so angucke, was ich so grob brauche und dann scrolle ich halt durch die Beispiele, bis ich irgendwas gefunden habe, dann kopiere ich den Aufruf und modifiziere den so lange, bis es halt irgendwie funktioniert.

Jochen

Wenn man jetzt mit ButtplotLib hingehen würde und das so nachbauen würde, dann ist das halt deutlich schwieriger.

Jochen

Und es geht natürlich auch, Matplotlip ist C-Born baut ja drauf auf, und Buttplot-Lib ist sehr mächtig, aber die AP ist nicht so ganz einfach.

Jochen

Und eigentlich musste ich da nie, da ich auch nie so wirklich komplizierte Visualisierungen mache, muss ich da nie so tief einsteigen, dass ich das irgendwie wirklich gebraucht hätte, sondern für mich reicht C-Born meistens aus.

Jochen

Und dann gibt es aber natürlich auch noch Fälle, wo man das halt so ein bisschen interaktiv braucht, wo man da drin zoomen können möchte oder man möchte es auf einer Webseite haben.

Jochen

Und dann ist es eher sowas wie Bokeh oder Plotly das, was man da verwenden möchte.

Jochen

Also gerade wenn man jetzt, also Plotly habe ich, glaube ich, auch schon mal für so Dashboards oder so kann man das ganz gut verwenden.

Jochen

Man kann tatsächlich relativ einfach eben, wenn man jetzt eine Datenbank hat oder so, man zeigt man daraus wieder Data Frames und die kann man dann sehr einfach mit Plotly irgendwie auf einer Webseite visualisieren und dann können sich die Leute, die das angucken, halt auch dann irgendwie den Bereich, der sie interessiert, halt irgendwie auswählen und da ranzoomen und so.

Simon

Also ich bin auch totaler Plotly-Fan.

Simon

Im Wesentlichen, was da rauskommt als Graph, ist eine kleine HTML-Seite oder auch nur ein Snippet, das man einbinden kann.

Simon

Und zugrunde liegt dem D3.js, das ist eine Visualisierungslibrary in JavaScript.

Simon

Und das hat super viele Funktionen, aber ich benutze das hauptsächlich dafür, dass man einen Maus-Hover auf den Datensatz hat.

Simon

Man fährt halt über den Graph drüber und man sieht den exakten Wert nochmal an der Maus.

Simon

Das ist so die wichtigste Funktion, die ich an Plotly immer wieder nutze.

Simon

Das kann man aber auch beliebig weiter eskalieren noch.

Simon

Es gibt jetzt neu von Plotly Dash.

Simon

Das ist ein ganzes Dashboard mit Plotly-Graphen, geschrieben in Flask.

Simon

Und das kriegt man auch super schnell hochgefahren.

Simon

Und es gibt sogar inzwischen ein GitHub-Projekt, das eine Django-Anbindung für dieses Plotly-Dashboard macht.

Simon

Also da kann man dann im Wesentlichen eine ganze Website mit Datenvisualisierung als Django-Applikation direkt ausliefern.

Simon

Was auch ziemlich nett ist, habe ich aber noch nicht im Detail ausprobiert.

Dominik

Gibt es was auch für R?

Jochen

Ja, ja, ja.

Jochen

Man muss gerade sagen, Dash ist halt so ein Nachbau von etwas, was halt in A super populär ist und in A heißt das Shiny.

Simon

Ja, genau.

Jochen

Und das ist eigentlich immer noch so ein bisschen der Goldstandard für diese Geschichten, weil, also ich weiß nicht, wie weit, also ich habe jetzt auch schon lange nicht mehr angeguckt, aber wie weit Dash da jetzt ist, ob die das schon, ob sie da dran sind, aber man hört immer noch, dass viele Leute sagen, so, ah, aber Shiny ist schon irgendwie toll und ich mag das lieber, als irgendwie, da gibt es noch keine so richtige Alternative in der zweiten Welt zu.

Simon

Ich meine, da guckt auch jeder vom anderen ab, ehrlicherweise.

Simon

Also R hat auch irgendwann angefangen mit diesen Notebooks und hat jetzt die Möglichkeit, ganze Berichte in Markdown zu mischen mit ausführbaren Code-Zellen.

Simon

Also im Prinzip das, was man mit Jupyter-Notebooks für Python hat, gibt es auch in R.

Simon

Da, also das ist so eine Koevolution der beiden der beiden Analyse-Workflows, sage ich mal.

Jochen

Wobei man sagen muss, dass die ursprüngliche Idee für diese Notebook-Geschichte, das kommt aus Mathematiker und gibt es schon ganz lang.

Jochen

Aber es nie, hat sich nie so wirklich durchgesetzt, bis dann jemand als, äh eben, bis Leute, das dann halt irgendwie dieses Jupyter-Projekt, aus das aus dem iPython-Interpreter halt irgendwie rausgewachsen ist, bis das da implementiert wurde.

Jochen

Und ich habe jetzt auch letztens gehört, dass jemand Steven Wolfram, also den Mathematiker-Autor, da irgendwie gefragt hat, warum das jetzt, warum das eigentlich nicht Open Source wäre, weil das hätte sich doch jetzt irgendwie durchgesetzt und voll toll und so.

Jochen

Und die Idee war ja vorher schon da, aber ist unbekannt geblieben.

Jochen

Und ja, Steven Wolfram hatte darauf gegeben, so, ja, also ich hätte das ja schon gerne als Open Source irgendwie veröffentlicht, aber das ging damals nicht, weil es keine Distributionsmöglichkeiten dafür gehabt.

Jochen

Es wurde halt alles irgendwie auf Idees und die VD ist irgendwie, tja.

Jochen

Ja, also manchmal, es ist komisch, ne?

Jochen

Es reicht nicht irgendwie, dass eine Idee super ist oder so, sondern es müssen mehrere Sachen zusammenkommen, damit irgendwas wirklich dann abhebt.

Jochen

Und manchmal, ja, kommt dann, denken Leute, dass irgendwie eine Idee erst kurz gibt oder so.

Jochen

Das gibt es schon ganz lange, aber die Umstände waren halt nicht richtig, sodass sie halt vorher halt noch nicht abheben konnte.

Jochen

Und das ist bei diesen Jupyter-Notebooks ist das halt schon so.

Jochen

Ich denke, das war halt genau der richtige Moment und jetzt ist es halt groß geworden.

Und ja.

Dominik

Shiny, let's be bad guys.

Simon

Ich meine, gerade im Data Science-Bereich, wo man schnell viele Dinge ausprobieren muss, ohne Skripte von Anfang neu laufen zu lassen, ist natürlich der Killer-Anwendungszweck für diese Notebooks.

Ja.

Dominik

Ja, haben wir noch was hier für Pandas?

Simon

Ja, also Pandas ist ja nie isoliert zu betrachten.

Simon

Wir haben ja jetzt ganz viel schon auch über NumPy gesprochen, über Cborn und Matplotlib.

Simon

Und die eine Bibliothek, die ich eingangs noch mit erwähnt hatte, war Stats Models.

Simon

Und die bringt da im Prinzip noch eine Funktionalität rein, die ich persönlich auch erstmal nur von A kannte.

Simon

Und zwar ist das, Formeln anzugeben, auf die man dann Fitting machen kann oder die man auch plotten kann.

Simon

Und diese Formeln, das ist vielleicht erstmal ungewohnt, wenn man das noch nie gesehen hat.

Simon

Gibt man im Wesentlichen irgendwie an als sagen wir mal eine geraden Gleichung y tilde x.

Simon

Also eine Variable Y, die abhängig ist von einer Variable x und als lineare Funktion zu verstehen ist.

Simon

Und in diesem Stats-Models gibt es die Funktion OLS, um diese Formeln abzubilden.

Simon

Die kann man dann auch mit Pandas Data Frames zusammen benutzen, um wieder Plotting zu machen.

Dominik

OLS meinte Optimal Linear Squares Modeling, oder?

Simon

Müsste ja.

Jochen

Ordinary Linear.

Ordinary Linear Square

Jochen

Squares oder sowas?

Jochen

Ich weiß nicht mehr.

Keine Ahnung.

Simon

Also im Wesentlichen irgendwie lineare Gleichungen anzugeben.

Simon

Da gibt es auch noch ganz viele andere Möglichkeiten.

Simon

Das ist nur jetzt der einfachste Fall immer, wo man eine lineare Gleichung angibt.

Simon

Und diese Variablen, die man da angibt, die können in meinem Pandas Data Frame zu finden sein.

Simon

Und dann kann ich das Plotting darüber machen.

Simon

Da kann ich einmal die Trendlinie direkt plotten, ich kann das Fitting direkt über die Pandas Data Frames machen.

Simon

Also die greifen da irgendwie, also alle diese Bibliotheken greifen sehr stark ineinander.

Simon

Und da würde es auch gar nicht reichen, die 2900 Seiten des Pandas-Handbuch komplett zu lesen.

Simon

Man müsste halt auch noch das NumPy-Handbuch komplett lesen und dann vielleicht das Matplotlib-Handbuch noch komplett lesen.

Dominik

Also falls ihr die 2900 Seiten Handbuch gelesen habt, dann sagt mal Bescheid und schreibt uns eine E-Mail.

Jochen

Ja, genau.

Jochen

Was Zeitreihenmodellierungsgeschichten angeht, aber habe ich noch nie so wirklich viel mit gemacht.

Jochen

Ich bin eher so bei Cycit Learn zu Hause und also Machine Learning Bibliothek und auch da ist es so, also meistens, bevor man halt irgendwelche Daten, bevor man Daten irgendwie in Modelle kitten kann, muss man die halt mit Pannas einmal aufräumen.

Jochen

Und dann war es halt so, früher musste man dann immer noch so, okay, ich habe das jetzt in einem Data Frame, wie kriege ich die Daten jetzt, wie kriege ich die Daten jetzt so, dass ich die an meine Modelle verfüttern kann.

Jochen

Und das war auch mal so ein bisschen problematisch und das ist jetzt aber auch schon, weiß ich nicht, ob die letzte oder vorletzte Version von Cycle Learn war auch kein Problem mehr, weil man jetzt automatisch auch, weil man jetzt auch nicht, weil früher brauchten die ganzen, also in Cycle Learn heißen die Dinger Estimators, Estimator-API, die haben halt NumPy-Arrays genommen und jetzt mittlerweile nehmen die halt auch Pandas Data Frames und die Spaltenname erhalten und wenn man halt irgendwie hintergucken möchte, okay, was ist denn jetzt wo gelandet und so

Jochen

und dann kann man da auch mit den Spaltennamen arbeiten und das ist alles sehr, sehr bequem geworden.

Jochen

Und das greift halt auch da wiederum ineinander und das ist halt eigentlich sehr schön.

Jochen

Das ist ein großes Data Science-Ökosystem mittlerweile und das ist halt schon toll.

Jochen

Ah, dazu fällt mir ein, genau, Space-Data ist natürlich auch noch ein Problem.

Jochen

Da gibt es irgendwie einen Sparse-Type von Sci-Pi, das hat man früher mal verwendet.

Jochen

Es gibt ein paar Modelle, die halt in Cycle Learn mit sparsen-Daten umgehen können.

Jochen

Also das sind halt, also Sparse heißt Daten, bei denen die meisten Werte null sind.

Jochen

Also zum Beispiel, wenn ich jetzt einen Text oder eine Menge von Texten in Vektoren verwandle, dann ist jedes Wort eine Dimensionen sozusagen.

Jochen

Und das heißt, ich habe eine Tabelle mit, wenn ich einen kompletten Text, wenn ich eine Menge von Texten in eine Matrix verwandeln möchte, in so eine Feature-Matrix verwandeln möchte, und dann ist jedes Dokument eine Zeile und die Spalten sind halt die Worte, die drin vorkommen.

Jochen

Dann sind halt, die kommen halt die meisten Worte, die es so gibt, in einem Text aber nicht vor.

Jochen

Das heißt, die allermeisten Werte sind halt null.

Jochen

Und jetzt ist es halt blöd, dass halt dich zu speichern, diese ganzen Nullen immer mit zu speichern, weil eigentlich interessieren die einen ja gar nicht.

Jochen

Und dafür gibt es dann so Space-Formate.

Jochen

Und dann gibt es dann ja CSA oder CSO-Formate in SciPy.

Jochen

Aber das ist halt auch alles ein bisschen unschön.

Jochen

Und jetzt eben in der letzten Release von Panas war auch ein natives Space-Datenformat mit drin.

Jochen

Das habe ich mir aber noch nicht angeguckt.

Jochen

Aber es sieht auch interessant aus.

Jochen

Ich weiß auch nicht, ob man das jetzt in Scikit Learn schon verwenden kann.

Jochen

Aber das ist genau, das wird halt auch noch mit abgedeckt.

Jochen

Und ja, das ist auch noch so ein nicht uninteressantes Detail.

Jochen

Gibt es noch andere Bibliotheken aus den SikedLearn, Stats Models?

Jochen

Sci-Py, ja.

Jochen

Die ganzen Visualisierungsgeschichten.

Jochen

Oh, ja, doch eine Geschichte auch noch wichtig, wenn man jetzt tatsächlich größere Datenmengen hat oder halt auch Operationen, die lange dauern und man hatte irgendwie so eine dicke Kiste mit irgendwie, weiß ich nicht, 64 Prozessoren, irgendwie einem halben Terabyte Hauptspeicher oder so wie sowas.

Jochen

Und man ist so ein bisschen angeödet davon, dass das irgendwie immer nur auf einem Prozessor läuft, dann kann man da was tun.

Jochen

Da gibt es ein auch sehr schönes Projekt, das nennt sich DASK.

Jochen

Und damit kann man das halt so ein bisschen auf mehrere Prozessoren skalieren.

Jochen

Also was das letztendlich tut, ist ein Data Frame halt in viele Kleider zu hacken und dann halt die Operationen halt auf Prozessoren zu verteilen und dann halt das hinterher wieder zusammenzuführen.

Jochen

Aber es kann halt, also ich glaube, mehr oder weniger beliebige Compute-Graphs kann man da irgendwie angeben.

Jochen

So ist es halt einfache Dinge sind halt einfach damit zu parallelisieren, wenn man komplizierte Sachen machen möchte, dann muss man da auch so ein bisschen nachdenken und dann halt eventuell sich überlegen, wie man das halt ausgeführt kriegt.

Jochen

Aber im Grunde funktioniert das so, man hat halt so eine Deferred-API, man sagt halt, was man tun möchte und dann am Schluss sagt man irgendwie jetzt Collect oder so.

Jochen

Und dann, oder ich glaube, also man ruft halt irgendwie eine Funktion auf, die sagt, so, und jetzt rechnet das halt alles mal aus und dann wird das halt auf die unterschiedlichen Prozessoren verteilt, wird alles ausgerechnet und am Schluss hat man das alles wieder in einem Data Frame und die Geschwindigkeit hat sich dann, wenn man, wenn man Glück gehabt hat, halt irgendwie linear ist dann linear skaliert und man braucht nur noch ein Sechzigstel der Zeit oder so.

Genau.

Jochen

Das ist auf jeden Fall auch ein Ding, was man sich nochmal angucken sollte.

Jochen

Also was zu Skalierungsgeschichten angeht.

Jochen

Ja, wenn die Datenmengen dann noch viel größer sind oder dass sie halt nicht mehr in den Hauptsprecher auf einer Maschine passen oder so, dann muss man sich nochmal was anderes überlegen.

Jochen

Dann bleibt eigentlich nur, dass man das dann, dass man irgendwie dann Richtung Spark geht oder sowas.

Jochen

Aber diesen Fall hat man fast nie, weil mittlerweile die Maschinen so viele Hauptspeicher haben, dass das irgendwie kaum vorkommt.

Simon

Wenn es nicht mehr einen Hauptsprecher passt, Geld dagegen werfen und mehr Hauptspeicher entworfen.

Dominik

Ja, wenn wir schon beim halben Terabyte angekommen sind, da ist ja schon noch ein bisschen Platz.

Jochen

Ja, geht eine ganze Menge rein.

Jochen

Ja, so Skalierung hatten wir jetzt auch so ein bisschen.

Dominik

Wir hatten noch, glaube ich, dieses Where's McKinney, hast du kurz erwähnt, da hatten wir, glaube ich, einmal in unserer Weihnachtsfolge, die Stand Things, I Hate About Pandas irgendwie.

Jochen

Ah, ja, ja, ja, genau.

Dominik

Ich weiß nicht, ob da noch was rauskam.

Jochen

Ja, der also er arbeitet halt hauptsächlich an dem Arrow-Projekt.

Jochen

Da geht es darum, eine neue Grundlage zu schaffen, und zwar nicht nur für Python, sondern für alle anderen Programmiersprachen auch, weil man halt halt das Problem, dass man, man möchte eigentlich nicht, wenn man Daten hat, die groß sind und man möchte die nicht mehrfach im Hauptspeicher halten, aber momentan kommt man nicht drum rum, wenn man jetzt beispielsweise in R und in Python irgendwie auf Daten irgendwie was machen möchte, dann muss man die halt irgendwie erst, wenn die jetzt in Python hat, serialisieren, irgendwo hin auf die Platte schreiben, dann in

Jochen

A wieder einlesen und hat sie dann im Endeffekt zweimal im Hauptspeicher, was natürlich irgendwie doof ist.

Jochen

Und das Projekt ist sozusagen eine stellt halt sozusagen Schnittstellen für alle Programmiersprachen bereit, aber die Daten selber werden nur im Hauptspeicher an einer Stelle gehalten und dann kann man mit allen Sprachen, also was weiß ich, von Java bis C, C<unk>, Rust, was auch immer, irgendwelche Leute schreiben gerade eine Query-Engine für Arrow in Rust, Python, A darauf zugreifen und da irgendwelche Manipulationen drauf machen, ohne dass es halt dann jedes Mal eine Kopie macht.

Jochen

Und das ist natürlich auch eine sehr, sehr interessante Geschichte.

Jochen

Weil das ist eben, davon hatten wir es ja auch schon ein paar Mal, irgendwie momentan so ein, wenn man mit so Big Data-Geschichten Hadoop-Clustern zu tun hat, so ein Problem, dass man da nicht so gut an die Daten rankommt.

Jochen

Und ja, das war auch eines der ersten Geschichten, die Arrow gemacht hat, war, Parquet-File-Parser zu implementieren, sodass man halt zumindest die Files, in denen die Daten liegen, halt irgendwie lesen kann.

Jochen

Ja, und das ist, glaube ich, also mittlerweile funktioniert das irgendwie fast allen Sprachen, dass man das halt sozusagen als Ersatz für Dumpai auch nehmen kann.

Jochen

Also eine Geschichte ist, wo das, dass man in Pandas das nicht so wirklich schmerzfrei Numpai austauschen kann, weil das halt viele Sachen in Pandas buhen halt darauf, dass Numpai so ist, wie es ist.

Jochen

Das wird halt schwierig.

Jochen

Da gibt es auch eine Serie von Artikeln zu, nennt sich Pandas 2.0 irgendwie, wo man dann halt überlegt, dass man die API so nicht abwärtskompatibel ändert.

Jochen

Dazu hat WesmerKinney 2015 ein paar Artikel geschrieben.

Jochen

Bisher ist da nicht so viel passiert, aber man müsste, wenn man jetzt komplett auf Arrow umsteigen wollte und so, dann müsste man da wahrscheinlich irgendwie viel auch an dem Frontend von Pandas ändern und das wird da halt nochmal schwierig.

Jochen

Und es ist so, dass was auch noch in nächster Zeit bei Arrow ansteht, ist, es gibt so einen großen, so eine große Kluft zwischen dem, was halt im Datenbankenbereich passiert ist und dem, was halt im Data Science-Bereich passiert ist und da geht es auch darum, das so ein bisschen anzugleichen.

Jochen

Also was man zum Beispiel nicht hat, ist eine Query-Engine für Arrow.

Jochen

Also daran wird halt gerade geschrieben.

Jochen

Also nächsten, ich glaube, das ist das Projekt so für die nächsten zwei, drei Jahre in Arrow ist halt so, wäre doch schickt, da auch so eine SQL-Engine drauf zu haben, sodass man halt Arrow auch als Ersatz oder Alternative zu Impala oder sowas halt auf Clustern verwenden könnte.

Jochen

Weil das ist im Grunde auch eine SQL-Engine in C geschrieben, die halt auf so einem Hadoop-Cluster laufen kann.

Jochen

Und dann kann das aber viele der Sachen, die man halt in so Datenbanken hat, auch noch nicht.

Jochen

Also ganzen Indic-Index-Geschichten und so.

Jochen

Und ja.

Jochen

Da läuft das aber irgendwie so hin.

Jochen

Also ich meine, wenn man jetzt sich so eine ideale Zukunft mal ausmalen würde, könnte, würde ich sagen, wäre das eigentlich sowas.

Jochen

Man hat eben so ein In-Memory Storage, äh, als In-Memory Storage Arrow oder so.

Jochen

Man hat irgendwie als Frontend etwas Pandas-ähnliches.

Jochen

Es gab da auch schon einen Ansatz von eben auch wieder von Ves McKinney, eine zentrale Figur, das nennt sich Ibis, das Projekt, wo es darum geht, ein Superset von SQL zu haben, das möglichst pandasähnlich ist.

Jochen

Mit dem man aber all das machen kann, was man sonst auch mit SQL-Datenbanken macht.

Jochen

Und ja, das halt auch so eine Default-Execution-Geschichte macht, dass man halt hinterher nur sagt, irgendwie, man definiert die ganzen Transformationen, Abfragen, die man da macht und dann am Schluss sagt man so und jetzt ausführen und dann geht das quasi an so ein Cluster raus.

Jochen

Und das ist mit SQL auch alles, SQL ist sowieso blöd, weil ja diverse Geschichten gehen halt mit SQL nicht so richtig gut.

Jochen

Also man kann auch Tests für SQL schreiben oder das alles ziemlich hässlich.

Jochen

Und man kann auch nicht so wirklich Code-Sheren.

Jochen

Also wenn jetzt, es gibt nicht sowas wie Funktionen, wenn man jetzt ähnliche Abfragen macht in unterschiedlichen Kontexten, dann kopiert man oft die Statements und so.

Jochen

Das ist alles nicht so schön.

Jochen

Und das ist halt mit so einer Notation wie in Ibis halt deutlich besser, weil da kann man das einfach in Funktionen packen und die Funktionen woanders halt verwenden und so.

Jochen

Und das geht halt schöner.

Jochen

Ja, und das dann halt auch nochmal ändern.

Jochen

Weil mit SQL-Statement konntest du das ja auch eine Funktion packen, aber das Problem ist, dann hast du halt genau dieses Statement.

Jochen

Du kannst das Statement kaum ändern.

Jochen

Außer du nimmst halt ein ORM, aber ORM ist dann auch wieder wieder eigene Probleme und ja.

Jochen

Also ich würde mir eine ideale Welt würde ich mir so vorstellen.

Jochen

Also für kleine Datenmengen funktioniert man das ja schon super.

Jochen

Bis auf diese kleinen Hässlichkeiten wie eben None und diese Block-Storage-Geschichten, aber das kriegt man ja alles in den Griff mit der Arrow-Extension-API.

Jochen

Aber für große Datenmengen, dass man halt so was ähnliches hat wie eben Spark oder auch Loop, man hat einen großen Cluster, wo dann in Memory halt die ganzen Daten in Apache Arrow quasi liegen und man dann auf Arrow aufsetzend irgendwelche Query Execution Engines hat, die man füttert von einem Pannas-ähnlichen Frontend aus, wo man dann halt definiert, was man gerne hätte und das dann halt irgendwie auf den Cluster verteilt wird.

Jochen

Dass man halt irgendwie so eine Art Array-Datenbank, verteilte In-Memory-Array-Datenbank mit so einer vielleicht Intermediate SQL-ähnlichen Query Engine hat, aber so als Frontend sowas wie Pandas.

Jochen

So dass man dann halt auch auf wirklich großen Datenmengen einfach so Transformationen machen kann wie in Pandas.

Jochen

Das wird vielleicht noch ein paar Jahre dauern, aber das wäre so das, was ich mir wünschen würde, was passiert.

Jochen

Und dass man vielleicht irgendwann dann tatsächlich Pandas 2.0 hat, wo man nochmal komplett neu irgendwie diese ganzen Geschichten, die bei in der Kombination mit Numpi halt nicht so toll sind, gelöst werden, aber das kann auch sein, dass das nie passiert, weil so viele Leute jetzt Panas verwenden.

Ja.

Simon

Ich sagte gerade noch, also, wenn der Jochen heute anfängt, dann hören wir jetzt monatelang keinen Python-Podcast mehr, aber es hört sich gut an, mach das.

Jochen

Nee, ja, ich.

Jochen

Das Projekt ist ja schon, da gibt es ja gut Leute.

Simon

Also ich kann es auch kaum erwarten, aber es wird wahrscheinlich noch ein paar Jährchen dauern.

Simon

So schnell ist das nicht umzusetzen.

Simon

Ja, ich weiß nicht, von meiner Seite, ich wüsste jetzt spontan nichts mehr.

Simon

Wenn ihr mich jetzt fragen würdet, fragt doch mal, was sind so die drei wichtigsten Sachen, die ich mit nach Hause nehmen muss, wenn ich mal mit Pandas anfangen möchte?

Dominik

Was sind die wichtigsten drei Sachen, die du mit nach Hause nehmen musst, lieber Simon, wenn du mal mit Pandas anfangen möchtest?

Simon

Ich würde sagen, Describe, Plot und Apply sind so die drei ganz zentralen Dinge, die man sich angucken möchte, weil da kann man fast alles schon mitmachen.

Dominik

Ja, okay.

Jochen

Ja, ich würde sagen, Reads V, sollte man sich auch mal angucken.

Simon

Ja, okay.

Simon

Also Datenimport.

Jochen

Aber sonst, ja, ne, klar.

Jochen

Doch.

Dominik

Ja, schön, schön.

Dominik

Schöne Strukturierung mit unseren Daten über Pandas.

Ich finde es hervorragend.

Dominik

Ja, dann würde ich sagen, sind wir mit dem Pandas-Thema tatsächlich für heute soweit durch.

Dominik

Und vielleicht machen wir noch so ein bisschen Abschluss und erzählen noch ein bisschen was von euren Lieblingspicks oder sowas.

Simon, möchtest du anfangen?

Dominik

Irgendwie hast du ein Lieblingspick, irgendein Modul, was du.

Simon

Da muss ich kurz einen Moment drüber nachdenken.

Dominik

Bitte, dann esse Jochen zuerst.

Jochen

Ja, ich überlege gerade, ob ich irgendwas Pandasmäßiges habe, aber ich fürchte, nee, ich mal, was man sich mal angucken kann, ist eine Bibliothek namens Alkali.

Jochen

Das ist so ein Django ORM-Style-Ding.

Jochen

Aber für flache Files.

Jochen

Und das ist halt auch ganz, ganz nett, wenn man jetzt irgendwie zum Beispiel irgendwelche, wenn man halt Django kann, zum Beispiel, und den ORM da schon so ein bisschen, damit schon so Sachen gemacht hat, dann kann man halt auch da auf CSVs oder so halt Dinge machen, die so ähnlich sind.

Jochen

Also das ist quasi so die umgekehrte Richtung.

Jochen

Also wahrscheinlich wäre es praktischer, wenn man Pandas kennt, das halt mit Panas zu machen.

Jochen

Aber wenn man das nicht kann, dann kann man halt auch irgendwie, wenn man Daten als CSV rausgeschrieben hat oder so, damit irgendwie wie auf einer Datenbank arbeiten.

Jochen

Das fand ich ganz witzig, die Idee.

Jochen

Deswegen würde ich das mal picken, aber ja.

Dominik

Ich würde tatsächlich Pickel nehmen.

Dominik

Ich weiß nicht, hatten ja schon mal oder so, ich fand das total super, dass man da so Python-Objekte speichern kann.

Jochen

Stimmt, nee, das hatten wir noch nicht.

Jochen

Ist auch Teil der Standardbibliothek und genau, daher muss man nichts zusätzlich installieren.

Jochen

Das ist super.

Dominik

Kann man eigentlich auch mit Data Frames machen, oder?

Dominik

Ich weiß jetzt nicht, wie schnell sowas geht und ob man das nicht lieber in der Datenbank dann speichert, aber.

Jochen

Doch, kann man mit Data Frames auch machen.

Jochen

Ist auch tatsächlich ziemlich schnell.

Jochen

Ist auch, habe ich oft gemacht.

Dominik

Wenn man Lust macht und wieder anfangen muss, immer an der gleichen Stelle zu debuggen, dann lädt man einfach dann irgendwann den Pickel ein oder so.

Dominik

Spart nicht immer die Zeit vor dem Ausführen.

Jochen

Ja.

Jochen

Also genau, das ist tatsächlich, wenn man, also ich finde, Data Frames zu pickeln, es funktioniert ganz gut.

Jochen

Also man muss vielleicht dazu sagen, man muss dem Ganzen vertrauen.

Jochen

Also wenn man wenn einem jemand so einen Pickelfile gibt, ist er so, hier, so ein, wie wäre das bei der Silha Straße immer so, macht so einen French Code auch so?

Psst will so ein Pickel-Pfeil von mir deserialisieren.

Jochen

Genau, dann lieber nicht machen, weil das führt halt beliebigen Code aus und ja, das ist vielleicht nicht so schön.

Jochen

Aber wenn man das selber generiert hat, dann ist es ja vielleicht okay.

Jochen

Und dann ist es auch sehr schnell.

Jochen

Also da kann man durchaus, also wenn die IO, ich habe das nicht an die Grenzen, oder warte, nee, ich glaube, ich habe das tatsächlich nicht an die Grenzen bringen können, sondern das war immer so schnell, wie halt das Plattensystem drunter war.

Jochen

Also ich habe damit auch schon, also ging halt so Gigabyte pro Sekunde halt durch.

Jochen

Sobald bei CSV ist richtig langsam.

Jochen

CSV ist halt so ein, wenn es schnell ist, ein paar 10 Megabyte pro Sekunde.

Jochen

Was halt, wenn du ein paar Gigabyte große Files hast, dann dauert das.

Jochen

Und Pickel ist halt so, selbst wenn die Files Gigabytes groß sind, kann es sein, dass halt, wenn das IO-System, das du hast, schnell ist, dann dauert das halt zwei Sekunden, ist das da.

Jochen

Und das ist natürlich schon schön.

Jochen

Es gibt andere Formate für, gerade um Daten wie im DataFrame, man sehr oft hat, irgendwie zu speichern HDF zum Beispiel oder Pheather gibt es da auch eine Library, wo wir es auch veraltet eigentlich.

Jochen

Heute würde man eher dann eben Arrow verwenden und dann ein paar K-Files lesen und schreiben.

Jochen

Das ist auch sehr schnell.

Jochen

HDF5 geht so, ist ein bisschen, ist nicht ganz so schnell, aber ja, lass mal überlegen, gibt es sonst noch irgendwelche Formate, die interessant sind?

Simon

Es gibt dieses NetCDF4, das ist die Weiterentwicklung von HDF.

Simon

Und da hat man dann.

Dominik

Hier ist die Weiterentwicklung von 5.

Simon

NetCDF4.

Simon

Das ist schon die vierte Iteration von NetCDF, aber irgendwann sind die wohl aus HDF entstanden.

Simon

Wie das genau zustande ist gekommen ist, weiß ich auch nicht.

Simon

Die haben dann so Späße wie man kann direkt File-Blobs angeben und dann über mehrere Files eine Variable öffnen.

Simon

Das ist ganz spannend, wenn man sehr große Datensätze als Chunks auf seiner Festplatte hat.

Simon

Aber technische Details dazu weiß ich jetzt auch nicht.

Dominik

Ja.

Dominik

Sim, hast du noch ein Lieblingsmodul?

Simon

Ja, ich habe ja eben schon gesagt, ich mag Plotly unheimlich gerne.

Simon

Aber wenn man Plotly-Graphen erstellen möchte, dann muss man irgendwie so ein ganz tief verschachteltes Data Dictionary bauen und dann ein Layout-Dictionary bauen und super viel konfigurieren.

Simon

Und Matplotlib geht halt schnell.

Simon

Und Plotly hat kürzlich noch ein Tool rausgebracht, Matplotlib to Plotly-Graphen, wo man, das funktioniert noch nicht perfekt, aber so die Basisgraphen wie Boxplots oder Scatterplots oder sowas kriegt man damit in Matplotlib ganz schnell definiert, irgendwie mit zwei, drei Zeilen Code und dann mit einer Zeile konvertiert in Plotly-Graphen.

Simon

Und dann hat man direkt dieses interaktive, man hat Maushover und man kann zoomen und so.

Simon

Das fand ich ganz schön.

Ist aber noch in den Kinderschuhen.

Simon

Ist neu in den Kinderschuhen, ja.

Dominik

Ja, aber finde ich das spannend zu verfolgen, ja.

Cool.

Dominik

Habt ihr noch irgendwas, was ihr loswerden wollt, irgendwie das zu eurem Modul der Woche oder sind wir damit durch und

Jochen

nö, ich glaube damit.

Jochen

Achso, vielleicht, ja, wollen wir genau nächste Woche ist vielleicht ganz interessant, wenn irgendjemand da ist, der zuhört, zufällig, aber ich glaube, es glaubt es wahrscheinlich nicht.

Jochen

So eine Podcast-Konferenz in Köln.

Dominik

Ja, die Subscribe.

Jochen

Bei uns genau um die Ecke ist, dachten wir gehen da auch mal hin.

Dominik

Genau, und die uns finden.

Jochen

Genau, da könnte man uns treffen, wenn man wollte.

Jochen

Also wer möchte, kann einfach eine Mail an uns.

Dominik

Das kommt in den Veranstaltungen bei.

Dominik

Genau, aber ihr könnt uns da gerne treffen tatsächlich.

Dominik

Ich wusste noch nicht genau, ob wir Freitag und Samstag und Sonntag da sind.

Dominik

Aber auf jeden Fall am Samstag und am Sonntag werdet ihr es wahrscheinlich da sehen.

Dominik

Das besprechen wir noch genauer.

Dominik

Ja, es kommt so.

Simon

Ist ja immer mal wieder Django zur Sprache gekommen.

Simon

Anfang April ist die Django Con in Kopenhagen.

Simon

Oh ja.

Simon

Vom 10.

Simon

bis zum 14.

Simon

April ist es, glaube ich.

Dominik

Sieht man dich da?

Simon

Mich nur am 9.

April.

Simon

Da ist das Django Girls Camp, einen Tag Django Lernen.

Simon

Ja, ja.

Simon

Da fliege ich kurz hin als Mentor.

Simon

Ich habe leider für die Konferenz selber keine Zeit.

Dominik

Ja, ja, okay, super.

Dominik

Ja, wolltest du noch was zu dem Cast sagen, zum Django-Cast, Jochen, oder machen wir das von anders?

Jochen

Ja, also da letztens gab es irgendwie so ein Mail von Apple, wo sie gesagt haben, also wir werden euch jetzt nicht direkt auslisten, äh, irgendwie, aber ihr solltet dann mal vielleicht irgendwie ein paar Sachen an eurem Feed erinnern, da muss ich jetzt nochmal ran.

Jochen

Zum Beispiel sowas wie Episodennummern sollten nicht im Titel sein und so.

Jochen

Das machen aber alle, ich auch.

Jochen

Weil doch nochmal irgendwas dran tun.

Jochen

Und genau, ich, ja, wir machen da auch so einen kleinen Workshop irgendwie auf dem auf der Subscribe und was auch noch ein bisschen was für tun.

Jochen

Und da wäre es natürlich auch interessant, was da noch so, also was ich jetzt schon implementiert habe, ist, dass man jetzt nicht mehr das dann ein Jugendmin-Interface braucht, um irgendwie Audio-Files hochzuladen.

Jochen

Aber ja, mal gucken, was da noch so dazu kommt und dann, was super dringend ist, ist irgendwie, dass die Dokumentation mal so ein bisschen besser wird und so.

Dominik

Mal gucken, ob ich das Weizen zu schreiben.

Ja.

Dominik

Zumindest so den First Step oder so.

Den großen Struggle.

Dominik

Ja, wenn ihr irgendwie so Anfänger seid wie ich, dann kommt ihr da bestimmt noch irgendwo dran.

Dominik

Ja.

Dominik

Ja, dann vielen Dank, dass ihr zugehört habt heute auch wieder, dass ihr eingeschaltet habt.

Dominik

Wie auch immer, wann auch immer, wo auch immer.

Dominik

Lasst uns das übrigens wissen.

Dominik

Schreibt eure E-Mails, Kommentare an, hallo.python podcast.de.

Dominik

Und ja, gebt uns weiter an alle Leute, die Python interessiert in eurer Nähe, erzeitt euren Freunden, Kommilitonen.

Jochen

Ja, das kann man vielleicht auch mal, was man auch machen kann, ist auf iTunes bewerten, wenn das irgendwie, also das hilft natürlich stark.

Jochen

Aber genau, ansonsten, ja.

Dominik

Ja, genau.

Dominik

Sag's Bescheid.

Dominik

Erstmal hört uns gerne, vor allen Dingen wieder und so.

Dominik

Bleibt uns gewogen, wie man so schön sagt.

Jochen

Und bis zum nächsten Mal.

Dominik

Bis zum nächsten Mal.

Dominik

Tschüss.

Danke für die Einladung.

Tschüss.

Tschüss.