Kódím.cz
3

Vizualizace

Jaké zdroje dat umí Power BI načíst a jak při načítání a transformacích využít Python

Vizualizace v Pythonu

S pomocí Pythonu můžeme přidat i vizualizace, které budou interaktivně využívat data z dotazů. Pro vytvoření vizualizace klikneme v nabídce vizualizací na možnost Python visual. Následně v menu vpravo vybereme sloupce, se kterými chceme pracovat. Pro vybrané sloupce je vhodné nastavit agregaci jako průměr, abychom nemuseli agregaci řešit v kódu.

Následně se nám zpřístupní editor kódu.

Použití modulu matplotlib

Pro vytvoření obrázku a souřadnicových os použijeme funkci subplots(). Pokud nezadáme žádné parametry, matplotlib vytvoří jednu souřadnicovou osu, tj. počítá pouze s jedním grafem na obrázek.

import matplotlib.pyplot as plt
fig, ax = plt.subplots()

Pro data o registracích uživatelů provedeme porovnání, jaké marketingové kanály jsou nejdůležitější pro různé skupiny uživatelů. K tomu nejprve potřebujeme provést nový typ agregace, tzv. pivot (nebo také kontingenční) tabulku. Tu vytvoříme pomocí funkce pivot_table(). Funkci musíme říct, který sloupec bude použitý jako popisek řádku (parametr index), popisek sloupců (parametr columns), který sloupec má být použitý pro hodnoty (můžeme zvolit třeba ip_address) a funkci pro agregaci (využijeme funkci len, což je obecná funkce pro výpočet délky řetězce nebo seznamu).

import pandas
dataset = pandas.read_json("https://raw.githubusercontent.com/pesikj/progr2-python/master/python-pro-data-1/power-bi/assets/user_registration.json")
df_actual_pivot = pandas.pivot_table(dataset, columns="age_group", index="marketing_channel", values="ip_address", aggfunc=len)
print(df_actual_pivot)

Vytvořená tabulka je připravená pro grafické zobrazení.

age_group                18-29  30-44  45-60   60+
marketing_channel
Friend's recommendation   1795   2268   1423   822
Newspapers or magazine    1052   1397    887  3325
Outdoor                   1097   1401   3318   484
Social network            6738   7186   1433   824
Television                1407   1809   1111   691

Využijeme vizualizaci pomocí teplotní mapy, což je zobrazení blízké pivot tabulce, jednotlivé hodnoty jsou ale graficky podbarveny.

Celý kód pro tvorbu vizualizace tedy je:

import matplotlib.pyplot as plt

df_actual_pivot = pandas.pivot_table(dataset, values="ip_address", index="marketing_channel", columns="age_group", aggfunc=len)
fig, ax = plt.subplots()

plt.xticks(range(df_actual_pivot.shape[1]), df_actual_pivot.columns)
plt.yticks(range(df_actual_pivot.shape[0]), df_actual_pivot.index)

plt.imshow(df_actual_pivot, cmap ="viridis")
plt.show()

Použití modulu seaborn

Modul seaborn je nadstavbou modulu matplotlib, který umožňuje vytvořit některé typy vizualizací jednodušeji. Příkladem může být právě teplotní mapa s popisky, jejíž vytváření v matplotlib je poněkud pracné. Galerie typů vizualizací, které jsou v modulu seaborn k dispozici, je na oficiálním webu.

Modul seaborn musíme nejprve importovat. Stejným způsobem jako výše, tj. s využitím funkce pivot_table(), vytvoříme kontingenční tabulku. Dále pak použijeme funkci heatmap pro vytvoření teplotní mapy. Pomocí parametru annot nastavíme, zda chceme zobrazit jednotlivé hodnoty jako popisky polí. Pomoc parametru fmt pak lze nastavit formátování čísla. Např. fmt=".0f" zobrazí řetězec bez desetinných čísel.

Pomocí parametru cmap můžeme nastavit barevné schéma. Modul seaborn čerpá barevná schémata z modulu matplotlib, který má barevná schémata popsaná v dokumentaci. Můžeme například zvolit schéma YlGn, což je přechod žluté a zelené barvy.

import matplotlib.pyplot as plt
import seaborn

df_actual_pivot = pandas.pivot_table(dataset, values="ip_address", index="marketing_channel", columns="age_group", aggfunc=len)
seaborn.heatmap(df_actual_pivot, annot=True, fmt=".0f", cmap="YlGn")
plt.show()