Seriál Marketingová strategie | Čistíme a tagujeme data pomocí Open Refine

✍️ Jakub Kašparů
📅 05. 12. 2014

Potřebné nástroje pro tento díl

Pokud umíte anglicky a myslíte to s Open Refine vážně, doporučuji úžasnou knížku Using OpenRefine (Ruben Verborgh, Max De Wilde).

Podle čeho chceme data rozdělit

V našem souboru máme zatím nijak nekategorizovaná klíčová slova, která se vztahují k tématu práva a soudů. V první fázi budeme tato klíčová slova rozdělovat do větších skupin na základě záměru uživatele. Toto třídění je nutné kvůli tomu, že s každou skupinou dotazů chceme pracovat jinak.

Nyní se na klíčová slova blíže podíváme a začneme mezi nimi hledat logické skupinky. Jedna se může týkat například dotazů zaměřených na informace ohledně soudů, další zase dotazů, jimiž uživatel hledá právního zástupce. Vytvoříme si v Excelu s klíčovými slovy nový sloupec a ke každému klíčovému slovu uvedeme skupinu, do které jsme ho zařadili. Například u klíčového slova “vzor smlouvy na auto” bude skupina “Vzory smluv”. Výsledkem této fáze tedy je to, že máme pohromadě dotazy na vzory smluv, informace a pomoc při rozvodu, právní služby, typy práva, informace o soudech atd. 

První kroky s Open Refine

Nyní je ten správný čas stáhnout a naistalovat Open Refine. Stačí pouze rozbalit složku a spustit soubor s koncovkou “.exe”. 

Po spuštění Open Refine dojde k otevření nového okna ve Vašem výchozím webovém prohlížeči. Ačkoliv se prostředí Open Refine jeví jako webová stránka, veškeré operace probíhají lokálně (bez nutnosti připojení k internetu). 

Nahráváme vytvořený seznam klíčových slov

  1. Zvolíme náš Excel a pokračujeme přes tlačítko Next.
  2. Data zkontrolujeme. Slova by měla mít v náhledu černou barvu a čísla zelenou. Refine se pokusí odhadnout formát buňky. Pro práci s čísly je důležité, aby Refine správně detekoval jejich formát a nepovažoval je za text.
  3. Import projektu dokončíme tlačítkem Create project. 

Slučujeme a čistíme vyhledávací dotazy

Prvním úkolem u každého projektu je normalizace klíčových slov. Například výrazy s diakritikou a bez ní mají pro nás stejný význam, je tedy zbytečné s nimi pracovat odděleně. Také výrazy, kde je pouze jiné pořadí klíčových slov, mají ve výsledku stejný význam, proto je chceme mít ve stejné skupině. Prvním krokem při práci s nástrojem tedy bude odstranění diakritiky a sloučení dotazů s přehozeným pořadím slov ve výrazu. Postup bude následující:

  1. Zkopírujeme si obsah sloupečku Klíčové slovo do nového sloupce, který si nazveme Dotaz. (Edit column > Add column based on this column > odkliknutí OK)
  2. Odstraníme ze sloupečku Dotaz kompletně diakritiku pomocí tohoto vzorečku: 
    import unicodedata;
    return unicodedata.normalize('NFKD', value).encode('ASCII', 'ignore')
  3. Odstraníme dvojité mezery mezi slovy. (Edit cells > Common tranforms > Trim leading and trailing whitespace)
  4. Dotazy sloučíme pomocí funkce Cluster. Tím ušetříme čas při značkování. (Edit cells > Cluster and edit > Projdeme výsledky, dáme Select all > Merge selected and recluster > Close)

Jelikož pracujeme pouze s 12 000 dotazy, není nutné se dlouze snažit dotazy slučovat pomocí funkce Cluster. V případě většího množství dat bych ale slučování věnoval více času.

Co jsou to Facety

Pro následující funkce je třeba si přiblížit tzv. Facety v nástroji Open Refine. Facety slouží jako náhled na vybraný sloupeček v našem projektu. 

První Facet, který je pro nás zajímavý, je “Word Facet”. Tento Facet rozdělí veškeré výrazy na slova a všechna je vypíše. Můžeme si tak velmi jednoduše vyfiltrovat například dotazy obsahující slovo “smlouvy”. 

