Hallo,
also das wird jetzt etwas länger.
Ich habe meine ersten BASIC-Kenntnisse erworben, als Computer noch von Commodore stammten und 64 k Speicher hatten und das für alle Aufgaben reichte. Nur bei mir nicht, weil mein Vater mir so ein böses Teil nicht erlaubt hat. (Die ganzen Computerkits werden später nämlich mal soziopathen und sterben an Mangel an Sonnenlicht, frischer Luft und Kaffeevergiftung - das hat man in den 80ern so vorhergesehen und vor den Risiken entsprechend gewarnt.) Auf meinem Amiga 500 lief dann ein ganz anderes BASIC: das kam ohne Zeilennummern aus und man brauchte auch eigentlich keinen GOTO Befehl und ich habe mir die Augen gerieben. Dafür gab es diese schicken "Funktionen", die ich dann in der Schule auch in PASCAL kennen gelernt habe. Für meinen Amiga habe ich dann doch in die damals recht flache Tasche gegriffen und mir einen C-Compiler gekauft. Das war dann doch was ganz anderes und fühlte sich auch viel besser an. Im Studium hatte ich dann doch anderes zu tun und Programmieren spielte keine Rolle mehr. Ich hatte auch für keine Sprache einen Compiler oder Interpreter mehr und das Programmieren hat mir gefehlt. Auf Java entwickle ich damals wie heute allergische Reaktionen und für C gab es sowas kompliziertes kommandozeilenbezogenes aus der Linux-Welt kostenlos aber das war mir dann doch zu unhandlich und für die knappe Zeit war mir C auch zu maschinennah.
DANN STIESS ICH AUF PYTHON!
Das Deutsche Python-Forum verliert seine Daten nicht und so kann ich rekonstruieren, dass ich mich da 2006 angemeldet habe. Ungefähr in diese Zeit gehen auch meine ersten unbeholfenen und nicht erfolgreichen Gehversuche mit R zurück. Damals hatte ich R als Rechner für statistische Tests missverstanden und nicht als Programmiersprache begriffen, was ein Fehler war. Python hingegen habe ich mit Begeisterung gelernt, es wäre mir aber nie in den Sinn gekommen, damit statistische Datenanalyse zu betreiben. Damals hatte ich auch nicht wirklich Daten zum Auswerten. Ich habe mich dann durch Python inspiriert mit komischeren Programmiersprachen beschäftigt und Python schon lange nicht mehr angefasst, aber nur, weil ich die anderen Sprachen vorübergehend interessanter fand. Nicht, weil ich mit Python unzufrieden gewesen wäre. Wenn ich etwas ernsthaftes zu programmieren hätte, das auch noch länger gewartet werden soll, würde ich wahrscheinlich meine Python-Kenntnisse wieder aufwärmen und darauf setzen.
PYTHON IST KLASSE!
Nicht für die Datenanalyse, sondern mit den Augen eines Mannes, der gerne eine möglichst vielseitige Sprache lernen möchte, die mächtig aber nicht überfrachtet ist, eine klare Syntax hat und einen zu guten Angewohnheiten hin lenkt, die wirklich viele batteries included hat und in Form des o. g. Forums eine wirklich gute deutschsprachige Community, die vernünftige GUI-Toolkits hat und eine lange Lernkurve garantiert, d. h. nicht langweilig wird. Alles ist ein Objekt, aber wer imperativ programmieren will darf imperativ programmieren, wer objectorientiert programmieren will darf objektorientiert programmieren und wer funktional programmieren will, der kann das tun. Nur wer beim Code Einrücken schlampig ist, bekommt sofort von der Sprache was auf die Finger. Andererseits: Wer beim Einrücken ein wenig Ordnung hält, der braucht halt auch keine geschweiften Klammern und jeder hier weiß, wie doof die auf der deutschen Tastatur liegen.
Heute weiß ich, dass vieles von der Schönheit der Syntax bei Haskell geklaut worden ist. In Reinform in Haskell ist das noch mal viel eleganter, aber wer nutzt schon Haskell? Python ist im echten Leben angekommen. Python hat die kritische Masse an Anwendern überschritten. Python zu lernen ist eine zukunftssichere Investition. Punkt. Python ist klasse.
WARUM DANN R?
Nach dieser ultimativen Lobhudelei -und ich könnte noch ne ganze Weile so weiter machen- warum dann R? Ganz einfach, weil ich jetzt keine general purpose Programmiersprache brauche, sondern mich mit Datenverarbeitung beschäftigen möchte. Und dafür ist R gemacht und das geht in R flüssig. Ich möchte nicht für jeden t-Test das scipy.stats Modul importieren, um dann Funktionsaufrufe wie
Code: Alles auswählen
one_sample = stats.ttest_1samp(one_sample_data, 175.3)
zu tippen. Ich schreibe ja auch nicht bei jeder Entscheidung structure.conditional.if() sondern einfach if(), dementsprechend möchte ich auch t.test() schreiben...
Ok, das war gerade kleinlich. Wie wäre es mit folgendem Beispiel. Eine Frage auf Stackoverflow:
What is python's equivalent of R's NA?
To be more specific: R has NaN, NA, NULL, Inf and -Inf. NA is generally used when there is missing data. What is python's equivalent?
Berechtigte Frage. Dass jeder Datentyp auch den Wert NA haben kann zeugt von Rs tiefer Verwurzelung in der statistischen Datananalyse. Wie lautet die akzeptierte Antwort darauf?
Scikit-learn doesn't handle missing values currently. For most machine learning algorithms, it is unclear how to handle missing values, and so we rely on the user of handling them prior to giving them to the algorithm. Numpy doesn't have a "missing" value. Pandas uses NaN, but inside numeric algorithms that might lead to confusion.
http://stackoverflow.com/questions/2865 ... t-of-rs-na
Anscheinend gibt es in Numpy einen Datenwert nan und in Pandas einen NaN. Das ist ungefähr so elegant gehandhabt wie die Objektorientierung in R, nur dass mich der Umgang mit fehlenden Werten sehr viel mehr interessiert als der mit Objektorientierung. Maschinenlernen ohne NA-Daten? Muss ich denn alles selbst machen? Ich kenne mich nicht wirklich aus, aber aus der Außenseiterperspektive wirkt das alles sehr aufgepfropft und unharmonisch mit diesen Datenverarbeitungsmodulen.
Was wahrscheinlich eine viel größere Bedeutung für mich hat als diese Sprachaspekte -aber das kann Dir egal sein- ist, dass ich Statistik und R gleichzeitig gelernt habe. Es gibt einfach sehr viele Lernmaterialien für Statistik und R und ich habe den Eindruck, dass das bei Python schwieriger ist. Wenn ich mir CrossValidated ansehe, dann sind dort in den letzten 24 Stunden seit jetzt 18 Fragen mit dem R-tag aber nur eine mit dem Python-tag geschrieben worden. Gib mal bei Amazon "Statistik mit Python" und "Statistik mit R" ein. Das Ergebnis spricht Bände. Persönlich ist mein Flaschenhals eher das Verständnis von Statistik und Maschinenlernen als die programmiererische Umsetzung und da glaube ich, mit R auf das richtige Pferd zu setzen. Zumal ich mit meinen kleinen Datensätzen eher echte Statistik als "Data Science" brauche.
Ich werde in Sachen Datenanalyse vorläufig streng bei R bleiben. Angesichts des unübersehbaren Trends zu rechenintensiven Verfahren könnte ich mir als nächste Statistiksprache vorstellen, nochmal eine compilierte Sprache zu lernen. Nach dem Lesen eines halben Buchs darüber gefällt mir Scala gut, aber da weiß ich von keinen Statistikentwicklungen. Clojure ist sicher mehr als nur ein kurzer Hype, aber so richtig mainstreamtauglich ist es wahrscheinlich nicht. Julia ist mir noch zu jung und unreif, aber eine von Anfang an auf Datenauswertung ausgerichtete Sprache, die sich in richtig schnellen Code compilieren lässt, das klingt schon arg verlockend. Hier macht jemand interessante Anmerkungen zu Javascript:
https://www.r-bloggers.com/statistical- ... am-i-nuts/ Auf JavaScript ist schon so viel geschimpft worden, wie untauglich es sei, das hat ganz sicher noch eine lange Zukunft. Haskell wäre toll für mathematische Berechnungen und sowas wie NA könnte man beispielsweise über die Maybe-Monade elegant darstellen. Richtig schnell ist Haskell auch, aber eine Einbindung in R, ein "RHaskell" wird es wohl eher nicht geben.
HTH,
Bernhard