Wenn man mit einem neuen Datensatz beginnt, ist es zunächst wichtig, ihn zu verstehen. Dazu gehört zum Beispiel, die Wertebereiche der Variablen, ihre Typen sowie die Anzahl der fehlenden Werte zu ermitteln.
Die Bibliothek pandas bietet uns viele nützliche Werkzeuge zur Durchführung von Explorative Data Analysis (EDA). Bevor man diese jedoch nutzt, sollte man in der Regel mit allgemeinen Funktionen wie df.describe() beginnen. Es ist darauf hinzuweisen, dass die Möglichkeiten solcher Funktionen eingeschränkt sind und die ersten Schritte mit Datensätzen bei der EDA häufig sehr ähnlich sind.
Der Autor des Materials, das wir heute veröffentlichen, sagt, dass er kein Freund sich wiederholender Tätigkeiten ist. Daher fand er in seiner Suche nach Mitteln zur schnellen und effizienten Durchführung von Explorativen Datenanalysen die Bibliothek . Die Ergebnisse ihrer Arbeit werden nicht als einzelne Kennzahlen dargestellt, sondern in Form eines ziemlich detaillierten HTML-Berichts, der einen Großteil der Informationen über die analysierten Daten enthält, die man wissen sollte, bevor man mit einer tiefergehenden Arbeit beginnt.
Hier werden die Besonderheiten der Verwendung der Bibliothek pandas-profiling anhand des Datensatzes Titanic behandelt.
Explorative Datenanalyse mit pandas
Ich habe beschlossen, mit pandas-profiling am Datensatz Titanic zu experimentieren, weil er verschiedene Datenarten enthält und fehlende Werte aufweist. Ich glaube, dass die Bibliothek pandas-profiling besonders interessant ist, wenn die Daten noch nicht gereinigt sind und eine weitere Verarbeitung erfordern, die von ihren Eigenschaften abhängt. Um eine solche Verarbeitung erfolgreich durchzuführen, muss man wissen, wo man anfangen soll und worauf man achten muss. Hier kommen die Funktionen von pandas-profiling ins Spiel.
Zunächst importieren wir die Daten und nutzen pandas, um die Kennzahlen der deskriptiven Statistik zu erhalten:
# импорт необходимых пакетов
import pandas as pd
import pandas_profiling
import numpy as np
# импорт данных
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')
# вычисление показателей описательной статистики
df.describe()Nach der Ausführung dieses Codeabschnitts erhalten wir das, was im nächsten Bild gezeigt wird.

Die mit den Standardmitteln von pandas erhaltenen Kennzahlen der deskriptiven Statistik.
Obwohl hier viele nützliche Informationen enthalten sind, fehlt es an allem, was interessant zu erfahren wäre über die untersuchten Daten. Zum Beispiel kann man annehmen, dass im Datenrahmen, in der Struktur DataFrame, 891 Zeilen vorhanden sind. Wenn das überprüft werden muss, ist eine weitere Codezeile erforderlich, die die Größe des Rahmens definiert. Obwohl diese Berechnungen nicht besonders ressourcenintensiv sind, wird eine ständige Wiederholung zwangsläufig zu einem Zeitverlust führen, den man besser in die Datenbereinigung investieren könnte.
Explorative Datenanalyse mit pandas-profiling
Jetzt machen wir dasselbe mit pandas-profiling:
pandas_profiling.ProfileReport(df)Die Ausführung der obigen Codezeile ermöglicht es, einen Bericht mit den Kennzahlen der explorativen Datenanalyse zu erstellen. Der oben angegebene Code wird Informationen über die Daten ausgeben, aber man kann es so einrichten, dass ein HTML-Dokument entsteht, das man zum Beispiel jemandem zeigen kann.
Der erste Teil des Berichts wird den Abschnitt Übersicht (Overview) enthalten, der grundlegende Informationen über die Daten liefert (Anzahl der Beobachtungen, Anzahl der Variablen usw.). Außerdem wird er eine Liste von Warnungen enthalten, die den Analysten darüber informiert, worauf man besonderes Augenmerk legen sollte. Diese Warnungen können als Hinweise dienen, worauf man sich bei der Datenbereinigung konzentrieren sollte.

Der Abschnitt Bericht Übersicht
Explorative Analyse der Variablen
Hinter dem Abschnitt Übersicht im Bericht findet man nützliche Informationen zu jeder Variablen. Diese enthalten unter anderem kleine Diagramme, die die Verteilung jeder Variablen abbilden.

Informationen zur numerischen Variable Age
Wie aus dem vorherigen Beispiel hervorgeht, bietet uns pandas-profiling einige nützliche Indikatoren, wie den Prozentsatz und die Anzahl der fehlenden Werte sowie Kennzahlen zur beschreibenden Statistik, die wir bereits gesehen haben. Da Age eine numerische Variable ist, lässt sich durch die Visualisierung ihrer Verteilung in Form von Histogrammen ableiten, dass es sich um eine rechts-schiefes Verteilung handelt.
Bei der Betrachtung einer kategorialen Variablen weichen die ausgegebenen Kennzahlen etwas von denen ab, die für die numerische Variable gefunden wurden.

