spelaognjanovic / APPR-2017-18

Repozitorij z gradivi za predmet Analiza podatkov s programom R v študijskem letu 2017/18
MIT License
0 stars 0 forks source link

Vizualizacija #2

Open spelaognjanovic opened 6 years ago

spelaognjanovic commented 6 years ago

Pozdravljeni! Zanima me, kako bi naredila prvi graf v mapi vizualizacija, kjer bi iz tabele zmagovalci šla po vseh (4) stolpcih naenkrat in dobila 10 najboljših igralcev. Nato bi naredila padajoč stolpični graf (na y osi zmagovalci, na x osi imena igralcev). Nevem, kako naj izbrišem odvečne številke v tabeli zmagovalci, da ne bi vplivale na zanko.

V grafu 2 pa imam narejen primer, vendar ne znam spremenit, da se bo skladalo z mojimi podatki. Da bi iz tabele hitrost.serve narisala dve padajoči funkciji eno za moške in eno za ženske.

V grafu 3 pa bi rada naredila iz tabele data, da bi se mi dominantna starost prikazala kot gostota točk in pri starosti, ki se največkrat pojavi, bi bilo najbolj zgoščeno. Sem našla primer, ampak nevem ali bi se dalo to narediti tudi z mojimi podatki.

Hvala za pomoč.

jaanos commented 6 years ago

Najprej, v uvoz.r poskrbi, da definirane funkcije tudi pokličeš (tako kot to storiš z uvozi.hitrost.serve), tako da se ob zagonu podatki tudi dejansko uvozijo. Seveda tudi poskrbi, da funkcije delujejo in izvedejo celoten uvoz. Celoten uvoz zmagovalcev v obliki tidy data bi torej izgledal nekako takole:

uvozi.zmagovalce <- function() {
  link <- "https://sl.wikipedia.org/wiki/Seznam_zmagovalcev_turnirjev_za_Grand_Slam_-_mo%C5%A1ki_posami%C4%8Dno"
  stran <- html_session(link) %>% read_html()
  html_tabela <- stran %>% html_nodes(xpath="//table[@class='wikitable']") %>% .[[1]]
  zmagovalci <- html_tabela %>% html_table(fill = TRUE)
  drzave <- html_tabela %>% html_nodes(xpath=".//tr") %>% .[-1] %>%
    sapply(. %>% html_nodes(xpath="./td") %>%
             lapply(. %>% html_nodes(xpath="./a[@class='image']") %>% html_attr("href") %>%
                      sapply(. %>% { gsub("US_.*_Flag", "Flag_of_the_United_States", .) } %>%
                               strapplyc("Flag_of_(.*)\\.svg") %>%
                               { gsub("_", " ", gsub("_\\(.*", "", gsub("^the_", "", .))) }) %>%
                      .[1]) %>% { ifelse(sapply(., is.list), NA, .) %>%
                          c(rep(NA, 5 - length(.)))} %>%
             unlist()) %>% t() %>% data.frame()
  colnames(drzave) <- colnames(tabela)
  drzave <- drzave[-c(51,52),]
  zmagovalci <- zmagovalci[-c(51,52),]
  drzave$Leto <- zmagovalci$Leto <- parse_number(zmagovalci$Leto)
  drzave.tidy <- melt(drzave, id.vars = "Leto", variable.name = "Prvenstvo", value.name = "Drzava")
  zmagovalci.tidy <- melt(zmagovalci, id.vars = "Leto", variable.name = "Prvenstvo",
                          value.name = "Zmagovalec") %>% inner_join(drzave.tidy) %>%
    mutate(Zmagovalec = Zmagovalec %>% strapplyc("^([^(]*)") %>% unlist() %>%
             trimws() %>% parse_character()) %>% filter(Leto >= 1950)

  return(zmagovalci.tidy)
}

zmagovalci <- uvozi.zmagovalce()

Raje, kot da izpuščaš vrstice po indeksih, jih filtriraj po nekem ključu - v tem primeru sem podal, naj se ohranijo samo podatki za leta od 1950 naprej (sklepam, da si to hotela doseči z izpuščanjem). Posebni primeri, kot vrstici 51 in 52, se lahko izpustijo po indeksu.

Popraviti bo treba tudi funkcijo uvozi.tenisaci, da bo vračala želeno razpredelnico - na konec funkcije dodaj vrstico return(data). Svetujem sicer, da to razpredelnico razbiješ na dve - eno s številom turnirjev, ki jo bo treba spraviti v obliko tidy data (samo na prostem/v dvorani, saj lahko skupno število izpelješ iz teh dveh), in eno s preostalimi stolpci.

Iz uvoz.r pobriši še klica funkcij iz vzorca, ki ju več nimaš. Skratka, ko poženeš uvoz.r, se mora (ob predhodnem uvozu knjižnic) brez napak izvesti celoten uvoz.

Z zgornjim uvozom razpredelnice zmagovalci lahko popraviš graf top10 tako, da stolpec DRZAVA (ki ga nimaš) nadomestiš s stolpcem Zmagovalec ter popraviš oznake osi. Za graf hitrosti serv lahko narediš nekaj takega (in po potrebi gradiš naprej):

ggplot(hitrosti.serve, aes(x = Rank, y = Speed, color = spol)) + geom_line() + geom_point()

Za tretji graf nisem prepričan, če razumem, kaj želiš prikazati. Morda bi šlo nekako tako:

ggplot(tenisaci, aes(x = igralec, y = `dominantna starost`)) + geom_jitter() +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))

Tukaj sem predpostavil, da je razpredelnica tenisaci rezultat funkcije uvozi.tenisaci (glej zgoraj). Svetujem sicer, da v imenih stolpcev nimaš presledkov (pa tudi ne šumnikov in drugih posebnih znakov), saj bo treba sicer pri navajanju takih stolpcev njihova imena dati med ``.

Še to: v vizualizacija.r grafov ne izpisuj - to boš storila na želenem mestu v poročilu.