Transcript: PP06 - Pandas

· Back to episode

Full episode transcript. Timestamps refer to the audio playback.

Dominik

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

Dominik

Heute geht es um Pandas. Ja, was machen wir eigentlich? Wir sind, wie fast immer, in Jochens Wintergarten.

Dominik

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

Dominik

Ja, hallo Simon.

Dominik

Hi.

Jochen

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

Simon

Klar. Ja, ich bin Simon. Ich bin von Haus aus Biologe, immer mit Interesse für Informatik und Spieleentwicklung gesegnet gewesen und habe das dann irgendwie auch zu meinem Beruf gemacht.

Simon

Also ich habe nach meinem Bio-Studium ein bisschen geforscht in der Bio-Informatik. Da ging es dann viel um Datenanalyse von DNA-Sequenzen und so Dingen.

Simon

Game of Life.

Simon

Game of Life, ja, quasi. Nur in echt echt.

Simon

Und zusammen mit dem Wissen, was ich daraus getragen habe und meinem Interesse an Informatik und Spieleentwicklung,

Simon

mache ich heute als selbstständiger IT-Trainer Trainings für Game Engines und Trainings für Softwareentwicklung und parallel noch ein paar Softwareprojekte.

Dominik

Um das Gaming haben wir uns ja schon ein bisschen unterhalten, das machen wir auch nach der Folge ein bisschen intensiver.

Dominik

Aber heute soll es ja um Pandas gehen.

Dominik

Genau, heute...

Dominik

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

Dominik

Bevor wir aber jetzt auf das Pandas-Thema eingehen,

Dominik

würde ich gerne noch so ein bisschen wieder

Dominik

Formalkrams abarbeiten.

Dominik

Wenn ihr Fragen, Anmerkungen

Dominik

habt, Lobkommentare, Hass,

Dominik

dann schreibt uns doch an

Dominik

hallo-podcast.de

Dominik

Ihr findet natürlich die links und alle zusätzlichen Informationen

Dominik

wie in den Shownotes.

Dominik

Es gab noch ein bisschen User-Feedback und zwar

Dominik

sollten wir irgendwann mal eine Folge machen

Dominik

über Do's und Don'ts im Programmieren.

Dominik

Also seid doch bitte so nett

Dominik

und schickt uns einfach per E-Mail eure

Dominik

Do's und eure Don'ts. Das wäre super,

Dominik

dann schneiden wir das ein bisschen zusammen und fragen

Dominik

euch in einer der nächsten Folgen bestimmt irgendwann mal danach.

Dominik

Ja.

Jochen

Doch, es gab noch ein anderes eben zu der Datenbank-

Jochen

Folge, dass sie, dass das gar nicht so

Jochen

schlimm gewesen wäre mit der Länge und das

Jochen

ja, fand ich

Jochen

auch ganz gut. Ist übrigens vielleicht ganz interessant, also wenn man sich

Jochen

anguckt, welche Folgen komplett

Jochen

runtergeladen wurden, dann hat die beste Quote tatsächlich

Jochen

die Datenbank-Folge zur Zeit.

Jochen

Was ich ein bisschen überraschend finde. Ich hätte jetzt auch erwartet,

Jochen

dass es eher ein bisschen runter geht, aber ja.

Dominik

Vielleicht müssen wir noch mehr so Buzzword-Bingo-Sachen machen

Dominik

und dann ganz viele tolle Klickzahlen bekommen.

Dominik

Nein, wir machen das natürlich für alle unsere Hörer, vor allen Dingen für die, die sich dafür wirklich interessieren 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 oder ihr wisst ja, morgens, abends, nachts, beim Aufstehen im Flugzeug könnt ihr immer hören.

Dominik

Ja, bevor wir in das Thema gehen, ist weiterhin noch ein paar News aus der Szene und zwar gab es so ein bisschen was Neues, glaube ich.

Dominik

Python 3.8, zweite Alpha.

Dominik

Ja.

Dominik

Ja, da gab es so ein paar coole neue Sachen mit Shared Memory for Multiprocessing.

Dominik

Jochen, was ist das denn?

Dominik

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

Ah doch, ja, alles klar.

Jochen

Das ist ja immer so.

Jochen

Das war ja immer so ein Problem.

Jochen

Also man muss ja, wenn man jetzt über mehrere Prozessoren

Jochen

Berechnungen verteilen will in Python,

Jochen

das auf mehreren Prozessen machen,

Jochen

weil man ja irgendwie so ein Global Interpreter-Log hat,

Jochen

das halt verhindert, dass man das innerhalb von einem Prozess

Jochen

irgendwie mehrere Prozessoren benutzen kann.

Jochen

Und ja, früher hat man halt immer so das, oder hat man jetzt immer noch in der stabilen Version, aber vielleicht hat man das mit 3.8. nicht mehr so, das Problem, dass man, wenn man jetzt eine Funktion aufrufen möchte und, sagen wir mal so, man startet halt einen Pool von 5 Prozessen oder sowas oder 10 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, 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 macht ein paar Kassen auf einmal auf.

Jochen

Ja, ja, ja. 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. Das ist jetzt ein anderer Prozess. Das heißt, man kann nicht einfach das, also im Code ist es schon so, dass man einfach einen Funktionsaufruf macht. 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.

Jochen

In so kleine Häppchen und dass

Dominik

die ganze große Bestellung an verschiedenen Kassen

Dominik

abgearbeitet wird, um danach wieder in der richtigen Reihenfolge

Dominik

im Einkaufskraub zu landen.

Dominik

So ungefähr?

Dominik

Ja, man kann...

Dominik

15 Fehler wieder in einem Kasten.

Jochen

Ich weiß nicht, ob die Analogie da in der Stunde

Jochen

so gut passt.

Jochen

Ich weiß auch nicht genau.

Jochen

Ja, man

Jochen

muss es, ja.

Jochen

Man kann sich vielleicht vorstellen, dass man, wenn man jetzt

Jochen

einen riesen Einkaufswagen voll Zeug hat

Jochen

und möchte jetzt das an fünf Kassen

Jochen

aber bezahlen, dann

Jochen

muss man halt auch fünf Einkaufswagen haben, in die man

Jochen

das jetzt aufteilt und mit jedem Einkaufswagen

Jochen

einzeln zu einer Kasse und

Jochen

dann muss die

Jochen

irgendwer umpacken. Dann muss man die umpacken,

Jochen

genau, und das ist halt alles

Jochen

halbwegs aufwendig und

Jochen

kann halt auch zu Problemen führen, wenn die Daten sehr groß

Jochen

werden zum Beispiel, dann kann es sein, dass irgendwelche

Jochen

Dinge dazwischen halt aussteigen und das ist alles

Jochen

nicht so schön und

Jochen

ist es halt unter Umständen auch etwas, was

Jochen

Dinge langsam macht und jetzt geht es aber

Jochen

transparent mit Chat-Memory sozusagen.

Jochen

Das heißt, man hat halt die Daten, genau, das ist ja auch so ein Problem, wenn man jetzt Daten serialisiert und deserialisieren muss, dann kopiert man sie damit natürlich auch. Das heißt, wenn man große Daten hat, die jetzt vielleicht insgesamt nur einmal in den Hauptspeicher passen, aber nicht zweimal, wenn man sie kopiert, dann hat man sie halt zweimal drin und dann hat man so wenig Hauptspeicher, ist ja auch blöd.

Jochen

Und was halt schon immer viel, 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 findet.

Dominik

Ja, Shared Memory, ein eingeteilter Einkaufswagen

Dominik

fällt mir jetzt auch tatsächlich schwer.

Simon

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

Simon

Jede Kasse greift nur auf

Simon

einen Teil von dem Korb selber zu.

Dominik

Stimmt, wir haben eine Bohre von Kassen.

Dominik

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

Dominik

eingreifen. Das ist schön, ja.

Jochen

Genau, so könnte man sich das vorstellen, ja.

Jochen

Und das heißt, man hat halt

Jochen

selbst wenn man jetzt Daten hat, die

Jochen

so gerade in den Hauptspeicher vielleicht passen,

Jochen

dann kann man die trotzdem auf mehreren Prozessen verarbeiten.

Jochen

Und das macht natürlich

Jochen

Multiprocessing auf Python deutlich attraktiver und

Jochen

das ist irgendwie eine ziemlich coole Geschichte, wenn ihr jetzt in 3.8

Dominik

kommt. Da wird Python ja schneller.

Jochen

Ja, also, oder es wird einfacher

Jochen

damit, also man kann ja auch, das konnte man auch sowieso

Jochen

schon immer machen, man kann ja auch einfach

Jochen

Standard-Memory reservieren, da Dinge

Jochen

reinpacken, da gibt es übrigens auch

Jochen

ein schönes

Jochen

Modul in der

Jochen

Standard-Bibliothek, das heißt Struct.

Jochen

Struct? Genau, damit

Jochen

kann man zum Beispiel Daten

Jochen

halt so binär

Jochen

irgendwie in den

Jochen

Hauptspeicher schreiben.

Jochen

Und

Jochen

das zum Beispiel so tun, dass das halt

Jochen

C-Structs sind.

Jochen

Und dann kann man

Jochen

das halt, also das ist halt so etwas,

Jochen

so haben wir das früher halt gemacht, wenn wir Daten

Jochen

nicht so groß waren, dass man da nicht einfach

Jochen

irgendwas mehr tun konnte.

Jochen

Das heißt, man hat halt irgendwie

Jochen

einen Shared-Memory-Bereich, in den schreibt man halt

Jochen

irgendwie per Struct irgendwie

Jochen

sozusagen C-Struct-Daten

Jochen

irgendwie rein und hat dann Python-Prozesse,

Jochen

die wiederum einen Pointer auf diese Shared-Memory

Jochen

kriegen und

Jochen

die dann halt wieder ein C-Modul

Jochen

haben, das dann halt irgendwas mit den Daten macht und so.

Jochen

Und dann geht das auch schon, aber es ist halt viel Handarbeit

Jochen

und jetzt kriegt man das quasi so geschenkt

Jochen

und das passiert alles automatisch und das ist halt

Jochen

schon sehr, sehr nett.

Dominik

Hört ja auch gerade diese Hintergrundmusik, das ist so ein bisschen wie

Dominik

in Battlestar Galactica, diese

Dominik

G...

Dominik

Keine Opelide.

Dominik

Ja, die nächsten News aus der Szene.

Dominik

Doppelte Keys, gab es einen Post

Dominik

von Guido irgendwo, der hat irgendwas geshared.

Jochen

Es gibt ein neues Python-Enhancement-Proposal,

Jochen

das eine ganz interessante Geschichte vorschlägt.

Jochen

Und zwar geht es darum, dass man halt für Dicts

Jochen

vielleicht auch die Plus und Minus als Operatoren haben möchte,

Jochen

sodass man halt sagen kann, irgendwie Dict A plus Dict B.

Jochen

Und dann werden sozusagen die Keys hinzugefügt

Jochen

oder halt wird das eine,

Jochen

werden halt die Keys, die in dem einen Ding drin sind, entfernt,

Jochen

wenn man das halt abzieht.

Jochen

Und das ist natürlich auch eine ganz,

Jochen

Also es ist eigentlich relativ naheliegend.

Jochen

Es wundert mich, dass da bisher noch niemand drauf gekommen ist,

Jochen

dass man das irgendwie mal machen könnte.

Jochen

Aber das ist auf jeden Fall eine ganz interessante Idee.

Jochen

Und Guido hat da einen Artikel zugeschrieben.

Dominik

Ja genau, der hat zweimal den Key irgendwie draus zugewiesen

Dominik

und dann quasi einen Dictionary mit zwei identischen Keys erzeugt,

Dominik

wo dann nur einer von überlebt hat.

Dominik

Ja.

Dominik

Irgendwie so.

Dominik

Also wenn man halt, ich glaube, welcher Post war das?

Dominik

Wo er A einmal die Nullen, A einmal die Eins zugewiesen hat

Dominik

und dann war eins

Dominik

übrig, weil das die letzte Zuweisung war.

Dominik

Weil ich das richtig verstanden habe.

Jochen

Genau, das war das Verhalten, was mich irgendwie

Jochen

gewundert hat, aber das ist generell

Jochen

so, das war schon immer so, offenbar,

Jochen

wenn man halt, also insofern

Jochen

ist es halt kompatibel mit diesem Verhalten,

Jochen

dass wenn man

Jochen

jetzt irgendwie ein Key mehrfach in einem Dikt hat,

Jochen

dass dann halt immer das letzte genommen wird.

Jochen

Und das war mir auch gar nicht klar,

Jochen

dass das so ist, aber...

Dominik

Also kein Duplicate Value oder Key Error oder sowas?

Dominik

nein, nein, es wird einfach das Letzte genommen.

Jochen

Und da hat er halt dazu, oder auf der Mail-Industrie geschrieben,

Jochen

dass, ja, er hat damals lange drüber nachgedacht,

Jochen

weil irgendjemand die Frage gestellt hat,

Jochen

ob das Absicht wäre oder nicht.

Jochen

Er meinte so, ich habe damals lange drüber nachgedacht

Jochen

und es ist Absicht.

Dominik

Ich erinnere mich an ein Programm, wo ich das dachte,

Dominik

wo ich irgendwie einen komischen Fehler hatte,

Dominik

und das, glaube ich, genau daran gelegen hat.

Dominik

Weil, ja, irgendwelche Duplikate dann zwar drin waren,

Dominik

ich das aber nicht gemerkt habe, erst irgendwann später,

Dominik

als mir um die Ohren 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.

Dominik

Siehst du, wie diese Code Active State 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.

Jochen

hat da so das als Beispiel

Jochen

quasi, wenn man jetzt mathematische, also

Jochen

arithmetische Geschichten halt nicht

Jochen

als Operatoren hätte, sondern

Jochen

wenn man das mit Funktionen ausschreiben würde,

Jochen

dann wird es halt sehr viel unklarer,

Jochen

was eigentlich gemeint ist, jedenfalls wenn das

Jochen

irgendwie komplizierter wird, weil man dann halt immer

Jochen

erst die Funktion

Jochen

mit den Klammern auflösen muss,

Jochen

bevor man sieht, was passiert und während man

Jochen

quasi, wenn man das als Operatoren

Jochen

hinschreibt, hat man so eine Art visuelles Pattern-Matching

Jochen

direkt schon, dass einem sagt, was

Jochen

da passiert und daher sind für so

Jochen

arithmetische Geschichten, um zu sehen, was da

Jochen

passiert, ist es halt viel

Jochen

sinnvoller, das mit Operatorenschreibweise

Jochen

hinzuschreiben als mit Funktionen,

Jochen

was man ja auch tun könnte.

Jochen

Und für Dicts ist

Jochen

halt die Frage, ob das Sinn macht, aber

Jochen

also immer dann, wenn einem das dabei beim

Jochen

Verständnis hilft, wenn man das anders hinschreiben

Jochen

kann, dann kann es natürlich schon gut sein,

Jochen

dass das irgendwie sinnvoll ist.

Jochen

Und ja, das ist auf jeden Fall

Jochen

glaube ich hier ein starkes Argument,

Jochen

dafür und mal sehen.

Jochen

Ich bin mir nicht sicher, ob wir das in Python 3.8

Jochen

dann schon direkt sehen werden, aber es wäre auf jeden Fall

Jochen

irgendwie eine interessante Idee

Jochen

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

Jochen

Okay, okay.

Jochen

Ja, noch eine

Dominik

kleine News hatten wir, glaube ich, und das war der

Dominik

Django Chat Podcast.

Jochen

Genau, ja, es kommen ab und zu

Jochen

neue Podcasts dazu und jetzt

Jochen

fand ich besonders interessant

Jochen

eben auch Django, ein Podcast,

Jochen

der sich nur Django widmet, da

Jochen

einer der beiden ist irgendwie einer der beiden

Jochen

Django Fellows, die halt quasi sich, also

Jochen

dafür auch bezahlt werden, da tatsächlich

Jochen

an Django zu arbeiten und so die ganzen

Jochen

Sachen zu machen, die halt normalerweise niemand tut, wenn er

Jochen

nicht dafür bezahlt wird, halt irgendwie

Jochen

zum Issue-Tracker kümmern

Jochen

und

Jochen

Releases machen und so.

Jochen

Ja, und

Jochen

das war schon, die ersten beiden

Jochen

Episoden sind erschienen, die

Jochen

erste war irgendwie relativ interessant.

Jochen

Ich fand, das war auch so, dass da irgendwie eine ganze

Jochen

Menge Überschneidung war zu dem, was wir in unserer

Jochen

Django-Folge irgendwie erzählt haben, so von dem

Jochen

so Rundtenor.

Dominik

Ich seh grad, ich hab den auch gehört, ich bin begeistert.

Dominik

Ja. Und eine Folge.

Dominik

Gefällt mir sehr gut, also es ist

Jochen

wirklich toll. Jetzt kam noch eine zweite Folge, die war

Jochen

so eine kurze Folge dazu. Fünf Minuten.

Jochen

Könnt ihr mal sehen, wie man in der

Dominik

Kürze die Würze finden kann. Ja.

Dominik

Weil sie halt irgendwie mal

Dominik

