vidamaver / APPR-2017

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

3. faza #2

Closed vidamaver closed 7 years ago

vidamaver commented 7 years ago

Pozdravljeni, imam več vprašanj in sicer:

Lep pozdrav

jaanos commented 7 years ago

Najprej pred združevanjem podatkov poskrbi, da se imena držav (oziroma po čemerkoli združuješ) ujemajo. Tako bo potrebno narediti:

tabela2$drzava <- gsub("^Germany.*$", "Germany", tabela2$drzava) # tvoji podatki
evropa$name_sort <- gsub("^Slovak Republic$", "Slovakia", evropa$name_sort) %>% factor() # zemljevid

Potem lahko poračunaš skupne izpuste na površino:

izpusti.povrsina <- tabela2 %>% group_by(drzava) %>%
  summarise(kolicina = sum(kolicina_v_tonah)) %>% inner_join(tabela_povrsin) %>%
  transmute(drzava = factor(drzava, levels = levels(evropa$name_sort)),
            izpusti = kolicina / povrsina_v_km2)

Najprej se torej za vsako državo izračuna vsota vseh izpustov za vsa leta, nato se pa pridruži še tabela površin (po skupnem stolpcu z imenom drzava, tako da tega ni bilo potrebno posebej navajati). Nazadnje se še izbereta stolpca drzava, ki ga pretvoriš v faktor z istimi vrednostmi kot v zemljevidu (za bolj učinkovito združevanje), in izpusti, ki je želeni podatek.

Dve opombi: za Turčijo in Ciper nimaš podatka o površini - lahko ga na roko dodaš v razpredelnico tabela_povrsin pred združevanjem. Poleg tega za Srbijo nimaš podatkov za vsa leta, zato za vsoto dobiš NA. Svetoval bi, da morda najprej narediš vsote čez vse panoge za vsako leto, potem pa izračunaš povprečje teh vsot, pri čemer vrednosti NA ignoriraš (uporabi mean s parametrom na.rm = TRUE) - dvakrat torej naredi group_by in summarise (glej spodaj za primer).

Sedaj lahko še izrišeš zemljevid:

ggplot() + geom_polygon(data = left_join(evropa, izpusti.povrsina,
                                         by = c("name_sort" = "drzava")),
                        aes(x = long, y = lat, group = group, fill = izpusti)) +
  coord_map(xlim = c(-25, 40), ylim = c(32, 72))

Opozoril bi na to, da ima Malta daleč največji količnik med izpusti in površino - svetoval bi, da jo izločiš iz podatkov, da bo lažje razlikovati med ostalimi odtenki (v poročilo pa vseeno napiši, kaj si naredila).

Grafa g2 sicer ne vidim v tvoji kodi (najbrž še nisi commitala), bi pa šlo nekako tako:

ggplot(tabela2 %>% filter(drzava == "Slovenia") %>% group_by(leto) %>%
         summarise(izpusti = sum(kolicina_v_tonah)),
       aes(x = leto, y = izpusti)) + geom_line()

Pri tipu izpusta se zgodi, da je izpustov ogljikovega dioksida neprimerno več od ostalih izpustov, tako da lahko ta graf prikažeš posebej. Preostale izpuste lahko prikažeš na enem grafu:

ggplot(tabela2 %>% filter(tip_izpusta != "Carbon dioxide") %>% group_by(leto, tip_izpusta) %>%
         summarise(izpusti = sum(kolicina_v_tonah, na.rm = TRUE)),
       aes(x = leto, y = izpusti, color = tip_izpusta)) + geom_line()

Zaradi manjkajočih podatkov je pri sum uporabljen parameter na.rm = TRUE. Pri uporabi tega je potrebno paziti, da so podatki še vedno primerljivi (npr. če bi kje manjkal podatek o kakšni državi, ki znatno vpliva na izpuste).

Stolpčni graf panog lahko narišeš tako:

ggplot(tabela2 %>% group_by(leto, podrocje_industrije) %>%
         summarise(izpusti = sum(kolicina_v_tonah, na.rm = TRUE)) %>%
         group_by(podrocje_industrije) %>%
         summarise(povprecni_izpusti = mean(izpusti), na.rm = TRUE),
       aes(x = podrocje_industrije, y = povprecni_izpusti)) + geom_bar(stat = "identity")

Parameter stat = "identity" pri geom_bar pomeni, naj se uporabijo podatki, podani k parametru y v aes - v nasprotnem primeru bi višina stolpca odražala število podatkov. Tukaj se pojavi problem, da je panog veliko, njihova imena pa so dolga, zato je legenda povsem neberljiva. Zato bo bolje, če narediš več stolpčnih grafov, kjer prikažeš panoge z bolj primerljivimi izpusti (podatke si pripravi vnaprej, potem pa s filter izberi želene panoge). Če hočeš potem spremeniti prikazana imena, grafu prištej še

scale_x_discrete(labels = oznake)

kjer je oznake vektor želenih oznak (naj bodo kar v slovenščini). Če bi jih rada zarotirala, lahko prišteješ še

theme(axis.text.x = element_text(angle = 90, hjust = 1))
vidamaver commented 7 years ago

Zdravo,

težave imam še pri drugem grafu, torej g2 in sicer z izračunom vseh tipov izpustov za posamezno državo skupaj (po vseh panogah) za vsako leto , glede na površino (da bi naredila črtne grafe med tremi z največ izpusti in tremi z najmanj, primerljive). Pri zemljevidu imam narejeno za skupno količino izpustov po vseh letih glede na površino države, ne vem pa, kako bi to naredila za vsako leto posebaj?

