Название: Praktische Statistik für Data Scientists
Автор: Peter Bruce
Издательство: Bookwire
Жанр: Математика
isbn: 9783960104681
isbn:
Dichtediagramm
Eine geglättete Version des Histogramms, oft basierend auf einer Kerndichteschätzung (engl. Kernel Density Estimate).
Perzentile und Box-Plots
In »Streuungsmaße auf Basis von Perzentilen« auf Seite 17 sind wir der Frage nachgegangen, wie Perzentile zur Messung der Streuung der Daten verwendet werden können. Perzentile sind auch nützlich, um die gesamte Verteilung zusammenfassend darzustellen. Es ist üblich, die Quartile (25%-, 50%- und 75%-Perzentile) und die Dezile (10%-, 20%-, …, 90%-Perzentile) anzugeben. Perzentile sind besonders aussagekräftig, wenn man die Enden bzw. Ränder (die äußeren Bereiche) der Verteilung zusammenzufassend darstellen möchte. In der breiten Öffentlichkeit ist in diesem Zusammenhang oft von der Redewendung »das eine Prozent« die Rede, die genutzt wird, um Reiche im obersten 99%-Perzentil der Vermögensbzw. Einkommensverteilung zu charakterisieren.
Tabelle 1-4 stellt einige Perzentile der Mordraten in den Bundesstaaten dar. In R können wir uns die Werte mithilfe der Funktion quantile ausgeben lassen:
quantile(state[['Murder.Rate']], p=c(.05, .25, .5, .75, .95))
5% 25% 50% 75% 95%
1.600 2.425 4.000 5.550 6.510
In Python können Sie für einen Data Frame die pandas-Methode quantile nutzen, um sich die Perzentile ausgeben zu lassen:
state['Murder.Rate'].quantile([0.05, 0.25, 0.5, 0.75, 0.95])
Tabelle 1-4: Perzentile der Mordraten in den Bundesstaaten
Der Median liegt bei vier Morden pro 100.000 Einwohner. In den Daten gibt jedoch eine beträchtliche Streuung: Das 5%-Perzentil beträgt nur 1,6 und das 95%-Perzentil 6,51.
Die von Tukey [Tukey-1977] eingeführten Box-Plots stützen sich auf Perzentile und bieten eine rasche Möglichkeit, die Verteilung Ihrer Daten zu visualisieren. Abbildung 1-2 zeigt einen in R erstellten Box-Plot für die Einwohnerzahlen der Bundesstaaten:
boxplot(state[['Population']]/1000000, ylab='Einwohnerzahl (in Millionen)')
Die pandas-Bibliothek bietet eine Reihe von grundlegenden informativen Diagrammen, die für Data Frames genutzt werden können; darunter auch Box-Plots:
ax = (state['Population']/1_000_000).plot.box()
ax.set_ylabel('Einwohnerzahl (in Millionen)')
Abbildung 1-2: Box-Plot für die Einwohnerzahlen der Bundesstaaten
Bei diesem Box-Plot können wir auf einen Blick erkennen, dass die mittlere Einwohnerzahl der Bundesstaaten etwa fünf Millionen beträgt (Median), die Einwohnerzahl für die Hälfte der Staaten zwischen etwa zwei und sieben Millionen liegt und dass es einige bevölkerungsreiche Ausreißer gibt. Der obere und der untere Rand des Rechtecks (Box) kennzeichnen jeweils das 75%- bzw. 25%-Perzentil. Der Median wird durch die fett gehaltene horizontale Linie in der Box angezeigt. Die beiden vertikalen gestrichelten Linien, die als Whisker oder auch Antennen bezeichnet werden, erstrecken sich über den oberen und unteren Rand der Box, um den Bereich, in dem der überwiegende Teil der Daten liegt, zu kennzeichnen. Es gibt zahlreiche Varianten von Box-Plots (siehe z.B. die Dokumentation der R-Funktion boxplot [R-base-2015]). Standardmäßig verlängert die R-Funktion die Whisker bis zu dem Datenpunkt, der am weitesten über die Box hinausgeht – jedenfalls immer dann, wenn dieser Wert nicht mehr als das 1,5-Fache des IQR beträgt. Die matplotlib-Bibliothek verwendet die gleiche Implementierung. In anderen Softwareprogrammen kann eine abweichende Regel angewandt werden.
Alle Datenpunkte außerhalb der Whisker werden als einzelne Punkte oder Kreise dargestellt (die in der Regel als Ausreißer angesehen werden).
Häufigkeitstabellen und Histogramme
Eine Häufigkeitstabelle teilt den Wertebereich einer Variablen bzw. eines Merkmals in gleich große Intervalle auf und gibt uns Auskunft darüber, wie viele Werte jeweils in jedes Intervall fallen. Tabelle 1-5 zeigt Ihnen eine in R erstellte Häufigkeitstabelle für die Einwohnerzahlen der Bundesstaaten:
breaks <- seq(from=min(state[['Population']]),
to=max(state[['Population']]), length=11)
pop_freq <- cut(state[['Population']], breaks=breaks,
right=TRUE, include.lowest=TRUE)
table(pop_freq)
Die Funktion pandas.cut erzeugt eine Zahlenfolge (Series-Objekt), die die Werte auf die einzelnen Intervalle abbildet. Mit der Methode value_counts erhalten wir die Häufigkeitstabelle:
binnedPopulation = pd.cut(state['Population'], 10)
binnedPopulation.value_counts()
Tabelle 1-5: Eine Häufigkeitstabelle für die Einwohnerzahlen der Bundesstaaten
Der Bundesstaat mit der geringsten Einwohnerzahl ist Wyoming mit 563.626 Menschen, und der bevölkerungsreichste ist Kalifornien mit 37.253.956 Einwohnern. Daraus ergibt sich ein Wertebereich von 37.253.956 – 563.626 = 36.690.330, den wir in gleich große Klassen – sagen wir 10 – aufteilen müssen. Bei 10 gleich großen Klassen hat jede Klasse eine Breite von 3.669.033, sodass das erste Intervall von 563.626 bis 4.232.658 reicht. Im Gegensatz dazu liegt in der obersten Klasse für das Intervall 33.584.923 bis 37.253.956 Einwohnern nur ein einziger Bundesstaat: Kalifornien. Die beiden nächstkleineren Klassen sind unbesetzt, bis als Nächstes der Bundesstaat Texas erreicht wird. Es ist wichtig, die leeren Klassen mit einzubeziehen; die Tatsache, dass sich in diesen Intervallen keine Werte befinden, ist eine nützliche Information. Es kann auch hilfreich sein, mit verschiedenen Klassenbreiten bzw. Intervallgrößen zu experimentieren. Wenn sie zu groß sind, treten wichtige Merkmale der Verteilung gegebenenfalls nicht mehr sichtbar hervor. Werden sie zu klein gewählt, ist das Ergebnis zu feingliedrig, und die Fähigkeit, ein adäquates Gesamtbild zu liefern, geht verloren.
|