Zebrafischkiemen wachsen, wenn die Fische trainieren

In den letzten Wochen hab’ ich’s immer wieder angetönt, ich hatte viel mit Zebrafischen zu tun.
Beim Schaffen hatten wir ein grosses Projekt, bei dem ich die Auswertung von Tomographiedaten (und anderem) übernommen habe, damit wir schlussendlich sicher sagen konnten, dass die Kiemen von Zebrafischen wachsen, wenn die kleinen Fische feste trainieren.

Aber alles der Reihe nach: Wie ihr wisst, arbeite ich seit einiger Zeit am Institut für Anatomie mit zwei MicroCT-Geräten und mache biomedizinische Forschung.
Zebrafische sind nicht nur härzige Aquariumbewohner, sondern auch ein prima Modellorganismus in der Biologie.
Dies, weil sie unter anderem im Anfangsstadium ihres Lebens durchsichtig sind, also sehr gut geeignet sind um das Organwachstum zum Beispiel unter dem Mikroskop zu untersuchen.
Im Projekt, bei dem ich mitgearbeitet habe ging es auch um das Organwachstum, aber nicht darum, dass das Organ durchsichtig ist.
Wir wollten nämlich prüfen, ob die Kiemen der Zebrafische wachsen, wenn sie ausgiebig trainiert werden.

Dazu wurden die Fische während einigen Wochen von Matthias und Dea in einem sogenannten Schwimmtunnel trainiert.
Von 20 diesen Fischen haben Oleksiy, Fluri und ich dann hochaufgelöste, röntgentomographische Aufnahmen des Kopfes gemacht.
Aus diesen dreidimensionalen Aufnahmen haben Dea und Matthias dann die Kiemen virtuell ausgeschnitten.
Diese ausgeschnittenen Kiemen habe ich dann in einem ziemlich langen Jupyter Notebook analysiert, so dass wir schlussendlich zum Schluss gekommen sind, dass die Kiemen der trainierten Fische einerseits grösser und andererseits ‘luftiger’ werden, d.h. die Abstände zwischen den Ästen der Kiemen grösser sind.

Da ich es extrem wichtig finde, dass unsere Resultate nachvollziehbar sind, habe ich versucht meine Arbeit am Projekt so zu machen, dass diese im Stil von Reproducible research von A-Z nachvollziehbar ist.
Die Daten, die Dea und Matthias aus den grossen gescannten Datensätzen digital ausgeschnitten haben, sind bei der OpenScienceFoundation zu finden, sogar mit eigener DOI:10.17605/OSF.IO/A5ESX.
Wenn diese 20 Datensätze heruntergeladen [1] und in einem Verzeichnis auf einem Rechner ausgepackt werden, ist ein Grossteil der Daten die es zum Nachvollziehen braucht schon da. Der Rest (Bilder, Excel-Files, etc.) ist alles im GitHub-Repository meiner Analyse zu finden, das also auch ‘nur’ ausgecheckt werden muss.
Dann muss das Notebook gestartet werden und das Verzeichnis mit den Rohdaten in Zelle 16 des Notebooks angepasst werden. Anschliessend dauert die Berechnung je nach Leistungsfähigkeit des Rechners eine kurze oder lange Weile [2], Zwischenschritte werden jeweils ins oben angepasste Verzeichnis gespeichert, falls mal die Rechenleistung nicht ausreicht…

Schlussendlich habe ich dann die so generierten Bilder und Tabellen ins Manuskript kopiert, welches wir gemeinsam auf Authorea geschrieben haben.
Mit einem Klick haben wir das Manuskript öffentlich gemacht, und es auf bioRxiv hochgeladen: DOI:10.1101/744300.
Das heisst, dass das Manuskript zwar ab dann öffentlich ist, aber dessen Qualität ist noch nicht in einem sogenannten ‘peer review’ sichergestellt.
Dafür haben wir das Manuskript bei PLOS ONE eingereicht.
Dort wurde dann das Manuskript von uns unbekannten Kennern und Kennerinnen der Materie geprüft, ein paar Dinge bemängelt und nach unseren Korrekturen schlussendlich publiziert: DOI:10.1371/journal.pone.0228333.

Weil ich gerne meine Arbeit versuche schön zu zeigen, habe ich dann zum Manuskript aus den Daten noch eine Visualisierung gemacht.
Dieser Film ist unten eingebunden [3].
Die Visualisierung zeigt einen Kopf eines Zebrafisches, den wir gescannt haben.
Das Auge des Zebrafishes hat einen Durchmesser von ungefähr 0.8 mm, der ganze Kopf ist also nicht viel grösser als 5 mm.
Auf der linken Kopfseite wurden die Kiemen entfernt und damit die elektronenmikroskopischen Untersuchungen gemacht.
Auf der rechten Seite des Kopfes tauchen die Kiemen als rotes Volumen auf.