ein Release von Django kaputt gemacht haben.

Dominik

Ja. Und

Jochen

ich bin mal gespannt, wie sich das so weiterentwickelt.

Jochen

Das ist auf jeden Fall eine sehr empfehlenswerte

Jochen

Geschichte. Dann gab's noch einen anderen

Jochen

Pouted Patent Out Loud, aber da müssen wir nochmal gucken, also den fand ich

Jochen

jetzt gar nicht so interessant

Dominik

am Anfang. Ja, falls ihr noch einen Podcast

Dominik

kennt, den wir noch nicht kennen, dann schickt ihn uns,

Dominik

wir sind neugierig natürlich.

Dominik

Ja, ich würde sagen, am Ende stellen wir nochmal so ein bisschen die

Dominik

Pics der Woche, der Woche, des

Dominik

Monats vor, aber wir sind glaube ich mittlerweile

Dominik

so weit, dass wir so ein bisschen jetzt was über Pandas

Dominik

erzählen können. Ja, Pandas, was ist das denn

Dominik

überhaupt? Also beim Eishockey, ich bin ja

Dominik

Eishockey-Finder, haben die Schiedsrichter jetzt so ein Pandasymbol

Dominik

gehabt auf den Trikots, weil die eine

Dominik

Kooperation mit dem WWF haben und dann

Dominik

waren sie am Ende ein bisschen enttäuscht, dass der WWF da so eine Spendenaffäre

Dominik

hatte. Aber ja, es ist manchmal so,

Dominik

aber Pandas und Spendenaffäre hat wahrscheinlich jetzt bei uns

Dominik

so viel nicht miteinander zu tun.

Jochen

Nee, aber der Name bietet

Jochen

natürlich schon so ein bisschen Verwechslungspotenzial.

Jochen

Wir hatten da auch genau darüber

Jochen

gesprochen haben, ob wir nicht irgendwie mal zusammen

Jochen

eine Podcast-Episode machen wollen.

Jochen

Hatte Simon auch irgendwie zuerst was anderes verstanden,

Simon

glaube ich. Ja, genau. Also es gibt

Simon

nicht nur Python Pandas

Simon

das Data Frame Framework,

Simon

sondern auch Python Pandas

Simon

3D, die Game Engine.

Simon

Ah. Und weil

Simon

ich ja irgendwie beide Themen abdecke,

Simon

war das, was ich gerade zuletzt

Simon

gemacht hatte, das Erste, was im Kopf wieder

Simon

aufgetaucht ist und das war die Game Engine und

Simon

dann haben wir, weiß nicht, fünf Minuten aneinander

Simon

vorbeigeredet. Wir können doch jetzt gerne noch mal

Dominik

fünf Minuten über die Game Engine, Pandas 3D reden, wenn du magst.

Dominik

Ist die in Python? Also

Simon

ich glaube, Game-Entwicklung

Simon

in Python ist vielleicht

Simon

eine Folge, zu der ich nochmal wiederkommen sollte.

Simon

Oh ja. Einfach, weil das sehr,

Simon

sehr umfangreich ist. Und es geht?

Simon

Es gibt es im Wesentlichen irgendwie

Simon

Pygame und Pandas als die beiden

Simon

großen etablierten, dann gibt es noch

Simon

so ein paar kleinere. Und damit kann man wirklich auch

Dominik

Spiele machen, die auch gehen und die auch aussehen

Dominik

oder sowas? Oder braucht man dafür noch Qt oder

Simon

sowas? Ich sage es mal vorsichtig, ja, damit kann man

Simon

Spiele machen, mit Pygame

Simon

2D-Spiele, mit Pandas 3D sogar

Simon

3D-Spiele. Was man

Simon

damit sehr gut machen kann, ist zu lernen,

Simon

wie so eine Game Engine wirklich funktioniert.

Simon

Ich glaube

Simon

aber nicht, dass man Triple-A-Titel

Simon

darin machen möchte, weil es dann doch irgendwann

Simon

umständlicher ist, als

Simon

eine von den großen 3D-Game-Engines,

Simon

die so am Markt sind,

Simon

die vielleicht auch ein bisschen mehr

Simon

klickbar sind, zu verwenden.

Dominik

Ich muss überlegen, welche das waren. Das war Unreal,

Dominik

Unity und

Simon

CryEngine.

Simon

Ja, okay, dann CryEngine ist ja nicht

Dominik

frei. It 7 oder so 8.

Dominik

Weiß ich gerade gar nicht.

Dominik

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

Dominik

Wir wollten über Pandas sprechen. Genau, also Pandas 3D

Simon

ist die Game-Engine, darüber sprechen wir heute dann

Simon

nicht. Und Pandas

Simon

ist im Wesentlichen

Simon

eins der Python-Tools,

Simon

an denen man nicht vorbeikommt, wenn man Datenanalyse

Simon

betreibt. Okay, wir sind

Dominik

wieder mal bei der Datenanalyse.

Dominik

Datenbanken hatten wir übrigens in der letzten Folge,

Dominik

für alle, die sich das noch nicht angehört haben, eine ziemliche Mammut-Folge

Dominik

mit, wie lange, drei Stunden haben wir

Jochen

gebraucht? Ja, ein bisschen mehr, aber

Dominik

genau um den Dreh. Wenn ihr mal wieder die Wohnung

Dominik

richtig putzen wollt, dann was soll ich, die Ohren?

Dominik

Ja,

Simon

an der Stelle würde ich ganz gerne noch kurz

Simon

meinen Hintergrund in der Datenanalyse

Simon

erwähnen, damit man so ein bisschen einordnen kann,

Simon

aus welcher Richtung meine Kommentare

Simon

kommen. Als

Simon

Biologe war damals

Simon

Perl die große

Simon

Programmiersprache, um alles zu lösen.

Simon

Und erst zum Ende

Simon

meiner Forschungszeit hat sich dann irgendwann

Simon

Python durchgesetzt. Das heißt, ich habe noch sehr

Simon

viel in Perl gemacht. Und

Simon

was man in Perl gar nicht gut

Simon

konnte, zumindest ich konnte das nicht, ist

Simon

Daten nachher analysieren

Simon

und visualisieren. Aber die

Simon

Aufbereitung war da sehr gut. Das heißt,

Simon

für die Analyse und die

Simon

Visualisierung sind wir dann immer zu R

Simon

rüber gewechselt. R ist

Simon

auch eine Programmiersprache,

Simon

ist eine eher mathematische

Simon

Annotation zur

Simon

Datenanalyse.

Simon

Und wenn ich so

Simon

die Branche, sage ich mal, richtig

Simon

überblicke, dann wird am meisten

Simon

R und Python

Simon

benutzt und vielleicht dann noch

Simon

MATLAB als

Simon

dritte Alternative,

Simon

wenn Leute heute Datenanalyse machen.

Simon

Was meinst du denn

Simon

mit Datenbereinigung?

Simon

In der Biologie ist das so,

Simon

dass die Daten immer unheimlich fuzzy sind.

Simon

Also man hat nie ganz konkrete Messwerte,

Simon

sondern man hat immer super viele Abweichungen,

Simon

mal Fehlmessungen, mal Werte, die man gar nicht erheben konnte.

Simon

Du musst dich dann entscheiden,

Simon

ob du eine Rundung anwendest oder nicht.

Simon

Vieles davon führt dann erst mal dazu,

Simon

dass die Daten nicht mehr so strukturiert sind,

Simon

wie man das eigentlich dachte in der Tabelle.

Simon

Das kommt auf die Messinstrumente im Wesentlichen an.

Simon

Das heißt, die erste Aufbereitung ist erstmal,

Simon

die Daten in ein maschinenlesbares Format zu bringen.

Simon

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

Dominik

Dann muss man jede einzelne Zeile oder Zelle durchgehen

Dominik

und die manuell korrigieren.

Simon

Genau, also ich habe auch tatsächlich schon Kollegen damals gesehen,

Simon

die von Programmierung gar keine Ahnung hatten,

Simon

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. Und fehlerfreier an der Stelle auch. Und dieser erste Schritt, überhaupt die Daten erstmal maschinenlesbar zu kriegen, der ist im Wesentlichen unabhängig von der Analyse, aber notwendig.

Dominik

Und nochmal für unsere ganz Anfängerhörer, 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,

Simon

wo dann in einem Tabellenblatt an mehreren verschiedenen Stellen so kleine Subtabellen zu sehen waren,

Simon

wo die Messdaten drin standen.

Simon

Da gab es dann quasi einmal Experiment A war so ein 5x4-Raster,

Simon

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,

Simon

auch 5x4-Raster.

Simon

Das ist für den Menschen super lesbar,

Simon

weil man kann sofort die Blöcke identifizieren

Simon

und sich die Messdaten angucken.

Simon

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

Simon

weil die Koordinaten nicht klar sind.

Simon

Und was häufig passiert ist, wenn Menschen Tabellen ausfüllen, um die visuell ansprechend zu machen, verletzen die ein wichtiges Kriterium, dass 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 sind, die nicht voneinander getrennt sind. Dann stehen zum Beispiel sowas wie eine Spalte, wo zwei verschiedene Datensachen auf einmal drin stehen. Einmal Temperatur in Celsius, einmal in Fahrenheit oder sowas. 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 ist halt quasi bei Datenmarken die erste Normalform, dass man in der Spalte immer nur einen Wert stehen hat und nicht mehrere zum Beispiel, was halt dann manche Leute tun.

Dominik

Also Fahnenheit und Zeltes wäre okay, wenn man die Information enthalten wäre in der Zelle, ob es Zeltes oder Fahnenheit wäre.

Dominik

Weil das wäre sonst problematisch.

Simon

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

Simon

Grundsätzlich, wenn man so eine Tabelle hat, wo man Zeilenbeschriftungen hat und Spaltenbeschriftungen hat und die ganze Tabelle ist rechteckig,

Simon

dann kriegt man die auch sinnvoll maschinenlesbar ausgewertet.

Dominik

Also Probleme fangen dann an, wenn man keine zweidimensionalen Tabellen mehr hat,

Dominik

keine, die man mal eben so auf seinen Whiteboard malen kann,

Dominik

welche, die man bauen müsste oder wo man irgendwelche Dimensionen verbraucht,

Dominik

die wir uns jetzt nicht so räumlich vorstellen können.

Simon

Oder wo tatsächlich Lücken drin sind und die Muster für Menschen zwar noch erkennbar bleiben,

Simon

aber für eine Maschine die Koordinaten dann zum Beispiel nicht mehr zusammenpassen.

Simon

Okay.

Simon

Okay.

Dominik

Ja, okay, das haben wir so ungefähr verstanden, was so maschinenlesbar dann bedeutet für die einzelnen Daten. Und wo kommt jetzt Pandas dann ins Spiel?

Simon

Ich habe mal, ich glaube, das war Python User Group Treffen oder irgendwie sowas in der Richtung, habe ich mal eine Folie gesehen in einem Vortrag. Ich habe die leider nie wiedergefunden. Da fand ich das ganz schön beschrieben. 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.

Simon

NumPy und für

Simon

einfache statistische Analysen

Simon

SciPy und für Visualisierung

Simon

Matplotlib. Und dann war

Simon

der Kreis eins weiter draußen

Simon

so ein bisschen das, was darauf aufbaut.

Simon

Das war dann Pandas,

Simon

das war

Simon

Statsmodels, war das

Simon

glaube ich. Also für Zeitreihen

Simon

und so. Genau. Und

Simon

Seaborn. Und das waren dann die

Simon

Pendants. Also Seaborn auch

Simon

wieder zur Visualisierung und Statsmodels

Simon

im Prinzip zur statistischen

Simon

Auswertung und Pandas eben zum

Simon

Data Handling, aber

Simon

jenseits von einfachen Vektoren.

Simon

Aha, okay.

Simon

So, und da kommen wir im Prinzip auch schon wieder in den Bereich,

Simon

wo man immer den Vergleich zwischen Excel normalerweise

Simon

führt, wenn man das mit Leuten

Simon

bespricht, mit denen man zusammenarbeitet,

Simon

weil Excel kennt irgendwie jeder. Also

Simon

Tabellenkalkulation ist jedem sofort

Simon

ein Begriff und alle wissen auch sofort,

Simon

okay, es gibt Zeilen und Spalten.

Simon

Das ist so, dass das

Simon

bare minimum, was man wissen muss, um

Simon

mit Pandas was anfangen zu können.

Dominik

Das hat man wahrscheinlich in der Schule schon mal aufgemacht oder so,

Dominik

oder aufmachen müssen. In der Regel schon, ja.

Simon

Genau, das heißt, bei Pandas

Simon

sind wir jetzt in dem Bereich von

Simon

Data Handling.

Simon

Also, wie kann ich meine Daten

Simon

laden, verarbeiten,

Simon

zur Verfügung stellen für

Simon

Analysen. Und wie

Simon

macht Pandas das?

Simon

Gibt es da Spezies?

Jochen

Also ich würde sagen, also das ist auch das

Jochen

denke ich

Jochen

Hauptfeature von Pandas ist, dass

Jochen

man damit die Daten überhaupt erstmal irgendwie

Jochen

in so ein

Jochen

ja,

Jochen

reinbekommt irgendwie. Also

Jochen

Westman Kinney hat das auch mal gesagt, dass die

Jochen

populärste und wichtigste Methode, die

Jochen

Pandas halt hat, ist halt Read CSV,

Jochen

die sehr, sehr

Jochen

flexibel ist und man kann irgendwie so ungefähr

Jochen

jedes CSV, was irgendwo, ein CSV ist

Jochen

ein sehr hässliches Format und

Jochen

Leute machen unglaubliche und unheilige

Jochen

Dinge damit, aber

Jochen

man kann irgendwie mit dieser

Jochen

Funktion kann man das fast alles parsen.

Jochen

Die hat sehr viele

Jochen

Argumente und sehr viele Dinge, an denen man da irgendwie

Jochen

was drehen kann und man kriegt fast alles damit geparsed

Jochen

und

Jochen

das heißt, egal wie komisch die Daten aussehen,

Jochen

die man so hat, man kriegt sie irgendwie

Jochen

mit Readsys wie oft irgendwie

Jochen

in Pandas rein und hat sie dann halt in einem

Jochen

sauberen Format und kann das dann halt wieder in anderen Formaten

Jochen

rausschreiben. Aber gut, Pandas kann nicht nur

Jochen

CSV lesen, sondern halt auch diverse andere

Jochen

Formate

Jochen

von JSON

Jochen

über, keine Ahnung, XML oder was auch immer.

Jochen

Teilweise werden dann halt andere

Jochen

Bibliotheken unten drunter verwendet, um das halt einzulesen.

Jochen

Aber

Jochen

das ist halt,

Jochen

also Pandas ist eigentlich immer so der erste

Jochen

Schritt, wenn man irgendwo Daten herbekommt,

Jochen

um die halt in

Jochen

ein Format zu bringen, mit dem man irgendwas machen kann, um es halt

Jochen

irgendwie einzulesen in Programmen,

Jochen

da nimmt man halt eigentlich immer Pandas, weil das halt

Dominik

Pandas hat so vorbereitete Funktionen für, weiß nicht,

Dominik

eine Zeitreihenanalyse oder sowas.

Jochen

Nein, nein, der Analyseteil ist nochmal ein bisschen,

Jochen

also ja, Pandas kommt auch daher,

Jochen

also das ist mal

Jochen

entwickelt worden, Westman Kenny hat das

Jochen

gestartet, das Projekt 2008, als er bei

Jochen

RQ Capital, glaube ich, irgendwie so ein

Jochen

Hedgefonds-Investment-Dings

Jochen

da gearbeitet hat und

Jochen

da ging es um

Jochen

Zeitreihen und

Jochen

tatsächlich ist bei Pandas immer noch so

Jochen

der Hauptfokus, oder es ist halt das, was

Jochen

Pandas auch besonders gut kann, sind halt so Zeitreihen-Geschichten.

Jochen

Aber man kann auch diverse andere Dinge damit machen.

Jochen

ja,

Jochen

da gab es halt noch nichts

Jochen

in Python. Die Leute haben

Jochen

damals Excel verwendet oder halt

Jochen

irgendwie kommerzielle Software

Jochen

und ja,

Jochen

da wurde halt

Jochen

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, also wenn man sich anguckt, wie viel Geld wird halt eigentlich ausgegeben für Open-Source-Entwicklungen, ist 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 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, bekommt eigentlich wenig Ressourcen, da gibt es wenig Geld, da gibt es wenig Leute, die überhaupt beruflich daran arbeiten.

Jochen

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

Jochen

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

Jochen

bekommen und auch in denen steckt

Jochen

relativ viel Geld drin, aber

Jochen

diese Sachen sind alle

Jochen

ziemlich schlecht irgendwie

Jochen

und Pandas füllte halt so eine Lücke.

Jochen

Ist halt eigentlich ultra wichtig, weil

Jochen

irgendwie diese ganzen Datenimport-Export-

Jochen

Geschichten sind halt etwas, was man immer braucht

Jochen

und irgendwie es gibt

Jochen

außer Pandas gibt es keine

Jochen

Projekte, die das irgendwie ordentlich gemacht haben

Jochen

