HOWTO · Seaborn

Seaborn Boxplot ohne Ausreißer

Erstellen Sie einen Seaborn-Boxplot ohne Ausreißermarker mit showfliers=False, verstehen Sie die 1,5 x IQR-Regel, mit der Seaborn Ausreißer kennzeichnet, und sehen Sie, wann stattdessen das Entfernen oder Begrenzen von Ausreißerwerten gerechtfertigt ist.

Auf dieser Seite

Dieser Artikel soll demonstrieren, was Boxplots und Ausreißer sind und wie man einen Seaborn-Boxplot ohne die Ausreißermarker erstellt. In den meisten Fällen ist die richtige Antwort, die Marker auszublenden, nicht die Daten zu löschen — die folgenden Abschnitte zeigen beides und erklären, wann das tatsächliche Entfernen oder Begrenzen von Werten gerechtfertigt ist.

Einen Seaborn-Boxplot ohne Ausreißermarker erstellen

Ein Boxplot fasst eine Verteilung mit ihren Quartilen zusammen: Die Box reicht vom ersten Quartil (Q1) bis zum dritten Quartil (Q3) mit dem Median im Inneren, und die Whisker erstrecken sich bis zu den extremsten Werten, die nicht als Ausreißer gelten. Punkte jenseits der Whisker werden einzeln als Ausreißermarker (Fliers) gezeichnet.

Wir werden mit dem tips-Datensatz arbeiten, der bereits in unserer Seaborn-Bibliothek vorgeladen ist. Importieren wir die erforderlichen Pakete und schauen wir uns die Daten an; dieser Datensatz handelt von einem Restaurant mit mehreren Spalten.

import seaborn as sb
import matplotlib.pyplot as plt
import pandas as pd

TIPS = sb.load_dataset("tips")
TIPS.head()

Tips data set

Das Plotten der Spalte total_bill mit den Standardeinstellungen zeigt mehrere Fliers auf der rechten Seite:

sb.boxplot(x=TIPS["total_bill"])
plt.show()

Ausgabe:

Boxplot with outlier markers

Um denselben Plot ohne die Ausreißermarker zu erstellen, übergeben Sie showfliers=False:

sb.boxplot(x=TIPS["total_bill"], showfliers=False)
plt.show()

Ausgabe:

Boxplot without outlier markers

Was Seaborn als Ausreißer anzeigt

Seaborn (über Matplotlib) kennzeichnet einen Punkt als Ausreißer, wenn er mehr als 1,5 × IQR jenseits der Quartile liegt, wobei der IQR Q3 − Q1 ist. Die Whisker reichen bis zu den extremsten Datenpunkten, die noch innerhalb dieser Zäune liegen; alles außerhalb davon wird als Flier gezeichnet.

Sie können die Regel für total_bill mit der describe()-Funktion nachvollziehen, die für diese Spalte Q1 = 13,35, den Median = 17,80 und Q3 = 24,13 angibt. Der IQR beträgt daher 10,78, so dass die Zäune 13,35 − 1,5 × 10,78 = −2,82 und 24,13 + 1,5 × 10,78 = 40,30 sind. Neun der 244 Rechnungen liegen oberhalb des oberen Zauns (das Maximum ist 50,81), und diese neun Punkte sind genau die Fliers im ersten Plot. Beachten Sie, dass sie keine Datenfehler sind — es sind einfach die größten Rechnungen in den Aufzeichnungen des Restaurants.

Ausreißermarker mit showfliers=False ausblenden

showfliers=False ändert nur, was gezeichnet wird. Box, Median und Whisker werden aus den vollständigen Daten berechnet, einschließlich der Ausreißer, genau wie zuvor; die Flier-Marker werden einfach nicht gerendert. Der Plot streckt sich auch nicht mehr, um die weit entfernten Punkte aufzunehmen, so dass Box und Whisker leichter zu lesen sind.

Wählen Sie diese Option, wenn die Ausreißer gültige Daten sind und Ihr Ziel die Darstellung ist — zum Beispiel, wenn einige wenige Extremwerte den Rest des Plots zusammendrücken. An Ihrem Datensatz oder Ihren Statistiken ändert sich nichts, so dass es nichts Zusätzliches zu rechtfertigen oder offenzulegen gibt.

Ausreißerwerte nur entfernen oder begrenzen, wenn die Analyse es erfordert

Manchmal muss sich die Analyse selbst ändern — nicht nur das Bild: ein Sensorfehler, ein Dateneingabefehler oder ein Modell, das durch eine Handvoll Extremwerte verzerrt wird. Nur dann sollten Sie die Werte verändern, und die Statistiken, die Sie danach berichten, müssen auf den veränderten Daten berechnet und als solche beschrieben werden.

Um die Ausreißer zu entfernen, filtern Sie mit denselben Zäunen, die Seaborn verwendet (nicht mit den Quartilwerten selbst — ein Filtern auf den Bereich zwischen Q1 und Q3 würde auf jeder Seite ein Viertel Ihrer gültigen Daten verwerfen):

q1 = TIPS["total_bill"].quantile(0.25)
q3 = TIPS["total_bill"].quantile(0.75)
iqr = q3 - q1

filtered = TIPS[(TIPS["total_bill"] >= q1 - 1.5 * iqr) & (TIPS["total_bill"] <= q3 + 1.5 * iqr)]
sb.boxplot(x=filtered["total_bill"])
plt.show()

Um die Ausreißer stattdessen zu begrenzen (zu winsorisieren) — jede Zeile zu behalten, aber die Extremwerte an die Zäune zu ziehen — verwenden Sie clip:

capped = TIPS["total_bill"].clip(lower=q1 - 1.5 * iqr, upper=q3 + 1.5 * iqr)
sb.boxplot(x=capped)
plt.show()

Ausgabe:

Boxplot of capped values

Beide Operationen verändern die Daten: Das Entfernen lässt die 9 größten Rechnungen vollständig weg, und das Begrenzen schreibt sie auf 40,30 um. Verwenden Sie sie, wenn Sie einen Grund haben, diesen Werten zu misstrauen oder sie zu begrenzen — und wenn Sie nur ein saubereres Diagramm wollten, kehren Sie zu showfliers=False zurück und lassen Sie die Daten in Ruhe.