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

Shiny in nekaj drugih težav. #3

Closed vidamaver closed 6 years ago

vidamaver commented 7 years ago

Pozdravljeni,

v tabela_povrsin in izpusti.povrsina imam večkratne podatke za Ciper in Turčijo in ne vem zakaj, oziroma ne vem, kako bi to popravila.

Pri grafu g32 sem angleške oznake v legendi skušala preimenovati v Slovenščino, pa mi ne gre skozi, nekaj imam očitno narobe?

Največ težav pa imam s shiny-jem. Rada bi naredila "aplikacijo", kjer izbereš državo, prikaže pa skupne izpuste glede na površino te države in sicer na x - osi bi imela leta, na y - osi pa količino teh izpustov. Tako bi za vsako državo videla trende padanja ali morebitnega naraščanja zračnih emisij. Ko trenutno poženem mi napiše: There is no package called 'DT'.

Lep pozdrav

jaanos commented 7 years ago

Kolikor vidim, tabela površin evropskih držav, ki jo uvažaš, navaja samo površino v Evropi - države, ki ležijo pretežno izven Evrope, so označene z zvezdico (med njimi Turčija), medtem ko Cipra ni v seznamu. Zato v vizualizacija.r na roko dodaš podatka za ti državi. Države z zvezdico lahko odstraniš, npr.

tabela_povrsin <- tabela_povrsin %>% filter(! grepl("[*]", drzava))

Za prevajanje oznak bo najbolje, če si pripraviš slovar kot vektor z imeni, ki ga v grafih indeksiraš s svojimi vrednostmi, npr.

slovar <- c("Methane" = "Metan",
            "Nitrogen oxides" = "Dušikov monoksid",
            "Nitrous oxide" = "Didušikov oksid")

g32 <- 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 / 1e6, color = slovar[tip_izpusta])) + geom_line() + 
  guides(color = guide_legend(title = "Tip izpusta")) + ylab("izpusti v milijonih ton")

V poročilu je odveč znak + na začetku vrstice, kjer kličeš shinyAppDir. Knjižnice DT verjetno nimaš nameščene, tako da jo namesti (Tools / Install Packages...). Sicer pa to knjižnico potrebuješ samo za prikaz interaktivnih tabel - iz vzorca je ostal klic funkcije DT::dataTableOutput v ui.R.

Sicer pa v ui.R poskrbiš za izgled aplikacije - tja postavi vhodne (*Input) in izhodne (*Output) elemente. Vsak ima za prvi argument svoje ime - to se ujema s polji objekta input oziroma output v server.R. Npr. selectInput z imenom drzava postavi na želeno mesto v ui.R, potem pa v output$drzava (tega definiraj samo enkrat v server.R - za renderPlot manjka zavit oklepaj) uporabi input$drzava za filtriranje po državi (trenutno se sklicuješ na t, ki pa ni definiran - lahko ga nadomestiš s tvojimi podatki). Potem lahko v ui.R s plotOutput$drzava izrišeš graf.

vidamaver commented 7 years ago

Sem dodala dodatno vrstico za izbris držav z zvezdico, vendar pa imam še vseeno Turčijo in Ciper kar 6x zapisano v tabela.povrsin ...

S slovarjem sedaj deluje, hvala.

Shiny sem poskušala popraviti, vendar še vedno ne vem kaj mi manjka oziroma kaj delam narobe. Sedaj mi javlja napako: object 'output' not found.

jaanos commented 7 years ago

Sklepam, da na obstoječih podatkih vsakič znova poganjaš vizualizacija.r in se ti zato Turčija in Ciper vsakič znova dodasta. V izogib temu svetujem, da dodajanje (in brisanje držav z zvezdico) opraviš v uvoz1.R, takoj po uvozu razpredelnice.

V ui.R naj bo samo postavitev gradnikov aplikacije - vse delo (filtriranje, izrisovanje grafov) naj poteka v server.R. Minimalno delujočo različico lahko dobiš tako, da v server.R postaviš npr.

library(shiny)

shinyServer(function(input, output) {
  output$drzava <- renderPlot({
    ggplot(tabela2 %>% filter(drzava == input$drzava) %>% group_by(drzava, leto) %>%
             summarise(izpusti = sum(kolicina_v_tonah)) %>% inner_join(tabela_povrsin),
           aes(x = leto, y = izpusti/povrsina_v_km2)) + geom_line() +
      ggtitle("Zračne emisije na površino izbrane države") +
      xlab("leto") + ylab("količina zračnih emisij")
  })
})

v ui.R pa

library(shiny)

shinyUI(fluidPage(
    titlePanel("Zračne emisije po državah"),
    sidebarPanel(
      selectInput("drzava", label = "Izberi državo",
                  choices = c("Vse", levels(izpusti.povrsina$drzava)))
      ),
    mainPanel(plotOutput("drzava"))
  )
)
vidamaver commented 7 years ago

Sem prestavila vrstici kode v uvoz1.R pa je še vedno enako kot prej, Turčija in Ciper sta navedeni 6x.

V poročilu ko poženem, mi pod možnosti za izbiro države navaja tudi neke države, za katere podatka sploh nimam (npr. Jersey) in mi seveda tudi grafa ne izriše. Lahko to kako popravim, da bodo kot možna izbira možne le države za katere bo dejansko graf izrisalo?

jaanos commented 7 years ago

Še enkrat poženi uvoz1.R in nato vizualizacija.r - tako se bodo podatki znova uvozili in vrstici se bosta dodali samo enkrat.

Trenutno za seznam držav uporabljaš seznam možnih vrednosti (levels) faktorske spremenljivke drzava v razpredelnici izpusti.povrsina - te so prišle iz zemljevida, zato imaš tam vse države, tudi če zanje nimaš podatkov. Če hočeš uporabiti dejanske vrednosti v tem stolpcu, jih bo treba pretvoriti v nize - to najlažje narediš tako, da levels nadomestiš s parse_character.

vidamaver commented 7 years ago

Najlepša hvala za vso pomoč.

Projekt menim da imam sedaj v končni verziji. Kam naložim ali pustim tako kot je?

jaanos commented 7 years ago

Projekt imaš že naložen na GitHubu, tako da bom dodal povezavo na repozitorij za zagovore. S profesorjem se lahko domeniš za termin zagovora.

Imam samo še dve pripombi:

vidamaver commented 7 years ago

Sem popravila, sedaj sem nastavila na Slovenia, vendar mi ne izriše nič, ko poženem poročilo. Sedaj je samo prazno in možno za izbiro države ...

jaanos commented 7 years ago

Privzeto izbiro določiš s parametrom selected, npr.

    selectInput("drzava", label = "Izberi državo:",
                choices = parse_character(izpusti.povrsina$drzava),
                selected = "Slovenia")

Tako bo tudi Slovenija na svojem mestu po abecedni ureditvi.

vidamaver commented 7 years ago

Hvala, izgleda sedaj ok?

jaanos commented 7 years ago

Sedaj izgleda OK, tako da bom posodobil povezavo. Če boš še kaj spreminjala, mi javi, da to ponovno storim.

Morda še ena pripomba: pri stolpčnih grafih g42 in g43 ti na levi odreže oznake, zato svetujem, da povečaš kot rotacije besedila (morda celo na 90 stopinj). Da ne bodo zelo dolge oznake vzele preveč prostora, lahko vanje vrineš prelom vrstice (\n), npr.

"Dejavnosti socialnega dela\nin varstva za človekove pravice"
vidamaver commented 7 years ago

Sem popravila.

jaanos commented 7 years ago

V redu, sem posodobil.