Informationen zur kategorialen Variablen Sex
Das heißt, anstelle der Ermittlung von Durchschnitt, Minimum und Maximum hat die Bibliothek pandas-profiling die Anzahl der Klassen gefunden. Da Geschlecht — eine binäre Variable, deren Werte zwei Klassen repräsentieren.
Wenn Sie, wie ich, gerne Code erkunden, könnte Sie interessieren, wie die Bibliothek pandas-profiling diese Kennzahlen berechnet. Es ist nicht allzu schwierig, dies herauszufinden, da der Code der Bibliothek offen und auf GitHub verfügbar ist. Da ich kein großer Fan von „Black Boxes“ in meinen Projekten bin, habe ich einen Blick in den Quellcode der Bibliothek geworfen. Zum Beispiel sieht der Mechanismus zur Verarbeitung numerischer Variablen, dargestellt durch die Funktion :
def describe_numeric_1d(series, **kwargs):
"""Berechne Zusammenfassungsstatistiken einer numerischen (`TYPE_NUM`) Variable (einer Serie).
Erstelle auch Histogramme (mini und voll) ihrer Verteilung.
Parameter
----------
series : Series
Die zu beschreibende Variable.
Rückgabewert
-------
Series
Die Beschreibung der Variable als Series mit Index der Statistiken.
"""
# Formatiere eine Zahl als Prozentsatz. Beispielsweise wird 0,25 zu 25%.
_percentile_format = "{:.0%}"
stats = dict()
stats['type'] = base.TYPE_NUM
stats['mean'] = series.mean()
stats['std'] = series.std()
stats['variance'] = series.var()
stats['min'] = series.min()
stats['max'] = series.max()
stats['range'] = stats['max'] - stats['min']
# Um zu vermeiden, dass es mehrmals berechnet wird
_series_no_na = series.dropna()
for percentile in np.array([0.05, 0.25, 0.5, 0.75, 0.95]):
# Der Dropna() ist ein Workaround für https://github.com/pydata/pandas/issues/13098
stats[_percentile_format.format(percentile)] = _series_no_na.quantile(percentile)
stats['iqr'] = stats['75%'] - stats['25%']
stats['kurtosis'] = series.kurt()
stats['skewness'] = series.skew()
stats['sum'] = series.sum()
stats['mad'] = series.mad()
stats['cv'] = stats['std'] / stats['mean'] if stats['mean'] else np.NaN
stats['n_zeros'] = (len(series) - np.count_nonzero(series))
stats['p_zeros'] = stats['n_zeros'] * 1.0 / len(series)
# Histogramme
stats['histogram'] = histogram(series, **kwargs)
stats['mini_histogram'] = mini_histogram(series, **kwargs)
return pd.Series(stats, name=series.name) Obwohl dieser Codeabschnitt auf den ersten Blick relativ groß und komplex erscheinen mag, ist er tatsächlich sehr einfach zu verstehen. Es handelt sich um eine Funktion im Quellcode der Bibliothek, die die Typen der Variablen bestimmt. Wenn festgestellt wird, dass die Bibliothek auf eine numerische Variable trifft, findet die oben genannte Funktion die Kennzahlen, die wir betrachtet haben. In dieser Funktion werden die Standardoperationen von pandas für die Arbeit mit Objekten des Typs Series, etwa series.mean(). Die Ergebnisse der Berechnungen werden in einem Dictionary gespeichert, stats. Histogramme werden unter Verwendung einer angepassten Version der Funktion matplotlib.pyplot.hist. Die Anpassung zielt darauf ab, dass die Funktion mit verschiedenen Datensatztypen arbeiten kann.
Korrelationskennzahlen und Beispiel der untersuchten Daten
Nach den Ergebnissen der Analyse der Variablen pandas-profiling wird im Abschnitt Korrelationen die Korrelationsmatrix von Pearson und Spearman ausgegeben.

Korrelationsmatrix von Pearson
Falls erforderlich, können Sie in der Zeile Code, die die Berichtserstellung startet, die Grenzwerte festlegen, die bei der Berechnung der Korrelation verwendet werden. Damit können Sie angeben, welche Stärke der Korrelation für Ihre Analyse als bedeutend angesehen wird.
Und schließlich wird im Bericht von pandas-profiling im Abschnitt Beispiel ein Ausschnitt der Daten gezeigt, der zu Beginn des Datensatzes entnommen wurde. Diese Vorgehensweise kann zu unangenehmen Überraschungen führen, da die ersten Beobachtungen eine Stichprobe darstellen können, die die Merkmale des gesamten Datensatzes nicht widerspiegelt.

Abschnitt mit einem Beispiel der untersuchten Daten
Daher empfehle ich, auf diesen letzten Abschnitt nicht zu achten. Es ist besser, den Befehl df.sample(5), der zufällig 5 Beobachtungen aus dem Datensatz auswählt, zu verwenden.
Ergebnisse
Zusammenfassend lässt sich sagen, dass die Bibliothek pandas-profiling den Analysten nützliche Funktionen bietet, die hilfreich sind, wenn man schnell einen allgemeinen Überblick über die Daten erhalten oder jemandem einen Bericht über die Erkundungsanalyse der Daten übergeben möchte. Dabei erfolgt die eigentliche Arbeit mit den Daten, die ihre Besonderheiten berücksichtigt, wie auch ohne Verwendung von pandas-profiling manuell.
Wenn Sie sehen möchten, wie die gesamte Erkundungsanalyse der Daten in einem Jupyter-Notebook aussieht – schauen Sie sich mein Projekt, das mit nbviewer erstellt wurde, an. In dem GitHub-Repository finden Sie den entsprechenden Code.
Liebe Leser! Womit beginnen Sie die Analyse neuer Datensätze?
Quelle: habr.com
