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).
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 hodnotaNA
- 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 bezNA
, neboNA
, pokud jsou všechny dopravní nákladyNA
Na pořadí sloupců v datasetu nezáleží. Tabulka 8.2 ukazuje 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/.