JakaSvetek / APPR-2020-21

Vzorčni repozitorij za projekt pri predmetu Analiza podatkov s programom R v študijskem letu 2020/21
MIT License
0 stars 0 forks source link

Uvoz #2

Open jaanos opened 3 years ago

jaanos commented 3 years ago

Opažam, da uvoziš 6 razpredelnic z istimi stolpci, tako da bi jih lahko združil - seveda bo pri tem treba dodati podatke o razdalji in bazenu. Glede na to, da vse uvažaš na isti način, bi lahko celoten uvoz skrajšal:

razdalje <- c("50"="%OS", "100"="%OS", "200"="%M:%OS") # oblike časov pri posameznih razdaljah
bazeni <- c("SCM", "LCM")

podatki <- lapply(names(razdalje), function(razdalja)
  lapply(bazeni, function(bazen)
    sprintf("podatki/%sm_%s.csv", razdalja, bazen) %>%
      read_csv(na="-", locale=locale(encoding="UTF-8", date_format="%d/%m/%Y"),
               col_types=cols(swim_time=col_time(format=razdalje[razdalja]))) %>%
      mutate(Distance=parse_factor(razdalja, levels=names(razdalje), ordered=TRUE), # razdalja bo urejen faktor
             Pool=parse_factor(bazen, levels=bazeni))) %>%
    bind_rows()) %>% bind_rows() %>%
  transmute(Name=full_name_computed, Country=team_short_name, Birth_date=birth_date,
            Distance, Pool, Time=swim_time, Points=fina_points, Swim_date=swim_date,
            Meet_name=meet_name, Meet_city=meet_city, Meet_country=country_code)

Naj opozorim, da se namesto vgrajene funkcije read.csv (s piko) priporoča uporaba funkcije read_csv (s podčrtajem, kot zgoraj) iz knjižnice readr, saj je ta bolj robustna ter lahko pravilno razume datume in čase.

Razpredelnica, dobljena z zgornjim uvozom, sicer ni v obliki tidy data, saj vsebuje ponovljene podatke: vrednosti v stolpcih Country in Birth_date so odvisne od vrednosti v stolpcu Name, medtem ko so vrednosti v stolpcih Meet_city in Meet_country odvisne od vrednosti v stolpcu Meet_name. Tako bo potrebno ustrezne podatke izločiti v svoji razpredelnici, npr.

plavalci <- podatki %>% select(Name, Country, Birth_date) %>% unique()
dogodki <- podatki %>% drop_na(Meet_name) %>%
  select(Meet_name, Meet_city, Meet_country) %>% unique()

Stolpce s ponovljenimi podatki lahko potem odstraniš iz razpredelnice podatki - če jih boš potreboval, jih boš lahko dobil z združevanjem.

JakaSvetek commented 3 years ago

Pozdravljeni, najlepša hvala za pomoč. Bom popravil.

jaanos commented 3 years ago

Vidim, da pri vizualizaciji trenutno počneš to: https://github.com/JakaSvetek/APPR-2020-21/blob/2e338da54b947d3133604e876bdd22c1252e6185/vizualizacija/vizualizacija.r#L9 Če prav razumem, želiš za posamezen mesec prikazati le najboljši rezultat. Problem takega pristopa je ta, da s tem izgubiš datumsko informacijo - v stolpcu zaokrozeni_datumi imaš tako le nize, ki se na grafu prikažejo v enakomernih razmakih (ne glede na dejanske časovne razlike). Bolje bo, če enostavno zaokrožiš na prvi dan v mesecu, npr.

library(lubridate)

Graf_napredek <- function(razdalja, bazen){
  ggplot(podatki %>% filter(Distance == razdalja, Pool == bazen) %>%
           mutate(zaokrozeni_datumi=Swim_date-day(Swim_date)+1) %>%
           group_by(zaokrozeni_datumi) %>% summarise(Time=min(Time)),
         aes(x=zaokrozeni_datumi, y=Time)) +
  geom_point() + ylab("Swim Time") + xlab("Date")
}

Podobno lahko seveda narediš še za drugo funkcijo.

Mimogrede, svetujem, da uvoze knjižnic premakneš v libraries.r. Potem lahko vsakič pred začetkom dela poženeš ta program, da se naložijo vse potrebne knjižnice.