Ein kleines Programmierbeispiel

Für das Programmierbeispiel nehmen wir ein klassisches Problem: Klassifizierung von drei Arten von Schwertlilien (Iris setosa, Iris versicolor und Iris virginica) anhand von vier Merkmalen: Kelchblattlänge, Kelchblattbreite, Blütenblattlänge und Blütenblattbreite. Dieses Klassifizierungsbeispiel wurde schon vom britischen Biologen und Statistiker Ronald Fisher in seinem Artikel "The use of multiple measurements in taxonomic problems" im Jahr 1936 vorgestellt. Daten von 150 vermessenen Schwertlilien findet man im Archiv des UCI Machine Learning Repository.

Stellenmarkt
  1. IT-Security-Analyst (w/m/d) im Referat OC 13 (Erstellung und Anpassung von Signaturen)
    Bundesamt für Sicherheit in der Informationstechnik, Bonn
  2. Software Support Spezialisten (m/w/d)
    IGH Infotec AG, Langenfeld
Detailsuche

Für unser Programmbeispiel wurde aus dem Archiv die Datei iris.data in der ersten Zeile um die Spaltenüberschriften ergänzt, die im Punkt 7 in der Datei iris.names beschrieben sind, und als IrisData.csv lokal auf dem Rechner abgespeichert.

Wir haben vier Inputvariablen (X1: Kelchblattlänge, X2: Kelchblattbreite, X3: Blütenblattlänge und X4: Blütenblattbreite) und eine Outputvariable (Art der Schwertlilie).

Die zwei im Folgenden gezeigten Programme, jeweils eins in R und Python, sollen zwei einfache Aufgaben der deskriptiven Statistik erledigen:

  • Die durchschnittlichen Werte (arithmetische Mittel) der vier Inputvariablen der drei Iris-Arten berechnen.
  • Einen Pair Plot als Visualisierung erstellen. Ein Pair Plot beinhaltet alle Kombinationsmöglichkeiten der vier Inputvariablen, die jeweils paarweise in 2D visualisiert werden.

Programm in R - mit wenigen Zeilen zum Ziel

Golem Akademie
  1. SAMBA Datei- und Domänendienste einrichten: virtueller Drei-Tage-Workshop
    7.–9. März 2022, Virtuell
  2. AZ-104 Microsoft Azure Administrator: virtueller Vier-Tage-Workshop
    13.–16. Dezember 2021, virtuell
Weitere IT-Trainings

  1. library(GGally)
  2.  
  3. df <- read.csv(file="c:\\IrisAnalysis\\IrisData.csv", header=TRUE, sep=",")
  4. aggregate(df[, 1:4], list(df$Irisart), mean)
  5.  
  6. ggpairs(df, aes(colour = Irisart, alpha = 0.4))

Wir verwenden das Paket GGally für die Erstellung des Pair Plot. Deshalb wird das Paket importiert: library(GGally)

Mit df >- read.csv(file="c:\\IrisAnalysis\\IrisData.csv", header=TRUE, sep=",") werden Daten aus der Datei IrisData.csv, die in der ersten Zeile die Spaltenüberschriften hat und Kommas als Spaltentrennzeichen verwendet, in einen Data Frame geladen.

Mit dem Befehl aggregate(df[, 1:4], list(df$Irisart), mean) werden die Mittelwerte der vier Inputvariablen für jede der drei Irisarten berechnet. ggpairs(df, aes(colour = Irisart, alpha = 0.4)) erstellt den Pair Plot. Das Programm gibt eine Tabelle und eine Grafik aus.

          Group.1 Kelchblattlaenge.in.cm Kelchblattbreite.in.cm Bluetenblattlaenge.in.cm Bluetenblattbreite.in.cm
1 Iris-setosa                      5.006                  3.418                    1.464                    0.244
2 Iris-versicolor                  5.936                  2.770                    4.260                    1.326
3 Iris-virginica                  6.588                  2.974                    5.552                    2.026

Abbildung 1: Pair Plot erstellt mit R und GGally

  • Pair Plot erstellt mit R und GGally (Bild: Miroslav Stimac)
  • Pair Plot erstellt mit Python und Seaborn (Bild: Miroslav Stimac)