und du kannst natürlich irgendwie deine

Jochen

tolle Deep Learning TensorFlow-Geschichte nehmen

Jochen

irgendwie, aber wenn du die Daten halt nicht

Jochen

hast, um damit irgendwas machen zu können,

Jochen

dann hilft dir das alles nichts

Jochen

und ja, das

Jochen

ja, eben Westman Kenny erzählt

Jochen

davon halt auch immer, dass ihn das total wundert

Jochen

und dass er das total seltsam findet, dass halt so ein wichtiger

Jochen

Teil der Infrastruktur so wenig

Jochen

Liebe erfährt quasi

Jochen

und

Jochen

dass seine Hauptmotivation war

Jochen

zu sagen, okay, da muss man mal was tun

Jochen

das muss doch irgendwie, dieses Problem muss man

Jochen

doch lösen, das ist halt irgendwie ein Problem, was alle haben

Jochen

und was irgendwie sehr ärgerlich ist und

Jochen

ja

Jochen

Ja, und das ist halt, das macht Pandas auch sehr gut irgendwie. 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 irgendwie in ein Format bringen muss vorher und vielleicht aufräumen muss, sauber machen muss.

Jochen

Da gibt es auch immer so einen schönen Spruch, irgendwie Data Science ist halt so, oder auch Machine Learning ist halt, 80% ist halt Data Cleaning und 20% ist sich darüber beschweren, dass irgendwie 80% Data Cleaning sind.

Simon

Ja, das trifft es sehr gut. Ja, ich meine, die andere Sache ist, als Mensch möchte man ja auch sich die Daten vielleicht zwischendurch mal angucken können. 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. Also sicherlich ist diese Import-Geschichte von Pandas eine der mächtigsten, die ich bisher gesehen habe, was auch so fehlende Datenpunkte angeht 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. Da gibt es ja irgendwie jetzt aber so drei Typen. So Null und None und None. Warum, wieso braucht man da drei?

Jochen

In Pandas? Also ich wüsste jetzt

Jochen

eigentlich nur, dass es da Not-a-Number gibt.

Jochen

Ja. Und das ist

Jochen

historisch sozusagen der

Jochen

hier ist kein Wert

Jochen

von NumPy.

Jochen

Das ist auch irgendwie sozusagen ganz

Jochen

unten drunter ist das

Jochen

tatsächlich ein

Jochen

in Float kann man das halt ausdrücken und

Jochen

ja, das hat halt auch so die

Jochen

leichten, das leichte Problem, dass

Jochen

man im Grunde immer dann, wenn man solche Werte hat, dann

Jochen

halt auch der Datentyp irgendwie

Jochen

Float sein muss, was so ein bisschen doof ist.

Jochen

Bis vor ganz kurzem war das noch so,

Jochen

dass man halt, wenn man jetzt eine Integer-Spalte hatte

Jochen

und da fehlt halt jetzt ein Wert,

Jochen

und man hat halt gesagt, okay,

Jochen

da kommt irgendwie was dazu, was halt irgendwie fehlt oder so,

Jochen

und man macht einen Re-Index und guckt,

Jochen

und dann hat sich plötzlich der Typ der Spalte in Float geändert,

Jochen

weil es halt keine fehlenden Werte in Integer-Typ-Typ-Spalten gibt.

Jochen

Und das ist ein ziemlich blödes Problem.

Jochen

Aber jetzt gibt es halt irgendwie seit einiger Zeit diese Array Extensions, Array Extensions API für Pandas und die halt mit Cyber Pandas dazugekommen ist.

Jochen

Ich weiß gar nicht, welche Version das genau war. Und jetzt hat auch Ende Januar ist die letzte größere Release von Pandas erschienen. Ich glaube 0.244 oder so.

Jochen

0.244, ja.

Jochen

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

Jochen

Und das ist natürlich total cool irgendwie.

Jochen

Und 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 und dummerweise hat Panas aber viele der Implementationsdetails in NumPy halt rausgelegt und das kann man jetzt auch nicht mehr so einfach ändern, weil das halt schon, also wenn man das wieder ändern würde, würde das Code brechen und dann wäre keine abwärtskompatiblen Änderungen mehr.

Jochen

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

Jochen

Aber

Jochen

irgendwie mit dieser Array-Extension-API hat man

Jochen

auf jeden Fall eine Möglichkeit, wenn man den Typ ändert, dann

Jochen

ist das alles eigentlich in Ordnung.

Jochen

Und dann kann man da auch schöne neue Sachen machen,

Jochen

ohne dass man auf NumPy irgendwie angewiesen ist.

Jochen

Zum Beispiel was halt,

Jochen

also es sind so Beschränkungen, die sind echt blöd.

Jochen

Also wenn man auf NumPy

Jochen

unten drunter basierendes

Jochen

Pandas hat, dann hat man halt

Jochen

sowas nicht wie zum Beispiel

Jochen

Decimal-Types.

Jochen

Also einmal man hat keine fehlenden, keine

Jochen

Missing-Value-Support für sowas wie

Jochen

Integer, was auch schon schlimm ist, aber man hat halt

Jochen

auch, wenn man jetzt mit Geld zu tun hat,

Jochen

was man ja vielleicht auch irgendwie,

Jochen

dann hat man halt bloß Float,

Jochen

das will man auch nicht. Also man

Jochen

würde das dann irgendwie wahrscheinlich eher

Jochen

Geld in Integer, also in Cent-Integer

Jochen

oder sowas verwenden.

Jochen

Viele werden wahrscheinlich irgendwie Float

Jochen

nehmen, so,

Jochen

und dann denken, ach, das wird schon irgendwie hinhauen

Jochen

und dann böse Überraschungen überleben,

Jochen

weil das funktioniert halt

Jochen

überhaupt gar nicht. Und man

Jochen

kriegt diverse richtig böse Probleme, wenn man das

Jochen

macht. Und in Datenbanken

Jochen

ist das Problem eigentlich auch schon lange gelöst.

Jochen

Da gibt es den Decimal-Type

Jochen

genau für sowas, der dann

Jochen

halt auch ordentlich

Jochen

rundet und so. Und

Jochen

in Python gibt es auch einen nativen

Jochen

Decimal-Type. Der ist blöderweise

Jochen

nur total super langsam. Also den kann man eigentlich auch

Jochen

nicht nehmen.

Jochen

Und jetzt gibt es halt

Jochen

sozusagen als Array-Extension

Jochen

Type halt auch Decimal,

Jochen

sodass man das halt auch in Pandas Data

Jochen

Frames halt Geld quasi mit Kommastellen

Jochen

verwenden kann, ohne dass es da irgendwie,

Jochen

ohne dass man da mit schlimmen

Jochen

Konsequenzen rechnen muss.

Jochen

Und es gibt sowas wie

Jochen

DateTime mit Timezonen

Jochen

dran und so, das ging vorher auch nicht.

Jochen

Und das ist... Achso, sowas wie

Dominik

Grad mit Celsius-Erfahrenheit vielleicht.

Dominik

Das ist nochmal ein anderes, genau,

Jochen

das möchte man auch gerne haben.

Jochen

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

Jochen

Es gibt Bibliotheken dafür, dass man halt

Jochen

an Spalten auch noch irgendwie so eine

Jochen

Maßeinheit dran klebt.

Simon

Die Annotationen

Simon

und auch Skalierungsfaktoren

Simon

kommen auch mit unter aus dem

Simon

zugrunde liegenden Datenformat, aus dem man nachher

Simon

importiert. Also es gibt irgendwie

Simon

wissenschaftliche Datenformate, die speichern sowas

Simon

alles mit. HDF5

Simon

oder NetCDF oder

Simon

wie das inzwischen heißt. Wie sieht das dann aus?

Simon

Ist da eine Spalte, ein Tupel drin?

Simon

Da gibt es im Prinzip

Simon

irgendwie so eine Tabelle von

Simon

Metadaten, wo drin steht,

Simon

welche Spalten, welche Maßeinheit, welches

Simon

Skalierungsfaktoren haben, wann die zuletzt

Simon

bearbeitet wurden. Und darunter

Simon

stehen dann serialisiert die Daten drin.

Simon

Und dadurch hat man

Simon

sehr, sehr schnellen, sequentiellen

Simon

Zugriff auf seine Daten, hat aber

Simon

trotzdem die Möglichkeit, diese

Simon

Skalierung und Einheiten

Simon

mitzuführen. Und

Simon

in Pandas weiß ich nicht, ob das

Simon

inzwischen mit importiert wird,

Simon

aber

Simon

diese Erweiterung.

Simon

Ja, ich habe jetzt

Jochen

normalerweise auch nicht mehr parat, wie die

Jochen

Bibliothek, es gibt eine Bibliothek für so Maßeinheiten und so was.

Jochen

Ich weiß aber nicht genau, wie das

Jochen

gemacht ist, müsste ich nochmal nachgucken.

Jochen

Vielleicht können wir das einfach dann

Jochen

beim nächsten Mal nachreichen oder so.

Jochen

Auf jeden Fall, da gibt es etwas

Jochen

und das kriegt man schon irgendwie

Jochen

alles auch mit dazu geschrieben.

Jochen

Ja, also genau, das

Jochen

eigentlich, so wie früher, oder

Jochen

der Default ist immer noch bei Pandas,

Jochen

wie Sachen gespeichert werden, das

Jochen

nennt sich irgendwie Block Manager oder Block Storage

Jochen

und das sind immer

Jochen

2D NumPy Arrays

Jochen

und

Jochen

die sind halt immer sozusagen, also man

Jochen

würde eigentlich denken, dass

Jochen

ein DataFrame, dass jede Spalte

Jochen

irgendwie ein

Jochen

eindimensionales NumPy Array

Jochen

ist, aber das ist halt nicht so,

Jochen

sondern ein DataFrame besteht

Jochen

aus Blocks

Jochen

von 2D

Jochen

NumPy-Arrays jeweils

Jochen

zu einem, also unterteilt

Jochen

nach Datentyp, also wenn ich jetzt sagen habe

Jochen

ein

Jochen

DataFrame, der drei Spalten

Jochen

hat, zwei davon float, einer

Jochen

Integer, dann besteht das

Jochen

Ding aus zwei NumPy-Arrays, eins

Jochen

mit Integer und eins mit float,

Jochen

das halt zwei Spalten hat.

Simon

Da muss man jetzt natürlich aufpassen, von welcher

Simon

Seite man drauf guckt, weil

Simon

aus Pandas Sicht ist das erstmal

Simon

eine Liste von Pandas Series,

Simon

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

Simon

Die Abbildung als

Simon

NumPy-Arrays ist natürlich

Simon

dann irgendwie die technische zugrunde

Simon

liegende Abbildung.

Simon

Ja, genau. Das ist halt,

Simon

eigentlich sollte das egal sein.

Jochen

Sollte man sich eigentlich keine Gedanken darüber machen,

Jochen

sondern, genau, eigentlich ist eine Series halt quasi,

Jochen

kann man es verstehen als Spalte oder eben Vektor,

Jochen

eindimensionale

Jochen

Datenstruktur mit halt vielleicht noch einem Index dran.

Jochen

Aber

Jochen

so wird es halt nicht gespeichert und

Jochen

das Blöde ist, dass diese

Jochen

Abstraktion halt auch so liegt, weil

Jochen

wenn man jetzt

Jochen

zum Beispiel eine Spalte hinzufügt zu einem DataFrame,

Jochen

dann hat man das Problem,

Jochen

dass dadurch,

Jochen

dass jetzt, wenn man schon ein paar

Jochen

Float-Spalten da drin hat und man

Jochen

fügt jetzt eine dazu, dann

Jochen

geht das ja nicht mehr wirklich,

Jochen

sondern dann müssen die kompletten Daten alle

Jochen

kopiert werden dafür.

Jochen

Und wenn man jetzt in der Schleife

Jochen

irgendwie Spalten hinzufügt oder so, dann

Jochen

kann es sein, dass einem der Speicher platzt und man weiß überhaupt

Jochen

nicht warum. Das heißt, man muss im Grunde wissen,

Jochen

dass Pandas das so macht

Jochen

und dann gibt es dann immer so Tipps,

Jochen

die dann sagen, wenn man da irgendwie viele

Jochen

Spalten hinzufügt, dann immer erst mal die einzelnen

Jochen

Spalten sammeln und dann hinterher alle

Jochen

zusammenfügen oder so, nicht

Jochen

irgendwie auf einem großen Data-Frame eine Spalte hinzufügen,

Jochen

dann noch eine hinzufügen, das ist schlecht

Jochen

und das sollte eigentlich natürlich,

Jochen

das sind so Schwächen bei Pandas, das sollte ja eigentlich

Jochen

nicht, das sollte einen gar nicht interessieren, wenn man das

Jochen

benutzt. Dummerweise muss man solche

Jochen

Sachen aber dann vielleicht doch wissen, weil

Jochen

man halt dieses Problem da an der Stelle

Jochen

noch hat. Aber das kann sein, dass das jetzt

Jochen

alles demnächst besser wird oder das ist jetzt

Jochen

mit der letzten Version ist es halt schon ein Stück

Jochen

besser geworden und da sind halt

Jochen

die einzelnen Spalten haben ihren eigenen Typ und ihre

Jochen

eigene Speichergeschichte und dann ist das alles

Jochen

nicht mehr so ein Problem.

Jochen

Aber ja, das ist vielleicht auch noch interessant.

Jochen

Also Pandas ist gedacht für so Daten,

Jochen

also Small Data kann man

Jochen

quasi sagen, also

Jochen

Daten im Bereich von so ein paar

Jochen

Gigabyte, also einstellig Gigabyte,

Jochen

weil halt da fast

Jochen

alle Operationen dazu führen, dass das irgendwie kopiert wird,

Jochen

kann es sehr schnell sein, dass man halt

Jochen

irgendwie auch, dass man halt 5 oder

Jochen

vielleicht sogar bis zu 10-facher der

Jochen

Datenmenge, die tatsächlich auf der Platte landet oder so,

Jochen

man dann als Hauptspeicher braucht, weil

Jochen

ja, man kopiert ein paar,

Jochen

äh, man fügt ein paar Spalten hinzu, transformiert

Jochen

ein bisschen was und dann schon hat man irgendwie einen 5-fachen Hauptspeicher

Jochen

verbraucht.

Jochen

Und daher ist es halt nicht so richtig effizient.

Jochen

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

Jochen

Aber, äh, also für

Jochen

größere Sachen kann man Pandas nicht so super

Jochen

benutzen, aber

Jochen

für diese kleinen

Jochen

Datenmengen ist es halt sehr, sehr cool, weil es super

Jochen

interaktiv ist und da auch viel Optimierung

Jochen

reingesteckt wurde, die Operationen

Jochen

halt auf so, auf den Datenmengen halt

Jochen

schnell zu machen, sodass man halt

Jochen

oft dann nicht ein paar Sekunden warten muss,

Jochen

sondern eigentlich immer nur so ein paar hundert Millisekunden

Jochen

und das,

Jochen

gerade wenn man das jetzt zusammen mit

Jochen

Jupyter Notebooks halt

Jochen

interaktiv in einem Browser verwendet,

Jochen

ist es halt sehr wichtig, dass man da nicht irgendwie, wenn man

Jochen

irgendwas ausführt, halt lange warten muss, sondern

Jochen

man drückt irgendwo drauf, es wird ausgeführt

Jochen

und man sieht ein Ergebnis und

Jochen

kann damit direkt weiterarbeiten.

Jochen

Genau.

Jochen

Ja, vielleicht noch mal kurz

Dominik

in Jupyter Notebooks, also tolles Tool tatsächlich,

Dominik

wenn man sich so gerade so Daten aus der

Dominik

Wissenschaft angucken will, einfach ein

Dominik

DataFrame laden, da die ganzen Daten reinkloppen

Dominik

und dann mit Matplotlib und Seaborn

Dominik

irgendwo direkt live immer

Dominik

Änderungen verfolgen können. Ja, ich würde fast noch

Simon

sagen, also der ganz, ganz klassische

Simon

Workflow ist, man ruft einmal

Simon

Describe auf, dann kriegt man so einmal die

Simon

Rahmendaten, Streumaß und

Dominik

Lagemaß auf dem Dataframe

Dominik

und dann kriegt man direkt alle statistischen

Dominik

Auswertungskennzahlen, die man so kennt.

Simon

Genau, .describe, Klammer auf Klammer zu,

Simon

fertig, dann kriegt man erstmal einen groben

Simon

Überblick über seine Daten. Dann kann man

Simon

natürlich auch in die Daten direkt reingucken mit

Simon

Head und Tail und

Simon

das ist in meiner Erfahrung auch das, was man

Simon

bei einem neuen Datensatz als allererstes

Simon

mal macht, um sich anzugucken, womit

Simon

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 DataFrames direkt wieder einladen.

Simon

Das habe ich allerdings noch nie ausprobiert in Jupyter Notebooks. Ich weiß nicht, ob der das hinkriegt, aber ich wüsste jetzt auch erstmal nicht, was dagegen sprechen sollte.

Simon

Nö, das kann gut sein, dass das funktioniert, ja.

Simon

Also kann man sich halt auch ganz kleine

