Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Uvoz #2

Open
jaanos opened this issue Dec 26, 2020 · 2 comments
Open

Uvoz #2

jaanos opened this issue Dec 26, 2020 · 2 comments

Comments

@jaanos
Copy link

jaanos commented Dec 26, 2020

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
Copy link
Owner

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

@jaanos
Copy link
Author

jaanos commented Dec 29, 2020

Vidim, da pri vizualizaciji trenutno počneš to:

podatki <- podatki %>% mutate(zaokrozeni_datumi = format(as.Date(Swim_date), "%Y/%m"))

Č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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants