8.5 Domácí úkol

Tento domácí úkol je inspirovaný skutečným problémem. Máte dataset shipping_data, který obsahuje dva sloupce: shop s jednoznačným id internetového obchodu a shipping s dopravními náklady. Potíž je v tom, že dopravní náklady jsou kódované jako poněkud volně formátovaný řetězec. V tomto řetězci mohou být dopravní náklady za libovolný počet dopravních společností a jiná slova a čísla. Údaj pro jednu dopravní společnost má tvar jméno_společnosti: částka Kč nebo jméno_společnosti: zdarma, ovšem počet mezer může být libovolný a mezery mohou i úplně chybět. Údaje pro jednotlivé společnosti jsou odděleny mezerami nebo čárkami. Jméno každé dopravní společnosti se skládá vždy z několika velkých písmen, např. CP, DPD apod. Dataset obsahuje dopravní společnosti CP, DPD, PPL a ještě jednu dopravní společnost, jejíž jméno musíte zjistit z dat (bude jiné ve cvičných datech a jiné při testování vašeho skriptu). Tabulka 8.1 ukazuje, jak vypadají původní data (vypisují se jen vybrané řádky).

Tabulka 8.1: Příklad zadaných dat.
shop shipping
251 100 Kč
404 doprava PPL: 30Kč
429
484 CP:50 Kč, PPL: 30 Kč, ABC:60Kč
633 PPL:zdarma CP:80Kč DPD:40Kč

Vaším úkolem je

  • zjistit jména všech dopravních společností a uložit je jako vektor řetězců do proměnné delivery_names
  • přidat do datasetu numerické sloupce s dopravními náklady pro jednotlivé dopravní společnosti; každý sloupec se bude jmenovat s_jméno_dopravní_společnosti (např. s_PPL); slovo “zdarma” nahradí 0; pokud daný obchod dopravní společnost nevyužívá, bude hodnota NA
  • přidat do datasetu sloupec min_shipping, který bude obsahovat minimální dopravní náklady, tj. minimum z dopravních nákladů pro daný obchod bez NA, nebo NA, pokud jsou všechny dopravní náklady NA

Na pořadí sloupců v datasetu nezáleží. Tabulka 8.2 ukazuje očekávaný výstup.

Tabulka 8.2: Očekávaný výstup.
shop shipping s_PPL s_CP s_DPD s_ABC min_shipping
251 100 Kč NA NA NA NA NA
404 doprava PPL: 30Kč 30 NA NA NA 30
429 NA NA NA NA NA
484 CP:50 Kč, PPL: 30 Kč, ABC:60Kč 30 50 NA 60 30
633 PPL:zdarma CP:80Kč DPD:40Kč 0 80 40 NA 0

Upravte skript hw07.R. Data načtěte ze souboru shipping_data.RData. Tento soubor obsahuje nejen dataset shipping_data, ale také dataset shipping_data_check. Tento druhý dataset ukazuje, jak by měl vypadat výsledek vaší práce – svůj skript tedy můžete pomocí něj otestovat. Ale pozor: tento druhý dataset nebude přítomný při testování vašeho skriptu, takže se na něj ve skriptu hw07.R nijak neodkazujte. (Pro testování si napište jiný skript.)

Rady (nejdříve to zkuste bez nich):

  • budete potřebovat pracovat s regulárními výrazy, s funkcemi typu apply a konvertovat datové typy (a možná i struktury)
  • když získáte vektor se jmény dopravních společností, můžete nad ním iterovat pomocí lapply() nebo jiné podobné funkce
  • pokud nebudete umět získat jména dopravních společností, iterujte nad vektorem c("CP", "DPD", "PPL"); sice tím ztratíte některá data, ale aspoň některá získáte
  • nepanikařte; toto je zatím nejtěžší domácí úkol, ale stačí na něj cca 15 řádků kódu (váš kód ale může být klidně kratší nebo delší a stále fungovat)

Wickham, Hadley, and Garrett Grolemund. 2017. R ForData Science. 1st ed. Sebastopol, California, USA: O’Reilly. http://r4ds.had.co.nz/.