Simon

Datenchunks, kleine Tabellen direkt

Simon

aus der Zwischenablage

Simon

in seinen Data-Frame reinladen.

Simon

Das heißt, wenn wir jetzt von diesem

Dominik

Gigabyte-Bereich liegen, ich glaube, für wissenschaftliche

Dominik

Anwendung müsste das in den meisten Fällen noch relativ

Dominik

ausreichend sein. Ja, ja, absolut. Also das ist sowieso

Dominik

so, die allermeisten Leute haben

Jochen

nicht mehr Daten. Also für die allermeisten

Jochen

Leute reicht es aus. Wenn man mehr

Jochen

hat, dann weiß man das und dann kann man auch was anderes

Jochen

nehmen.

Jochen

Ja.

Jochen

Ja, aber stimmt, wir hatten

Jochen

eben noch gar nicht genau, vielleicht sollten wir da so ein bisschen

Jochen

systematisch auch nochmal kurz reingehen, was

Jochen

also Pandas,

Jochen

genau, das hat auch was damit zu tun,

Jochen

wo der Name herkommt, also Pandas steht

Jochen

eigentlich für Panel Data oder

Jochen

das war halt auch mal das, was halt so in der Finanzwelt

Jochen

wo Leute von gerätet haben, von Panel Data

Jochen

und damit meinen sie

Jochen

dann halt oft Excel Sheets

Jochen

irgendwie oder mehrere davon

Jochen

und das kann Pandas auch, ist

Jochen

aber irgendwie nicht mehr so, also es gibt auch noch

Jochen

es gibt halt einmal Series, es gibt Data Frames

Jochen

das ist halt sozusagen die zweidimensionale

Jochen

Tabelle

Jochen

irgendwie, Serious ist eindimensional

Jochen

und dann gibt es auch noch Panels, die sind halt

Jochen

dann mehrdimensional

Jochen

und die werden aber eigentlich nicht mehr

Jochen

verwendet, glaube ich, oder

Jochen

wurden eigentlich nie so wirklich

Jochen

viel verwendet und das ist, glaube ich,

Jochen

überliegen die Leute auch gerade, ob sie das irgendwie wieder

Jochen

rausnehmen, weil es eigentlich ziemlich sinnlos ist

Jochen

und der Hauptnutzen irgendwie bei den Data Frames

Jochen

ist.

Jochen

Genau.

Jochen

Daher kommt der Name.

Jochen

Es ist ein bisschen blöd, wenn man danach googeln will

Jochen

und dann hat man Tierbilder.

Jochen

Aber wir haben immer wieder Tierbilder

Jochen

dabei. Auch interessant, dass das Vorbild

Jochen

für Pandas ist R,

Jochen

denke ich mal.

Jochen

Das ist mit Googeln auch nicht viel einfacher, aber

Jochen

genau.

Jochen

Ja, ich weiß nicht,

Jochen

du hast auch schon mal mit A gearbeitet,

Jochen

Simon.

Jochen

Wie kann man

Jochen

das eigentlich miteinander vergleichen?

Jochen

Und es 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,

Simon

die hatten irgendwie so zwei, drei zentrale Vorteile gegenüber Excel, weswegen ich irgendwann komplett gewechselt bin.

Simon

Einer ist sicherlich, dass die Data-Frames 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 keinen Error.

Simon

Genau, wenn es ein Not a Number ist, ist das okay, 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 DataFrames 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

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

Simon

Und in DataFrames, dadurch einfach, dass man eine Series pro Spalte hat,

Simon

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, dass, wenn man kategorische Daten hat, die erstmal als Text erscheinen, sowas wie, weiß ich nicht, Beispiele.

Simon

Blau, Rot, Gelb als Farben in einer Spalte.

Simon

Dass die in dem zugrunde liegenden Datenformat

Simon

erst mal sowas wie Integer sind

Simon

und entsprechend auch relativ schnell

Simon

zum Indizieren benutzt werden können,

Simon

aber für die Anzeige, für das Menschenlesbare

Simon

wieder als Rot, Gelb, Grün, Blau dargestellt werden.

Dominik

Okay. Wie macht Pandas das? Als Dictionary dann?

Jochen

Das war lange, also in Pandas heißen die Dinger Categorials und das wurde dann quasi intern irgendwie auf Integers abgebildet. Man hatte die einfach durchnummeriert und dann war das halt, was halt natürlich auch viel weniger Platz braucht als Text, aber jetzt auch glaube ich mit 0.24 ist es jetzt so, es 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,

Jochen

es sind komische Dinge passiert. Ich hatte zum Beispiel mal

Jochen

irgendwann

Jochen

mit Categoricals

Jochen

auch so ein Problem. Ich habe da irgendwie

Jochen

größere Data Frames irgendwie zusammengebastelt

Jochen

und dann ist mir

Jochen

irgendwie so regelmäßig der Hauptspeicher explodiert

Jochen

und ich wusste nicht warum, habe ich dann auch einen Bug

Jochen

irgendwie bei Panas gefeilt und

Jochen

der war dann ziemlich lange offen.

Jochen

Das hatte halt auch damit zu tun, dass es nicht

Jochen

irgendwie nativ irgendwie da drin war,

Jochen

sondern das war halt mit den anderen IntelliJer-Geschichten

Jochen

irgendwie verknuselt und

Jochen

Ja, das ist schrecklich.

Jochen

Ja, aber genau, das ist natürlich eine sehr nette Sache,

Jochen

wenn man das halt so machen kann.

Jochen

Ja, das heißt, man sieht halt den Text in der Tabelle,

Jochen

aber in Wirklichkeit speichert man halt viel weniger Daten,

Jochen

halt nur eine Zahl.

Jochen

Ja, praktisch.

Jochen

Wie schaut man sich denn so Daten dann an?

Dominik

Also ich musste ja irgendwie eine Struktur bringen.

Dominik

Ich habe jetzt irgendwie ganz viele Spalten irgendwie mit Zeilen

Dominik

in meinem großen rechteckigen Datenfeld

Dominik

drin oder sowas und ich möchte jetzt irgendwie

Dominik

die kombinieren.

Dominik

Also man kann auch direkt auf dem,

Dominik

also das benutze ich tatsächlich ziemlich gerne,

Dominik

man kann sagen,

Jochen

also DataFrame, man kürzt es normalerweise immer ab

Jochen

mit df, also das

Jochen

Standardobjekt, was man dann halt sozusagen hat,

Jochen

heißt einfach df

Jochen

und da kann man einfach sagen df.plot

Jochen

und dem halt noch so ein bisschen Parameter

Jochen

mitgeben und dann

Jochen

plottet das halt direkt.

Dominik

Dann kannst du ja dann Daten anzeigen,

Dominik

die du dann reingegeben hast, also

Dominik

die Visualisierungsebene dann damit quasi.

Jochen

Genau, genau. Und im Notebook sieht man halt auch dann direkt irgendwie

Jochen

quasi grafisch was.

Jochen

Standardmäßig ist es dann halt ein Matplotlib,

Jochen

aber man kann halt das auch,

Jochen

dieses Plotting-Backend von Panda

Jochen

sozusagen austauschen, also es ist halt so pluggable und man kann

Jochen

das austauschen und man kann halt auch Bokeh

Jochen

zum Beispiel nehmen oder

Jochen

weiß gar nicht, ist auch noch viel

Jochen

andere. Ich habe Plotly

Simon

schon gesehen in dem Zusammenhang

Simon

und Seaborn ist ja im Prinzip

Simon

Matplotlib nochmal ein bisschen erweitert

Simon

kann man da auch reinpluggen.

Jochen

Genau, so dass es halt, man hat halt

Jochen

immer, kann es dann anders aussehen

Jochen

lassen, so dass zum Beispiel bei Bokeh oder

Jochen

Plotly ist es halt so, wenn man dann sagt

Jochen

DF Plot irgendwas, dann kann man

Jochen

das, dann ist das, was man sieht,

Jochen

dann halt auch scrollbar zum Beispiel,

Jochen

man kann da drin zoomen oder so,

Jochen

was man bei einem Matplotlib-Bild jetzt nicht machen kann,

Jochen

weil da ist einfach, das ist quasi dann halt so ein

Jochen

statisch rausgerendertes PNG oder so

Jochen

und dann, wenn man da reinzoomt,

Jochen

wird es nur pixelig, aber man sieht

Jochen

nicht mehr, während halt bei

Jochen

eben dieser, bei Plotly

Jochen

oder so hat man dann, kann man, wenn man

Jochen

reinsucht, sieht man einfach an der Stelle mehr

Jochen

und das, man muss

Jochen

an dem Plotaufruf eigentlich

Jochen

nichts ändern, sondern man tauscht einfach nur das

Jochen

Backend aus und

Jochen

ja, das ist schon sehr nett und das verwende ich tatsächlich

Jochen

oft irgendwie

Jochen

um Sachen zu visualisieren.

Dominik

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

Dominik

Wie suche ich mir die Daten denn aus? Also wie kopiere ich

Dominik

denn da irgendwas von den Daten, wenn ich ja so ganz viele

Dominik

Spalten und Teilen habe? Also wenn

Simon

man gar nicht weiß, wie man anfangen soll,

Simon

wenn ich mich richtig erinnere,

Simon

macht Plot standardmäßig einfach ein

Simon

Pair-Plot. Alles gegen alles.

Simon

Dann sieht man schon mal, wie sind die Daten zueinander

Simon

verteilt. Dann kann

Simon

man Effekte sehen, wie

Simon

auf zwei bestimmten Variablen

Simon

ist die Verteilung eher so bimodal.

Simon

Man hat zwei Felder von Punkten oder sowas.

Simon

Also da kann man schon grundsätzlich

Simon

mal sehen, wie sind meine Daten überhaupt verteilt.

Simon

Ansonsten

Simon

gibt es ja oft eine Fragestellung.

Simon

ideellen Welt gibt es im Vorfeld

Simon

eine Fragestellung und dann kann man auf diese Fragestellung

Simon

hinzuarbeiten. Dann weiß man genau, welche Spalten brauche ich

Simon

jetzt gleich. Spaltenzugriffe sind

Simon

in Pandas, finde ich, super, super easy

Simon

und convenient. Man gibt im Prinzip einfach nur

Simon

von seinem DataFrame-Objekt per

Simon

.syntax den Spaltennamen an oder in

Simon

eckigen Klammern wie bei einem Listenzugriff.

Simon

Jetzt muss ich gerade genau überlegen.

Simon

Doch, da geht der Spaltenname

Simon

auch. Ja, es gibt

Jochen

zwei Interfaces. Es gibt halt mit

Jochen

man kann halt entweder den Namen

Jochen

nehmen oder man kann halt auch den numerischen Index

Jochen

nehmen. Das ist Log

Jochen

und I-Log, glaube ich, sind die unterschiedlichen

Jochen

Funktionen, die man da aufrufen kann.

Jochen

Aber also ich würde auch eigentlich

Jochen

immer eher, also mit den Indizes

Jochen

ist eine ältere Geschichte und

Jochen

ich würde eher die Namen immer nehmen, weil das

Jochen

klarer ist, was da eigentlich gemeint ist.

Dominik

Und die werden dann irgendwie mit GroupBy irgendwie so vorsortiert

Dominik

oder sowas und dann gibt es irgendwelche Alternativen und dann kann

Dominik

man die in Beziehung setzen und dann

Dominik

alles plotten? Also erst mal

Simon

hat man Zugriff auf seine tabellarischen

Simon

Daten. Und da kann man sagen,

Simon

ich möchte jetzt Spalten A,

Simon

B und E plotten

Simon

auf einer X-Achse,

Simon

die ist in Spalte D meinetwegen.

Simon

Aber nur die roten.

Dominik

Oder die roten und die gelben vergleichen. Genau.

Dominik

Das ist dann der zweite Schritt,

Simon

dass man anfängt, vorher zu

Simon

aggregieren. Man kann dann

Simon

überlegen, will ich

Simon

nur bestimmte Gruppierungen haben?

Simon

Es gibt Funktionen, die heißen GroupBy.

Simon

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

Simon

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

Simon

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

Simon

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

Dominik

Das ist spannend für die ganze Anwendung, wenn man irgendwie so kategorisierbare Daten mit verschiedenen 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, weiß nicht, 70 Kilo und welche Wahrscheinlichkeit haben die für bestimmte Dinge?

Simon

Genau, da kommen wir in einen anderen Bereich so ein bisschen rein und das ist Indizierung auf Basis von Boolean Werten. 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 entsprechend einen Slice aus meinem Data-Frame rausgeben, der nur dieser Bedingungen entspricht.

Dominik

Was wird denn da technisch erzeugt? Also macht der eine Kopie der Tabelle mit diesen Werten oder setzt der halt dann noch eine neue Tabelle daneben mit so Bolian-Werten, ist wahr, ist falsch?

Dominik

Oder macht der auch so einen Index, den er nur liest?

Jochen

Gut, also meistens wird tatsächlich, wenn man jetzt irgendwie da irgendwas extrahiert, wird kopiert. 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, man sagt DF, eckige Klammer auf, irgendwie, DF-Funktionalität ist größer irgendwas und DF-Funktionalität ist kleiner irgendwas.

Jochen

Bullshit-Ausdruck sozusagen dann halt

Jochen

irgendwie in eine Spalte verwendet,

Jochen

wo dann irgendwie in jeder Zeile True oder False

Jochen

drinsteht. Und dann wird das halt,

Jochen

wenn man jetzt zeilenweise filtert,

Jochen

werden halt alle Zeilen,

Jochen

die halt True sind, rausgesucht

Jochen

und alle anderen werden halt ignoriert quasi.

Jochen

Und

Jochen

ja, ganz genau, wie das

Jochen

technisch unten drunter funktioniert, weiß ich jetzt aber auch nicht.

Jochen

Und

Jochen

ja, das sind halt so,

Jochen

ich kann mir vorstellen, dass irgendwie so ein

Jochen

NumPy hat irgendwie als Feature drin, dass man Sachen,

Jochen

dass man so Masken verwenden kann, aber ich bin mir

Jochen

nicht sicher, ob es wirklich verwendet wird, keine Ahnung.

Jochen

Egal, muss man halt nochmal genauer nachlesen.

Jochen

Ja, und

Jochen

dann kann man da

Jochen

irgendwie weitere Dinge mitmachen.

Jochen

Das ist halt recht

Jochen

schön, schöne Methode,

Jochen

um da halt irgendwie Sachen rauszuselecten. Vielleicht kann man

Jochen

an der Stelle auch mal grad eine

Jochen

Blogartikel-Reihe erwähnen, das fällt mir da grad ein,

Jochen

die ich immer

Jochen

wieder, wenn ich irgendwie Leuten

Jochen

Panas Erzähler

Jochen

auch mit erwähne, weil die so toll ist.

Jochen

Das ist von Tom Augsburger

Jochen

Ja genau, das heißt

Jochen

Modern Pandas

Jochen

und das ist Teil 1

Jochen

bis, ich weiß gar nicht wie viel es gibt

Jochen

bis 8

Jochen

momentan

Simon

Kenne ich noch gar nicht, muss ich auch mal reinschauen

Simon

Ja

Simon

So lernt man immer dazu

Jochen

Genau und der beschreibt

Jochen

halt sehr ausführlich, wie das mit dem Indexing

Jochen

halt eher so aus User-Perspektive, was man damit alles

Jochen

machen kann, funktioniert.

Jochen

Und

Jochen

ja, also gerade wenn man jetzt nicht nur

Jochen

einen Index hat, das ist auch etwas, was halt

Jochen

Pandas kennt, was ich von Datenbanken

Jochen

so nicht kenne. Also Datenbanken bedeuten

Jochen

Indizes ein bisschen was anderes als halt jetzt bei Pandas.

Jochen

Man kann halt bei Pandas

Jochen

auch mehrdimensional Indizes haben und dann da halt

Jochen

irgendwie kreuz und quer verschachtelte Abfragen

Jochen

macht. Und da

Jochen

wenn man das sich so zuerst anguckt,

Jochen

dann raucht einem da relativ schnell so der Kopf.

Jochen

Aber wenn man tatsächlich diese

Jochen

Probleme hat, dann kann das ultra praktisch

Jochen

sein, wenn man da irgendwie sich mit auskennt

Jochen

und diese Modern Pandas Serie ist halt eine,

Jochen

wo man das sehr schön

Jochen

sehen kann, wie das funktioniert.

Jochen

Im ersten Artikel werden

Jochen

glaube ich da irgendwie so halt

Jochen

diverse Indizie-Geschichten erklärt

Jochen

und dann gibt es halt einen Artikel

Jochen

nur zu Method Chaining

Jochen

und ja, dann

Jochen

eins zu Indizes

Jochen

und da wird dann auch nochmal das alte

Jochen

Interface

Jochen

gezeigt und halt, was man jetzt

Jochen

mit dem neuen Interface an Dingen machen kann

Jochen

und da gibt es halt wirklich verrückte

Jochen

Abfragen, die man

Jochen

Also das Ding auf jeden Fall ist wieder

Dominik

super spannend, was der neueste heiße Scheiß

Dominik

ist. Was ich jetzt da gekannt habe, ist auch

