Uživatelské nástroje

Nástroje pro tento web


lmdemo:hotel2015:columnderived

Demo Hotel: Výpočet odvozených hodnot

Přidání výpočtu odvozených hodnot zvýší šanci na objevení skutečně zajímavých vztahů. Příklad vypočtené odvozené hodnoty je sloupec PCenaCelkem, který sice už v datech existuje, ale bylo by jej možné spočítat jako:

  • PCenaCelkem = PCenaPobyt + PCenaStrava – PCenaSleva.

Jako opravdu odvozené hodnoty můžeme spočítat jednotkové ceny ubytování a stravy za noc a osobu. Díky přidání externích dat o směnném kurzu můžeme z dostupných hodnot vypočítat cenu v eurech.

V souvislosti s doménovými znalostmi musíme být dále schopni o každém pobytu rozhodnout, zda proběhl v sezóně, zda jde o turnusový pobyt a zda jde o pobyt přes sobotní noc.

Konečně můžeme pro každý pobyt vypočítat i odvozenou hodnotu udávající, kolik pobytů celkem začalo v hotelu ve stejný den.

Pozor! Před zadávání odvozených hodnot ještě jednou zkontrolujeme, že pracuje až se spojeným databázovým pohledem HotelPlusExterni, nikoliv s některou z původních tabulek.

Jednotkové ceny

Jednotková cena je typickým příkladem odvozené hodnoty. V celkové ceně za ubytování se promítá najednou více faktorů – délka pobytu, počet osob i aktuální ceník. Pokud budeme chtít analyzovat vliv změny ceníku na chování hostů, musíme cenu nejprve očistit od zbylých dvou faktorů. Tím dostáváme jednotkovou cenu za ubytování, kterou pojmenujeme PCenaUbytovaniJednotkova a počítat se bude jako PCenaUbytovani / (POsob * PNoci).

Nový sloupec PCenaUbytovaniJednotkova s vypočtenou hodnotou přidáme na záložce s detailem tabulky pomocí tlačítka Add expr..

Nejprve zadáme název – v tomto případě PCenaUbytovaniJednotkova. Následně zadáme matematický výraz PCenaUbytovani / (POsob * PNoci), kterým se mají odvozené hodnoty počítat. Při zadávání výrazu se nabízejí názvy existujících sloupců. Vybírat je můžeme i z rozbalovací nabídky. Konečně zvolíme vhodný datový typ – musíme si uvědomit, že výsledkem dělení může být desetinné číslo, takže správnou volbou je pouze datový typ decimal number.

Po stisku tlačítka OK se do seznamu sloupců přidá nový (odvozený) sloupec PCenaUbytovaniJednotkova a rovnou se i objeví záložka se základními charakteristikami sloupce. Z té na první pohled vidíme, že základní cena za noc byla po celý rok 2012 ve výši 1210 Kč a od 1. ledna 2013 vzrostla na 1450.

Tato informace nebyla z původních dat na první pohled patrná. Teprve výpočtem odvozené hodnoty se stala zřejmou.

Podobně můžeme přidat i jednotkovou cena za stravu PCenaStravaJednotkova spočtena jako PCenaStrava / (POsob * PNoci). Necháváme na uživateli, aby si zkusil přidat odvozený sloupec pro jednotkovou cenu za stravu sám. Z něj by pak mělo být zřejmé, že celá řada hostů za stravu neplatila a u zbylých je opět vidět skokové zdražení ceníkové ceny od 1. ledna 2013.

Cena v eurech

Pro cizince z okolních zemí není důležitá cena v korunách, ale v eurech. Ta je ovlivněna vývojem kurzu koruny a může se výrazně měnit, aniž by došlo k jakékoliv změně ceníku hotelu.

Protože pracujeme databázovým pohledem HotelPlusExterni, tak máme k dispozici jak cenu, tak i směnný kurz. Pro výpočet ceny v eurech platí vztah PCenaCelkemEUR = PCenaCelkem / SEUR.

Právě přidaný odvozený sloupec PCenaCelkemEUR však v sobě opět kombinuje několik faktorů. V tomto případě je to kromě počtu osob a nocí i fakt, že v celkové ceně je i cena za stavu a případná sleva. Chceme-li analyzovat vliv vývoje směnného kurzu na cizince, bude patrně lepší použít opět jednotkovou cenu, navíc nejprve jednotkovou cenu pouze za samotné ubytování.

Podobným způsobem bychom mohli vytvořit i odvozené sloupce s částkami v eurech pro cenu za ubytování (PCenaUbytovaniEUR), cenu za stravu (PCenaStravaEUR) a pro slevu (PCenaSlevaEUR), ale momentálně nejsou dále využívány a tento krok můžeme přeskočit.

