Beschleunigen Sie die explorative Datenanalyse mithilfe der Pandas-Profiling-Bibliothek

Der erste Schritt, wenn Sie beginnen, mit einem neuen Datensatz zu arbeiten, besteht darin, ihn zu verstehen. Dazu müssen Sie beispielsweise die von den Variablen akzeptierten Wertebereiche und deren Typen sowie die Anzahl der fehlenden Werte ermitteln.

Die Pandas-Bibliothek bietet uns viele nützliche Tools für die Durchführung explorativer Datenanalysen (EDA). Aber bevor Sie sie verwenden, müssen Sie normalerweise mit allgemeineren Funktionen wie df.describe() beginnen. Es ist jedoch zu beachten, dass die von solchen Funktionen bereitgestellten Möglichkeiten begrenzt sind und die Anfangsphasen der Arbeit mit beliebigen Datensätzen bei der Durchführung von EDA sehr oft sehr ähnlich sind.

Beschleunigen Sie die explorative Datenanalyse mithilfe der Pandas-Profiling-Bibliothek

Der Autor des Materials, das wir heute veröffentlichen, sagt, dass er kein Fan von sich wiederholenden Aktionen ist. Auf der Suche nach Werkzeugen zur schnellen und effizienten Durchführung explorativer Datenanalysen stieß er auf die Bibliothek Pandas-Profilerstellung. Die Ergebnisse seiner Arbeit werden nicht in Form bestimmter einzelner Indikatoren ausgedrückt, sondern in Form eines ziemlich detaillierten HTML-Berichts, der die meisten Informationen zu den analysierten Daten enthält, die Sie möglicherweise wissen müssen, bevor Sie mit der genaueren Arbeit damit beginnen.

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

Explorative Datenanalyse mit Pandas

Ich habe beschlossen, mit Pandas-Profiling für den Titanic-Datensatz zu experimentieren, da darin verschiedene Datentypen enthalten sind und darin fehlende Werte vorhanden sind. Ich glaube, dass die Pandas-Profiling-Bibliothek besonders in Fällen interessant ist, in denen die Daten noch nicht bereinigt wurden und je nach ihren Eigenschaften eine weitere Verarbeitung erfordern. Um eine solche Verarbeitung erfolgreich durchführen zu können, müssen Sie wissen, wo Sie beginnen und worauf Sie achten müssen. Hier kommen die Pandas-Profiling-Funktionen zum Einsatz.

Zuerst importieren wir die Daten und verwenden Pandas, um beschreibende 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 dargestellt ist.

Beschleunigen Sie die explorative Datenanalyse mithilfe der Pandas-Profiling-Bibliothek
Beschreibende Statistiken, die mit Standard-Pandas-Tools erstellt wurden

Obwohl es hier viele nützliche Informationen gibt, enthält es nicht alles, was über die untersuchten Daten interessant wäre. Beispielsweise könnte man das in einem Datenrahmen, in einer Struktur annehmen DataFrame, es gibt 891 Zeilen. Wenn dies überprüft werden muss, ist eine weitere Codezeile erforderlich, um die Größe des Rahmens zu bestimmen. Obwohl diese Berechnungen nicht besonders ressourcenintensiv sind, verschwendet ihre ständige Wiederholung zwangsläufig Zeit, die wahrscheinlich besser für die Bereinigung der Daten aufgewendet werden könnte.

Explorative Datenanalyse mittels Pandas-Profiling

Machen wir nun dasselbe mit Pandas-Profiling:

pandas_profiling.ProfileReport(df)

Durch Ausführen der obigen Codezeile wird ein Bericht mit Indikatoren für die explorative Datenanalyse generiert. Der oben gezeigte Code gibt die gefundenen Daten aus, Sie können ihn aber auch als HTML-Datei ausgeben lassen, die Sie beispielsweise jemandem zeigen können.

Der erste Teil des Berichts enthält einen Übersichtsabschnitt mit grundlegenden Informationen zu den Daten (Anzahl der Beobachtungen, Anzahl der Variablen usw.). Es enthält außerdem eine Liste mit Warnmeldungen, die den Analysten auf Dinge hinweisen, auf die er besonders achten muss. Diese Warnungen können Hinweise darauf geben, worauf Sie Ihre Datenbereinigungsbemühungen konzentrieren können.

Beschleunigen Sie die explorative Datenanalyse mithilfe der Pandas-Profiling-Bibliothek
Abschnitt „Übersichtsbericht“.

Explorative Variablenanalyse

Unterhalb des Abschnitts „Übersicht“ des Berichts finden Sie nützliche Informationen zu jeder Variablen. Dazu gehören unter anderem kleine Diagramme, die die Verteilung der einzelnen Variablen beschreiben.

Beschleunigen Sie die explorative Datenanalyse mithilfe der Pandas-Profiling-Bibliothek
Über die numerische Variable „Alter“.