Dominik

die einzige Quelle, deswegen habe ich jetzt den Vergleich natürlich

Dominik

wieder nicht, ist diese Einführung in

Dominik

Python mit Data Science

Dominik

oder Data Science mit Python von Jake Wanderplast

Dominik

Da gibt es auch ein schönes Artikel

Dominik

zu Pandas drin, das ist auch

Dominik

frei irgendwo bei GitHub

Dominik

Ja, die Notebooks

Dominik

Und sogar als Notebooks, die er alle hoffentlich hat

Dominik

hat er irgendwie unter MIT-Lizenz da online gestellt

Dominik

und da kann man auch genau die Sachen als Notebooks

Dominik

direkt alle ausprobieren. Das ist ein tolles Beispiel für

Dominik

diese, glaube ich, die einfachen

Dominik

so die Basissachen drin, dass man so das grundsätzliche

Dominik

alte Prinzip mal versteht, das man direkt dann mit

Dominik

Pandas potten kann, ich glaube über den Untergang der

Dominik

Titanic oder sowas.

Dominik

Ja, sonst benutzen die

Simon

Tutorials oft gerne den Iris-Datensatz.

Simon

Da geht es irgendwie um

Simon

Blütenlänge und Breite und

Simon

das war mir immer ein bisschen sympathischer

Simon

als Biologe.

Dominik

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

Simon

Ja, genau. Das ist auch super spannend mit diesen Multi-Level-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

Simon

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,

Simon

kann man da vielleicht Dictionaries benutzen?

Simon

Ja, kann man tatsächlich.

Simon

Also wenn ich in Python schon ein Dictionary habe,

Simon

was Keys und als Values Listen hat,

Simon

dann kann ich einfach mein DataFrame erzeugen

Simon

mit pandas.dataframe oder pd.dataframe,

Simon

wenn man pandas als pd importiert,

Simon

und da reingeben, mein Dictionary.

Simon

Dann macht er automatisch aus den Keys Spaltennamen

Simon

und aus den Values, aus den Listen

Simon

macht er dann meine

Simon

Series.

Simon

Hat natürlich zur Bedingung, dass die gleich

Simon

lang sind. Ja. Sonst gibt es da

Simon

einen Fehler. Ich weiß gar nicht, ob der da mit

Simon

NA auffüllt oder ob der

Simon

Ja,

Jochen

außer dass es einen Fehler wirft.

Jochen

Ich weiß es aber auch nicht. Es gibt auch irgendwie so eine andere Funktion.

Dominik

Ich weiß jetzt nicht, bei was es genau geht, wenn man halt

Dominik

so ein DataFrame über so ein NumPy-Array hat oder

Dominik

sowas, dass der automatisch neue Spalten

Dominik

erzeugen kann, die er dann irgendwie

Dominik

fortsetzt. Ich weiß nicht, ob das

Dominik

linear passiert oder sowas, habe ich irgendwie kurz entdeckt.

Dominik

Wenn man einfach eine neue Spalte

Dominik

erstellt dann, wenn man schon drei oder vier hat,

Dominik

dass du dann, wenn du die fünfte erstellst, einfach

Dominik

dann neue Werte reinbaut.

Dominik

Kann sein,

Dominik

weiß ich nicht so.

Dominik

Vielleicht habe ich auch wieder irgendwelchen Quatsch erzählt.

Simon

Ich weiß gerade nicht genau, was du da

Simon

meinst.

Dominik

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

Dominik

Irgendwo nachgeschlagen.

Dominik

Buch ist aber auch ein gutes

Dominik

Stichwort.

Simon

Und man kriegt ja immer den gut gemeinten Ratschlag, guck doch mal ins Handbuch.

Simon

Das Pandas-Handbuch ist tatsächlich länglich.

Simon

Es hat 2.900 irgendwas Seiten.

Simon

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

Simon

Hast du es durchgelesen?

Simon

Nee.

Simon

So bei aller Liebe, das ist dann doch etwas viel.

Simon

aber man kann halt

Simon

relativ schnell kapitelweise,

Simon

wenn man was ganz Bestimmtes sucht,

Simon

da reinspringen. Okay, so als Index.

Simon

Es ist auch alles, also verlinktes

Simon

wie heißt das, Table of Contents,

Simon

Inhaltsverzeichnis, genau.

Simon

Verlinktes Inhaltsverzeichnis, man kommt schnell dahin.

Jochen

Ja, die Dokumentation

Jochen

von Panas ist auch sehr gut, aber auch manchmal,

Jochen

also die ist schon etwas

Jochen

trocken oder so, manchmal muss man sich schon so ein bisschen

Jochen

ein bisschen quälen.

Jochen

Vielleicht liegt das an dem Tabellenthema?

Jochen

Könnte, vielleicht liegt es einfach am Thema.

Jochen

Sollte man vielleicht eher

Jochen

irgendwie Schreiner werden oder so.

Jochen

Das ist vielleicht irgendwie,

Jochen

ja, das überlege ich mir manchmal.

Jochen

Das wäre toll.

Jochen

Ja, aber

Jochen

genau,

Jochen

ja,

Jochen

stimmt, was hatten wir?

Jochen

Was gibt es für Datentypen, so Serien,

Jochen

Data Frames, Panels?

Jochen

Was kann man damit machen?

Jochen

Ja, so, genau.

Jochen

Man kann auch sehr viele Dinge,

Jochen

die man sonst vielleicht mit einer Datenbank machen

Jochen

würde, damit tun. Und das hat ja auch

Jochen

so den Vorteil. Also das kann ich auch nur, ich finde

Jochen

die Art, also das User-Interface

Jochen

von Pandas ist halt

Jochen

ziemlich angenehm und ist auch relativ kurz.

Jochen

Also wenn du mit einer Datenbank arbeitest und

Jochen

SQL-Statements schreibst, das geht natürlich auch,

Jochen

aber das ist halt viel

Jochen

umständlicher.

Jochen

Und Pandas hat da halt eine sehr schöne

Jochen

UI

Jochen

eigentlich.

Jochen

Und man kann viel damit machen, was man halt

Jochen

auch mit einer Datenbank normalerweise tun würde. Und insofern

Jochen

kann ich das auch nur empfehlen, wenn man jetzt irgendwie so ein Datenbankproblem

Jochen

hat. Man kann auch irgendwie die komplette Datenbank,

Jochen

meistens sind die ja nicht so groß, auch irgendwie in Pandas

Jochen

sich reinholen oder als Data Frames aus der Datenbank

Jochen

ziehen und dann da irgendwelche Dinge machen

Jochen

und dann schon mal, wenn man dann weiß,

Jochen

wie es geht, dann kann man es hinterher auch in SQL machen.

Jochen

Aber vieles von dem

Jochen

lässt sich auch locker in Pandas mal ausprobieren,

Jochen

weil Pandas hat ja eben auch solche Funktionen wie

Jochen

man kann Joins machen,

Jochen

man kann halt Data Frames Merge, also da heißt das

Jochen

dann, also ich glaube, da verwendet man

Jochen

eher einen Aufruf Merge oder so, aber im Grunde

Jochen

macht es dann halt auch ein Join zwischen

Jochen

zwei DataFrames. Dann kann man angeben, auf welchen

Jochen

Spalten gejoined werden soll und solche

Jochen

Dinge. Und

Jochen

genau, eben all diese Group-By-Geschichten.

Jochen

Gibt es tatsächlich so eine Funktion, wie man

Dominik

eine Datenbank in DataFrame bekommt und

Dominik

andersrum, wie man eine DataFrame in irgendeinem Datenbanktyp

Dominik

speichert? Ja, ja.

Jochen

Also für alle Datenbanken gibt es da Adapter,

Jochen

mit denen man die Daten noch auslesen kann.

Simon

Genau, also diese Import-

Simon

Export-Geschichten. Also wir haben

Simon

nur über Import gesprochen,

Simon

aber Export gibt es halt auch für

Simon

alle diese Datentypen. Warum schreibt dann

Simon

irgendjemand noch SQL-Statements?

Simon

Ja doch, also

Jochen

manchmal, es kann schon sinnvoll

Jochen

durchaus

Jochen

sinnvoll sein. Also wenn du an der Datenbank ja auch

Jochen

irgendwas manipulieren willst an Werten, dann musst du es ja tun.

Jochen

Du kannst ja gar nicht, kannst auch

Jochen

ein Pandas machen, aber dann hast du das Problem, musst es ja irgendwann wieder

Jochen

zurück in die Datenbank schreiben.

Jochen

Dann man klöscht eine neue Datenbank.

Jochen

Ja.

Jochen

Und gegebenenfalls

Simon

ist das, was du in deinem Speicher bearbeiten

Simon

kannst, auch

Simon

kleiner als das, was

Simon

in der gesamten Datenbank ist. Das heißt,

Simon

beim Import würdest du schon nur einen Teil

Simon

aus der Datenbank nehmen, kannst damit

Simon

aber dann relativ komfortabel

Simon

rumspielen.

Simon

Tatsächlich, der Befehl

Simon

ist Join, auch

Simon

in DataFrames. Ich verwechsel es auch immer wieder,

Simon

deswegen habe ich gerade mal kurz nachgeguckt.

Simon

Und es gibt noch Concatenate,

Simon

da kann man aus einem DataFrame

Simon

Spalten in ein anderes

Simon

reinziehen.

Jochen

Ja, und dann, genau,

Jochen

solche, eben, es gibt

Jochen

so Datenmanipulationsgeschichten,

Jochen

eben Join, Merge,

Jochen

dann gibt es noch

Jochen

solche Sachen wie,

Jochen

genau, das ist auch schwer

Jochen

zu erklären, wenn man das jetzt nur hört,

Jochen

fürchtig,

Jochen

sowas wie Pivot,

Jochen

Unpivot, Melt,

Jochen

Stack, Unstack,

Jochen

sehr praktische Geschichten, aber ich weiß jetzt ehrlich gesagt nicht genau,

Jochen

wie ich das erkläre.

Jochen

Ja, du kannst, also wenn du,

Jochen

Okay, ich versuche es mal einfach, wenn du jetzt

Jochen

du machst im Grunde aus einer

Jochen

aus Dingen, die in einer

Jochen

Spalte stehen, machst du mit

Jochen

Pivot irgendwie zusätzliche Spalten.

Jochen

Also ich bin

Dominik

gerade völlig auf den Kopf gefallen. Ich habe es natürlich mit der

Dominik

Transformation gerade verwechselt.

Dominik

Transpose, ja.

Jochen

Das ist relativ einfach, aber

Jochen

Pivot macht schon so ein bisschen kompliziertere

Dominik

Dinge. Das aggregiert irgendwas zur besseren Auswertung.

Dominik

Ein Widerfall, doch?

Jochen

Nee, das, das, ja, also

Jochen

manchmal hat man Daten halt in einem Format,

Jochen

in dem man schlecht plotten kann.

Jochen

Und manchmal braucht man halt Dinge, die

Jochen

in einer Zeile, die irgendwo in einer Zeile stehen,

Jochen

die möchte man als Spalte haben, um dann halt die Spalte

Jochen

besser plotten zu können. Und dafür fällt man dann auf

Jochen

Pivot. Und dann, genau,

Jochen

die umgekehrte Funktion dazu ist Melt.

Jochen

Und

Jochen

die, aber eigentlich

Jochen

noch allgemeineren Funktionen, die funktionieren dann eben

Jochen

auf so Multilevel-Indizes

Jochen

und halt Stack und Unstack.

Jochen

Aber das kann auch sehr schnell

Jochen

ein bisschen überfordern.

Simon

Also ich kann sagen, so aus dem

Simon

Biologenalltag, dass ich Pivot und Melt

Simon

nie benutzt habe. Einfach

Simon

weil die vielleicht auch

Simon

zu viel Magie im Hintergrund noch machen können.

Simon

Stack und Unstack aber

Simon

sehr häufig, weil

Simon

in der Realität

Simon

sind, wir hatten ja eingangs über die

Simon

Excel-Tabellen gesprochen, die nicht

Simon

immer ganz maschinenlesbar sind.

Simon

Es gibt noch den Zwischenwert, wo

Simon

die zwar maschinenlesbar sind, aber

Simon

mehrere Level von Indizes haben und wenn die mehrere Level von Indizes haben, man könnte

Simon

sich das zum Beispiel vorstellen wie, ich hatte eben noch ein Beispiel im Kopf, sowas

Simon

wie Klausurnoten nach Semestern in zwei verschiedenen Gruppen, sagen wir mal Biologen versus Chemiker

Simon

oder sowas, wie die in der Chemieklausur abschneiden im ersten Semester, im zweiten Semester.

Simon

Und dann hat man diese Gruppierung einmal, zu welcher Gruppe gehören die Personen an,

Simon

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,

Simon

dann würde man im Prinzip sagen, ich schreibe jetzt jede Person einzeln als Zeile auf

Simon

und habe eine neue Spalte, wo die Gruppe nochmal als sich wiederholender Wert mit drin steht,

Simon

sodass ich wegkomme von, ich habe im Prinzip zwei Zeilen, die jeweils vier Unterzeilen beinhalten,

Simon

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,

Simon

ich möchte das jetzt gar nicht nach den Gruppierungen unstacken, 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. Ich weiß

Jochen

gar nicht, ob es zu dem Stack-on-Stack oder

Jochen

so Thema halt auch ein

Jochen

Modern Pandas Artikel

Jochen

gibt. Ich fürchte nein. Schade.

Jochen

Ah ja, muss man einfach mal nach...

Jochen

Also, ne, ich verlinke da einfach mal

Jochen

einen Artikel zu, wie das so aussieht.

Jochen

Wenn man das sieht, ist es eigentlich, dann kann man

Jochen

es deutlich besser verstehen.

Jochen

Ja, genau. Das sind so die Dinge, die

Jochen

man damit dann tut.

Jochen

Ja.

Dominik

Ja, vielleicht nochmal dieser Pivot kurz,

Dominik

das wart ihr gerade kurz dabei, das sind wir kurz

Dominik

abgeschreibt. Also was

Dominik

macht man damit jetzt genau? Also ich kenne das irgendwie jetzt auch aus Excel,

Dominik

dass man irgendeine Auswertung hat, man hat dann irgendwelche

Dominik

Datenblätter oder sowas und dann möchte

Dominik

man dann irgendwelche Aggregate

Dominik

irgendeinem Endnutzer

Dominik

auf einem Auswertungs-Dashboard

Dominik

zur Verfügung stellen und da wird dann

Dominik

irgendwas zusammen gerechnet.

Dominik

Ja, Excel genau kann ja auch

Dominik

sowas, so Pivot-Tabellen.

Simon

Also ich habe hier gerade mal das

Simon

Data-Science-Cheat-Cheat-Pandas

Simon

offen. Können wir auch nachher verlinken.

Simon

Und da steht

Simon

im Wesentlichen drin, dass

Simon

Pivot Table, wie gesagt, ich habe es noch nie benutzt,

Simon

aber dass es

Simon

eine Pivot-Tabelle macht,

Simon

anhand von

Simon

einer Spalte gruppiert

Simon

und dann aber über andere

Simon

Spalten eine Funktion aufruft.

Simon

Das kann zum Beispiel sowas sein wie Mittelwert oder

Simon

eine Summe oder

Simon

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 Hintergrund in R haben,

Simon

da gibt es T-Apply und L-Apply für Zeilen, Spalten und was weiß ich nicht alles.

Simon

In Pandas DataFrames 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

Simon

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, dass man, man kann, was man nicht tun sollte, ist über Data Frames iterieren und dann in der Vorschleife da irgendwelche Dinge mitmachen, 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, aber das geht halt nicht, oder das geht schon, ist halt nur dann sehr, sehr langsam, während halt, wenn man jetzt Apply aufruft, dann ist das halt ziemlich schnell.

Jochen

weil unten

Jochen

drunter, weil eben

Jochen

Vorloops in Python sowieso langsam sind

Jochen

und man dann eben keine Vorloop machen muss,

Jochen

sondern das läuft halt alles irgendwie

Jochen

in den entsprechenden, also kommt

Jochen

je nachdem, wie der Datentyp ist,

Jochen

aber möglicherweise halt landet das in

Jochen

einer dieser optimierten Vortragsbibliotheken,

Jochen

die unten drunter unter der Lampe liegen

Jochen

und es ist halt auch so, dass es dann

Jochen

in gewisser Weise schon parallelisiert wird

Jochen

oder halt diese, ich weiß jetzt gar nicht,

Jochen

wofür SIMD steht,

Jochen

diese Instruktionssets, diese

Simon

Single Instruction Multiple Data.

Simon

Ah, okay. Ja, genau.

Simon

Super. Dankeschön.

Simon

Ja, man spricht da auch von

Jochen

Vektorisierung. Also man

Jochen

kann halt

Jochen

mit einem Taktzyklus halt

Jochen

mehrere

Jochen

Operationen ausführen, weil

Jochen

man hat so super lange Register.

Jochen

Weiß ich nicht, vielleicht 512

Jochen

Byte oder so.

Jochen

Und da sind dann halt viele,

Jochen

wenn man jetzt Integer hat, 4 Byte

Jochen

Werte drin und die werden dann halt

