Closed juresternad closed 3 years ago
Vidim, da imaš kodo za uvoz podatkov v datoteki poskus.R
, ki pa ni v nobeni mapi, zato jo raje premakni v ta namen ustvarjeno mapo uvoz
. Prav tako lahko knjižnice, ki jih potebuješ in jih imaš napisane na začetku premakneš v datoteko libraries.r
v mapi lib
in potem pred začetkom dela samo poženeš to datoteko.
Prav tako ne najdem mape podatki
, kjer naj bi bile csv datoteke, ki jih potem kličeš v datoteki poskus.R
. Tako, da ne morem zares videti za kakšne tabele gre in kako bi jih bilo najbolje urediti.
Kodo za uvoz imam zaenkrat raje še v datoteki poskus.R
, da lahko sproti, ko urejam podatke pogledam še kako so uvoženi podatki v originalni datoteki. Ko bo moja koda končana jo bom pa seveda premaknil v datoteko uvoz.R
. Knjižnice pa sem že premaknil.
Na gitu pa sem tudi posodobil mapo podatki, ki sem jo zgleda prejšnič pozabil, tako da bi zdaj moralo biti vse posodobljeno.
Najlepša hvala za pomoč.
Sem mislila samo, da datoteko poskus.R
premakneš v mapo uvoz
, datoteko uvoz.r
lahko seveda zaenkrat pustiš takšno kot je, da ti je v pomoč.
Glede urejanja tabel:
Imena stolpcev naj bodo brez presledkov, npr. Stevilo_zabelezenih_okuzb
namesto Stevilo zabelezenih okuzb
. Prav tako naj se imena stolpcev ne začnejo s številko, - pa zamenjaj s _ (npr. v tabeli slovenija
torej Prvi_Kvartal_2018
namesto 2018-1.Kvartal
).
Tabele drzava.csv, bdp.csv in potrosnja.csv se uvozijo na podoben način, zato bi bilo manj dela, če definiraš funkcijo, ki kot spremenljivko sprejme ime csv datoteke. Potem lahko to funkcijo uporabiš za vse tri tabele.
uvozi <- function(ime_datoteke) {
ime <- paste0("podatki/",ime_datoteke,".csv")
tabela <- read_csv(ime, locale=locale(encoding="Windows-1250"))
tabela$TIMEPERIOD <- eksel$TIME
tabela$TIMEPERIOD[tabela$TIMEPERIOD == "Germany (until 1990 former territory of the FRG)"] <- iconv("Germany")
tabela$TIMEPERIOD[tabela$TIMEPERIOD == "European Union - 27 countries (from 2020)"] <- iconv("European Union")
return(tabela)
}
drzava <- uvozi("drzava")
bdp <- uvozi("bdp")
potrosnja <- uvozi("potrosnja")
Če želiš odstraniti vrstice, je najlažje, da to narediš kar na vsaki tabeli posebej:
bdp <- bdp[-c(9,10,15),]
potrosnja <- potrosnja[-c(9,10,15),]
drzava <- drzava[-c(9,10,15),]
Druga možnost bi recimo bila funkcija oblike:
odstrani <- function(tabela){
tabela <- tabela[-c(9,10,15),]
}
bdp <- odstrani(bdp)
drzava <- odstrani(drzava)
potrosnja <- odstrani(potrosnja)
V primeru, ko uporabiš lapply imaš več dodatnega dela, saj jo najprej uporabiš na seznamu tabel, potem pa moraš te tabele še nekako dobiti ven in jih pretvoriti v data.frame.
Glede preimenovanja stolpcev se mi zdi trenutno način popolnoma ustrezen (samo imena stolpcev naj bodo v skladu z zgornjim).
Kaj pa si želel narediti s funkcijo urejanje.podatkov
?
Super, ravno z definicijo funkcije za uvoz sem imel probleme. Zdaj, ko sem naredil kot zgoraj , pa deluje tako kot sem hotel. Popravil sem tudi imena stolpcev, odstranjevanje vrstic pa sem dal kar v funkcijo uvoza in lepo deluje.
S funkcijo urejanje.podatkov
sem poskušal podatke v tabelah bdp, drzava, potrosnja, ki so v obliki npr. "1234.56e" spraviti v obliko "1234,56", saj "e" pomeni "estimated" in sem to mislil zanemariti, ker bi kasneje s temi podatki tudi računal.
Funkcija, ki je trenutno napisana pa mi odreže tudi neceli del števila, česar nočem. Imaš mogoče še kakšno idejo kako bi mi to uspelo narediti?
Podobno sem mislil napisati tudi funkcijo, ki bi v tabeli "zdruzeni" podatke v stolpcema stevilo_zabelezenih_okuzb in populacija iz oblike "12,34" pretvorila v "12.34", saj bi tudi te podatke kasneje uporabil za računanje.
V funkciji uvozi
je vejica na napačnem mestu, ker želiš odstraniti vrstice in ne stolpce. Pravilno je torej:
tabela <- tabela[-c(9,10,15),]
Tabela Zdruzeni
je definirana kasneje kot pa jo urejaš, tako da moraš samo obrniti vrstni red kode.
Glede urejanja podatkov:
najprej moraš še pri samem uvozu dodati kateri znaki predstavljajo NA, v tvojem primeru je to dvopičje. Spremeniš naslednjo vrstico:
tabela <- read_csv(ime, locale=locale(encoding="Windows-1250"), na = c(":"))
Same številke bo pa najlažje urediti, če najprej tabelo spremeniš v obliko tidy data (kot morajo vse biti na koncu). Na koncu funkcije uvozi
torej dodaš
tabela <- tabela %>% pivot_longer(!TIMEPERIOD, names_to="Kvartal", values_to="Stevilo")
Zdaj moraš popraviti samo en stolpec:
tabela$Stevilo <- str_extract(tabela$Stevilo, "\\d+\\.*\\d*")
tabela$Stevilo <- as.numeric(tabela$Stevilo)
Končna funkcija uvozi
torej zgleda nekako tako:
uvozi <- function(ime_datoteke) {
ime <- paste0("podatki/",ime_datoteke,".csv")
tabela <- read_csv(ime, locale=locale(encoding="Windows-1250"), na = c(":"))
tabela$TIMEPERIOD <- eksel$TIME
tabela$TIMEPERIOD[tabela$TIMEPERIOD == "Germany (until 1990 former territory of the FRG)"] <- iconv("Germany")
tabela$TIMEPERIOD[tabela$TIMEPERIOD == "European Union - 27 countries (from 2020)"] <- iconv("European Union")
tabela <- tabela[-c(9,10,15),]
tabela <- tabela %>% pivot_longer(!TIMEPERIOD, names_to="Kvartal", values_to="Stevilo")
tabela$Stevilo <- str_extract(tabela$Stevilo, "\\d+\\.*\\d*")
tabela$Stevilo <- as.numeric(tabela$Stevilo)
return(tabela)
}
Sem popravil in preuredil kodo, v tabele pa sem dodal tudi stolpce, ki kažejo povprečno rast bdp, potrosnje in drzave. Ali lahko prosim pogledaš, če so tabele zdaj v pravilni obliki, ali bi jih moral spraviti v drugačno obliko?
Sem pogledala in se mi zdi, da so tabele v primerni obliki. Morda edino ne potrebuješ rasti že kar v originalni tabeli, saj so to neke vrednosti, ki se jih da poračunati iz vrednosti v tabeli. Lahko bi recimo naredil novo tabelo, kjer bi imel samo rasti v letih 2019 in 2020, ampak za vse tri podatke, torej bdb, drzava in potrosnja, če bi recimo to kasneje želel primerjati. Vendar pa je to malo odvisno od tega katere podatke boš želel prikazati, tako da lahko zaenkrat pustiš kot je in boš kasneje videl kaj je najboljše.
Malo sem vseeno še preuredil tabele, ker sem opazil da prejšnja oblika ni bila najbolj primerna za vizualizacijo podatkov. Vseeno sem pustil podatke o rasti v tabelah. Posodobil sem tudi projekt.Rmd
in končal z drugo fazo. Najlepša hvala za vso pomoč!
V projektu imam tri podobne tabele, zato jih poskušam urejati tako, da napišem funkcijo, ki neko specifično urejanje opravi (npr. odstranitev vrstice) in nato definiram seznam tabel (list(tabela1,tabela1)) in uporabim lapply. Pri nekaterih urejanjih npr. colnames(tabela) <- c(imena) pa mi že same definicije funkcije ne uspe narediti tako, da bi vrnila prenovljeno tabelo. Kot razumem postopek opravi, ampak rezultata ne shrani. Bi se dalo to kako popraviti, ali moram ročno urejati vsako tabelo posebej? Podobno težavo imam tudi pri preimenovanju posameznih elementov v tabeli npr. tabela(1,2) <- "ime".