In Zebrafischen sind diese Kiemen als vierblättrige Struktur aufgebaut, die eben mit Training einerseits grösser und andereseits luftiger wird.
Cool, oder?

[1]: Am einfachsten mit diesem kleinen Bash-Skript.

[2]: Mein Bürorechner hat 196 GB RAM und eine 2 TB-NVMe SSD.

[3]: Da ich den Film nicht direkt von PLOS ONE einbinden konnte, habe ich eine Kopie meines Films auf Youtube hochgeladen.

Kommentare sind wohl wirklich tot

Dies ist der vierte und letzte meiner Jahresrückblick 2014-Posts. Die anderen sind unter dem Tag jahresrückblick14 zu finden.

Wie schon voremene Zitli nahm es mich letzthin wunder, wie’s denn heutzutage so mit den Kommentaren hier aussieht.

Dafür hab’ ich mein Skript zur Kommentar-Visualisierung ausgegraben, minimalst aufgehübscht und liess es über meine WordPress Datenbank laufen.

Wie früher auch schon klar ersichtlich, hat die Kommentar-Zahl sowohl die Posting-Zahl abgenommen. Die Posts haben sich in der Region von ca. anderthalb Posts pro Woche eingependelt, während seit ein paar Jahren ein Post von mir im Schnitt höchstens noch einen Kommentar generiert.

Aber wie schon das letzte Mal soll nicht unerwähnt bleiben, dass das hier ja mehr so ein halbwegs visuelles Tagebuch meiner coolen Erlebnisse ist und ich nicht auf die Kommentare angewiesen bin. Interessieren würde mich aber schon, wie das bei anderen (WordPress)-Bloggern aussieht. Wenn ihr einen solchen Plot macht, macht doch einen Kommentar oder Trackback hierhin, damit wir ein paar Datenpunkte mehr haben.

Das Mitmach-Web ist tot!

Vor fast zwei Jahren haben das Thema schon mal diskutiert; und befunden dass bei verschiedenen Blogs bei den Kommentaren die Peaks überschritten sind.

Letzthin fiel mir ein, dass ich das doch mal wieder anschauen wollte, ob sich daran etwas geändert hat. Nach kurzer Analyse komm ich zur Aussage, dass das Mitmach-Web tot ist, jedenfalls aus meiner Sicht. Auf meinem Blog hier hab’ ich den letzten drei Jahren Kommentarzustände wie 2006, also im Schnitt ca. anderthalb Kommentare pro Eintrag.
Dafür kann es mehrere Gründe geben, der offensichtlichste ist, dass das was ich schreibe generell wenig Reaktionen hervorruft. Ein anderer Grund ist, dass sich kein Schwein für das interessiert, was ich schreibe. Oder dass generell nicht mehr so kommentiert wird, wie vor einigen Jahren.

Das tönt jetzt etwas griesgrämig, ist aber nicht wertend gemeint. Wenn ich das, was ich hier mache nur machen würde, um Rückmeldungen abzuholen, bin ich sowieso auf der falschen Schiene. Das Blog hier dient schon über 10 Jahren (jawoll) als öffentliches Tagebuch, zum festhalten von Eindrücken und Dingen, die mich bewegen.

Und schliesslich sind Blogs nur noch für 40-jährige mit Kindern, wie Herr Kottke letzthin schrieb. Beide Eigenschaften treffen (noch) nicht wirklich auf mich zu, ihr wisst aber schon, worauf ich raus will.

Langer Rede kurzer Sinn; ich hab’ mich mal wieder hinter die Tastatur geklemmt und versucht, ein kleines Skript zu schreiben, welches mir die Arbeit abnimmt, die Aussagen aus der Datenbank zu knübeln, damit ich das Gegreine oben mit Zahlen belegen kann.

Ich hab’ das Skript von vor zwei Jahren etwas ausgebaut, so dass das Datenbank-Gepfriemel und die Anzeige in einem Rutsch gehen. Und zwar so.

Dank MySQL Connector/Python wird die Datenbank von WordPress direkt angezapft, mit optparse werden dem Skript ein paar Vorgaben (Server, Datenbank, Username und Passwort) dazu übergeben.

Die Datenbank-Abfrage (ursprünglich von Herr Leu) wird direkt übergeben.

Anschliessend wird mit den abgefragten Daten etwas jongliert und diese dann ausgegeben,

Und schlussendlich wird mit matplotlib das ganze visuell dargestellt und als Bild gespeichert, Dank iWantHue in einer optimalen Farbkombination.
.

Wer das ganze für sich selber auch anschauen möchte, sei herzlichst eingeladen, das Skript hier herunterzuladen und im Terminal zu starten. Ohne Parameter gibt’s mal eine Hilfe, ich verrate schon, dass mensch die Angaben wie Server, Datenbank-Name, -User und -Passwort bereithalten sollte. Wenn du das grad nicht mehr weisst, findest du diese Angaben in deiner wp-config.php-Datei.

