Open Source im professionellen Einsatz
Linux-Magazin 03/2015
1048

Datenspeicher

Die Beispielanwendung nutzt das freie No-SQL-Datenbanksystem Mongo DB [4] als Datenspeicher. Die Befehle aus Listing 2 installieren die aktuelle Version 2.6.2 unter Ubuntu 12.04. Zeile 1 holt den Schlüssel für das externe Repository, Zeile 2 bindet es ein. Zeile 3 aktualisiert die Paketliste. Die letzten beiden Zeilen installieren »mongodb-org« und die aktuelle Version der Python-Schnittstelle Pymongo, wobei »easy_install« hilft.

Listing 2

Installation von Mongo DB und Py-Mongo

01 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
02 echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
03 sudo apt-get update
04 sudo apt-get install -y mongodb-org
05 sudo easy_install pymongo

Um den Import der Beispieldaten in Mongo DB kümmert sich das Python-Skript »import_comets.py« aus Listing 3. Der Befehl »python import_comets.py data/comets.csv« startet den Import von der Kommandozeile. Das Skript liest die Beispieldaten aus der CSV-Datei »data/comets.csv« .

Listing 3

bin/import_comets.py

01 from pymongo import MongoClient
02 import csv
03 import sys
04
05 def pfl(val):
06   try:
07     return float(val)
08   except:
09     return None
10
11 with open(sys.argv[1]) as csvfile:
12   collec = MongoClient()["galaxy"]["comets"]
13   for row in csv.reader(csvfile, delimiter="\t"):
14     try:
15       collec.insert({"name":row[0],"observer":row[1],"type":row[2],"period":pfl(row[3]), "ecc":pfl(row[4]), "semaj_axs":pfl(row[5]), "perih_dist":pfl(row[6]), "incl":pfl(row[7]), "abs_mag":pfl(row[8])})
16     except:
17       print "Error: could not import: ", row

Zeile 1 bindet die Klasse »MongoClient« aus dem Python-Paket »pymongo« ein, die nächsten beiden Zeilen importieren die Module »csv« und »sys« . Zeile 11 liest den Pfad der CSV-Datei aus dem Feld der Kommandozeilenparameter »sys.argv« , öffnet die Datei dann mit »open« und speichert den resultierenden Deskriptor in der Variablen »csvfile« .

Wenn sie noch nicht vorhanden sind, dann legt das Python-Skript in Zeile 12 die Mongo-DB-Datenbank »galaxy« und die Datensammlung »comets« an. Die Methode »reader()« liest dann die CSV-Datei ein und trennt sie anhand des Tabulatorzeichens in Spalten auf. Die »for« -Schleife holt die jeweils nächste Zeile aus dem »reader« -Objekt und speichert sie im Feld »row« . Zeile 15 legt schließlich den Datensatz aus »row« in Form eines Python-Dictionary als Schlüssel-Wert-Paare in der Mongo-DB-Datenbank ab. Zahlenwerte überführt die Funktion »pfl()« in Fließkommazahlen. Schlägt die Umwandlung fehl, gibt das Skript den Wert »None« zurück.

Die Schlüssel entsprechen den Attributen aus Tabelle 1. Die Beispieldaten geben charakteristische Parameter bekannter Kometen wieder. Sie unterscheiden sich primär durch ihre Bahnformen. Wie die Planeten bewegen sich wiederkehrende Kometen, beispielsweise der Halleysche Komet, auf Ellipsenbahnen (&0x03B5; < 1) um die Sonne, siehe Abbildung 2. Nicht wiederkehrende Kometen bewegen sich auf Parabelbahnen (&0x03B5; = 1) oder Hyperbelbahnen (&0x03B5; > 1).

Tabelle 1

Übersicht der Kometendaten

Attribut

Bedeutung

name

Kometenname

observer

erstmals beobachtet von

type

Kometentyp: »RP« wiederkehrend regulär, »NP« nicht wiederkehrend

period

Umlaufzeit in Jahren

ecc

numerische Exzentrizität &0x03B5; der Bahn

semaj_axs

große Halbachse in Astronomischen Einheiten, 1 AE = 1,4960 x 1011 m

perih_dist

nächster Sonnenabstand in AE

incl

Einfallswinkel der Bahn in Gradmaß

abs_mag

relative Helligkeit

Abbildung 2: Typische Kenngrößen einer Ellipse: a – große Halbachse, b – kleine Halbachse, &0x03B5; – Exzentrizität (Kreis!=0).

Ergebnisorientiert

Bei R handelt es sich um eine freie Implementierung der statistischen Programmiersprachen S und Splus. Wie diese erleichtert R es erheblich, statistische Rechnungen auszuführen und passende Grafiken zu erzeugen (siehe Kasten "R interaktiv"). R erscheint unter der GPL und liegt in Version 3.1.2 vor. Listing 4 zeigt die Installation der aktuellen Version unter Ubuntu 12.04.

