janpristovnik / 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 #3

Open janpristovnik opened 7 years ago

janpristovnik commented 7 years ago

Opazil sem, da pri mojih tabelah (BDP, število prebivalcev, stopnja izobrazbe) ne sortira vedno po državi, ali obstaja kakšnen ukaz, ki bi mi tabelo vedno naredil urejeno po prav določenem stolpcu?

Za graf pa sem razmišljal, da bi naredil (stopnja izobrazbe v posamezni državi(vsota končanih diplomskih, magisterskih, doktorskih nalog))/ (številu prebivalcev države) v odvisnosti od %BDPja države namenjenega za šolstvo. Moja tabela Tip_izobrazevanja je sestavljena Leto, država, tip izobraževanja(diplomski, magisterski, doktorski študij), število posameznih opravljenih stopenj. Ali je najlažje narediti novo tabelo, kjer bom imel samo leto, državo, število opravljenih visokošolskih študijev ali lahko direktno, ko delam graf nekako pripeljem to vsoto notri?

jaanos commented 7 years ago

Urejenost podatkov v podatkih načeloma ni pomembna. Če jih želiš urediti, npr. za prikaz, lahko uporabiš funkcijo arrange iz knjižnice dplyr, npr.

# uredi najprej naraščajoče po državi in nato padajoče po letu
Tip_izobrazevanja %>% arrange(Drzava, desc(Leto))

Podatke lahko spraviš skupaj v trenutku, ko jih potrebuješ, torej ko rišeš graf. Če boš iste izpeljane podatke večkrat uporabil, se seveda izplača sestaviti novo tabelo. Če želiš torej poračunati skupno število opravljenih študijev, lahko to narediš tako:

Tip_izobrazevanja %>% group_by(Leto, Drzava) %>% summarise(Stevilo = sum(Stevilo))

Potem to še pridružiš k podatkom za BDP (z inner_join) in uporabiš kot podatke za graf.

janpristovnik commented 7 years ago

Graf sem malo spremenil in predstavlja Število končanih visokošolskih izobrazb na prebivalca v odvisnosti od parih izbranih držav. Podatke pa imam za leta 2013, 2014,2015. In imam sedaj v grafu za vsako državo 3 pike. Neznam pa narediti, da bi te pike obarval, v odvisnosti od leta, recimo leto 2013 bi bila rdeča pika, 2014 modra pika itd. In potem še naredil legendo zraven grafa, ki bi povedala katera barva spada h kateremu letu.

jaanos commented 7 years ago

Najprej - da ne bo prihajalo do opozoril - že pri uvozu poskrbi za pravilno branje številk. Sproti lahko tudi izpustiš neželene stolpce:

stevilo_prebivalcev <- read_csv("podatki/demo_gind_1_Data.csv", na = ":",
                                col_names = c("Leto", "Drzava", "1", "Stevilo_preb", "2"),
                                skip = 1, locale = locale(grouping_mark = ",")) %>%
  select(Leto, Drzava, Stevilo_preb)

Da ti podatke ustrezno obarva, v aes dodaj parameter color (za točke, črte in robove) oziroma fill (za površine) z imenom spremenljivke, glede na katero barvaš. Če imaš na osi x grafa kategorično spremenljivko, bo sicer bolje, če imaš stolpčni graf namesto točkovnega, npr.

prvi_graf <- ggplot(zdruzeno, aes(x = Drzava, y = Stevilo_koncanih/Stevilo_preb,
                                  fill = factor(Leto))) +
  geom_bar(stat = "identity", position = "dodge") +
  xlab("Drzave") + ylab("Stevilo koncanih izobrazb na prebivalca") +
  guides(fill = guide_legend("Leto"))

Tukaj se iz stolpca Leto naredi faktor, da obravnava vsako leto ločeno in ne kot zvezno spremenljivko (v tem primeru bi imel tudi zvezno barvno lestvico). Funkcija guides potem poskrbi za oblikovanje legende - v tem primeru samo postavi ustrezen naslov. Pri geom_bar parameter stat = "identity" pomeni, da so vrednosti podane kot y (sicer bi vrednosti bile enake številu vrstic v kategoriji), position = "dodge" pa pomeni, da se stolpci izrišejo en zraven drugega (sicer bi se izrisali en nad drugim).

Glede preimenovanja in oblikovanja oznak glej vidamaver#2. Svetujem sicer, da ime za Nemčijo spremeniš že v podatkih, saj je po nepotrebnem dolgo in bo morda tako ali tako treba to narediti, če boš združeval s kakšnimi podatki iz drugih virov.

janpristovnik commented 7 years ago

Sem popravil stolpce, spremenil ime za Nemčijo in naredil graf kot ste mi poslali. Mi pa tudi ko vašo kodo za "stevilo_prebivalcev <- read_csv....." kopiram notri javlja opozorila. Ali to ne poskrbi za pravilno branje števil?

jaanos commented 7 years ago

Ko poženem poročilo, dobim samo obvestila tipa

Parsed with column specification:
cols(
  Leto = col_integer(),
  Drzava = col_character(),
  `1` = col_character(),
  `2` = col_character(),
  Milijoni_evrov = col_number(),
  `3` = col_character()
)

To ni napaka - read_csv samo pove, kako je razumel prebrane stolpce, da lahko hitro vidiš, če gre kje kaj narobe.

Ali dobivaš slučajno še kakšna druga obvestila?

janpristovnik commented 7 years ago

Ko zaženem datoteko druga_faza, kjer sedaj delam tudi tretjo fazo dobivam obvestila :

" Warning: 14 parsing failures. row col expected actual 23 -- a number
46 -- a number
47 -- a number
48 -- a number
55 -- a number
... ... ........ ...... .See problems(...) for more details. Warning: 12 parsing failures. row col expected actual 48 -- a number
49 -- a number
64 -- a number
95 -- a number
100 -- a number
... ... ........ ...... .See problems(...) for more details. Joining by: c("Leto", "Drzava")"

Imam pa še eno težavo, v dveh tabelah sem brez problema zamenjal imena v Germany, kjer je bilo prej daljše ime. V tabeli delez.za.izobrazevanje.tidy pa so imena držav faktorji in ko sem poizkušal to narediti preko : "delez.za.izobrazevanje.tidy[5,2] <- "Germany" " Ne deluje.

jaanos commented 7 years ago

Morda nimaš najnovejše različice knjižnice readr. Poskusi jo znova namestiti - mimogrede namesti še knjižnici tibble in dplyr, da ne bi prihajalo do kakšnih problemov. Potem bi moral dobivati obvestila tako kot v prejšnjem komentarju, in dodatna obdelava stolpca Stevilo_koncanih z gsub in parse_number niti ne bo potrebna.

Zamenjava v delez.za.izobrazevanje ti ne deluje, ker imaš države v prvem stolpcu, ne v drugem. Sicer pa predlagam, da raje kot da na roko podajaš vrstice, kjer opravljaš menjavo, delaš gsub na ustreznem stolpcu, npr.

delez.za.izobrazevanje$Drzava <- gsub("^Germany.*$", "Germany", delez.za.izobrazevanje$Drzava)