Jochen

alle addiert gleichzeitig oder

Jochen

multipliziert oder sowas.

Jochen

Und man zerlegt halt ein komplettes

Jochen

Array sozusagen, auf dem man dann

Jochen

irgendwelche Dinge macht, halt in diese Blöcke

Jochen

und braucht dann halt viel weniger Takte,

Jochen

als wenn man da einen Vorluft drüber machen würde.

Jochen

Ja, und das

Jochen

macht Sachen super schnell.

Jochen

Man hat halt irgendwie so

Jochen

Python-Interface und ein Jupyter-Notebook,

Jochen

das sieht dann halt so aus, als wäre man

Jochen

super high-levelig, aber wenn man eine Operation macht,

Jochen

kann es sein, dass dann tatsächlich etwas sehr, sehr

Jochen

Optimiertes passiert und es sehr schnell

Jochen

ist und wenn jemand da hingehen würde,

Jochen

würde er es in C schreiben, ist er möglicherweise

Jochen

deutlich langsamer, wenn er

Jochen

nicht genau weiß, was er tut.

Jochen

Und das ist natürlich für viele

Jochen

Leute auch total überraschend.

Jochen

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

Jochen

Aber ja, man muss halt

Jochen

auch so ein bisschen eine komische

Jochen

Syntax dafür halt in Kauf nehmen.

Jochen

Man kann halt nicht mehr For-Loops machen, man muss halt

Jochen

immer Apply schreiben und dann halt

Jochen

eine Funktion übergeben. Oft übergibt man dann halt so anonyme Funktionen.

Jochen

Schreibt dann Apply und dann Lambda, X

Jochen

und dann kriegt man halt irgendwie einen Wert übergeben,

Jochen

macht dann damit irgendwas.

Jochen

Comprehensions oder sowas

Jochen

kann man auch vergessen, genau, das selbe Problem.

Jochen

Genau, das geht alles nicht mehr.

Jochen

Man schreibt halt alles nur noch

Jochen

ja, quasi,

Jochen

man schreibt eigentlich fast alles in Apply. Ich weiß gar nicht,

Jochen

ob es da noch andere Funktionen gibt, die so ähnlich sind wie Apply.

Jochen

Naja.

Jochen

Nee, das ist eigentlich

Jochen

immer Apply, ja.

Jochen

Ja, und

Jochen

dann chainet man halt die Sachen hintereinander.

Jochen

Man kann halt,

Jochen

diese Methode liefert dann halt

Jochen

das Ergebnis von dem Apply zurück, dann

Jochen

ruft man darauf wieder was anderes auf und dann

Jochen

hat man halt eine ganze Reihe von so hintereinander

Jochen

gechainten Apply-Aufrufen unter Umständen.

Jochen

Und ja.

Jochen

Das ist auch

Jochen

witzig. Fällt mir gerade noch

Jochen

zu dieser Vektorisierungsgeschichte ein.

Jochen

Früher

Jochen

haben auch Leute irgendwie

Jochen

erzählt, naja, ach,

Jochen

das mit der Parallelisierung,

Jochen

das ist ja alles gar kein Problem, wenn wir jetzt viele CPUs haben,

Jochen

so irgendwie die

Jochen

Steigerung der Taktfrequenzen war ja dann irgendwann auch schon

Jochen

vor längerer Zeit irgendwie vorbei,

Jochen

mehr oder weniger, und man muss halt, man kriegt halt

Jochen

mehr Prozessoren, also Moore's Law ist halt noch nicht

Jochen

wirklich weg, weil sich das eigentlich auch nur auf

Jochen

die Transistoren, nicht auf die Geschwindigkeit

Jochen

als solche irgendwie bezieht.

Jochen

Aber

Jochen

dann hieß es halt so, naja, das ist kein Problem,

Jochen

wenn man mehrere Prozessoren hat, da gibt es dann bestimmt Compiler,

Jochen

die das automatisch parallelisieren oder so.

Jochen

Nee.

Jochen

Ist nicht passiert, wird auch nie passieren.

Jochen

Dass Sachen automatisch parallelisieren geht

Jochen

halt nicht. Und das Schlimme

Jochen

ist, selbst sowas wie automatisch

Jochen

vektorisieren geht halt nicht.

Jochen

Weil dummerweise,

Jochen

wenn man jetzt in C,

Jochen

wenn man sich jetzt mal vorstellt, man schreibt

Jochen

eine Vorschleife, die jetzt zwei Vektoren addiert,

Jochen

also sagen wir so,

Jochen

die macht einfach nur

Jochen

C gleich A plus B. Wobei jetzt

Jochen

C, A und B sind halt Vektoren

Jochen

der gleichen Länge.

Jochen

C ist der, der erzeugt wird.

Jochen

Und man macht halt

Jochen

einfach vor, die das tut, dann denkt man sich

Jochen

jetzt, könnte doch eigentlich der Compiler

Jochen

hingehen und das irgendwie

Jochen

in diese Single Instruction Multiple

Jochen

Data Prozessor

Jochen

Befehle umwandeln und dann irgendwie

Jochen

das deutlich schneller machen, stellt sich

Jochen

raus, nein, kann er nicht, weil in C

Jochen

ändert das halt die Semantik

Jochen

von deinem Programm. Weil

Jochen

es könnte ja auch sein, dass dieses C irgendwie

Jochen

wieder was mit deinem A und deinem B zu tun hat und

Jochen

die Reihenfolge, in der du Sachen addierst,

Jochen

sich auf die nächste Addition irgendwie auswirken.

Jochen

Sodass halt, wenn du das in der Vorlog machst,

Jochen

kommt halt was anderes raus, als wenn du das parallel machst.

Jochen

und dann muss der

Jochen

Compiler natürlich sagen so, nee, kann ich nicht automatisch

Jochen

optimieren, weil weiß er nicht, vielleicht ist

Jochen

das irgendwie, ist das die Programmlogik

Jochen

dass das so sein muss

Jochen

so, das heißt, bei sowas Simples geht's schon nicht

Jochen

also man kann natürlich irgendwie dann so

Jochen

Hinweise an den Compiler

Jochen

dazu schreiben, also man sagt so, hier ist okay

Jochen

darfst du schon optimieren, mach da mal

Jochen

aber so generell kann

Jochen

ein Compiler das nicht machen und damit

Jochen

ist es natürlich schon irgendwie, ja

Jochen

und das ist einer der Gründe, warum das

Jochen

auch in Fortran so viel schöner funktioniert

Jochen

ist, da gehen solche Sachen nicht, da kannst du

Jochen

nicht, kann nicht das Ergebnis

Jochen

einer

Jochen

Addition, wenn du

Jochen

zwei solche Arrays addierst,

Jochen

kann nicht sich auswirken

Jochen

auf die nächste, sozusagen. Das C kann

Jochen

nicht irgendwie wieder zu A oder zu B gehören,

Jochen

sodass, da das ausgeschlossen

Jochen

ist, kannst du in Fortran solche

Jochen

Operationen halt automatisch vektorisieren. Das ist einer der Gründe,

Jochen

warum das halt irgendwann auch alles irgendwie Fortran ist.

Jochen

Auf der anderen

Jochen

Seite, das müsste nicht unbedingt, du kannst auch ein C machen,

Jochen

oder ein C++, wenn du das halt dem Compiler

Jochen

entsprechende Hinweise gibst. Aber es ist alles irgendwie

Jochen

nicht so ganz einfach.

Jochen

Wahrscheinlich will man sich da auch nicht

Jochen

mit rumschlagen. Aber wenn man einfach so Panas verwendet,

Jochen

dann passiert das ja alles automatisch und man hat nichts damit zu tun.

Jochen

Das ist gut.

Jochen

Ja, genau.

Jochen

Vektorisierung hatten wir dann.

Jochen

Genau, was wir vielleicht noch mal

Simon

ein bisschen detaillierter

Simon

ansprechen können, ist irgendwie das Plotting.

Simon

Also es gibt für jedes DataFrame erstmal einen DotPlot 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,

Simon

damit man sich nicht mehr darum kümmern muss, die Plot-Funktion entsprechend durchzukonfigurieren, 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,

Simon

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.

Simon

Ja, ja.

Simon

Welche

Dominik

präferiert ihr von diesen Plotting-Bibliotheken?

Dominik

Also jetzt irgendwie Matplot mit Seaborn

Dominik

oder dann doch Bookie oder?

Dominik

Ich verwende

Dominik

meistens Seaborn tatsächlich

Jochen

in Notebooks, aber

Jochen

es kommt halt darauf an,

Jochen

auf den Einsatzzweck. Also meistens

Jochen

müssen die für mich nicht interaktiv sein

Jochen

und dann verwende ich halt Seaborn, weil es einfach

Jochen

netter aussieht, als Matplotlib direkt zu verwenden

Jochen

und das ist halt auch irgendwie einfacher.

Jochen

Es gibt halt manche Plots, das geht auch mit

Jochen

Matplotlib, aber

Jochen

es ist halt schon so ein bisschen, also ehrlich

Jochen

gesagt, ich mache das meistens so,

Jochen

dass ich auf Seaborn,

Jochen

auf der Seaborn-Dokumentation halt dann so

Jochen

angucke, was ich so grob brauche und dann

Jochen

scrolle ich halt durch die Beispiele, bis ich irgendwas gefunden habe, dann

Jochen

kopiere ich den Aufruf und modifiziere

Jochen

den so lange, bis es halt irgendwie funktioniert.

Jochen

Wenn man

Jochen

jetzt mit Matplotlib hingehen würde und

Jochen

das so nachbauen würde, dann

Jochen

ist das halt

Jochen

deutlich schwieriger und

Jochen

es geht natürlich auch, Matplotlib,

Jochen

C1 baut darauf auf und Matplotlib ist sehr

Jochen

mächtig, aber die API

Jochen

ist nicht so ganz einfach und

Jochen

eigentlich musste ich da nie, da ich auch nie

Jochen

so wirklich komplizierte Visualisierung mache, muss ich da nie

Jochen

so tief einsteigen, dass ich das irgendwie

Jochen

wirklich gebraucht hätte, sondern für mich reicht C1 meistens

Jochen

aus und dann gibt es aber natürlich auch

Jochen

noch Fälle, wo man das halt

Jochen

so ein bisschen interaktiv braucht,

Jochen

wo man da drin zoomen können möchte

Jochen

oder man möchte es auf einer Webseite haben

Jochen

und dann

Jochen

ist eher sowas wie Bokeh oder Plotly

Jochen

das, was man da verwenden möchte.

Jochen

Also Plotly

Jochen

habe ich glaube ich auch schon mal für so

Jochen

Dashboards oder so kann man das ganz gut verwenden.

Jochen

Man kann tatsächlich

Jochen

relativ einfach eben, wenn man jetzt

Jochen

eine Datenbank hat oder so, dann zockt man daraus wieder

Jochen

Data Frames und

Jochen

die kann man dann sehr einfach mit Plotly

Jochen

irgendwie auf einer Webseite visualisieren

Jochen

und dann können sich die

Jochen

Leute, die das angucken, halt auch dann

Jochen

den Bereich, der sie interessiert, halt irgendwie

Jochen

auswählen und daran zoomen

Jochen

und so. Also ich bin auch

Jochen

totaler Plotly-Fan.

Simon

Im Wesentlichen, was da rauskommt

Simon

als Graph ist eine

Simon

kleine HTML-Seite oder auch

Simon

nur ein Snippet, das man einbinden kann.

Simon

Und zugrunde liegt

Simon

dem D3JS, das ist eine Visualisierungs

Simon

Library in JavaScript.

Simon

Und das

Simon

hat super viele Funktionen, aber ich

Simon

benutze das hauptsächlich dafür,

Simon

dass man einen Mouse-Hover auf den Datensatz

Simon

hat. Man fährt

Simon

halt über den Graph drüber und man sieht den exakten

Simon

Wert nochmal an der Maus. Das ist

Simon

so die wichtigste

Simon

Funktion, die ich an Plotly immer wieder nutze.

Simon

Das kann man aber auch

Simon

beliebig weiter eskalieren noch. Es gibt jetzt

Simon

neu von Plotly Dash.

Simon

Das ist ein ganzes Dashboard

Simon

mit Plotly-Graphen, geschrieben

Simon

in Flask.

Simon

Und das kriegt man auch super schnell

Simon

hochgefahren. Und es gibt sogar inzwischen

Simon

ein Gitterprojekt, das eine Django

Simon

Anbindung für dieses Plotly

Simon

Dashboard macht. Also

Simon

da kann man dann im Wesentlichen

Simon

eine ganze Website mit Datenvisualisierung

Simon

als Django

Simon

Applikation direkt ausliefern.

Simon

Was auch ziemlich nett ist,

Simon

habe ich aber noch nicht im Detail ausprobiert.

Simon

Gibt es sowas auch für R?

Jochen

Ja, ja, ja. Man muss sogar sagen,

Jochen

der Dash ist halt so ein Nachbau von etwas,

Jochen

was halt in R super populär

Jochen

ist. In R heißt das Shiny.

Jochen

Ja, genau. Und

Jochen

das ist eigentlich immer noch so ein bisschen

Jochen

der Goldstandard für diese

Jochen

Geschichten, weil, also ich weiß nicht

Jochen

wie weit, also ich habe jetzt auch schon

Jochen

lange nicht mehr angeguckt, aber wie weit Dash da jetzt

Jochen

ist, ob sie das schon

Jochen

da dran sind, aber

Jochen

man hört immer noch,

Jochen

dass viele Leute sagen, ah, aber Shiny

Jochen

ist schon irgendwie toller und ich mag das

Jochen

lieber als irgendwie, da gibt es noch keine so

Jochen

richtige Alternative in der zweiten Welt zu.

Simon

Ich meine, da guckt auch

Simon

jeder vom anderen ab, ehrlicherweise.

Simon

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. Also im Prinzip das, was man mit Jupyter Notebooks für Python hat, gibt es auch in R. Also es ist so eine Ko-Evolution der beiden Analyse-Workflows, sage ich mal.

Jochen

wobei man sagen muss, dass die ursprüngliche Idee

Jochen

für diese Notebook-Geschichte

Jochen

die Art, wie wir das, das kommt aus Mathematika

Jochen

und

Jochen

es gibt schon ganz lang,

Jochen

aber es hat sich nie so

Jochen

wirklich durchgesetzt, bis dann

Jochen

das

Jochen

dann jemand als

Jochen

eben, bis Leute das dann halt

Jochen

dieses Jupyter-Projekt

Jochen

aus einem IPython-Interpreter

Jochen

halt irgendwie rausgewachsen ist,

Jochen

bis das da implementiert wurde.

Jochen

Und ich habe jetzt auch letztens gehört, dass jemand

Jochen

Und Stephen Wolff.

Jochen

also den Mathematiker-Autor

Jochen

da irgendwie gefragt hat,

Jochen

warum das jetzt, warum das eigentlich

Jochen

nicht Open Source wäre, weil das hätte

Jochen

sich doch jetzt irgendwie durchgesetzt und voll toll

Jochen

und so und das,

Jochen

die Idee war ja vorher schon da, aber

Jochen

ist unbekannt geblieben und

Jochen

äh, ja,

Jochen

Stephen Wolfram hatte darauf glaube ich so,

Jochen

ja, also ich hätte das ja schon gerne

Jochen

als Open Source irgendwie veröffentlicht, aber das ging damals

Jochen

nicht, weil es keine Distributionsmöglichkeiten

Jochen

dafür gab, das wurde halt alles irgendwie auf

Jochen

CDs und DVDs.

Jochen

Tja.

Jochen

Ja, es ist manchmal

Jochen

komisch. Es reicht nicht

Jochen

irgendwie, dass eine Idee super ist oder so, sondern

Jochen

es müssen mehrere Sachen zusammenkommen, damit irgendwas

Jochen

wirklich dann abhebt.

Jochen

Und manchmal

Jochen

ja, kommt dann

Jochen

denken Leute, dass irgendwie eine Idee

Jochen

erst kurz gibt oder so. Das gibt es hier schon ganz lange,

Jochen

aber die Umstände waren halt nicht

Jochen

richtig, sodass sie halt

Jochen

vorher halt noch nicht abheben konnte.

Jochen

Und bei diesen

Jochen

Jupyter-Notebooks ist das halt schon so. Ich denke, das war

Jochen

genau der richtige Moment und jetzt ist es halt groß

Jochen

geworden.

Jochen

Shiny, let's be bad guys.

Simon

Ich meine, gerade im Data-Science-Bereich,

Simon

wo man schnell viele

Simon

Dinge ausprobieren muss, ohne

Simon

Skripte von Anfang neu laufen zu lassen,

Simon

ist natürlich der

Simon

Killer-Anwendungszweck für diese

Simon

Notebooks.

Simon

Ja.

Dominik

Ja, haben wir noch was hier für

Dominik

Pandas? Ja, also Pandas ist ja nie

Simon

isoliert zu betrachten. Wir haben ja jetzt ganz viel

Simon

schon auch über NumPy gesprochen, über Seaborn und Matplotlib

Simon

und die eine Bibliothek, die ich eingangs

Simon

noch mit erwähnt hatte, war Stats Models

