# Balíčky ----------------------------------------------------------------- library(tidyverse) # Challange --------------------------------------------------------------- # Zkuste správně importovat soubor z této url adresy # https://raw.githubusercontent.com/tidyverse/readr/main/inst/extdata/challenge.csv # Nazvěte nový objekt challange challange <- read_csv("https://raw.githubusercontent.com/tidyverse/readr/main/inst/extdata/challenge.csv") # Bezpčnější je ale vždy specifikvoat typy sloupců, # Když máme takto malý dataset, není to navíc nic těžkého challange <- read_csv( "https://raw.githubusercontent.com/tidyverse/readr/main/inst/extdata/challenge.csv", col_types = cols( x = col_double(), y = col_date() )) head(challange) # Kterou funkci byste použili, kdybyste měli importovat soubor, který by jako # Oddělovač hodnot používal “|” "a|b|c\n1|2|3\n4|5|6" %>% read_delim(delim = "|") # pomocí read_delim můžeme specifikovat jakýkoli oddělovač hodnot # Problémy při importu ---------------------------------------------------- # Někdy .csv soubory obsahují čárky, které nechceme interpretovat jako # oddělovače hodnot # Aby nedělaly problémy, musejí být uvazřeny nějakým typem uvozovek. # Defaultně funkce read_csv předpokládá použití dvojitých uvozovek. # Jak bychom správně načetli tento .csv soubor? # Funckí writeLines() se můžeme podívat na to, jak by řetězec znaků # vypadal v obyčejném textovém souboru writeLines("x,y\n1,'a,b'") # \n se intepretuje jako nový řádek read_csv("x,y\n1,'a,b'") # špatně, uvozovky importovány jakou součást hodnot v buňce read_csv("x,y\n1,'a,b'", quote = "'") # správně, uvozovky interpretovány jen # jako vymezovač buňky, která obsahuje text s čárkou # Identifikujte, co je zřejmě špatně při tomto importu? writeLines("a,b\n1,2,3\n4,5,6") # chybí jeden název sloupce read_csv("a,b\n1,2,3\n4,5,6") # špatně read_csv("a,b,c\n1,2,3\n4,5,6") # správně writeLines("a,b,c\n1,2\n1,2,3,4") # první řádek má je dvě hodnoty, ve třetím jedna přebývá read_csv("a,b,c\n1,2\n1,2,3,4") # špatně read_csv("a,b,c\n1,2,3\n1,2,3") # správně writeLines("a,b\n1,2\na,b") # Opakující se názvy sloupců na posledním řádku read_csv("a,b\n1,2\na,b") # špatně read_csv("a,b\n1,2") # správně writeLines("a;b\n1;3") # Špatný oddělovač hodnot read_csv("a;b\n1;3") # špatně read_csv2("a;b\n1;3") # správně # mymsa ------------------------------------------------------------------- # Zvolte správnou funkci k načtení tohoto flat file: # https://raw.githubusercontent.com/nt246/NTRES-6100-data-science/main/datasets/janitor_mymsa_subset.txt # Importujte jej pod jménem mymsa mymsa1 <- read_tsv("https://raw.githubusercontent.com/nt246/NTRES-6100-data-science/main/datasets/janitor_mymsa_subset.txt") mymsa1 glimpse(mymsa1) # Zkuste nastavit nová jména sloupců, abychom měly standardní názvy bez # speciálních znaků mymsa2 <- read_tsv("https://raw.githubusercontent.com/nt246/NTRES-6100-data-science/main/datasets/janitor_mymsa_subset.txt", skip = 1, col_names = c("plant_id", "body", "scan_time_left", "scan_time_right", "hang_method", "hgp", "sex", "hscw_left", "p8_fat", "est_perc_bi", "feed_type", "days_on_feed", "msa_index") ) glimpse(mymsa2) names(mymsa2) # Pro kontrolu tibble( nms1 = names(mymsa1), nms2 = names(mymsa2), ) # WWCFIFA ----------------------------------------------------------------- # Stáhněte si dataset 2019_WWCFIFA_summary.csv ze studijních materiálů # a uložte si ho do vhodné složky # Zkuste to udělat pomocí funkce download.file() download.file("https://is.muni.cz/el/fss/podzim2022/PSYn5320/um/datasets/2019_WWCFIFA_summary.csv", destfile = "data/2019_WWCFIFA_summary.csv", method = "curl") # Importujte pomocí vhodné funkce stažený dataset a nazvěte nový objekt wwc_raw wwc_raw <- read_csv("data/2019_WWCFIFA_summary.csv") glimpse(wwc_raw) # Zkuste import opakovat, ale ručně specifikujte typy sloupců # aby sloupec Date byl typu "date" a slpoupce "Round" a "Venue" typu factor ?col_date wwc_raw <- read_csv("data/2019_WWCFIFA_summary.csv", col_types = cols( Round = col_factor(), Date = col_date(format = "%m/%d/%y"), Venue = col_factor() )) # Aplikujte vhodné funkce, abyste získali přehled o datech # (souhrnné statistiky a strukturu dat) summary(wwc_raw) glimpse(wwc_raw) # Vytvořte nový objekt wwc_1, jehož základem bude wwc_raw: # pomocí funkce str_to_lower() změňte jména sloupců na lowercase wwc_1 <- wwc_raw %>% rename_with(str_to_lower) # Použijte na wwc_1 funkce dim(), nrow() a ncol(). # Co tyto funkce dělají? dim(wwc_1) nrow(wwc_1) ncol(wwc_1) # Použijte vhodné funkce k ispekci prvních a posledních 10 řádků wwc_1 head(wwc_1, n = 10) tail(wwc_1, n = 10) # Vyřadťe řádky, kde jsou jen missing values, a vytvořte tak objekt wwc_2 wwc_2 <- subset(wwc_1, !is.na(home)) # Ve sloupci date a venue by měla zbýt jedna chybějící hodnota # Ve sloupci date ji nahraďte "2019-06-09" # Ve sloupci "venue" ji nahraďte "Groupama Stadium" wwc_2$date wwc_2$date[is.na(wwc_2$date)] wwc_2$date[is.na(wwc_2$date)] <- "2019-06-09" wwc_2$date wwc_2$venue wwc_2$venue[wwc_2$venue == ""] wwc_2$venue[wwc_2$venue == ""] <- "Groupama Stadium" wwc_2$venue # Podívejte se na nápovědu k funkci separate() a zkuste sloupe # score pomocí ní rozdělit na dva ("home_score" a "away_score") wwc_3 <- wwc_2 %>% separate(score, into = c("home_score", "away_score"), convert = TRUE) %>% separate(pks, into = c("home_pks", "away_pks"), convert = TRUE) wwc_3 # Totéž udělejte pro sloupec pks (rozdělte ho na dva sloupce # "home_pks" a "away_pks" # Nahradťe chybějící hodnoty ve sloupcích "home_pks" a "away_pks" nulami wwc_3$home_pks[is.na(wwc_3$home_pks)] <- 0 wwc_3$away_pks[is.na(wwc_3$away_pks)] <- 0 wwc_3 View(wwc_3)