Jednotková cena v eurech

Matematický výraz pro výpočet jednotkové ceny za ubytování v eurech bude PCenaUbytovani / (POsob * PNoci * SEUR). Vytvoříme tedy odvozený sloupec PCenaUbytovaniJednotkovaEUR (datový typ desetinné číslo) a necháme si zobrazit záložku s detailu nově přidaného sloupce.

Nyní zcela jasně vidíme, jak se měnila v průběhu obou let cena v eurech pro cizince. Patrné jsou výkyvy během obou roků i změna základní ceníkové ceny v Kč k 1. lednu 2013. Zajímavý je pak prudký pokles ceny v eurech na podzim 2013, kdy došlo k intervenci ČNB a k oslabení kurzu koruny.

Analogicky vytvoříme i odvozený sloupec PCenaStravaJednotkovaEUR.

Počet osobonocí

Všechny jednotkové ceny byly vypočteny za použití násobku počtu osob a nocí. I tato hodnota může být pro další analýzy zajímavá, a proto ji přidáme jako další odvozený sloupec POsobonoci.

V tomto případě může být výsledkem pouze celé číslo, takže zadáme datový typ integer number.

Sezóna

Z doménových znalostí vyplývá, že sezóna je v období červen až srpen a prosinec až únor.

Výraz pro výpočet odvozeného sloupce proto bude:

  • ((Month(PPobytOd) > 5) and (Month(PPobytOd) < 9)) or ((Month(PPobytOd) < 3) or (Month(PPobytOd) = 12))

Obvyklým způsobem tedy můžeme přidat odvozený sloupec PSezona a jeho datový typ nastavit na boolean.

Poznámka: Pokud si chceme ušetřit práci se zadáváním dlouhého logického výrazu, můžeme počkat až na vytváření atributů a binární atribut PSezona_b vytvořit až později.

V případě vytvoření odvozeného sloupce PSezona vidíme střídání období sezóny a mimo sezónu.

Pobyt přes sobotní noc

Z doménových znalostí také vyplývá, že pro hoteliéry jsou zajímaví hosté, kteří zůstávají přes alespoň jednu sobotní noc. Při analýze bychom tedy měli být schopni takového hosty rozpozat a s využitím této znalosti formulovat vhodné analytické otázky.

Výraz pro výpočet odvozeného sloupce bude vypadat takto:

  • (Weekday(PPobytOd,2) mod 7+ PNoci) > 6

Pomocí VBA funkce Weekday zjistíme den týdne pro začátek pobytu PPobytOd. Hodnota 2 jako druhý parametr zajistí, že Access použije jako počáteční den týdne pondělí (jinak by to byla neděle). Dostaneme tedy den týdne reprezentovaný číslem od 1 (pondělí) do 7 (neděle). Uděláme-li modulo 7 budou hodnoty 1 (pondělí), 2 (úterý)… až 6 (sobota), ale 0 pro neděli. Přičteme-li k tomuto číslo počet nocí, po které host zůstával, musíme dostat hodnotu větší než 6.

Přidáme tedy odvozený sloupec PPresSobotniNoc a jeho datový typ nastavit na boolean.

Vidíme, že pobyty trvající přes sobotní noc výrazně převažují.

Turnusový pobyt

Další odvozenou hodnotou je zjištění, zda jde o turnusový pobyt.

Výraz pro výpočet odvozeného sloupce bude vypadat takto:

  • (Weekday(PPobytOd, 2) = 6) and (PNoci mod 7 = 0)

Hodnota dne v týdnu pro začátek pobytu musí být sobota (číslo 6 počítáno od pondělí, při volání funkce Weekday v systému MS Access musíme jako druhý parametr dát 2, aby byl začátek týdne v pondělí). A zároveň musí být počet nocí beze zbytku dělitelný sedmi.

Přidáme další odvozený sloupec PTurnus a jeho datový typ nastavíme na boolean.

Počet pobytů, které začaly ve stejný den

Doposud jsme zadávali pouze odvozené sloupce vypočtené pomocí matematického výrazu. Nyní však musíme použít odvozený sloupec založený na vnořeném SQL dotazu. Proto pro přidání sloupce použijeme tentokrát tlačítko Add query. Sloupec nazveme PPocetPobytuDen a SQL dotaz pro výpočet odvozeného sloupce bude vypadat takto:

  • SELECT Count(*) FROM Hotel WHERE PPobytOd= @PPobytOd