Issues und Pull Requests sind herzlich willkommen, genauso wie Kommentare mit den Bildern von euch.

habi_gna_ch.png

Wohin gehen all die Kommentare, visualisiert

Herr Leu hat letzthin davon geschrieben, dass das Kommentar-Volumen auf seinem Blog in der letzten Zeit ziemlich abgenommen hat, während die Reaktionen auf die Beiträge in anderen Kanälen stattfinden.

Dies ist mir auch schon lange aufgefallen, ich konnte es aber nicht wirklich mit Zahlen belegen. Da Herr Leu auch grad noch eine handliche MySQL-Abfrage zur Abfrage der Zahlen mitlieferte, hab’ ich mir mit Sequel Pro die Zahlen aus meiner Blog-Datenbank geholt.

Für mich sieht das Resultat der obigen Abfrage so aus:

Year Count Average
2003 157 0.3057
2004 316 0.6108
2005 197 1.2589
2006 144 1.4375
2007 140 2.8143
2008 146 2.5685
2009 93 3.7419
2010 90 3.1333
2011 73 1.3973
2012 17 0.4706

Ein Peak im Jahr 2009 ist klar erkennbar, danach sinken die Kommentarzahlen absolut und im Durchschnitt. Da ich aber der visuelle Mensch bin, hab’ ich mir gedacht, dass sich diese Zahlen (genau wie bei Herr Leu übrigens) doch in eine schöne Grafik verpacken lassen sollten.

Deshalb hab’ meinen Lieblingseditor gestartet und untenstehendes Python-Skript geschrieben. Das Skript liest die Zahlen aus einem Text-File und stellt die durchschnittlichen Kommentare normiert als Plot über die Jahre dar. Das einlesen aus einem Text-File hab’ ich gemacht, damit sich nicht nur meine Zahlen, sondern auch diejenige visualisieren lassen, welche andere in den Kommentaren bei Herr Leu angegeben haben.

#! /opt/local/bin/python

import optparse
from pylab import *

# Use Pythons Optionparser to define and read the options, and also
# give some help to the user
parser = optparse.OptionParser()
usage = "usage: %prog [options] arg"
parser.add_option('-n', dest='Name', metavar='Fridolin')
(options, args) = parser.parse_args()

# show the help if no parameters are given
if options.Name==None:
	parser.print_help()
	print ''
	print 'Example:'
	print 'The command reads the comment from "comments_sepp.txt"'
	print 'and plots them nicely.'
	print ''
	print 'comments.py -n sepp'
	print ''
	sys.exit(1)
print ''

Data = genfromtxt('comments_' + str(options.Name) + '.txt',skip_header=True)

MaxAverage = 0
for line in Data[:,2]:
	MaxAverage = max(MaxAverage,line)

ax = plt.subplot(111)
ax.plot(Data[:,0],Data[:,2]/MaxAverage)
ax.axis([2003,2012,0,1])
ax.xaxis.set_major_formatter(FormatStrFormatter('%d'))
title('Normalized comments for ' + str(options.Name))
savefig(str(options.Name) + '.png')

Als ich das kleine Skript mit den angegebenen Zahlen laufen liess, entstehen untenstehende Plots. Schön ist zu sehen, dass der Kommentarhöhepunkt bei allen (Markus, Robert, Roger, Manuel [1] und mir) teilweise deutlich überschritten scheint. Ich persönlich bewege mich nicht (mehr) auf Twitter und Facebook, erhalte also auch von dort keine Rückmeldungen.

habi.png markus.png robert.png roger.png sprain.png


Um’s genau wie Herr Leu zu sagen: Auch wenn ich das ganze als Python-Fingerübung benutzt habe, wünsche ich mir mehr Kommentare hier, auch – oder gerade wenn – ein Beitrag nicht gefällt, oder du eine andere Meinung hast.

[1]: der mich übrigens mit dem “wenn auch auf tieferem Niveau” in seinem Kommentar drüben bei Herr Leu dazu gebracht hat, die durchschnittlichen Kommentare zu normalisieren.

Track the messenger

Martin Lerjen hat das wunderschön geekige Titelbild des Velokurierbuches gestaltet. Kürzlich hat er seine Seite dazu mit einem saucoolen Video aktualisiert.

Michael Stebler hat die Datenmenge, die in einem Tag entstanden ist, mit Hilfe eines so richtig lärmenden und analogen Plotters animiert und visualisiert. Ich kann nur sagen: sehr geil!

Wer rausfindet, wie der spezielle und groovige Song heisst, der im Hintergrund fiept, soll sich bitte in den Kommentaren melden, shazam war leider keine Hilfe.