Simon

und die bringt da im Prinzip noch

Simon

eine Funktionalität rein, die ich persönlich auch erstmal nur von

Simon

A kannte und zwar ist das

Simon

Formeln

Simon

anzugeben, auf die man dann Fitting machen kann

Simon

oder die man auch plotten kann. Und diese Formeln,

Simon

das ist vielleicht erstmal ungewohnt, wenn man das noch nie gesehen hat, gibt man

Simon

im Wesentlichen irgendwie an als, sagen wir mal, eine Geradengleichung

Simon

y tilde x. Also eine Variable y,

Simon

die abhängig ist von einer Variable x

Simon

und als lineare Funktion zu verstehen ist.

Simon

Und in diesem Statsmodels gibt es die Funktion OLS,

Simon

um diese Formeln abzubilden.

Simon

Die kann man dann auch mit Pandas DataFrames zusammen benutzen,

Simon

um wieder Plotting zu machen.

Dominik

OLS meint du Optimal Linear Squares Modeling?

Dominik

Müsste, ja.

Dominik

Ordinary Linear Squares oder so was?

Dominik

Ich weiß es nicht mehr.

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,

Simon

die können in meinem Pandas DataFrame zu finden sein.

Simon

Und dann kann ich das Plotting darüber machen.

Simon

Da kann ich einmal die Trendlinie direkt

Simon

plotten, ich kann das Fitting direkt über die Pandas

Simon

Data Frames machen. Also die

Simon

greifen da irgendwie, also alle diese

Simon

Bibliotheken greifen sehr stark ineinander.

Simon

Und da würde es

Simon

auch gar nicht reichen, die 2.900

Simon

Seiten des Pandas Handbuchs komplett zu lesen.

Simon

Man müsste

Simon

halt auch noch das NumPy Handbuch

Simon

komplett lesen und dann vielleicht das

Simon

Matplotlib Handbuch noch komplett lesen.

Dominik

Also falls ihr die 2.900 Seiten Handbuch

Dominik

gelesen habt, dann sagt mal Bescheid und schreibt uns eine E-Mail.

Jochen

Ja, genau.

Jochen

Statsmodels

Jochen

kenne ich auch so, was Zeitreihenmodellierungs

Jochen

Geschichten angeht, aber habe ich

Jochen

noch nie so wirklich viel mit

Jochen

gemacht.

Jochen

Ich bin eher so bei

Jochen

Scikit-Learn zu Hause und

Jochen

also Maschinen-Learning-Bibliothek

Jochen

und auch da ist es so, also meistens

Jochen

bevor man halt irgendwelche

Jochen

Daten in Modelle kippen kann,

Jochen

muss man die halt mit Pandas einmal

Jochen

aufräumen und dann war es halt so, früher musste man dann

Jochen

immer noch so, okay, ich habe das jetzt in einem

Jochen

Data-Frame, wie kriege ich die Daten jetzt

Jochen

wie kriege ich die Daten

Jochen

jetzt so,

Jochen

dass ich die an meine Modelle verfüttern

Jochen

kann und das war auch mal so ein bisschen problematisch

Jochen

und das ist jetzt aber auch schon

Jochen

die letzte oder vorletzte Version

Jochen

von Cycle-Learn war auch kein

Jochen

Problem mehr, weil man jetzt automatisch

Jochen

auch, weil man jetzt auch nicht

Jochen

früher brauchten die ganzen

Jochen

also in Cycle-Learn heißen die

Jochen

Estimators, Estimator API

Jochen

die haben halt

Jochen

NumPy-Arrays genommen und jetzt

Jochen

mittlerweile nehmen die halt auch Pandas DataFrames

Jochen

und die Spalten einmal halten

Jochen

und wenn man halt irgendwie hinterher gucken

Jochen

möchte, okay, was ist denn jetzt

Jochen

wo gelandet und so und

Jochen

dann kann man da auch mit den Spalten

Jochen

Namen arbeiten und das ist alles sehr, sehr bequem geworden

Jochen

und das greift halt auch da wiederum ineinander

Jochen

und das ist halt eigentlich sehr schön.

Jochen

Also das ist

Jochen

ein großes Data-Science-Ökosystem

Jochen

mittlerweile und das ist halt schon toll.

Jochen

Ah, dazu fällt mir ein, genau,

Jochen

Sparse Data ist natürlich

Jochen

auch so ein Problem. Da gibt es

Jochen

irgendwie einen Sparse-Type

Jochen

von SciPy.

Jochen

Das hat man früher immer verwendet.

Jochen

Es gibt ein paar Modelle, die halt in Scikit-Learn mit Sparsen

Jochen

Daten umgehen können. Also Spars

Jochen

heißt

Jochen

Daten,

Jochen

bei denen die meisten Werte

Jochen

Null sind.

Jochen

Also zum Beispiel, wenn ich jetzt

Jochen

eine Menge von Texten

Jochen

in

Jochen

Vektoren verwandle, dann

Jochen

ist jedes Wort eine Dimension sozusagen

Jochen

und das heißt, ich habe eine Tabelle mit

Jochen

wenn ich einen kompletten

Jochen

wenn ich eine Menge von Texten

Jochen

in eine Matrix verwandeln

Jochen

in so eine Feature-Matrix verwandeln möchte

Jochen

und dann ist jedes Dokument ist eine Zeile

Jochen

und die Spalten sind

Jochen

halt die Worte, die drin vorkommen

Jochen

dann sind halt, die kommen halt

Jochen

die meisten

Jochen

Worte, die es so gibt, in einem Text aber

Jochen

nicht vor, das heißt, die allermeisten Werte sind halt null

Jochen

und jetzt ist es halt blöd, das

Jochen

halt dicht zu speichern, diese ganzen Nullen immer mit zu speichern

Jochen

weil eigentlich interessieren die einen ja gar nicht und dafür gibt es dann so Sparse-Formate und dann gibt es dann ja CSA oder CSO-Formate in SciPy, aber das ist halt auch alles ein bisschen unschön und jetzt eben der letzten Release von Pandas war auch ein natives Sparse-Datenformat mit drin, das habe ich mir aber noch nicht angeguckt, aber es sieht auch interessant aus.

Jochen

Ich weiß auch nicht, ob man das jetzt in Cyclet Learn schon verwenden kann, aber das ist, genau, das wird halt auch noch mit abgedeckt. Und ja, das ist auch noch so ein nicht uninteressantes Detail.

Jochen

Gibt es noch andere Bibliotheken aus den Wetten, Zeit, Learn, Studs, Models, SciPy, 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 hat irgendwie so eine dicke Kiste mit irgendwie, weiß ich nicht, 64 Prozessoren, irgendwie einem halben Terabyte Hauptspeicher oder so was 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 DAST.

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

Jochen

und dann halt die Operationen halt auf Prozessoren zu verteilen

Jochen

und dann halt das hinterher wieder zusammenzuführen.

Jochen

Aber es kann halt, also ich glaube, mehr oder weniger beliebige Compute-Graphs

Jochen

kann man da irgendwie angeben.

Jochen

einfache Dinge sind halt einfach

Jochen

damit zu parallelisieren. Wenn man komplizierte Sachen

Jochen

machen möchte, dann muss man da auch so ein bisschen nachdenken

Jochen

und dann halt eventuell

Jochen

sich überlegen, wie man das halt ausgeführt kriegt, aber

Jochen

im Grunde

Jochen

funktioniert das so, man hat halt so eine Deferred

Jochen

API, man sagt halt, was man tun möchte und dann am Schluss

Jochen

sagt man irgendwie jetzt Collect oder so

Jochen

und dann

Jochen

ich glaube, ich weiß gar nicht, also

Jochen

man ruft halt irgendwie eine Funktion auf, die sagt

Jochen

so und jetzt rechnet das halt alles mal aus und dann

Jochen

wird das halt auf die unterschiedlichen Prozessoren verteilt

Jochen

wird alles ausgerechnet und am Schluss hat man

Jochen

das alles wieder in einem DataFrame und

Jochen

die Geschwindigkeit

Jochen

hat sich dann, wenn man Glück gehabt hat,

Jochen

irgendwie linear

Jochen

skaliert

Jochen

und man braucht nur noch ein Sechzigstel der Zeit

Jochen

oder so.

Jochen

Genau.

Jochen

Das ist auf jeden Fall auch ein Ding, was man sich

Jochen

auch angucken sollte, also was

Jochen

Skalierungsgeschichten angeht. Ja, wenn die Datenmengen

Jochen

dann noch viel größer sind oder dass sie halt nicht mehr

Jochen

Hauptsprecher auf einer Maschine passen oder so,

Jochen

dann muss man sich nochmal

Jochen

was anderes überlegen. Dann

Jochen

bleibt eigentlich nur, dass man

Jochen

irgendwie dann Richtung Spark

Jochen

geht oder sowas. Aber

Jochen

diesen Fall hat man fast nie, weil

Jochen

mittlerweile die Maschinen

Jochen

so viele Hauptsprecher haben, dass das irgendwie kaum vorkommt.

Jochen

Wenn es nicht mehr

Simon

in den Hauptsprecher passt, Geld dagegen werfen

Simon

und mehr Hauptsprecher besorgen.

Dominik

Ja, wenn wir schon beim halben Terabyte angekommen sind,

Dominik

da ist ja schon noch ein bisschen Platz.

Jochen

Ja, geht eine ganze Menge rein.

Jochen

Ja, so

Jochen

Skalierung hatten wir jetzt auch so ein bisschen.

Jochen

Wir hatten noch, glaube ich, dieses

Dominik

Wes McKinney, hast du kurz erwähnt, da hatten wir, glaube ich,

Dominik

einmal in unserer Weihnachtsfolge dieses 10 Things I Hate About

Jochen

Pandas irgendwie. Ah, ja, ja, ja, genau.

Jochen

Ich weiß nicht, ob da noch was

Jochen

rauskam.

Jochen

Ja, der,

Jochen

also er arbeitet halt hauptsächlich

Jochen

an dem Arrow-Projekt, da geht es darum,

Jochen

eine neue Grundlage zu schaffen

Jochen

und zwar nicht nur für Python,

Jochen

sondern für

Jochen

alle anderen Programmiersprachen

Jochen

auch, weil man hat halt das Problem, dass man

Jochen

man möchte eigentlich nicht,

Jochen

wenn man Daten hat, die groß sind und

Jochen

man möchte die nicht mehrfach

Jochen

im Hauptspeicher halten, aber momentan kommt man nicht drum rum, wenn man

Jochen

jetzt

Jochen

beispielsweise in R und

Jochen

in Python irgendwie auf Daten

Jochen

irgendwas machen möchte, dann muss man die halt

Jochen

irgendwie erst, wenn man die jetzt in Python hat,

Jochen

serialisieren, irgendwo hin auf die Platte schreiben, dann in R

Jochen

wieder einlesen und hat sie dann

Jochen

im Endeffekt zweimal im Hauptspeicher, was natürlich irgendwie

Jochen

doof ist und das Projekt

Jochen

ist sozusagen

Jochen

stellt halt

Jochen

sozusagen Schnittstellen für alle Programmiersprachen bereit, aber

Jochen

die Daten selber werden

Jochen

nur im Hauptspeicher an einer

Jochen

Stelle gehalten und dann kann man mit allen Sprachen, also

Jochen

von Java bis C,

Jochen

C++, Rust,

Jochen

was auch immer, irgendwelche Leute schreiben gerade eine Query Engine

Jochen

für Arrow in Rust,

Jochen

Python A, darauf zugreifen

Jochen

und da irgendwelche

Jochen

Manipulationen drauf machen,

Jochen

ohne dass es halt dann

Jochen

jedes Mal eine Kopie macht. Und das ist natürlich auch

Jochen

eine sehr, sehr interessante Geschichte,

Jochen

weil das ist eben,

Jochen

davon hatten wir es ja auch schon ein paar Mal

Jochen

momentan, wenn man mit so Big Data

Jochen

Geschichten, Hadoop-Clustern zu tun hat,

Jochen

so ein Problem, dass man da nicht so gut an die Daten

Jochen

rankommt.

Jochen

Und

Jochen

ja, das war auch eines der ersten Geschichten,

Jochen

die Arrow gemacht hat, war

Jochen

Parquet-File-Parser

Jochen

zu implementieren,

Jochen

sodass man halt zumindest die Files,

Jochen

in denen die Daten liegen, halt irgendwie lesen kann.

Jochen

Ja, und

Jochen

das ist, glaube ich,

Jochen

also mittlerweile funktioniert das

Jochen

irgendwie fast allen Sprachen, dass man das

Jochen

halt sozusagen als

Jochen

Ersatz

Jochen

für NumPy auch nehmen kann.

Jochen

Also eine Geschichte ist so, dass

Jochen

man in Pandas

Jochen

das nicht so wirklich schmerzfrei in NumPy

Jochen

aushauschen kann, weil das halt

Jochen

viele Sachen in Pandas

Jochen

beruhen halt darauf, dass ein Handball so ist, wie es ist.

Jochen

Das wird halt schwierig. Da gibt es auch

Jochen

eine Serie von Artikeln dazu,

Jochen

nennt sich Pandas 2.0 irgendwie,

Jochen

wo man dann halt überlegt, dass man die API

Jochen

so nicht abwärtskompatibel ändert.

Jochen

Dazu hat

Jochen

Wes McKinney 2015 ein paar Artikel geschrieben.

Jochen

Bisher ist da nicht so viel passiert,

Jochen

aber man müsste, wenn man jetzt komplett auf Arrow umsteigen

Jochen

wollte und so, dann müsste man da wahrscheinlich

Jochen

viel auch an dem Frontend

Jochen

von Pandas ändern und das wird dann

Jochen

nochmal schwierig.

Jochen

und

Jochen

ist es so, dass

Jochen

was auch noch in nächster Zeit bei Arrow

Jochen

ansteht, ist, es gibt

Jochen

so ein großes

Jochen

Kluft zwischen dem, was halt im

Jochen

Datenbankenbereich passiert ist

Jochen

und dem, was halt im

Jochen

Data-Science-Bereich passiert ist und da

Jochen

geht es auch darum, das so ein bisschen

Jochen

anzugleichen. Also was man zum Beispiel nicht hat, ist eine

Jochen

Query-Engine für Arrow, also

Jochen

da wird halt gerade geschrieben, also

Jochen

ich glaube, das ist das Projekt für die nächsten 2-3 Jahre

Jochen

in Arrow, ist halt so

Jochen

wäre doch schick, da auch so eine SQL-Engine

Jochen

drauf zu haben, sodass man halt

Jochen

Error auch als

Jochen

Ersatz oder Alternative

Jochen

zu Impala oder sowas halt auf Clustern

Jochen

verwenden könnte.

Jochen

Weil das ist im Grunde auch eine SQL-Engine

Jochen

in C geschrieben,

Jochen

die halt

Jochen

auf so einem

Jochen

Hadoop-Cluster laufen kann.

Jochen

Und dann

Jochen

kann das aber viele der Sachen, die man halt

Jochen

in Datenbanken hat, auch noch nicht. Also ganzen

Jochen

Index-Geschichten und so.

Jochen

Und

Jochen

ja,

Jochen

da läuft

Jochen

das aber irgendwie so hin. Also ich meine, wenn man

Jochen

sich jetzt so eine ideale Zukunft mal ausmalen

Jochen

würde, könnte,

Jochen

würde ich sagen, wäre das eigentlich sowas, man hat

Jochen

eben so

Jochen

einen In-Memory-Storage

Jochen

Arrow oder so.

Jochen

Man hat irgendwie

Jochen

als Frontend etwas Pandas-ähnliches.

Jochen

Es gab da auch

Jochen

schon einen Ansatz von

Jochen

eben auch wieder von Wes McKinney, das ist eine zentrale

Jochen

Figur, das nennt sich Ibis,

Jochen

das Projekt, wo es darum geht,

Jochen

ein Superset

Jochen

von SQL zu haben,

Jochen

das möglichst pandasähnlich ist,

Jochen

mit dem man aber all das

Jochen

machen kann, was man sonst auch mit SQL-Datenbanken macht.

Jochen

Und

Jochen

ja, das halt auch so eine

Jochen

Default-Execution-Geschichte macht,

Jochen

dass man halt hinterher nur sagt, irgendwie man

Jochen

definiert die ganzen Transformationen, Abfragen,

Jochen

wie man da macht und am Schluss sagt man, so und jetzt

Jochen

ausführen und dann geht das quasi

Jochen

an so einen Cluster raus. Und das

Jochen

ist mit SQL auch alles,

Jochen

SQL ist sowieso blöd, weil

Jochen

ja, diverse Geschichten

Jochen

gehen halt mit SQL nicht so richtig gut, also man kann

Jochen

auch Tests für SQL schreiben, aber das ist alles ziemlich hässlich

Jochen

und man kann auch nicht so wirklich

Jochen

Code sharen, also wenn jetzt, es gibt nicht sowas wie

Jochen

Funktionen, aber wenn man jetzt

Jochen

ähnliche Abfragen macht in unterschiedlichen

Jochen

Kontexten, dann kopiert man oft

Jochen

die Statements und so, das ist alles

Jochen

nicht so schön und das ist halt