Pair Plot erstellt mit R und GGally (Bild: Miroslav Stimac)

Programm in Python

  1. import pandas as pd
  2. import seaborn as sns
  3.  
  4. df = pd.read_csv('IrisData.csv', delimiter=',', header=0, index_col=False)
  5.  
  6. groupedData = df.groupby('Irisart')
  7. meanValues = groupedData[['Kelchblattlaenge in cm', 'Kelchblattbreite in cm',
  8. 'Bluetenblattlaenge in cm', 'Bluetenblattbreite in cm']].mean()
  9. print(meanValues.to_string())
  10.  
  11. sns.set(style="ticks")
  12. sns.pairplot(df, hue="Irisart")

Als erstes werden zwei Pakete importiert:

import pandas as pd
import seaborn as sns

Wie bereits erklärt, enthält Pandas unter anderem das Data Frame für Python, und Seaborn ist eine mächtige High-Level-API für Datenvisualisierung.

Mit df = pd.read_csv('IrisData.csv', delimiter=',', header=0, index_col=False) werden Daten aus der Datei IrisData.csv, die in der ersten Zeile (header = 0, weil Python mit 0 zu indizieren beginnt) die Spaltenüberschriften hat und Kommas als Spaltentrennzeichen verwendet, in einen Data Frame geladen. index_col=False bedeutet lediglich, dass es keine Indexspalte gibt.

Im nächsten Abschnitt werden die Mittelwerte der vier Inputvariablen für jede der drei Irisarten berechnet und ausgegeben.

groupedData = df.groupby('Irisart')
meanValues  = groupedData[['Kelchblattlaenge in cm', 'Kelchblattbreite in cm',
                            'Bluetenblattlaenge in cm', 'Bluetenblattbreite in cm']].mean()
print(meanValues.to_string())

Die beiden letzten zwei Zeilen erstellen den Pair Plot mit dem seaborn-Style namens ticks:

sns.set(style="ticks")
sns.pairplot(df, hue="Irisart")

Auch dieses Programm gibt eine Tabelle und eine Grafik aus.

          Kelchblattlaenge in cm  Kelchblattbreite in cm  Bluetenblattlaenge in cm  Bluetenblattbreite in cm
Irisart                                                                                                            
Iris-setosa                       5.006                   3.418                     1.464                     0.244
Iris-versicolor                   5.936                   2.770                     4.260                     1.326
Iris-virginica                    6.588                   2.974                     5.552                     2.026


  • Pair Plot erstellt mit R und GGally (Bild: Miroslav Stimac)
  • Pair Plot erstellt mit Python und Seaborn (Bild: Miroslav Stimac)
Pair Plot erstellt mit Python und Seaborn (Bild: Miroslav Stimac)

Von deskriptiver Statistik zu Machine Learning

Die oben gezeigten Programme in R beziehungsweise Python sind natürlich kein Beispiel für Machine Learning, sondern nur für deskriptive Statistik. Wollte man nun den Computer dazu bringen zu lernen, wie er die Art der Schwertlilie anhand von Kelchblattlänge, Kelchblattbreite, Blütenblattlänge und Blütenblattbreite erkennen soll, so benötigt man einen geeigneten Machine-Learning-Algorithmus. Ein solcher Algorithmus ist beispielweise der Random-Forest-Algorithmus, der bei Golem.de schon vorgestellt wurde.

Ein Artikel der Oxford Protein Informatics Group über die Klassifizierung der Schwertlilienarten mit dem Random Forest Algorithmus bietet vollständige Beispiele für R und für Python.

Fazit

Mit den zwei vorgestellten Programmiersprachen R und Python sowie den dazugehörigen integrierten Entwicklungsumgebungen (IDEs), Paketen und Frameworks können Daten statistisch analysiert und Machine-Learning-Programme entwickelt werden. Wer primär Ad-hoc-Datenanalysen machen will und schon viel Erfahrung mit mengenorientierten Programmiersprachen wie SQL hat, wird wahrscheinlich zu R tendieren. Liegt hingegen der Schwerpunkt in der Entwicklung von größeren Machine-Learning-Programmen oder man benötigt GPUs für rechenintensive Machine-Learning-Algorithmen wie beispielsweise mehrschichtige neuronale Netze, dann wird meistens Python die bessere Wahl sein.

