Mit Pandas-Profiling schnell einen Datenüberblick gewinnen

Jeder kennt es, wenn man mit neuen Datensätzen arbeitet muss sich zu erst ein Überblick über die vorhandenen Datensätze gewonnen werden. Häufig werden dabei verschiedene Tests durchgeführt um den Umfang, die Verteilung der Daten sowie fehlerhafte Datensätze, Null Werte oder auch sogar Korrelationen zwischen Variablen zu entdecken. Häufig übersieht man dabei etwas oder vergisst eine wichtige Info die den weiteren Data Science Prozess aufhält oder sogar zu falschen Annahmen führt. Anfang 2020 bin ich im Rahmen meines Jobs auf die Python Bibliothek „Pandas-Profiling“ aufmerksam geworden, welche dem Data Scientisten viele dieser Aufgaben erleichtert.

In diesem Blogartikel möchte ich diese Bibliothek und die Möglichkeiten etwas näher betrachten. Im ersten Teil möchte ich darauf eingehen, wie man mit der Anaconda Distribution oder dem klassischen PIP Tool die Bibliothe herunterlädt und wie sie genutzt werden kann. Im Zweiten Teil werde ich erklären wie man mit wenigen Zeilen Code eine ausführliche HTML Datei erzeugt, welche Einblicke in den vorliegenden Datensatz ermöglicht.

Also fangen wir an…

Bevor ich die Bibliothek bzw. das Package nutzen kann muss diese erst installiert werden. Dabei wollte ich wie gewohnt mit einem der beiden Befehle über die Kommandozeile dieses Package installieren.

conda install -c anaconda pandas-profiling

pip install pandas-profiling

In beiden Fällen wird Pandas-Profiling zwar installiert aber nur mit der Version 1.4.1. Aktuell ist die neueste Version allerdings bei 2.8.0. Auch nach dem Aufrufen des Update Befehls wurde die Version nicht auf die neueste Version geupdatet. Da Pandas aber bei mir bereits mit Version 1.x installiert ist sind die beiden Bibliotheken nicht miteinander kompatibel. Erst als ich mit Pip die genaue Version angegeben habe, wurde auch die aktuellste Version von Pandas-Profiling installiert.

pip install pandas-profiling==2.8.0

Dann habe ich wie gewohnt meine Jupyter Umgebung gestartet, welche direkt mithilfe des standardmäßigen Microsoft Edge mein Jupyter Notebook öffnet. Hier ist dann das nächste Problem aufgekommen. Beim ausführen der entsprechenden Codezeile wurden zwar die Daten geladen. Aber die Übersicht konnte ich mir nicht Inline anzeigen lassen.

Edge not working

Nachdem ich dies über ein entsprechendes Token in Chrome geöffnet habe konnte ich mir allerdings endlich einen Überblick über den ausgewählten Datensatz verschaffen. Darum empfehle ich in Zukunft die Nutzung von Chrome oder Firefox als Standard Browser für die Jupyter Notebooks.

Damit haben wir nun die Bibliothek installiert und möchten nun unseren ersten Datensatz anlegen. Womit wir bei Teil II des Artikels sind…

Wie immer müssen wir zu Beginn unsere benötigten Bibliotheken laden und dann den zu analysierenden Datensatz in das Notebook laden.

import pandas as pd
import numpy as np
import pandas_profiling

df = pd.read_csv('Pfad zur Datei', sep=';')

Ich habe zum testen einen Datensatz den ich während meines Bachelors Studiums erzeugt habe verwendet. Dieser enthält Daten von Newsseiten und ein paar bereits berechnete zusätzliche Spalten.

profiling_head
Übersicht Datensatz

Mit dem Befehl .head() können wir uns die ersten Zeilen anzeigen lassen. mit dem Befehl .describe() kriegen wir eine erste Einsicht in die Datenstruktur allerdings nur bei den numerischen Werten.

# ersten Zeilen anzeigen lassen
df.head()

# Einfacher Überblick über Datenstruktur
df.describe()

Nun wollen wir aber eine gesamte Übersicht des Datensatzes bekommen und auch eventuelle Zusammenhänge zwischen bestimmten Daten herausfinden. Dafür nutzen wir einfach die Funktion .ProfileReport(). Diese Funktion erzeugt eine HTML Datei und zeigt die Ergebnisse auch direkt Inline in Jupyter an, durch die man entsprechend navigieren kann.

pandas_profiling.ProfileReport(df)

So gibt es zu Beginn eine Overview zum Datensatz. In dieser können Informationen zur Anzahl der Datensätze etc. gewonnen werden. So kann auf einem Blick die Anzahl der Kategorischen Spalten oder Numerischen Werte herausgefunden werden. Unter dem Reiter Warnings findet man nützliche Informationen zu den Daten in den Spalten.

overview profiling

Zum Beispiel ob Spalten eindeutige Werte enthalten oder zwischen bestimmten Spaltenwerten eine hohe Korrelation besteht.

Warnings profiling

Diese einzelnen Variablen lassen sich unter Variables nochmal im Detail analysieren. Dazu lassen sich neben allgemeiner Kennzahlen zu der Spalte auch weitere Informationen der Deskriptiven Statistik einblenden oder die häufigsten Werte bzw. die extrem Werte in der Spalte analysieren.

Variablen Profiling

Auch die Korrelationen zwischen den Spalten lassen sich im Detail untersuchen. Pearsons Korrelationskoeffzient, welcher Lineare Zusammenhänge zwischen zwei Variablen prüft wird ebenso Auch für rein nominale Werte gibt es Cramers V, welches auf Chi² basiert und den Zusammenhang zwischen zwei nominalbasierten Spalten darstellt. 

Wir können also mit Pandas Profiling sehr schnell wesentlich mehr Informationen bekommen also mit Describe oder wenn wir diese Dinge selbst hätten herausfinden müssen. Gerade wenn wir noch gar nichts über Inhalt und Art der Daten wissen ist Pandas Profiling ein sehr mächtiges Werkzeug um mit der Arbeit an den Daten zu beginnen und sich einen Überblick zu verschaffen.