Datenvisualisierung in Python [Tutorial]
Python ist eine der wichtigsten Programmiersprachen in der Data Science Szene. Der Einstieg in diese Programmiersprache fällt zum Beispiel im Vergleich zur Programmiersprache R etwas einfacher, da Python eine leicht zu verstehende Syntax hat. Was jedoch beim Einstieg zur größeren Hürde werden kann, ist der Umgang mit den unüberschaubar vielen Bibliotheken. Die wichtigsten Bibliotheken für Data Science / Data Analytics stellte ich bereits in diesem Artikel kurz vor. Hier ist es wichtig, einfach erstmal anzufangen – Warum nicht mit den ersten Datenvisualisierungen?
Natürlich gibt es sehr viele tolle und schön anzusehende Visualisierungen, die teilweise sehr speziell sind. In einem anderen Artikel stellte ich beispielsweise die 3D-Visualisierung von Graphen mit Python und UbiGraph vor. Dieser Artikel hier gilt aber vor allem Einsteigern, die erste Diagramme hergezaubert bekommen möchten.
Damit wir beginnen können, müssen im Python-Skript zuerst zwei wichtige Bibliotheken eingebunden werden:
import matplotlib.pyplot as pyplot
import pandas as pandas
Beide Bibliotheken können direkt gedownloaded werden, sind aber auch im Anaconda Framework enthalten (Empfehlung: Anaconda für Python 2.7).
Die Bibliothek matplotlib (library) ist mit Sicherheit die gängigste zur Visualisierung von Daten. Die Bibliothek pandas ist eine der verbreitetsten, die für den Zugriff, die Manipulation und Analyse von Daten eingesetzt wird. In diesen einfachsten Beispielen benutzen wir pandas nur zum Zugriff auf Daten.
Für die Visualisierung benötigen wir natürlich auch ein Beispiel-Dataset (Tabelle). Eine solche kann sich jeder selber erstellen, wer die nachfolgenden Code-Beispiele aber nachstellen möchte, kann diese Daten verwenden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
ID|Standort|Funktion|Mitarbeiter|Umsatz|Kosten 1|Muenchen|Verwaltung + Vertrieb|45|3500000|2300000 2|Stuttgart|Nur Vertrieb|23|2800000|800000 3|Hannover|Verwaltung + Vertrieb|45|1800000|1000000 4|Leipzig|Nur Vertrieb|12|1000000|320000 5|Dresden|Produktio + Vertrieb|65|450000|700000 6|Frankfurt am Main|Nur Vertrieb|12|240000|20000 7|Duesseldorf|Nur Vertrieb|43|45000|53000 8|Kassel|Nur Vertrieb|23|250000|90000 9|Hamburg|Verwaltung + Vertrieb|89|2800000|690000 10|Koeln|Nur Vertrieb|21|110000|12000 11|Potsdam|Nur Vertrieb|12|20000|67000 12|Nuernberg|Nur Vertrieb|15|60000|30000 13|Ingolstadt|Nur Vertrieb|8|80000|10000 14|Wolfsburg|Nur Vertrieb|8|90000|23000 15|Braunschweig|Nur Vertrieb|32|900000|750000 16|Augsburg|Verwaltung + Vertrieb|45|700000|370000 17|Chemnitz|Nur Vertrieb|4|95000|78000 18|Bochum|Nur Vertrieb|9|32000|67000 19|Dortmund|Produktio + Vertrieb|56|2100000|450000 20|Essen|Nur Vertrieb|10|190000|140000 |
Diese 20 Zeilen können einfach via Copy + Paste in eine Datei kopiert werden, die dann als data-science-blog-python-beispiel.txt abgespeichert werden kann.
Der Zugriff von Python aus erfolgt dann mit pandas wie folgt:
dataset = pandas.read_csv("data-science-blog-python-beispiel.txt", sep="|", header=0, encoding="utf8")
Kreisdiagramm
Ein Kreisdiagramm (Pie Chart) lässt sich basierend auf diesen Daten beispielsweise wie folgt erstellen:
1 2 3 4 5 6 7 8 9 10 |
# Pie Chart var= dataset.groupby(['Funktion']).sum().stack() temp = var.unstack() type(temp) x_list = temp['Mitarbeiter'] label_list = temp.index pyplot.axis("equal") # Kreisdiagramm rund gestaltet (sonst Standard: oval!) pyplot.pie(x_list, labels=label_list, autopct="%1.1f%%") pyplot.title('Aufteilung alle Mitarbeiter auf die Standorte nach Funktion') pyplot.show() |
Balkendiagramm
Balkendiagramme können einfachste Größenverhältnisse aufzeigen.
1 2 3 4 5 6 7 8 |
var = dataset.groupby('Funktion').Umsatz.sum() fig = pyplot.figure() ax = fig.add_subplot(1,1,1) ax.set_xlabel('Funktion') ax.set_ylabel('Umsatz in Summe') ax.set_title('Umsatzvolumen nach Funktion der Filialen') var.plot(kind='bar') pyplot.show() |
Gestapeltes Balkendiagramm
Mit nur wenig Erweiterung wird aus dem einfachen Balkendiagramm ein gestapeltes.
1 2 3 4 |
var = dataset.groupby(['Funktion', 'Standort']).Umsatz.sum() var.unstack().plot(kind='bar', stacked=True, grid=True) pyplot.legend(bbox_to_anchor=(1.09, 1), loc=0, borderaxespad=0.5) pyplot.show() |
Histogramm (Histogram)
Histogramme sind ein wichtiges Diagramm der Statistik, mit dem sich Verteilungen aufzuzeigen lassen.
1 2 3 4 5 6 7 8 9 |
# Histogramm fig = pyplot.figure() ax = fig.add_subplot(1,1,1) ax.hist(dataset['Mitarbeiter'], bins=5, color='#9400D3') pyplot.title('Mitarbeiter Verteilung') pyplot.xlabel('Verteilung') pyplot.ylabel('Anzahl Mitarbeiter') pyplot.show() |
Lininediagramm
Der Beispieldatensatz gibt kein gutes Szenario her, um ein korrektes Liniendiagramm darstellen zu können; aber dennoch hier ein How-To für ein Liniendiagramm:
1 2 3 4 5 6 7 8 |
#Line Chart var = dataset.groupby('Standort').Umsatz.sum() fig = pyplot.figure() ax1 = fig.add_subplot(1,1,1) ax1.set_xlabel('Umsatz') ax1.set_ylabel('Standort') var.plot(kind='line') pyplot.show() |
Kastengrafik (Box Plot)
Ein Box Plot zeigt sehr gut Schwerpunkte in einer Verteilung.
1 2 3 4 |
fig = pyplot.figure() ax = fig.add_subplot(1,1,1) ax.boxplot(dataset['Mitarbeiter']) pyplot.show() |
Punktverteilungsdiagramm (Scatter Plot)
1 2 3 4 5 6 |
fig = pyplot.figure() ax = fig.add_subplot(1,1,1) ax.scatter(dataset["Mitarbeiter"], dataset["Umsatz"]) ax.set_xlabel('Anzahl Mitarbeiter') ax.set_ylabel('Umsatz') pyplot.show() |
Blasendiagramm (Bubble Chart)
Das Punktdiagramm kann leicht durch hinzufügen einer dritten Dimension zu einem Bubble-Chart erweitert werden. In dieser Darstellung mit logarithmischen x-/y-Achsen (log).
1 2 3 4 5 6 7 8 |
fig = pyplot.figure() ax = fig.add_subplot(1,1,1) ax.scatter(dataset['Kosten'], dataset['Umsatz'], s=dataset['Mitarbeiter']) ax.set_xlabel('Umsatz') ax.set_ylabel('Kosten') pyplot.xscale('log') pyplot.yscale('log') pyplot.show() |