Jochen

mit so einer Notation wie

Jochen

in

Jochen

Ibis

Jochen

halt deutlich besser, weil da kann man das einfach in Funktionen

Jochen

packen und die Funktionen woanders halt verwenden

Jochen

und so und das geht halt viel schöner.

Jochen

Ja, und das dann halt auch nochmal ändern.

Jochen

Bei einem SQL-Statement könntest du das ja auch in eine Funktion packen,

Jochen

aber das Problem ist, dann hast du halt genau dieses Statement. Du kannst

Jochen

das Statement kaum ändern, außer du nimmst halt

Jochen

ein ORM, aber ORM ist dann auch wieder eigene

Jochen

Probleme und ja,

Jochen

also ich würde mir eine ideale Welt

Jochen

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

Jochen

wie eben None und

Jochen

diese Block-Storage-Geschichten, aber das

Jochen

kriegt man ja alles in den Griff mit der

Jochen

Array-Extension-API.

Jochen

Aber für große Datenmengen, dass man dann halt so

Jochen

was ähnliches hat wie

Jochen

Spark oder

Jochen

auch der Doob, man hat einen großen Cluster,

Jochen

wo dann in Memory halt die ganzen

Jochen

Daten in Apache Arrow quasi

Jochen

liegen und man dann

Jochen

auf Arrow aufsetzend irgendwelche Query-Execution

Jochen

Engines hat, die man

Jochen

füttert von einem

Jochen

Pandas-ähnlichen Frontend aus,

Jochen

wo man dann halt definiert, was man

Jochen

gerne hätte und das dann halt irgendwie

Jochen

auf den Cluster verteilt wird.

Jochen

Also man hat irgendwie so eine Art Array-Datenbank

Jochen

verteilte, In-Memory-Array-Datenbank

Jochen

mit so einer

Jochen

vielleicht

Jochen

Intermediate-SQL-ähnlichen Query-Engine hat,

Jochen

aber so als Frontend

Jochen

sowas wie Pandas, sodass man dann halt auch

Jochen

wirklich großen Datenmengen einfach so

Jochen

Transformationen

Jochen

machen kann wie in Pandas.

Jochen

Das wird vielleicht noch ein paar Jahre dauern, aber das wäre

Jochen

Also das, was ich mir wünschen würde, was passiert.

Jochen

Und dass man vielleicht irgendwann dann tatsächlich Panas 2.0 hat,

Jochen

wo man nochmal komplett neu irgendwie diese ganzen Geschichten,

Jochen

die in der Kombination mit NumPy halt nicht so toll sind, gelöst werden.

Jochen

Aber das kann auch sein, dass das nie passiert,

Jochen

weil so viele Leute jetzt Panas verwenden.

Simon

Ich sagte gerade noch, wenn der Jochen heute anfängt,

Simon

dann hören wir jetzt monatelang keinen Python-Podcast mehr,

Simon

aber es hört sich gut an, mach das.

Jochen

Nee, ja, das Projekt ist ja schon, da gibt es ja Leute, ja.

Simon

Also ich kann es auch kaum erwarten,

Simon

aber es wird wahrscheinlich noch ein paar Jährchen dauern.

Simon

So schnell ist das nicht umzusetzen.

Simon

Ja, ja.

Simon

Ja, ich weiß nicht, von meiner Seite,

Simon

ich wüsste jetzt spontan nichts mehr.

Simon

Wenn ihr mich jetzt fragen würdet, fragt doch mal,

Simon

was sind so die drei wichtigsten Sachen,

Simon

die ich mit nach Hause nehmen muss, wenn ich mal mit Pandas

Simon

anfangen möchte. Was sind die wichtigsten

Dominik

drei Sachen, die du mit nach Hause nehmen musst, lieber Simon, wenn du

Dominik

mal mit Pandas anfangen möchtest? Ich würde

Simon

sagen, Describe, Plot und

Simon

Apply sind so die drei ganz

Simon

zentralen Dinge, die man sich

Simon

angucken möchte, weil da kann man

Simon

fast alles schon mitmachen.

Simon

Ja, okay.

Jochen

Ja, ich würde sagen, Read CSV sollte man sich auch

Jochen

mal angucken. Ja, okay, also

Jochen

Datenimport, ja.

Jochen

Aber sonst, ja, nee, klar, doch.

Jochen

Ja, schön, schön.

Jochen

Ja.

Dominik

Schöne Strukturierung mit unseren Daten über Pandas.

Dominik

Ich finde es hervorragend. Ja, dann würde ich sagen,

Dominik

sind wir mit dem Pandas-Thema tatsächlich für heute

Dominik

soweit durch. Und vielleicht machen wir noch

Dominik

so ein bisschen Abschluss und erzählen noch ein bisschen

Dominik

was von euren Lieblingspicks oder sowas

Dominik

für, ja.

Dominik

Erstmal.

Dominik

Sieben, möchtest du anfangen? Irgendwie hast du einen Lieblingspick?

Dominik

Irgendein Modul, was du...

Dominik

Muss ich kurz einen Moment

Dominik

drüber nachdenken. Bitte, dann ist der Jochen zuerst.

Dominik

Ja, ich

Jochen

überlege gerade, ob ich irgendwas Pandas-mäßiges

Jochen

habe, aber

Jochen

ich fürchte,

Jochen

nee, ich

Jochen

was man sich mal

Jochen

angucken kann, ist

Jochen

eine Bibliothek namens Al-Khali.

Jochen

Das ist so ein

Jochen

Django-ORM-Style-Ding,

Jochen

aber für

Jochen

flache

Jochen

Files und

Jochen

das ist halt auch ganz nett, wenn man jetzt

Jochen

irgendwie zum Beispiel

Jochen

Django kann zum Beispiel und

Jochen

die OEM da schon

Jochen

so ein bisschen damit schon so Sachen

Jochen

gemacht hat, dann kann man halt auch da

Jochen

auf CSVs oder so

Jochen

halt Dinge machen, die so ähnlich sind. Also das ist

Jochen

quasi so die umgekehrte Richtung. Also wahrscheinlich wäre es

Jochen

praktischer, wenn man Pandas kennt, das halt mit Pandas zu machen,

Jochen

aber wenn man das nicht kann, dann kann

Jochen

man halt auch

Jochen

irgendwie, wenn man Daten als

Jochen

CSV ausgeschrieben hat oder so, damit

Jochen

irgendwie wie auf einer Datenbank arbeiten.

Jochen

Das fand ich ganz witzig, die Idee.

Jochen

Deswegen würde ich das mal

Jochen

picken, aber ja.

Jochen

Ich würde tatsächlich

Dominik

Pickel nehmen. Ich weiß nicht, hatten wir das schon mal oder so?

Dominik

Ich fand das total super, dass man da so Preisenobjekte speichern kann.

Dominik

Stimmt, nee, das hatten wir noch nicht.

Jochen

Ist auch Teil der Standardbibliothek und

Jochen

genau, daher muss man nichts zusätzlich installieren.

Jochen

Das ist super.

Dominik

Kann man eigentlich auch mit DataFrames machen, oder? Ich weiß jetzt nicht, wie schnell

Dominik

sowas geht und ob man das nicht lieber in der Datenbank dann speichert.

Dominik

Doch, kann man mit DataFrames

Jochen

auch machen. Ist auch tatsächlich ziemlich

Jochen

schnell. Ist auch, habe ich oft

Jochen

gemacht. Wenn man keine Lust mehr hat

Dominik

und wieder anfangen muss, immer an der gleichen Stelle zu debuggen,

Dominik

dann lädt man einfach dann irgendwann den Pickel ein oder so.

Dominik

Spart sich immer die Zeit vor dem Ausführen.

Dominik

Ja.

Jochen

Also genau, das

Jochen

ist, nee, das ist tatsächlich,

Jochen

wenn man, also ich finde,

Jochen

Data Frames zu pickeln,

Jochen

es funktioniert

Jochen

ganz gut. Also man muss vielleicht dazu sagen,

Jochen

man muss dem Ganzen vertrauen.

Jochen

Also wenn man,

Jochen

Wenn einem jemand so ein Pickel-File gibt,

Jochen

dann sagst du,

Jochen

wie war das bei der Sesamstraße?

Jochen

Macht so ein French-Code auf?

Jochen

Willst du ein Pickel-File von mir

Jochen

deserialisieren?

Jochen

Genau. Dann lieber nicht machen, weil

Jochen

das führt halt beliebigen Code aus.

Jochen

Das ist vielleicht nicht so schön.

Jochen

Aber wenn man das selber generiert hat,

Jochen

dann ist das vielleicht okay.

Jochen

Dann ist es auch sehr schnell.

Jochen

da kann man durchaus, also wenn die

Jochen

I.O. ist, ich habe das nicht an die

Jochen

Grenzen, oder war da, ne, ich glaube, ich habe das

Jochen

tatsächlich nicht an die Grenzen

Jochen

bringen können, sondern das war immer so

Jochen

schnell, wie halt das Plattensystem drunter war.

Jochen

Also ich habe damit auch schon,

Jochen

da ging halt so Gigabyte pro Sekunde

Jochen

durch. Bei CSV ist

Jochen

CSV ist richtig langsam. CSV ist halt so

Jochen

wenn es schnell ist, ein paar Zehn

Jochen

Megabyte pro Sekunde.

Jochen

Was halt, wenn du ein paar Gigabyte große Files hast,

Jochen

dann dauert das.

Jochen

Und Pickle ist halt so,

Jochen

selbst wenn die Files Gigabytes groß sind,

Jochen

kannst du dann das halt, wenn das IOSystem, das du hast, schnell ist,

Jochen

dann dauert das halt, zwei Sekunden

Jochen

ist das da. Und

Jochen

das ist natürlich schon schön. Es gibt

Jochen

andere Formate für, gerade um Daten,

Jochen

wie im DataFrame,

Jochen

man sehr oft hat, irgendwie zu

Jochen

speichern, HDF5 zum Beispiel, oder Feather,

Jochen

gibt es da auch eine Library, wo es auch veraltet eigentlich.

Jochen

Heute würde man eher dann eben

Jochen

Arrow verwenden und dann ein paar K-Files

Jochen

lesen und schreiben.

Jochen

Das ist auch sehr schnell.

Jochen

ähm, HD5 ist,

Jochen

geht so, ist ein bisschen,

Jochen

ist nicht ganz so schnell, aber

Jochen

ja,

Jochen

lass mal überlegen, gibt's sonst noch irgendwelche Formate, die

Simon

interessant sind? Es gibt dieses NetCDF4,

Simon

das ist die Weiterentwicklung von HD5

Simon

und, ähm,

Dominik

da hat man dann... Hier ist die Weiterentwicklung von

Simon

5? NetCDF4,

Simon

ähm, das ist schon die

Simon

vierte Iteration von NetCDF,

Simon

aber irgendwann sind die wohl aus HDF

Simon

entstanden. Wie das

Simon

genau zustande gekommen ist, weiß ich auch nicht.

Simon

Die haben dann so Späße, wie man kann direkt File Blobs angeben

Simon

und dann über mehrere Files eine Variable öffnen.

Simon

Das ist ganz spannend, wenn man sehr große Datensätze als Chunks

Simon

auf seiner Festplatte hat.

Simon

Aber technische Details dazu weiß ich jetzt auch nicht.

Dominik

Tja, Tim, hast du noch ein Lieblingsmodul?

Simon

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

Simon

Aber wenn man Plotly-Grafen erstellen möchte,

Simon

dann muss man irgendwie so ein ganz tief verschachteltes Data-Dictionary bauen

Simon

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,

Simon

Matplotlib-to-Plotly-Grafen,

Simon

wo man, das funktioniert noch nicht perfekt,

Simon

aber so die Basis-Grafen wie Boxplots oder Scatterplots

Simon

sowas kriegt man damit

Simon

in Matplotlib ganz schnell

Simon

definiert, irgendwie mit zwei, drei Zeilen

Simon

Code und dann mit einer

Simon

Zeile konvertiert in Plotligrafen

Simon

und dann hat man direkt dieses

Simon

Interaktive, man hat

Simon

Mouse-Hover und man kann zoomen und

Simon

so. Das fand ich ganz schön.

Simon

Ist aber noch

Simon

in den Kinderschuhen.

Dominik

Ja, aber schön, das spannend zu verfolgen.

Dominik

Cool.

Dominik

Habt ihr noch irgendwas, was ihr loswerden wollt?

Dominik

irgendwie das zu eurem Modul der Woche oder

Dominik

sind wir damit durch und

Jochen

Nö, ich glaube damit. Achso, vielleicht

Jochen

ja, wollen wir

Jochen

genau

Jochen

nächste Woche ist vielleicht ganz interessant,

Jochen

wenn irgendjemand da ist, der

Jochen

zuhört, zufällig, aber ich glaube es ist wahrscheinlich

Jochen

eher nicht so eine Podcast-Konferenz

Jochen

in Köln. Ja, die Subscribe.

Jochen

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

Jochen

Genau, da werdet ihr uns finden.

Jochen

Genau, da könnte man uns

Jochen

treffen, wenn man

Jochen

wollte. Also wer möchte, kann einfach

Jochen

eine Mail an uns fragen. Das kommt in den

Dominik

Veranstaltungen. Genau, aber ihr könnt uns ja gerne treffen.

Dominik

Tatsächlich wissen wir noch nicht genau, ob wir Freitag und Samstag

Dominik

und Sonntag da sind. Aber

Dominik

auf jeden Fall am Samstag und am Sonntag wird ihr uns wahrscheinlich

Dominik

da sehen.

Dominik

Das besprechen wir noch genauer.

Simon

Am nächsten ist ja

Simon

immer mal wieder Django zur Sprache

Simon

gekommen. Anfang April ist die

Simon

DjangoCon in Kopenhagen.

Simon

Vom 10. bis zum

Simon

14. April ist es, glaube ich.

Simon

Sieht man dich da?

Simon

Mich nur am 9. April.

Simon

Da ist das Django Girls Camp.

Simon

Ein Tag Django

Simon

lernen.

Simon

Da fliege ich kurz hin

Simon

als Mentor. Ich habe leider für die Konferenz selber

Simon

keine Zeit. Ja, okay, super.

Simon

Ja, wolltest du noch was

Dominik

zu dem Cast sagen, zum Django-Cast,

Dominik

Jochen, oder machen wir das von anders?

Jochen

Ja, also da, letztens

Jochen

gab es irgendwie so ein Mail von Apple,

Jochen

wo sie gesagt haben,

Jochen

also wir werden euch jetzt nicht direkt

Jochen

auslisten irgendwie, aber

Jochen

ihr solltet dann mal vielleicht irgendwie ein paar Sachen an eurem Feed

Jochen

ändern, da muss ich jetzt nochmal ran.

Jochen

Zum Beispiel sowas wie Episoden,

Jochen

Nummern sollten nicht im Titel sein und so.

Jochen

Das machen aber alle, ich auch.

Jochen

Wir können uns weiter nochmal

Jochen

irgendwas dran tun und genau,

Jochen

ja, wir machen da auch

Jochen

so einen kleinen Workshop

Jochen

irgendwie auf der Subscribe und

Jochen

da müssen wir auch noch ein bisschen was für tun

Jochen

und da wäre es natürlich auch interessant, was dann noch so, also

Jochen

was ich jetzt schon implementiert habe, ist, dass man jetzt nicht mehr

Jochen

dass ich dann ein JavaScript-Interface brauche,

Jochen

um irgendwie Audio-Files hochzuladen.

Jochen

Aber

Jochen

ja, mal gucken, was da noch so da dazukommt.

Jochen

Und dann, was super dringend ist,

Jochen

ist irgendwie, dass die Dokumentation

Jochen

mal so ein bisschen besser wird und so.

Jochen

Mal gucken, ob ich die zwei Zeilen zu schraff.

Dominik

Zumindest so in den First Step oder so.

Dominik

So in den großen Struggle.

Dominik

Ja, wenn ihr irgendwie so Anfänger seid wie ich,

Dominik

dann kommt ihr da bestimmt noch irgendwo dran.

Dominik

Ja, vielen Dank, dass ihr

Dominik

zugehört habt heute wieder, dass ihr eingeschaltet habt.

Dominik

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

Dominik

lasst uns das übrigens wissen, schreibt

Dominik

eure E-Mails, Kommentare an

Dominik

hallo-at-python-podcast.de und

Dominik

ja, kippt uns

Dominik

weiter an alle Leute, die Python interessiert, in eurer Nähe,

Dominik

erzählt euren Freunden, Kommoditonen.

Dominik

Ja, das kann man vielleicht auch,

Jochen

was man auch machen kann, ist auf iTunes

Jochen

bewerten, wenn das irgendwie,

Jochen

also das hilft natürlich stark,

Jochen

aber

Jochen

genau, ansonsten, ja.

Jochen

Ja, genau.

Dominik

Sagst Bescheid, erstmal hört uns gerne,

Dominik

vor allen Dingen wieder und so, bleibt uns gewogen,

Dominik

wie man so schön sagt.

Dominik

Und bis zum nächsten Mal. Bis zum nächsten Mal, tschüss.

Dominik

Vielen Dank für die Einladung, tschüss.