Další Facet, který budeme potřebovat, je “Text Facet”. Text Facet nám zobrazuje všechny výrazy ve vybraném sloupečku. Tento Facet nám bude sloužit k označení prázdných buněk v daném sloupci. Díky tomu budeme moci v průběhu pracovat s řádky, které nejsou zařazeny v žádné skupině. 

Vybrané dva Facety nejsou samozřejmě jediné, které nástroj nabízí. Pro naše potřeby, alespoň pro následující kroky, ovšem budou stačit.

Při naší práci budeme neustále mít zapnutý “Word Facet” na sloupeček Dotaz a “Text Facet” na sloupeček Kategorie.

Třídíme výrazy do skupin

  1. Rozbalíme si menu sloupečku Dotaz > Facet > Customized Facets > Word Facet.
  2. Rozbalíme volby sloupečku Kategorie > Facet > Text Facet.
  3. Ve “Word Facetu” najdeme výraz “smlouva” a klikneme na tlačítko Include.
  4. Klikneme na tlačítko Edit u blank (prázdné buňky) v “Text Facetu” sloupce Kategorie. Edit se objeví až po najetí myší do dané oblasti. Přepíšeme hodnotu na Smlouvy a vzory. Tím jsme si přidali všechny dotazy, které obsahují slovo “smlouva”, do skupiny Smlouvy a vzory.
  5. Nyní musíme kliknout na Reset u “Word Facetu” sloupce Dotaz. 
  6. V “Text Facetu” máme v současné době 2 hodnoty - “Blank” a “Smlouvy a vzory”.
  7. Nyní si označíme si pouze buňky, které jsou “Blank”.

Následně proces opakujeme, dokud nemáme všechna klíčová slova zařazená do skupin. Pro lepší pochopení je níže video popisující kompletní průběh třídění i s komentářem.

Shrnutí

Opakováním předchozího procesu se nám po čase podaří roztřídit klíčová slova do širších skupin. V dalším článku si ukážeme, jak pomocí kontingenční tabulky v Excelu najít ve skupinách potřebné informace o jejich hledanost a konkurenci. 

Další tipy a triky

Vyhledání "kořene" slova

Pokud nechcete hledat všechny tvary slova u Word Facetu, je možné místo toho hledat buňky, které v sobě obsahují určitý řetězec. Například v případě slova “smlouvy” chceme označit všechny další tvary slova (smlouva, smluv, smlouvám, smluv a podobně). Na toto používám vlastní vzoreček. Otevřu si volby sloupečku Dotaz a zvolím Facet > Custom text Facet. Zde zadám vzoreček:

or(value.contains("smlouv"),value.contains("smluv"),value.contains("vzor"))

V podstatě jsem tím Open Refine řekl, že chci najít všechny dotazy, ve kterých se vyskytují výrazy “smluv”, “vzor”, “smlouv”. Nástroj se mě zeptá, zda chci zobrazit výsledky vyhovující, nebo nevyhovující mému zadání (True or False). Jakmile vyberu možnost True, zobrazí se mi všechny dotazy, jež splňují moje požadavky. Vzoreček si můžete sami velmi jednoduše upravovat podle Vašeho záměru.

Pro pohodlnější vytvoření vzorečku můžete použít náš jednoduchý převodník:

V další kapitole se podíváme na výstup z třídění dotazů do skupin. Nyní potřebujeme kategorie, které vznikly, dále klasifikovat.

