Open janpristovnik opened 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.
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.
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.
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?
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?
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.
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)
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?