Wie bei jeder Programmiersprache gilt auch bei R und Python: Übung macht den Meister! Einfach den Anaconda Navigator installieren, die IDEs ausprobieren und mit einem kleinen Lernprojekt mit der persönlich favorisierten IDE beginnen.

Wer allgemein Machine-Learning-Algorithmen mit Python ausprobieren möchte, legt mit dem Paket Scikit-learn los. Es kann fast alles, jedoch unterstützt es keine GPUs. Wer unbedingt mit Deep Learning Neural Networks Cuda-fähige Nvidia-GPUs (und hoffentlich eines Tages auch OpenCL-kompatible GPUs von AMD und Intel) zum Glühen bringen will, für den ist Keras mit CNTK und/oder Tensorflow ein guter Einstieg.

Viel Spaß beim Programmieren!

Miroslav Stimac ist Informatiker, promovierter Wirtschaftswissenschaftler und aktuell Teilzeitstudent der Astronomie. Er arbeitet seit 2004 als Entwickler mit branchenübergreifender Projekterfahrung, hauptsächlich in Business Intelligence, Data Science und Statistik. Seine fachlichen Interessenschwerpunkte sind Astronomie, Japanologie, Konsumforschung und Robotik.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Machine-Learning-Pakete für Python
  1.  
  2. 1
  3. 2
  4. 3


Frankenwein 22. Nov 2018

Das klingt interessant. Du gibst historische stündliche Daten zu Umgebungsvariablen und...

henryanki 15. Nov 2018

Schleifen sind auch ein "Anti-Pattern" in R. Für fast alle "iterativen" Prozesse sollte...

0110101111010001 13. Nov 2018

Tensorflow am verbreitetsten, CNTK am schnellsten. PyTorch am Facebookgsten...

Bruto 13. Nov 2018

Psst, das ist zu symbolisch für die NNler ;) Oder es hat einfach zu viele Klammern.

Frankenwein 13. Nov 2018

Super, danke für den Hinweis. Es gibt so viel Bewegung auf dem Gebiet, da ist es schwer...



Aktuell auf der Startseite von Golem.de
Fälschung
Wieder Abmahnungen wegen Youporn-Streaming

Diesmal hat sich ein besonders dummer Betrüger an Abmahnungen zum Streaming bei Youporn versucht. In dem Brief stimmt fast keine Angabe.

Fälschung: Wieder Abmahnungen wegen Youporn-Streaming
Artikel
  1. Deutsche Telekom: Netflix, Facebook und Amazon sollen für Netzausbau zahlen
    Deutsche Telekom
    Netflix, Facebook und Amazon sollen für Netzausbau zahlen

    Deutsche Telekom, Vodafone und 11 weitere große europäische Netzbetreiber wollen jetzt Geld von den Content-Konzernen aus den USA sehen.

  2. Telekom-Internet-Booster: Feldtest bringt über 600 statt 50 MBit/s ins Haus
    Telekom-Internet-Booster
    Feldtest bringt über 600 statt 50 MBit/s ins Haus

    Die Telekom beginnt mit 5G DSL. Dafür wird im Haushalt eine Außenantenne benötigt.

  3. 800 MHz: Bundesnetzagentur dürfte nächste Auktion absagen
    800 MHz
    Bundesnetzagentur dürfte nächste Auktion absagen

    1&1 wird sich das neue Vorgehen nicht gefallen lassen. 800 MHz bietet wichtige Flächenfrequenzen auf dem Lande.

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • Heute ist Cyber Monday • AMD Ryzen 7 5800X 348€ • 3 für 2: Star Wars & Marvel • Bis 300€ Direktabzug auf TVs, Laptops uvm. • Bis 50% auf beyerdynamic + Gratis-Kopfhörer • Cyber Monday bei MM/Saturn (u. a. Xiaomi 11 Lite 5G 299€) • Alternate (u. a. be quiet CPU-Kühler 29,99€) [Werbung]
    •  /