image image


Worknote: R Notebook, Python und das Tufte CSS

Bei meinen ersten Experimenten mit dem neuen R Notebook habe ich nicht nur dieses, sondern auch das Tufte-Paket für einen schöneren HTML- und PDF-/LaTeX-Output entdeckt. Und so habe ich beides zusammen für diese ersten Experimente mit dem R Notebook und Python genutzt.

Leider verbindet sich das Notebook zur Zeit nur mit dem Python, das R unter Sys.wich("python") findet – das scheint eine Eigenschaft der Knitr-Language-Engine zu sein –, und das ist aber das (System-) Python 2.7.5 von Apple, nicht jedoch mein Anaconda Python 3.5. Wie dem auch sei, für erste Tests mußte das reichen.

image

So schön das Tufte-Paket auch ist, man sieht auch gleich seine erste Unzulänglichkeit: Breite Codezeilen sind zumindest beim HTML-Output nur mit dem ungeliebten, horizontalen Scrollbalken möglich (beim PDF-Output sieht die Geschichte schon besser aus – Tufte Handouts sind doch eher für den Print gedacht als für das Web).

Nimmt man dagegen als Output das »normale« HTML-Dokument des Notebooks, ist eigentlich alles viel schicker, aber auch langweiliger. Hier ist noch einiges zu fixen, dazu weiter unten mehr. Jetzt aber erst einmal zu dem eingebtteten Python-Code:

# -*- coding: utf-8 -*-
from collections import Counter
path = "data/aufklaerung.txt"

with open(path , mode="r") as f:
    text = f.read()
print(text)

text= text.lower()
cntr = Counter(text.split())
liste = cntr.most_common()
print(liste[0:5])

Wegen des Python 2.7.5 mußte ich die ungeliebte Zeile # -*- coding: utf-8 -*- in die erste Zeile des Skriptes schreiben, dafür lief das Einlesen und Herausschreiben der Datei (die nur die ersten zwei Zeilen aus Kants berühmter Schrift »Was ist Aufklärung« enthielt) trotz der deutschen Umlaute problemlos:

## Beantwortung der Frage: Was ist Aufklärung?
## Aufklärung ist der Ausgang des Menschen aus seiner selbst verschuldeten Unmündigkeit.

Aber bei dem Herausschreiben der Liste mit den Dictionaries der fünf häufigsten Wörter fing das Gehampel mit dem Unicode schon wieder an:

## [('der', 2), ('ist', 2), ('des', 1), ('unm\xc3\xbcndigkeit.', 1), ('frage:', 1)]

Übrigens hat – im Gegensatz zu einer R-Session im Notebook oder zu einem Jupyter-Notebook – die Python-Engine kein Gedächtnis: Zwischen zwei separaten Code-Chunks vergißt sie alles, was sie im letzten Chunk gewußt hatte. Wirklich als Python-Notebook zur Erstellung von Publikationen im Stil von literate programming und für das reprodcible research läßt sich RStudio daher momentan noch nicht nutzen, das funktioniert nur mit reinen R-Dokumenten.

Aber gut aussehende Papiere kann man damit schon verfassen. Dafür braucht man aber das Notebook nicht, da reichen einfache RMarkdown-Dokumente. Die knitr engine verspricht eine Unterstützung vieler Sprachen, unter anderem auch Ruby (und damit auch Shoes).

Allerdings muß man (vor allem bei den Tufte-Handouts) den Pfad des reinen Markdowns schon manchmal verlassen. So habe ich das Datum mit einer Inline R-Funktion r Sys.Date() erzeugt und für die Randbildchen mußte ich schon ganz tief in die R-Trickkiste greifen:

```{r, echo=FALSE, fig.margin = TRUE}
knitr::include_graphics("images/pythonlogo.png")
```

Was ist also zu tun: Wer auf reproducible research mit Python-Unterstützung angewiesen ist, der muß auch weiterhin Jupyter nutzen und in den sauren Apfel beißen, daß er im Browser editieren muß. Aber vielleicht ändert sich hier noch etwas oder Rodeo bringt die mit der Version 2.0 verschwundene Markdown-Unterstützung zurück. Oder Hydrogen lernt Markdown – wünschen kann man sich ja einiges – und Weihnachten rückt auch immer näher.

Nachdem ich aus dem Tufte CSS schon den cremefarbenen Hintergrund durch einen weißen ersetzt habe, werde ich als nächstes versuchen, das CSS so weit aufzubohren, daß die Codezeilen über die gesamte Breite der Webseite gehen und uns so den horizontalen Scrollbalken ersparen. Ich werde in der nächsten Zeit noch ein wenig damit spielen.

Zum Vergleich habe ich die Seite mit dem Tufte CSS, die gleiche Seite mit dem Default-Stylesheet des Notebooks und die Seite als Tufte-LateX (image) sowie das reine RMarkdown-Dokument hochgeladen, damit Ihr Euch selber ein Bild machen könnt.

Außerdem spiele ich mit dem Gedanken, das Tufte CSS auch in RubyFrontier und damit in dieses Blog Kritzelheft einzubauen. Schaun wir mal …

Und falls jemand von Euch eine Ahnung hat, wie man die R Notebooks mit meinem Anaconda-Python verbandeln kann, dem bitte ich um Nachricht in meinen (Email-) Kommentaren. Still Digging!

image


1 (Email-) Kommentar


Sys.which("python")
python
"/usr/bin/python"
Sys.setenv(PATH="/Users/karstenw/anaconda2/bin:/usr/local/git/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:")
Sys.which("python")
python
"/Users/karstenw/anaconda2/bin/python"
Die Pfade müssen voll ausgeschrieben werden. Es gibt keine ~ oder $ Ersetzungen.
Den PATH="/Users/... Teil musst Du natürlich auf deinen Rechner und gewünschtes Python anpassen.
Der obige Sys.setenv() Befehl muss nach jedem Start ausgeführt werden.

– Karsten W. (Kommentieren) (#)


(Kommentieren)  R Notebook, Python und Tufte CSS – 20161021 bitte flattrn

image image



Über …

Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter, Autor, Netzaktivist und Hundesportler — Reihenfolge rein zufällig). Hier steht, was mir gefällt. Wem es nicht gefällt, der braucht ja nicht mitzulesen. Wer aber mitliest, ist herzlich willkommen und eingeladen, mitzudiskutieren!

Alle eigenen Inhalte des Schockwellenreiters stehen unter einer Creative-Commons-Lizenz, jedoch können fremde Inhalte (speziell Videos, Photos und sonstige Bilder) unter einer anderen Lizenz stehen.

Der Besuch dieser Webseite wird aktuell von der Piwik Webanalyse erfaßt. Hier können Sie der Erfassung widersprechen.

Diese Seite verwendet keine Cookies. Warum auch? Was allerdings die iframes von Amazon, YouTube und Co. machen, entzieht sich meiner Kenntnis.


Werbung


Werbung


image  image  image
image  image  image