PdVega-Beispiele¶
Importe¶
[1]:
import numpy as np
import pandas as pd
import pdvega
Deklarative Beschreibung der Datenvisualisierung¶
Mit Vega-Lite lässt sich deklarativ beschreiben, wie die Daten auf Visualisierungsfunktionen abgebildet werden sollen. Mit pdvega
wird diese Spezifikation ähnlich einfach wie über die Matplotlib-API verfügbar: data.plot
muss lediglich durch data.vgplot
ersetzt werden, wobei sich data
auf pandas-Series
oder DataFrame
-Objekte bezieht.
Laden eines DataFrame
mit Zeitreihen von Aktienkursen:
[2]:
from vega_datasets import data
stocks = data.stocks(pivoted=True)
[3]:
stocks.plot.line()
[3]:
<Axes: xlabel='date'>
pdvega
-API¶
[5]:
stocks.vgplot.line()
Das Ergebnis sind schöne Datenvisualisierungen mit einem Minimum an Boilerplate. Zudem sind die aus pdvega
erstellten Diagramme interaktiv und lassen sich Verschieben und Vergrößern/Verkleinern.
Einfache Datenvisualisierungen mit data.vgplot
¶
Die zentrale Schnittstelle von pdvega
ist das vgplot
-Attribut, das pandas-DataFrame
und Series
-Objekten hinzugefügt wird.
Wie bei dem pandas-Plots gibt es zwei Möglichkeiten, Diagramme zu erstellen:
das
vgplot
-Attribut eines pandas-Objekts kann direkt aufgerufen werden, also z.B.
iris.vgplot(kind="scatter", x="sepalLength", y="petalLength", c="species")
Alternativ kann auch die spezifische Methode aufgerufen werden, die jedem Diagrammtyp zugeordnet ist:
iris.vgplot.scatter(x="sepalLength", y="petalLength", c="species")
Dieser Ansatz bietet den Vorteil, dass verfügbare Plott-Typen über die Tabulatorvervollständigung untersucht werden können. Die einzelnen Funktionen bieten auch eine detailliertere Dokumentation der für jede Methode verfügbaren Argumente.
Diagrammtypen¶
Die vgplot
-API stellt neun grundlegende Diagrammtypen bereit:
Liniendiagramme mit vgplot.line
¶
Der Standard-Diagrammtyp für vgplot
ist ein Liniendiagramm.
Sofern nichts anders angegeben ist, wird der Index von DataFrame
oder Series
als x-Achsenvariable verwendet, und eine separate Linie für die y-Werte jeder Spalte des DataFrame
. Wenn Sie ihr nur eine Teilmenge der Spalten plotten lassen möchtet, könnt ihr mithilfe der pandas-Indizierung die Spalten auswählen, an denen ihr interessiert seid:
[6]:
stocks[['AAPL', 'AMZN']].vgplot.line()
Liniendiagramme können weiter angepasst werden. Informationen hierzu findet ihr in der Dokumentation:
Streudiagramme mit vgplot.scatter
¶
[7]:
stocks.vgplot.scatter(x="AAPL", y="AMZN")
Um Streudiagramme weiter anzupassen, schaut euch pdvega.FramePlotMethods.scatter() an.
Flächendiagramme mit vgplot.area
¶
[8]:
stocks[["MSFT", "AAPL", "AMZN"]].vgplot.area()
Flächendiagramme können auch gestapelt werden. In diesem Fall sind transparente Flächen häufig hilfreich.
[9]:
stocks[["MSFT", "AAPL", "AMZN"]].vgplot.area(stacked=False, alpha=0.4)
Flächendiagramme können weiter angepasst werden, siehe
Balkendiagramme mit vgplot.bar
¶
[10]:
np.random.seed(1234)
df = pd.DataFrame(np.random.rand(10, 2), columns=["a", "b"])
df.vgplot.bar()
Wie bei Flächendiagrammen könnt ihr mit stacked=True
die Balken stapeln:
[11]:
df.vgplot.bar(stacked=True)
Darüberhinaus können horizontale Balkendiagramme erstellt werden mit barh
:
[12]:
df.vgplot.barh(stacked=True)
Histogramme mit vgplot.hist
¶
[13]:
df = pd.DataFrame(
{
"a": np.random.randn(1000) + 1,
"b": np.random.randn(1000),
"c": np.random.randn(1000) - 1,
},
columns=["a", "b", "c"],
)
df.vgplot.hist(bins=50, alpha=0.5)
Histogramme können weiter angepasst werden, siehe
Kerndichteschätzdiagramme mit vgplot.kde
¶
Kerndichteschätzdiagramme (englisch kernel density estimation, KDE) erzeugen ähnlich wie Histogramme glatte Kurven, die die Dichte der Messpunkte angeben.
[14]:
df.vgplot.kde()
KDE-Diagramme können weiter angepasst werden mit
Heatmaps mit vgplot.heatmap
¶
pandas-Plotting hat eine Funktion zum Erstellen einer hexagonal-gruppierten Heatmap zweidimensionaler Daten. Leider unterstützt derzeit weder Vega noch Vega-Lite diese hexagonalen Heatmaps. Sie unterstützen jedoch kartesische Heatmaps,und diese Funktionalität ist auch enthalten in pdvega
:
[15]:
df.vgplot.heatmap(x="a", y="b", C="c", gridsize=20)
Heatmap-Diagramme können weiter angepasst werden, siehe pdvega.FramePlotMethods.heatmap().
Statistische Visualisierung mit pdvega.plotting
¶
pdvega
unterstützt auch viele der komplexeren Plot-Routinen, die im pandas.plotting-Submodul verfügbar sind. Im Folgenden zeigen wir das Beispieleiner Multi-Panel-Streudiagramm-Matrix aus Fisher’s Iris-Datensatz:
[16]:
iris = data.iris()
pdvega.scatter_matrix(iris, "species", figsize=(7, 7))
In diesem Diagramm könnt ihr interaktiv Verschieben und Verkleinern/Vergrößern. Mit gedrückter Umschalttaste könnt ihr auch einzelne Messpunkte auswählen.
Parallele Koordinaten¶
Eine andere Möglichkeit, mehrdimensionale Daten zu visualisieren, besteht darin, jede Dimension unabhängig voneinander mithilfe eines Diagramms mit parallelen Koordinaten zu betrachten. Dies kann mit pdvega.parallel_coordinates()
realisiert werden, wobei die API pandas.plotting.parallel_coordinates()
entspricht:
[17]:
pdvega.parallel_coordinates(iris, "species")
Auf einen Blick könnt ihr Beziehungen zwischen Punkten erkennen und insbesondere deutlich machen, dass sich die „setosa“-Art in Breite und Länge der Blütenblätter deutlich von den beiden anderen Arten unterscheidet.
Andrews-Kurven¶
Ein ähnlicher Ansatz zur Visualisierung von Datendimensionen ist als Andrews-Kurve bekannt: Die Idee besteht darin, aus den Merkmalen jedes Objekts eine Fourier-Reihe zu konstruieren, um die aggregierten Unterschiede zwischen Klassen qualitativ zu visualisieren. Dies kann mit der Funktion pdvega.andrews_curves()
erfolgen, die der API von pandas.plotting.andrews_curves()
entspricht:
[17]:
pdvega.andrews_curves(iris, "species")