Zum Hauptinhalt springen

Python in Power BI

Microsoft Power BI ist eines der beliebtesten BI-Tools am Markt und bietet zahlreiche Möglichkeiten, Daten aufzubereiten und zu visualisieren. Um noch mehr Flexibilität zu schaffen, kannst Du zusätzlich durch die Nutzung von Python- und R-Skripten die Standardfunktionen umfangreich erweitern. Wie Du Python-Skripte einbindest, was damit möglich und was zu beachten ist, zeigen wir Dir in diesem Beitrag.

Vorbereitung ist die halbe Miete: Basics und Voraussetzungen

Die Grundvoraussetzung ist – wenig überraschend – die Installation von Python. Außerdem musst Du mindestens die Pakete Pandas und Matplotlib installiert haben. Das funktioniert sowohl in der virtuellen Umgebung als auch in der Konsole mit

pip install <Paketname>

Nachdem alle Pakete installiert sind, kann der zu verwendende Python-Interpreter in Power BI angegeben werden. Dies erfolgt unter Datei à Optionen à Python Scripting.


Exkurs: Du willst mehr zu den wichtigsten Python-Paketen im Data-Umfeld und deren Anwendung erfahren? Dann klick hier und wirf einen Blick in den Blogbeitrag des Kollegen Stefan Seltmann.


Python-Skripte im Query-Editor

Power BI bietet Dir während der Datenabfrage grundsätzlich zwei Möglichkeiten, ein Python-Skript einzubinden.

  1. Möglichkeit 1: Definition eines Python-Skripts als Datenquelle
    Hier können beliebige Schritte durchgeführt werden. Am Ende muss ein Pandas DataFrame übergeben werden.
  2. Möglichkeit 2: Definition eines Python-Transformationsschritts

Die Datenschnittstelle wird auch hier über Pandas DataFrames realisiert. Das folgende Beispiel zeigt, wie Du eine Transformation mit Python durchführst. Hierfür verwenden wir beispielhaft einen Immobiliendatensatz, der deutschlandweit Mietobjekte und deren spezifische Eigenschaften, wie Wohnraumgröße und Anzahl der Zimmer, beinhaltet. Bitte beachte: Das Beispiel dient der Illustration der Einbindung von Python in Power BI. Es wurde bewusst einfach gehalten, um diesen Fokus nicht zu verlieren. Auf die üblichen Model-Performance-Optimierungen wurde verzichtet.

Als Transformationsschritt soll ein vorhandenes Machine-Learning-Modell geladen werden, das auf Basis dieser Eigenschaften den zu erwartenden Mietpreis prognostiziert.

Nachdem alle vorangehenden Schritte im Query-Editor durchgeführt wurden, kann das Python-Skript als Transformationsschritt gewählt werden.

Der Python-Code für die gewünschte Transformation sieht in etwa wie folgt aus:

# 'dataset' holds the input data for this script

import pickle
import pandas as pd

# Definieren der Features für das Machine-Learning Modell
feat_columns = ["Bundesland", "Alter", "Wohnraum", "Anz_Zimmer", "hatBalkon", "hatAufzug", "hatGarten"]
features = dataset[feat_columns]

#Mappen des Bundeslandes von Reihen- in Spaltendarstellung
dummy_regions = pd.get_dummies(features["Bundesland"])

for dummy in dummy_regions.columns:
    features[dummy] = dummy_regions[dummy]
    
features = features.drop("Bundesland", axis=1)

# Laden des Machine Learning Modells
model = pickle.load(open("<Pfad>/xgboost_model.pickle.dat"))

# Erstellen der Mietpreis-Prognose in neuer Spalte "Kaltmiete"
dataset["Kaltmiete"] = model.predict(features)

# Entfernen der nicht benötigten DataFrame Objekte
dummy_regions = None
features = None

Die Transformation beinhaltet die folgenden Schritte in Python:

  1. Zunächst werden die Pakete pandas und pickle geladen.
  2. Daraufhin werden die Features definiert, die das Modell benötigt, um den Mietpreis zu prognostizieren. Hierfür wird das Format der Bundesländer geändert.
  3. Im Anschluss wird das Modell mit pickle geladen.
  4. Mit dem Machine-Learning-Modell werden die Mietpreise für den gesamten Datensatz prognostiziert.
  5. Schließlich werden alle DataFrames gelöscht, die nicht in Power BI zur Verfügung stehen müssen. So wird eine unnötige Datenübertragung vermieden.

Nach der Anwendung des Skripts steht eine Datentabelle zur Verfügung, die um eine weitere Spalte „Kaltmiete“ ergänzt wurde.

Python-Skripte als Visuals