Wie Sie dem vorherigen Beispiel entnehmen können, liefert uns Pandas-Profiling mehrere nützliche Indikatoren, wie z. B. den Prozentsatz und die Anzahl fehlender Werte sowie die deskriptiven Statistikmaße, die wir bereits gesehen haben. Als Age eine numerische Variable ist, lässt die Visualisierung ihrer Verteilung in Form eines Histogramms den Schluss zu, dass es sich um eine rechtsschiefe Verteilung handelt.

Bei der Betrachtung einer kategorialen Variablen unterscheiden sich die Ausgabeergebnisse geringfügig von denen einer numerischen Variablen.

Beschleunigen Sie die explorative Datenanalyse mithilfe der Pandas-Profiling-Bibliothek
Über die kategoriale Variable „Geschlecht“.

Anstatt nämlich den Durchschnitt, das Minimum und das Maximum zu ermitteln, ermittelte die Pandas-Profiling-Bibliothek die Anzahl der Klassen. Als Sex — eine binäre Variable, deren Werte durch zwei Klassen dargestellt werden.

Wenn Sie wie ich Code untersuchen möchten, könnte es Sie interessieren, wie genau die Pandas-Profiling-Bibliothek diese Metriken berechnet. Da der Bibliothekscode offen und auf GitHub verfügbar ist, ist es nicht so schwierig, dies herauszufinden. Da ich kein großer Fan davon bin, Black Boxes in meinen Projekten zu verwenden, habe ich mir den Quellcode der Bibliothek angeschaut. So sieht beispielsweise der Mechanismus zur Verarbeitung numerischer Variablen aus, dargestellt durch die Funktion beschreiben_numerisch_1d:

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 Codeabschnitt recht umfangreich und komplex erscheinen mag, ist er tatsächlich sehr einfach zu verstehen. Der Punkt ist, dass es im Quellcode der Bibliothek eine Funktion gibt, die die Typen von Variablen bestimmt. Wenn sich herausstellt, dass die Bibliothek auf eine numerische Variable gestoßen ist, findet die obige Funktion die gesuchten Metriken. Diese Funktion verwendet Standard-Pandas-Operationen für die Arbeit mit Objekten des Typs Series, wie series.mean(). Berechnungsergebnisse werden in einem Wörterbuch gespeichert stats. Histogramme werden mit einer angepassten Version der Funktion generiert matplotlib.pyplot.hist. Durch die Anpassung soll sichergestellt werden, dass die Funktion mit verschiedenen Arten von Datensätzen arbeiten kann.

Korrelationsindikatoren und Beispieldaten untersucht

Nach den Ergebnissen der Analyse der Variablen zeigt pandas-profiling im Abschnitt „Korrelationen“ die Korrelationsmatrizen von Pearson und Spearman an.

Beschleunigen Sie die explorative Datenanalyse mithilfe der Pandas-Profiling-Bibliothek
Pearson-Korrelationsmatrix

Bei Bedarf können Sie in der Codezeile, die die Generierung des Berichts auslöst, die Indikatoren der Schwellenwerte festlegen, die bei der Berechnung der Korrelation verwendet werden. Auf diese Weise können Sie angeben, welche Korrelationsstärke für Ihre Analyse als wichtig erachtet wird.

Schließlich zeigt der Pandas-Profiling-Bericht im Abschnitt „Beispiel“ als Beispiel ein Datenelement vom Anfang des Datensatzes an. Dieser Ansatz kann zu unangenehmen Überraschungen führen, da die ersten paar Beobachtungen möglicherweise eine Stichprobe darstellen, die nicht die Eigenschaften des gesamten Datensatzes widerspiegelt.

Beschleunigen Sie die explorative Datenanalyse mithilfe der Pandas-Profiling-Bibliothek
Abschnitt mit untersuchten Beispieldaten

Daher empfehle ich nicht, diesem letzten Abschnitt Beachtung zu schenken. Stattdessen ist es besser, den Befehl zu verwenden df.sample(5), wodurch zufällig 5 Beobachtungen aus dem Datensatz ausgewählt werden.

Ergebnisse

Zusammenfassend lässt sich sagen, dass die Pandas-Profiling-Bibliothek dem Analysten einige nützliche Funktionen bietet, die sich in Fällen als nützlich erweisen, in denen Sie sich schnell einen ungefähren Überblick über die Daten verschaffen oder einen Geheimdienstanalysebericht an jemanden weitergeben müssen. Gleichzeitig erfolgt die eigentliche Arbeit mit Daten unter Berücksichtigung ihrer Merkmale manuell, also ohne Verwendung von Pandas-Profiling.

Wenn Sie einen Blick darauf werfen möchten, wie die gesamte Analyse von Geheimdienstdaten in einem Jupyter-Notebook aussieht, werfen Sie einen Blick auf diese Mein Projekt wurde mit nbviewer erstellt. Und in Dies Den entsprechenden Code finden Sie in GitHub-Repositories.

Liebe Leser! Wo beginnen Sie mit der Analyse neuer Datensätze?

Beschleunigen Sie die explorative Datenanalyse mithilfe der Pandas-Profiling-Bibliothek

Source: habr.com

Kommentar hinzufügen