Listing 4

Installation von R unter Ubuntu 12.04

01 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
02 sudo add-apt-repository ppa:marutter/rrutter
03 sudo apt-get update
04 sudo apt-get install r-base r-base-dev

R interaktiv

Wie Python lässt sich auch R in einer interaktiven Shell starten, was der Befehl »R« bewirkt. Darin lässt sich dann experimentieren. Der Ausdruck

hist(round(runif(100000, 0.5, 6.5)) +  round(runif(100000, 0.5, 6.5)))

beschreibt zum Beispiel ein Würfelexperiment mit zwei Würfeln. Die Funktion »runif()« bestimmt zunächst zwei Vektoren mit jeweils 100000 gleichverteilten Zufallszahlen aus dem Intervall 0,5 bis 6,5, die »round()« anschließend komponentenweise auf 1 und 6 rundet.

Jede Komponente der Vektoren simuliert einen Würfelwurf. Der Aufruf von »hist()« erstellt für die Summe der Vektoren ein Histogramm wie in Abbildung 3. Dort sind entlang der x-Achse die Augensumme und entlang der y-Achse deren Häufigkeit aufgetragen. Wie zu erwarten ist, stellt sich eine symmetrische Verteilung um den Erwartungswert »7« heraus.

Auch die Beispieldaten zu den Kometen lassen sich interaktiv einlesen und auswerten, wenn das Ergebnis auch grafisch nicht sehr beeindruckt (Abbildung 4). Das Kommando

df = read.csv("data/comets.csv",  sep="\t", dec=".")

liest die Daten der Beispielanwendung über die Methode »csv()« aus der CSV-Datei »data/comtes.csv« in die R-Sitzung ein, überführt sie in ein Objekt vom Typ Dataframe und speichert es in einer Variablen mit dem Namen »df« . Das benannte Attribut »sep="\t"« aus dem Methodenaufruf separiert die Spalten anhand des Tabulatorzeichens, »dec="."« legt den Punkt als dezimales Trennzeichen fest. Die Namen der Attribute entnimmt R der ersten Zeile der CSV-Datei. Der Ausdruck »head(df)« listet schließlich den Kopf von »df« tabellenförmig auf (Abbildung 4).

Abbildung 3: Simulation eines Würfelexperiments unter R.

Wie Javascript speichert R Werte ausschließlich in Objekten, die es lexikalisch an eine Umgebung oder ein Closure-Objekt bindet. Die am häufigsten verwendeten Datentypen sind Vektoren, Matrizen, Listen und Dataframes. R verarbeitet die Werte mit Hilfe zahlreicher Built-in-Funktionen und Operatoren, der gängigsten Kontrollstrukturen sowie benutzerdefinierter Funktionen und Operatoren. Im Comprehensive R Archive Network (Cran, [5]) finden sich zudem zahlreiche Module für R.

Abbildung 4: Eine interaktive R-Session listet die Beispieldaten tabellenförmig auf. Das Feature kennen Programmierer auch von Python, es hilft unter anderem beim Testen von Funktionen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 7 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Web-Beschleunigung

    Nach der Ajax-Revolution im Browser steht eine Modernisierung der Server-Seite an. Auch dort sollen asynchrone Requests zu schnelleren und besser skalierenden Webanwendungen führen. Der Jetty-Server hat dazu Continuations implementiert, Cometd bietet einen Standard.

  • Python

    Einsteigerfreundlich, schnell zu lernen und flexibel: Die Skriptsprache Python genießt trotz des vermeintlich gefährlichen Namens einen guten Ruf. Dank zahlreicher Module und einfacher Syntax reichen für Datei-Operationen, Ein- und Ausgaben und selbst fürs Monitoring eines Servers wenige Zeilen Code.

  • Online-Seminare zu MongoDB kostenlos

    Die Firma 10gen bietet drei kostenlose Online-Videokurse für die NoSQL-Datenbank MongoDB an, von denen der erste am Montag startet.

  • React

    Vom Unternehmen Facebook kommt das quelloffene Javascript-Framework React, das Weboberflächen geschickt mit Datenschätzen verknüpft. Insbesondere die Renderfunktion macht sich dabei nützlich.

  • Mongo DB

    Mongo DB ist ein Musterexemplar unter den NoSQL-Datenbanken: Die Open-Source-Software hat zeitgemäße Features wie Replikation, Failover und Sharding bereits eingebaut. Der Autor setzt die Datenbank schon seit 2009 produktiv ein und breitet seinen Erfahrungsschatz aus.

comments powered by Disqus

Ausgabe 10/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.