Pro každý pobyt se zjistí datum začátku (parametr @PPobytOd) a provede se SQL dotaz nad tabulkou Hotel, který spočte všechny pobyty začínající v daný den.

Datový typ nastavíme na integer number.

Kraj, ze kterého host pochází

V údajích o bydlišti hosta jsou i geografické souřadnice jeho domovského města. Ty můžeme u hostů z České republiky použít pro zjištění, ze kterého kraje host pochází. Vytvoříme odvozený sloupec z geografických dat využívající mapový soubor s hranicemi krajů. Pro každého hosta se zjistí, do které oblasti (kraje) patří bod se souřadnicemi jeho bydliště (u zahraničních hostů bude nastavena hodnota NULL).

Pomocí tlačítka Add geo vytvoříme sloupec HKraj a jeho parametry nastavíme:

Důležité je nastavit typ počítané geografické relace – v tomto případě zjištění názvu oblasti, do které bod patří (volba In-Polygon name).

Způsob výpočtu vzdáleností můžeme v tomto případě ignorovat a ponechat na výchozí hodnotě.

Důležité je nastavit sloupce, ve kterých jsou geografické souřadnice bodu. V našem případě jde o HMesto_X a HMesto_Y.

Nakonec musíme ještě dohledat mapový soubor s definicemi hranic krajů. Součástí instalace systému LISp-Miner takový soubor je a jmenuje se Ceska republika.Kraje.kml. Nalezneme jej v podsložce Maps\Vector v základní složce systému LISp-Miner. Více viz Práce s geografickými daty.

Pokud jsme zadali vše správně, objeví se po stisku tlačítka OK záložka nového sloupce.

Všimněme si, že pro všechny zahraniční hosty nemohl být kraj určen (souřadnice města bydliště nepatří do žádného z krajů), a proto je ve sloupci hodnota NULL.

Vzdálenost od bydliště hosta k nejbližšímu hotelu

Souřadnice bydliště hosta můžeme využít i dalším způsobem. Součástí ukázkových dat Hotel je i mapový soubor se souřadnicemi našeho hotelů a jeho hlavních konkurentů. Pokud jsme tak ještě neudělali, stáhneme soubor Hotel.Konkurence.kml a uložíme do složky s daty Hotel.

Vhodným nastavením parametrů odvozeného sloupce z geografických dat můžeme nechat pro každého hosta spočítat buď vzdálenost k nejbližšímu z těchto hotelů, nebo jeho název. Pomocí tlačítka Add geo vytvoříme sloupec HNejblizsiHotelVzdalenost a jeho parametry nastavíme takto:

Důležité je opět nastavit správný typ počítané geografické relace – tentokrát jde o výpočet vzdálenosti k nejbližšímu bodu (volba Closest-Point distance). Při výpočtu vzdáleností je navíc nutné vzít v úvahu i případné zakřivení zeměkoule. Jde-li opravdu o geografické souřadnice a očekávané vzdálenosti překračují 100 km, tak jako způsob výpočtu zvolíme Haversine.

Důležité je nastavit sloupce, ve kterých jsou geografické souřadnice bodu. Opět jde o HMesto_X a HMesto_Y.

Nakonec musíme ještě dohledat mapový soubor s definicemi souřadnic zájmových bodů (pozic hotelů). Soubor Hotel.Konkurence.kml nalezneme pomocí tlačítka Browse ve složce s daty Hotel.

Po stisku tlačítka OK se objeví záložka nového odvozeného sloupce.

Název nejbližšího hotelu od bydliště hosta

Zcela stejným způsobem přidáme i odvozený sloupec HNejblizsiHotelNazev obsahující název nejbližšího hotelu od bydliště hosta.

Jedinou odlišností je jiný typ počítané geografické relace – tentokrát jde o název bodu (volba Closest-Point name). Nezapomeňme opět změnit i způsob výpočtu vzdálenosti na Haversine.

Ověření obsahu metabáze

Správnost provedených kroků zkontrolujeme pomocí tlačítka Ctrl+F9 a výběrem správné položky ze seznamu šablon pro ověření obsahu metabáze:

MBCV: Demo Hotel 02 Data Prepro 01 Odvozené hodnoty (Hotel.MBVC.zip)


Související témata:

Demo Hotel: Vytvoření skupin atributů
Demo Hotel: Vytvoření atributů a jejich kategorií
Demo Hotel: Úvodní přehledový postup analýzy
Předzpracování dat
Výpočet odvozených hodnot
Práce s geografickými daty

lmdemo/hotel2015/columnderived.txt · Poslední úprava: 2017/02/19 18:27 (upraveno mimo DokuWiki)