Regulárne výrazy v Power BI v jazyku Python

Občas pri príprave dát v Power Query v Power BI potrebujete použiť regulárne výrazy, ľudovo regexy. Problém však je, že Power Query ich zatiaľ nepodporuje. Preto sa pozrieme, ako to obísť pomocou transformácií v Pythone, ktorý ich už dávno má.

V tomto návode si ukážeme, ako ho v Power Query viete použiť na extrakciu e-mailových adries z textu. Tento návod bude fungovať zatiaľ iba v Power BI Desktope, a možno v najnovšom Exceli 2019 a Office 365. Power Query v ostatných Exceloch to zatiaľ nepodporuje.

Python je skriptovací jazyk, ktorý sa používa na vytváranie webových aplikácií, či spracovanie dát. Je jedným z najpopulárnejších skriptovacích jazykov na svete. Power BI Desktop v rámci augustovej aktualizácie 2018 pridal podporu pre skripty Pythonu. Vďaka tomu môžete využiť obrovské množstvo kódu, ktorý už existuje dlhé roky v rôznych repozitároch a knižniciach.

Najprv je potrebné nastaviť Power BI Desktop. V prvom kroku je potrebné povoliť skriptovanie v Pythone, kvôli tomu že je to ešte len experimentálna funkcia. Spravíte to tak, že pôjdete cez menu Súbor => Možnosti a nastavenia => Možnosti, a tam v ľavom menu kliknete na Funkcie verzie Preview, a tam zakliknete políčko vedľa položky Podpora jazyka Python:

Následne je potrebné reštartovať Power BI Desktop. Nereštartujte ho, iba ho vypnite. Zapneme ho neskôr.

Potom je potrebné nainštalovať Python. Najprv je potrebné si stiahnuť inštalátor z oficiálnych webstránok:

https://www.python.org/downloads/windows/

V tomto prípade používam 64-bitový Power BI Desktop, a teda stiahnem si aj 64-bitový Python – ten čo je označený “Windows x86-64 executable installer“:

Keď si stiahnete inštalátor, tak ho spustite. Na úvodnej stránke NEZABUDNITE zakliknúť nastavenie “Add Python 3.7 to PATH“, aby ste to potom nemuseli robiť ručne:

Potom spustite inštaláciu, a počkajte, kým sa dokončí.

Potom je ešte potrebné doinštalovať knižnice pandas a matplotlib, pretože tie využíva Power BI Desktop, a nie sú pribalené ani tam, ani v Pythone. Otvorte si teda príkazový riadok, ideálne ako správca, a zadajte tam postupne tieto príkazy:

python -m pip install –upgrade pip

py -m pip install pandas

py -m pip install matplotlib

Prvý príkaz aktualizuje pip, ktorý sa používa na inštaláciu knižníc. Druhý a tretí príkaz nainštalujú knižnice pandas a matplotlib. Výstup na obrazovke bude vyzerať nejak takto:

Následne naštartujte Power BI Desktop.

Potom je potrebné nastaviť, alebo aspoň skontrolovať nastavenia integrácie s Pythonom v Power BI Desktope. V ňom to spravíte cez menu Súbor => Možnosti a nastavenia => Možnosti, a tam v ľavom menu kliknete na Skriptovanie v jazyku Python. Malo by to byť nastavené približne takto:

V tomto okne dajte OK, a všetko by malo byť nastavené.

Potom si dáme vytvoriť alebo naimportovať takúto tabuľku (vy si dajte naimportovať tú svoju):

Zo stĺpca TextNaHladanie tejto tabuľky potrebujeme extrahovať e-mailové adresy do nového stĺpca, ak tam nejaké sú. Pre zjednodušenie budeme extrahovať iba prvú adresu, ak ich je tam viac.

Dáme teda upraviť tento dotaz v Power Query. Tam kliknite na záložku Transformovať, a potom na tlačítko Spustiť skript jazyka Python:

Malo by sa zobraziť takéto okno:

Ak sa v ňom zobrazuje hlásenie o tom, že Python nie je nainštalovaný, tak si vyhľadajte na webe, ako to vyriešiť. Prípadne iba reštartovať Power BI Desktop.

Do tohto okna teraz prilepte nasledujúci skript, a stlačte OK:

# Údaje vstupu pre tento skript sú uložené v množine údajov ‘dataset’
# použijeme knižnicu na prácu s regexami
import re
# vytvoríme funkciu na extrakciu e-mailu zo zadaného reťazca
def extractEmail(inputString):
match = re.search(r'[\w\.-]+@[\w\.-]+’, inputString);
if match is not None:
return match.group(0);
else:
return “”;
# do tabuľky dáme pridať nový stĺpec s názvom EmailNajdeny, do ktorého dáme uložiť
# výsledok funkcie extractEmail s hodnotou zo stĺpca TextNaHladanie
dataset[“EmailNajdeny”] = dataset[“TextNaHladanie”].apply(extractEmail)

Riadky začínajúce mriežkou sú komentáre, kde máte vysvetlenie k jednotlivým krokom.

Niekedy je potrebné ešte stlačiť tlačidlo Obnoviť ukážku v hlavnom menu, aby sa obnovila tá správna konštelácia hviezd.

Keď vám hore uvedený skript zbehne, tak výsledok by mal vyzerať takto:

V tomto výsledku kliknite na ten žltý odkaz Table:

…čím sa rozbalí výsledok z Pythonu do tabuľky v Power Query:

V novom stĺpci EmailNajdeny budú nájdené e-mailové adresy. Alebo čokoľvek iné, čo len viete zadať cez regulárne výrazy 🙂

Takže takto jednoducho idú používať regulárne výrazy na transformáciu údajov v Power Query. Pomocou nich viete potom veľmi jednoducho extrahovať údaje aj z veľmi zle štruktúrovaných dát. Len je potrebné vedieť regulárne výrazy. Ale to je už iná téma 🙂

Prípadne, ak by vám to nestačilo, tak si prečítajte článok o tom, ako to isté spraviť v jazyku R skript 🙂