9 comments on “Seriál Marketingová strategie | Čistíme a tagujeme data pomocí Open Refine”

  1. Zdravím,
    pěkné články.

    Upozorním snad jen na "chybu" Skliku, že někdy duplikuje klíčová slova. V poskytnutém xls je to např.: "právník zdarma" nebo "advokáti praha" - liší se jen lehce v cpc.

    Jak postupujete, pokud fráze spadá do více skupin? Např: "návrh na rozvod vzor"?

    Erik

  2. Dobrý den,
    děkuji.
    Je možné, že někdy se slovo objeví vícekrát. Ve chvíli detailnějšího řazení do dalších podskupin se na to přijde. Jistě by šel použít i nějaký vzoreček v Excelu, který by vzal v potaz pouze klíčové slovo a spočítal jejich výskyt.

    Klíčové slovo "návrh na rozvod vzor" by mělo spadat spíš do skupiny vzorů. Záleží, jak si určíte dané skupiny. Já osobně se snažím určovat úmysl dotazu. V tomto případě bych dotaz zařadil do sekce "Vzory smluv", protože i na webu bych chtěl daného uživatele poslat do sekce, kde nabízím vzor ke stažení.

    Vždy se stane, že Vám pár výrazů přeskočí jinam. Není to zas takový problém. Cílem je opravdu zmapovat hledanost jednotlivých skupin a aplikovat zjištění na strukturu webu, obsahovou strategii, PPC kampaně, SEO a další kanály.
    Navíc u starších projektů se dá velmi dobře najít možnost dalšího rozvoje.

  3. Ahoj,

    děkuji ti za skvělou sérii článků i videí.

    Rád bych se zeptal, ve které fázi mám provést čištění od nerelevantních slov, absolutně nesouvisející s oborem? V kontingenčních tabulkách mi to pak může zkreslovat data.

    Díky za odpověď.

  4. Radek Svoboda:
    Děkuji za zpětnou vazbu.
    My to děláme tak, že nesouvisející dotazy dáme pryč ihned po načtení dat do Open Refine. Děláme to tím stylem, že si přidáme sloupeček vylučující slovo, kde jsou hodnoty "Ano" a nebo "Ne". Následně při exportu klíčovky do Excelu můžeme do kontigenční tabulky přidat filtr s tímto sloupcem a všechny slova, která mají "Ano" si z dat vyloučíme.

    Záměřně necháváme vylučující klíčová slova v analýze, protože se dají později použít jako základ vylučujících slov pro PPC kampaně. Pokud je tam nechceš, stačí si vyfiltrovat všechna vylučující slova v Open Refine a pak přes zobáček "All"> "Edit rows "> "Remove all matching rows" smažeš všechny vylučující klíčová slova a pak je nemusíš v Excelu filtrovat.

    Stačí takto?

  5. Vyhledávač kořene, ve verzi co ukazujete nemůže fungovat, protože OR čeká dva parametry.
    Proto správná verze na tři slova je: or(or(value.contains("smlouv"),value.contains("smlouv")),value.contains("vzor")))

    Samozřejmě je pak jednoduší použít regulár a omezit to na přesná slova. Ve vaši verzi by stačilo slova oddělovat svyslítkem i když je výhodnější používat přesné výrazy dělené po slovech:
    Ukázka:
    isNotNull(value.match(/bsmlouvb|bsmluvb|bvzorb/))
    Funguje pro jeden i sto výrazů.

  6. Dobrý den,
    fungovat může, ale je potřeba OpenRefine 2.5 (stabilní verze). V té funkce or() skutečně pracuje s libovolným počtem parametrů:
    https://github.com/OpenRefine/OpenRefine/blob/123614539de017e88ab37bbf0c406927963df1ca/main/src/com/google/refine/expr/functions/booleans/Or.java
    Tuto verzi stále používáme, protože nové betaverze obsahují chyby, které omezují jejich použitelnost. Omezení na dva výrazy je zařazeno až ve verzi 2.6:
    https://github.com/OpenRefine/OpenRefine/blob/6dd4b8ea2383c2828f4ae37ae9011a324677ca17/main/src/com/google/refine/expr/functions/booleans/Or.java

    Vámi uvedené použití regulárního výrazu je dobrý nápad, nicméně přesná shoda slova (použití b) už nelze použít pro vyhledání slova podle jeho "kořene". Ekvivalentem našeho zápisu tedy je:
    isNotNull(value.match(/smlouv|smluv|vzor/))

  7. Mala oprava ... aby funkcia isNotNull(value.match(/smlouv|smluv|vzor/)) fungovala, je este potrebne doplnit pred a za kazde slovo bodku s hviezdickou (co vyjadruje, ze pri hladani sa lubovolny pocet znakov moze nachadzat pred aj za slovom).

    Spravny zapis je teda: isNotNull(value.match(/.*smlouv.*|.*smluv.*|.*vzor.*/))

    Inac diki za clanok! 🙂

  8. Dobrý den,
    mohu poprosit o vzoreček při následujícím příkladu: mám facet 'vylety', které chci hromadně změnit na 'výlety'? Děkuji Vám

Napsat komentář: KreLo Zrušit odpověď na komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *


Lynt services s.r.o

Již 11 let vytváříme efektivnější kampaně, zrychlujeme weby a řešíme jejich bezpečnost. Kombinujeme marketing, vývoj a automatizaci.
poptávka služeb