Imam pa še vprašanje glede poročila. Zaenkrat sem v poročilo pri zemljevidu dala samo kodo za uvoz in za izris zemljevida, kode za poračun skupnih izpustov na površino in česa podobnega pa ne, moram dodati tudi to kodo? Prav tako me to zanima za ostale grafe.

Lep pozdrav.

jaanos commented 7 years ago

Pridruževanje površin narediš na podoben način kot pri zemljevidu:

g2 <- ggplot(tabela2 %>% filter(drzava %in% c("Slovenia", "Croatia")) %>%
               group_by(leto, drzava) %>% summarise(izpusti = sum(kolicina_v_tonah)) %>%
               inner_join(tabela_povrsin),
            aes(x = leto, y = izpusti / povrsina_v_km2, color = drzava)) + geom_line()

Oznake, ki jih prikažeš z xlab, ylab, ggtitle in podobno so mišljene kot berljive za človeka - lahko torej uporabljaš presladke in šumnike.

Mimogrede, iz vizualizacija.r izbriši del, ki je ostal iz vzorca. Ta program tudi vključi v poročilo, da se bo pognal, ko prevedeš poročilo, npr.

```{r vizualizacija, echo=FALSE, message=FALSE}
source("vizualizacija/vizualizacija.r", encoding = "UTF-8")
```

V poročilo samo ne vključuj kode, ki jo imaš že drugje (razen, če bi jo rada prikazala), pač pa na želenem mestu samo npr. prikažeš graf, ki si ga pred tem pripravila (lahko bi sicer kodo za pripravo grafa vključila tudi v poročilo). Da ti bo kodo izvedlo, mora blok kode biti označen z {r ime, ...} - tako kot zgoraj (RStudio ti ga potem obarva sivo). Dodatno lahko podaš še napis pod sliko (potem ggtitle ni potreben):

```{r g2, echo = FALSE, fig.align = 'center', fig.cap = 'Skupno količinsko spreminjanje zračnih emisij po državah'}
g2 + xlab("leto") + ylab("količina v tonah")
```

Pazi, da daš vsakemu bloku drugačno ime (lahko pa imaš več blokov brez imena).

vidamaver commented 7 years ago

Hvala, sem popravila. Je poročilo sedaj take oblike kot mora biti ali menite, da moram še kaj popraviti?

jaanos commented 7 years ago

Del v zavitih oklepajih v vsakem bloku kode naj bo v isti vrstici kot začetni ``` - blok kode bo potem imel sivo ozadje. Poskrbi še, da bo vsak graf v svojem bloku kode (tako da ima lahko vsak še besedilo/naslov). Da vidiš, kako bo poročilo izgledalo, klikni na Run Document.

Mimogrede, blok kode z imenom z je prazen - najbrž si hotela tam izrisati zemljevid. Svetoval bi še, da se izogneš eksponentni notaciji v oseh grafov - če imaš npr. podatke v rangu nekaj milijard (e+09), te podatke deli z milijardo (npr. pri g31 lahko podaš y = kolicina / 1e9), pri oznaki osi pa napiši, da gre npr. za milijardo ton.

vidamaver commented 7 years ago

Ne vem zakaj je blok kode z imenom z prazen, v vizualizaciji imam tako: z = ggplot() + geom_polygon(data = left_join(evropa, izpusti.povrsina, by = c("name_sort" = "drzava")) %>% filter(name_sort != "Malta"), aes(x = long, y = lat, group = group, fill = izpusti)) + coord_map(xlim = c(-25, 40), ylim = c(32, 72))

Zato sem dala v poročilo:

Ko kliknem Run document pa mi poročila ne prikaže ampak napiše: Package or namespace load failed for 'dplyr'.

vidamaver commented 7 years ago

Sem naložila še paket tibble, poročilo mi sedaj pokaže. Zemljevida pa še vedno ne izriše.

vidamaver commented 7 years ago

V poročilu imam v bloku kode za zemljevid sledečo kodo znotraj narekovajev: {r z, echo = FALSE, fig.align = 'center', fig.cap = 'Skupna količina zračnih emisij po državah'}

(v dveh komentarjih zgoraj sem skopirala skupaj z narekovaji in je ni izpisalo)

jaanos commented 7 years ago

Kar imaš, je samo glava bloka kode - manjka ti vsebina. Glede na to, da zemljevid že imaš v spremenljivki z, naj blok kode izgleda tako:

    ```{r z, echo = FALSE, fig.align = 'center', fig.cap = 'Skupna količina zračnih emisij po državah'}
    z

Sicer pa je v Markdownu (ki se uporablja na GitHubu v zadevah in `README.md`, in je hkrati osnova za RMarkdown, v katerem je poročilo) zaporedje znakov \`\`\` rezervirano za začetek in konec blokov kode - tako kot zgoraj (na tem mestu sem moral pred vsakega postaviti še `\`, da se prikaže kot tak). Sama si podala prazen blok kode, zato je naredilo samo siv okvir (glava se ne prikaže). Če hočeš, da se ti na GitHubu koda lepo prikaže, lahko torej narediš
```markdown
    ```R
    x <- paste("koda", "v", "R")

(brez presledkov na začetku vrstic) - tukaj `R` označuje jezik, v katerem pišeš, da se koda ustrezno obarva. Preden objaviš komentar, lahko klikneš na *Preview*, da vidiš, kako bo komentar izgledal.
vidamaver commented 7 years ago

Razumem, sedaj dela v redu. Najlepša hvala za vso pomoč!