LonjaTT / APPR-2015-16

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

Uvoz tabele in združitev tabel #3

Closed LonjaTT closed 8 years ago

LonjaTT commented 8 years ago

imam dve tažavi: 1) imam težave pri uvozu tabele s podatki za EU iz spletne strani (pri podatkih)

2) ko poskušam združiti tabelce za Slovenijo po letih mi ne uspe.

jaanos commented 8 years ago

Ali lahko naložiš trenutno verzijo na GitHub, da vidim, kaj gre narobe pri uvozu s spletne strani?

Kar se tiče podatkov za Slovenijo, bo najlažje, če jih pretvoriš v obliko tidy data, saj jih bo tako lažje združiti. Tako lahko npr. že pri uvozu uporabiš funkcijo melt iz knjižnice reshape2

library(reshape2)
stevilomuzejev <- read.csv2("podatki/stmuzejevnapreb.csv", dec = ".",
                            header = FALSE, na.strings = "...",
                            col.names = regije) %>%
  melt(id.vars = "Leto", variable.name = "Regija",
       value.name = "Stevilo.muzejev")

Tukaj je bilo potrebno dodati parameter dec = ".", saj imaš v datoteki CSV decimalne pike.

Podobno narediš še z ostalima razpredelnicama, potem pa lahko vse tri združiš s full_join (tako ohraniš morebitne vrstice, ki se ne pojavijo v vseh razpredelnicah):

skupaj <- stevilomuzejev %>% full_join(obcasnerazstave) %>% full_join(obiskovalci)
LonjaTT commented 8 years ago

sem poskusila, vendar mi pri skupaj, javi napako: index out of bounds

jaanos commented 8 years ago

V kodi, ki jo imaš v uvoz/README.md (seveda jo premakni v uvoz.r), si zadnjo razpredelnico poimenovala obiskmuzejev, tako da tako popravi tudi pri združevanju.

Mimogrede, opažam, da si v libraries.r uvozila tudi knjižnico MASS. To smo uvozili na vajah, da smo lahko delali s podatki UScrime, za sam projekt pa je ne potrebuješ. Glede na to, da ta knjižnica vsebuje tudi funkcijo select, ki pa ni ista kot tista iz knjižnice dplyr, svetujem, da knjižnico MASS odstraniš.

LonjaTT commented 8 years ago

kako uvozim zemljevid? poskušala sem uvoziti zemljevid slovenije, vendar mi ni uspelo?

jaanos commented 8 years ago

Poglej si primer z vaj. Funkcijo uvozi.zemljevid imaš na voljo, če uvoziš lib/libraries.r (kot že imaš v poročilu), funkcijo pretvori.zemljevid pa si skopiraj iz primera.

LonjaTT commented 8 years ago

Meni to še vedno ni jasno `obcine <- uvozi.zemljevid("http://e-prostor.gov.si/fileadmin/BREZPLACNI_POD/RPE/OB.zip", "OB/OB", encoding = "Windows-1250")

zem <- ggplot() + geom_polygon(data = muzejiinrazstavisca, aes(x=long, y=lat, group=group, fill=x2014), color= "red")+scale_fill_gradient(low="#3F7F3F", high="#00FF00")+guides(fill=guide_colorbar(title = "Muzeji 2014")) print(zem)` Rada bi naredila zemljevid muzejev po občinah v letu 2014.

jaanos commented 8 years ago

Najbolje bo, če podatke pretvoriš v obliko tidy data. Pri uvozu ne pozabi na ustrezno kodiranje znakov. Poleg tega izpusti še parameter row.names, da bodo imena občin v svojem stolpcu. Ker se imena občin v podatkih in na zemljevidu ne ujemajo povsem, jih bo treba prilagoditi (izpustiti dvojezična imena in pobrisati presledke okrog pomišljaja):

library(gsubfn)

uvozi.muzeje <- function(){
  return(read.csv("podatki/muzejiinrazstavisca.csv", dec = ".", na.strings ="-",
                  header = FALSE, col.names = leta, fileEncoding = "Windows-1250"))
}

muzeji <- uvozi.muzeje() %>% melt(variable.name = "Leto", value.name = "Stevilo")
levels(muzeji$Obcina) <- levels(muzeji$Obcina) %>% {gsub(" - ", "-", .)} %>%
  strapplyc("^([^/]+)") %>% unlist()
muzeji$Leto <- muzeji$Leto %>% as.character() %>% strapplyc("([0-9]+)") %>%
  unlist() %>% as.numeric()

Sedaj lahko narišeš podatke za leto 2014 (ali pa katero drugo leto) tako, da svoje podatke pridružiš zemljevidu (right_join je potreben, da se ohranijo vse občine, tudi če zanje nimaš podatkov):

ob <- pretvori.zemljevid(obcine)
zem <- ggplot() + geom_polygon(data = muzeji %>% filter(Leto == 2014) %>%
                                 right_join(ob, by = c("Obcina" = "OB_UIME")),
                               aes(x=long, y=lat, group=group, fill=Stevilo),
                               color= "red") +
  scale_fill_gradient(low="#3F7F3F", high="#00FF00") +
  guides(fill=guide_colorbar(title = "Muzeji 2014"))
print(zem)

Seveda v končni fazi premakni ukaz print na želeno mesto v poročilu.