EnjaErker / APPR-2019-20

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

Vizualizacija #2

Open EnjaErker opened 4 years ago

EnjaErker commented 4 years ago

@jaanos
Zanima me, kako bi lahko iz tabele vodovod skonstruirala podtabelo s stolpci z leti (2002, 2003, ... 2008) in štirimi vrsticami za gostoto prebivalstva (zelo redka, redka, gosta, zelo gosta). Za elemente v tabeli pa bi želela imeti povprečne vrednosti števila vodovodov (npr. povprečno število vodovodov v občinah z gosto poselitvijo leta 2007). Tako tabelo bi namreč kasneje potrebovala za črtni diagram. Poskusila sem z izbiro posameznih stolpcev in nato štetjem občin, ki pašejo v posamezno skupino vendar je delo zelo zamudno. Zanima me, če imate morda kakšno idejo kako bi to težavo rešila učinkovitejše? Koda za dostop do datoteke vodovod je v mapah uvoz.r in analiza.r pod komentarjem #NAPELJAVE. Vnaprej hvala za vaš odgovor.

timotejvesel commented 4 years ago

Naj najprej povem, da močno priporočam, da upoštevaš pripombe (imena brez šumnikov in presledkov, ...) iz https://github.com/EnjaErker/APPR-2019-20/issues/1. \ Opozoril bi še, da podatki niso v obliki tidy data. Za pretvorbo v to obliko lahko uporabiš funkcijo gather. Primer uporabe na tabeli napeljave:

napeljave <- napeljave %>% 
  gather(key="leto.tip", value="stevilo", -Obcina) %>%
  separate(leto.tip, c("leto", "tip"), "(?<=[0-9]) ")

S pretvorbo v obliko tidy data se seveda izogneš tudi pisanju zamudnih funkcij, kot je na primer funkcija naredi.podtabelo.vodovoda. \ Koda za želeno tabelo :

napeljave <- napeljave %>% 
  gather(key="leto.tip", value="stevilo", -Obcina) %>%
  separate(leto.tip, c("leto", "tip"), "(?<=[0-9]) ")

vodovod <- napeljave %>% filter(tip == "Vodovod")

kazalniki <- kazalniki %>% gather(key = "tip", value = "vrednost", -Obcina)

gostota <- kazalniki %>% filter(tip == "Gostota prebivalstva (preb/km2)")

vodovod <- vodovod[,-3]
gostota <- gostota[,-2]
gostota$Obcina <- gsub("Koper/Capodistria1)", "Koper/Capodistria", gostota$Obcina)
gostota$Obcina <- gsub("Ankaran/Ancarano1)", "Ankaran/Ancarano", gostota$Obcina)
gostota$Obcina <- gsub("Trebnje2)", "Trebnje", gostota$Obcina)
skupna <- left_join(vodovod,gostota,by="Obcina")
colnames(skupna) <- c("obcina", "leto", "stevilo", "gostota")

levels <- c(0,261,521, 780, Inf)
labels <- c("zelo_redka", "redka", "gosta", "zelo_gosta")
skupna <- skupna %>% mutate(skupina = cut(gostota, levels, labels = labels))
skupna$stevilo <- parse_integer(skupna$stevilo)
leta.skupine <- skupna %>% group_by(leto, skupina) %>% summarise(povprecje = mean(stevilo))

Še graf:

leta.skupine$leto <- parse_integer(leta.skupine$leto)
graf <- ggplot(leta.skupine) + aes(x=leto, y=povprecje, color=skupina) + geom_line() + geom_point()
EnjaErker commented 4 years ago

Hvala za hiter odgovor in pomoč. Bom popravila najprej šumnike in presledke, potem pa še kodo za tabelo vodovod.

EnjaErker commented 4 years ago

Za tabeli napeljav in kazalnikov mi je sedaj uspelo skonstruirati želene podtabele in iz njih grafe. Vendar pa imam težavo pri urejanju tabele za pomankljivosti (v analiza.r na koncu). Tabelo sem poskusila pretvoriti v obliko tidy data in me zanima, če je moja pretvorba ustezna? Poleg tega sem na prejšnji tabeli (ko ta še ni bila v obliki tidy data), naredila nov stolpec okvirnega deleža stanovanj z vsaj eno pomankljivostjo. Nato sem ocenila kritičnost posamezne občine glede na slovensko povprečje. Zdaj ko pa imam tabelo v novi obliki, ne vem kako bi to ponovno naredila. Prosila bi, če lahko malo pogledate moj repozitorij in svetujete, kako naj se lotim izračuna deležev stanovanj? Vnaprej hvala za odgovor.

timotejvesel commented 4 years ago

Pretvorba v tidy data je, mislim da, ustrezna. \ Nisem prepričan, da povsem razumem kako želiš izračunati ta delež (verjetno je problem, da se stanovanja po različnih kategorijah pomanjkljivosti prekrivajo). Če bi na primer vzela razmerje "največje" pomanjkljivost v mestu in števila vseh stanovanj v mestu, bi lahko naredila sledeče (domnevam, da centralno_ogrevanje pomeni število stanovanj brez centralnega ogrevanja?):

delezi <- pomankljivosti %>% group_by(Obcina) %>% top_n(2) %>% summarise(delez = min(vrednost)/max(vrednost))

Občine lahko potem razdeliš na kritične skupine podobno kot npr. pri gostoti kanalizacije. Če pa si imela v mislih kaj drugega, pa napiši.

EnjaErker commented 4 years ago

Hvala za hiter odgovor. Ja, točno to sem imela v mislih. Sem poskusila narediti na podatkih in deluje, zdaj bom pa poskusila razdeliti še na kritične skupine. Najlepša hvala.