Beschleunigung der Datenexploration mithilfe der Pandas-Profiling-Bibliothek

Wenn Sie mit einem neuen Datensatz beginnen möchten, müssen Sie ihn zunächst verstehen. Dazu ist es beispielsweise erforderlich, die von den Variablen akzeptierten Wertebereiche und deren Typen herauszufinden und die Anzahl der fehlenden Werte zu ermitteln.

Die Pandas-Bibliothek bietet uns viele nützliche Tools für die Durchführung von Exploratory Data Analysis (EDA). Bevor Sie sie jedoch verwenden können, müssen Sie normalerweise mit allgemeineren Funktionen wie df.describe () beginnen. Es ist anzumerken, dass die Möglichkeiten, die solche Funktionen bieten, begrenzt sind und die Anfangsphasen der Arbeit mit Datensätzen während der EDA sehr oft sehr ähnlich sind.



Der Autor des Materials, das wir heute veröffentlichen, sagt, dass er kein Fan von sich wiederholenden Aktionen ist. Auf der Suche nach Tools zur schnellen und effizienten Durchführung explorativer Datenanalysen fand er die Pandas-Profiling- Bibliothek. Die Ergebnisse ihrer Arbeit werden nicht in Form bestimmter Einzelindikatoren ausgedrückt, sondern in Form eines ziemlich detaillierten HTML-Berichts, der die meisten Informationen zu den zu analysierenden Daten enthält, die Sie möglicherweise kennen müssen, bevor Sie enger mit ihnen zusammenarbeiten können.

Hier werden die Funktionen der Verwendung der Pandas-Profiling-Bibliothek am Beispiel des Titanic-Datensatzes betrachtet.

Pandas Explorationsdatenanalyse


Ich habe mich entschlossen, mit Pandas-Profiling für den Titanic-Datensatz zu experimentieren, da er Daten verschiedener Typen enthält und weil darin Werte fehlen. Ich glaube, dass die Pandas-Profiling-Bibliothek besonders in Fällen interessant ist, in denen die Daten noch nicht gelöscht wurden und abhängig von ihren Funktionen eine weitere Verarbeitung erfordern. Um eine solche Verarbeitung erfolgreich durchführen zu können, müssen Sie wissen, wo Sie beginnen und wonach Sie suchen müssen. Hier bieten sich Funktionen zur Erstellung von Pandas-Profilen an.

Zu Beginn importieren wir die Daten und verwenden Pandas, um Indikatoren für deskriptive Statistiken 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() 

Nachdem Sie diesen Code ausgeführt haben, erhalten Sie das, was in der folgenden Abbildung gezeigt wird.


Beschreibende Statistikmetriken mit Standard-Pandas-Tools

Obwohl es viele nützliche Informationen enthält, gibt es nicht alles, was interessant wäre, um mehr über die untersuchten Daten zu erfahren. Beispielsweise können wir davon ausgehen, dass im DataFrame in der DataFrame Struktur 891 DataFrame vorhanden sind. Wenn Sie dies überprüfen müssen, benötigen Sie eine weitere Codezeile, die die Größe des Frames bestimmt. Obwohl diese Berechnungen nicht besonders ressourcenintensiv sind, führt ihre ständige Wiederholung zwangsläufig zu Zeitverlust, der wahrscheinlich besser für die Datenbereinigung aufgewendet wird.

Explorative Datenanalyse mit Pandas-Profiling


Machen Sie jetzt dasselbe mit Pandas-Profiling:

 pandas_profiling.ProfileReport(df) 

Durch die Implementierung der obigen Codezeile können Sie einen Bericht mit Indikatoren für die explorative Datenanalyse erstellen. Der oben gezeigte Code führt zum Abschluss der gefundenen Dateninformationen, kann jedoch so ausgeführt werden, dass das Ergebnis eine HTML-Datei ist, die beispielsweise jemandem angezeigt werden kann.

Der erste Teil des Berichts enthält den Abschnitt Übersicht, der grundlegende Informationen zu den Daten enthält (Anzahl der Beobachtungen, Anzahl der Variablen usw.). Darüber hinaus enthält es eine Liste von Warnungen, die den Analysten darüber informieren, worauf Sie besonders achten sollten. Diese Warnungen können ein Hinweis darauf sein, wo Sie Ihre Bemühungen bei der Bereinigung Ihrer Daten konzentrieren können.


Übersicht über den Berichtsabschnitt

Explorative Variablenanalyse


Hinter dem Abschnitt Übersicht des Berichts finden Sie nützliche Informationen zu jeder Variablen. Dazu gehören unter anderem kleine Diagramme, die die Verteilung jeder Variablen beschreiben.


Informationen zu numerischen Altersvariablen

Wie Sie dem vorherigen Beispiel entnehmen können, liefert uns die Pandas-Profilerstellung einige nützliche Indikatoren, wie z. B. den Prozentsatz und die Anzahl fehlender Werte sowie Indikatoren für beschreibende Statistiken, die wir bereits gesehen haben. Da das Age eine numerische Variable ist, können wir durch die Visualisierung ihrer Verteilung in Form eines Histogramms den Schluss ziehen, dass wir eine rechtwinklige Verteilung haben.