Möchte man spezielle Plots benutzen oder sehr großen Einfluss auf die Gestaltung des Visuals nehmen, kann es durchaus sinnvoll sein, diese Plots direkt in Python zu erstellen. Die Sprache bietet eine Vielzahl an Bibliotheken wie Matplotlib oder Seaborn, durch die eine immense Bandbreite an unterschiedlichen Plots abgedeckt wird. Diese sind individuell konfigurierbar und lassen sich in Größe, Farbe und Form nach eigenen Wünschen gestalten.

Um Dir das zu demonstrieren, nutzen wir den Immobiliendatensatz, um die Mietpreise Münchens mit denen des restlichen Bayerns zu vergleichen. Hierzu erstellen wir den folgend dargestellten Violinenplot, der die gesamte Preisverteilung für München und Bayern darstellt und zwischen Neubau und Altbau unterscheidet.

Um mit Python eine Grafik zu erstellen, wählst Du das Python-Visual aus. Anders als bei der Python-Transformation müssen hier alle Spalten zu den Werten hinzugefügt werden, die in Python zur Verfügung stehen sollen.

In dem Python-Skript steht ein Pandas-DataFrame-Objekt mit den definierten Spalten zur Verfügung. Wir werden mit Seaborn arbeiten, um die Violinenplots zu erstellen.

Der Code zum generellen Erstellen von Violinenplots sieht wie folgt aus:

# dataset = pandas.DataFrame(Ort, Kaltmiete, istNeubau)
# dataset = dataset.drop_duplicates()

# Paste or type your script code here:
import seaborn as sns
from matplotlib import pyplot as plt
import numpy as np

# anpassen der Schriftgröße und des Plot Designs
sns.set(font_scale=1.3)
sns.set_style("whitegrid")

# Unterscheidung zwischen München und Rest Bayeren in einer neuen Spalte "Kategorie"
mask = dataset["Ort"] == "München"
dataset["Kategorie"] = np.where(mask, "München", "Rest Bayern")

# Erstellen und zeichnen des Plots
ax = sns.violinplot(x="Kategorie", y="Kaltmiete", hue="istNeubau", inner=None, data=dataset, split=True, scale="count")
plt.show()

Was gibt es noch zu wissen?

Publizieren von Berichten mit Python-Skript

Das so weit beschriebene Vorgehen richtet sich an Power BI Desktop. In der Regel werden Power-BI-Reports jedoch nach dem Erstellen auf dem Power BI Service publiziert. Das bedeutet, dass die integrierten Python-Skripte nicht mehr lokal, sondern auf dem Power BI Service ausgeführt werden. Die hier installierte Python-Version kann sich also von der lokalen Version unterscheiden. Eine Auflistung aller aktuell unterstützten Pakete findest Du hier.

Wenn ein Python-Skript im Query-Editor als Transformationsschritt oder Datenquelle genutzt wird und automatisch auf einen aktualisierten Datensatz angewendet werden soll, ist es notwendig, ein Personal Gateway zu verwenden. Auf der Maschine, die das Gateway hostet, müssen Python und die entsprechenden Pakete installiert sein.

Python und große Datensätze

Die Schnittstelle zur Datenübertragung zwischen Power BI und Python basiert auf dem Austausch einer temporär erzeugten CSV-Datei. Diese muss bei jeder Aktualisierung erzeugt, gespeichert und wieder eingelesen werden. Deswegen solltest Du darauf achten, nicht mehr Daten als notwendig nach Python zu laden. Ab einer gewissen Datengröße sollte man Python-Skripte vermeiden.

Fazit

Bevor Du Python in Power BI einbindest, solltest Du prüfen, ob das gewünschte Ziel nicht auch mit fertigen, effizienteren Power-BI-Lösungen umgesetzt werden kann. Außerdem sollte man sich überlegen, wie die Reports publiziert werden sollen und ob das nötige Python-Skript so voll unterstützt wird. Ist Python einsetzbar, bietet es immense Möglichkeiten, Power BI mit zusätzlichen Funktionen auszustatten und mit unbegrenztem Gestaltungsspielraum individuelle Plots zu entwerfen.

Du hast konkrete Fragen zur Vorgehensweise oder möchtest Dich zu Python in Power BI austauschen? Dann melde Dich gerne bei uns!

Dein Ansprechpartner
Laurenz Reitsam
Consultant
Laurenz ist Data Scientist der sich neben Machine Learning und Datenanalysen auch für DevOps und Infrastruktur begeistert. Er ist davon überzeugt, dass ein Modell nur dann ein gutes Modell sein kann, wenn es seinen Weg in die Produktion schafft.
#Pythonist #GCP #DataScience