Bei der Betrachtung einer kategorialen Variablen unterscheiden sich die angezeigten Indikatoren geringfügig von denen für die numerische Variable.


Informationen zu kategorialen Geschlechtsvariablen

Anstatt den Durchschnitt, das Minimum und das Maximum zu ermitteln, hat die Pandas-Profiling-Bibliothek die Anzahl der Klassen ermittelt. Da Sex eine binäre Variable ist, werden ihre Werte durch zwei Klassen dargestellt.

Wenn Sie wie ich den Code recherchieren möchten, könnte Sie interessieren, wie genau die Pandas-Profiling-Bibliothek diese Indikatoren berechnet. Dies zu wissen, da der Bibliothekscode offen und auf GitHub verfügbar ist, ist nicht so schwierig. Da ich kein großer Fan von „Black Boxes“ in meinen Projekten bin, habe ich mir den Quellcode der Bibliothek angesehen. Hier ist zum Beispiel der Mechanismus zum Verarbeiten von numerischen Variablen, die durch die Funktion description_numeric_1d dargestellt werden:

 def describe_numeric_1d(series, **kwargs):   """Compute summary statistics of a numerical (`TYPE_NUM`) variable (a Series).   Also create histograms (mini an full) of its distribution.   Parameters   ----------   series : Series       The variable to describe.   Returns   -------   Series       The description of the variable as a Series with index being stats keys.   """   # Format a number as a percentage. For example 0.25 will be turned to 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']   # To avoid to compute it several times   _series_no_na = series.dropna()   for percentile in np.array([0.05, 0.25, 0.5, 0.75, 0.95]):       # The dropna() is a workaround for 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)   # Histograms   stats['histogram'] = histogram(series, **kwargs)   stats['mini_histogram'] = mini_histogram(series, **kwargs)   return pd.Series(stats, name=series.name) 

Obwohl dieser Code ziemlich groß und komplex erscheint, ist es in der Tat sehr einfach, ihn zu verstehen. Der Punkt ist, dass es im Quellcode der Bibliothek eine Funktion gibt, die die Arten von Variablen bestimmt. Wenn sich herausstellt, dass die Bibliothek eine numerische Variable erfüllt, findet die obige Funktion die Indikatoren, die wir berücksichtigt haben. Diese Funktion verwendet Standard-Pandas-Operationen für die Arbeit mit Objekten vom Typ " Series " wie " series.mean() . Die Berechnungsergebnisse werden im stats gespeichert. Histogramme werden mit einer angepassten Version der Funktion matplotlib.pyplot.hist . Die Anpassung soll es der Funktion ermöglichen, mit verschiedenen Arten von Datensätzen zu arbeiten.

Korrelationsindikatoren und Stichprobe der untersuchten Daten


Nach den Ergebnissen der Variablenanalyse zeigt das Pandas-Profiling im Abschnitt Korrelationen die Pearson- und Spearman-Korrelationsmatrizen an.


Pearson-Korrelationsmatrix

Bei Bedarf können in der Codezeile, mit der die Berichterstellung beginnt, die für die Berechnung der Korrelation verwendeten Schwellenwerte festgelegt werden. Auf diese Weise können Sie angeben, welche Korrelationsstärke für Ihre Analyse als wichtig angesehen wird.

Schließlich zeigt der Pandas-Profiling-Bericht im Abschnitt Beispiel als Beispiel ein Datenelement an, das vom Anfang des Datensatzes stammt. Dieser Ansatz kann zu unangenehmen Überraschungen führen, da die ersten Beobachtungen eine Stichprobe sein können, die nicht die Merkmale des gesamten Datensatzes widerspiegelt.


Abschnitt mit Beispieldaten

Aus diesem Grund empfehle ich nicht, diesen letzten Abschnitt zu beachten. Verwenden Sie stattdessen besser den df.sample(5) , mit dem zufällig 5 Fälle aus dem Datensatz ausgewählt werden.

Zusammenfassung


Zusammenfassend lässt sich feststellen, dass die Pandas-Profiling-Bibliothek dem Analysten einige nützliche Funktionen bietet, die in den Fällen nützlich sind, in denen Sie sich schnell einen Überblick über die Daten verschaffen oder jemandem einen Bericht über die Analyse von Nachrichtendaten senden müssen. Gleichzeitig wird die eigentliche Arbeit mit Daten unter Berücksichtigung ihrer Merkmale wie ohne Verwendung von Pandas-Profiling manuell durchgeführt.

Wenn Sie einen Blick darauf werfen möchten, wie die gesamte Intelligenzanalyse von Daten in einem Jupyter-Notizbuch aussieht, schauen Sie sich dieses mit nbviewer erstellte Projekt an. Und in diesem GitHub-Repository finden Sie den entsprechenden Code.

Liebe Leser! Wie fangen Sie an, neue Datensätze zu analysieren?

Source: https://habr.com/ru/post/de451478/


All Articles