Primena R jezika u osnovnoj statistikoj i grafikoj
- Slides: 124
Primena R jezika u osnovnoj statističkoj i grafičkoj analizi podataka Miljan G. Jeremić Milan Lj. Gocić miljan. jeremic@gmail. com milan. gocic@gaf. ni. ac. rs Knjaževačka gimnazija Građevinsko-arhitektonski fakultet Niš Beograd, 10. februar 2019.
Kome je namenjeno predavanje? v Predavanje je namenjeno nastavnicima koji se po prvi put susreću kako sa okruženjem programskog R jezika, tako i sa analizom podataka. Preduslov v Poznavanje osnova rada s računarom i operativnim sistemom MS Windows v Poznavanje osnova rada na internetu v Minimalno iskustvo u programiranju
Ciljevi predavanja v Upoznati se sa instalacijom i osnovnim okruženjem R jezika i njegovom sintaksom v Upoznati se sa osnovnim mogućnostima R jezika u oblasti statističke analize i grafičke prezentacije podataka v Prikaz praktičnih primera
Struktura predavanja v Uvod u R jezik v Osnove programskog jezika R v Osnovne strukture podataka v Vektor v Lista v Skup podataka v Osnovne statističke funkcije v Grafika u jeziku R
Nauka o podacima i big data v Nauka o podacima (engl. data science) prisutna je u računarstvu oko 50 godina. v U novije vreme izražene su potrebe da se ogromne količine podataka (engl. big data) modeliraju u poslovne svrhe. v Osnovni alati poslovne inteligencije (engl. Business Intelligence) daju zbirne izveštaje, zahtevajući znanja i veštine iz računarstva, matematike i statistike, ali i visok stepen kreativnosti i veština komunikacije. v Primena R jezika u analizi informacija, u cilju praćenja poslovnih rezultata preduzeća i poslovnog odlučivanja.
Šta je nauka o podacima?
Uvod u R jezik v R je programski jezik i okruženje za statistička izračunavanja i vizuelizaciju podataka. v Predstavlja slobodan programski jezik (GNU) što znači da se može slobodno koristiti i distribuirati. v Otvorenog je koda (engl. open-source). v Implementiran je iz jezika S kojeg je razvio John Chambers sa kolegama u Bel laboratorijama, kao i Robert Gentleman sa fakulteta u Oklandu.
Uvod u R jezik v Njegovi tvorci su R. Ihaka i R. Gentleman sa Univerziteta u Aucklandu, Novi Zeland. Ovaj programski jezik je delimično i dobio ime po prvim slovima imena autora. v Lako proširiv sa velikim izborom grafičkih tehnika. v Razvijeno je više stotina specijalizovanih statističkih procedura za širok spektar primena putem pridodatih paketa (engl. contributed packages). v Paketi su slobodno dostupni i mogu se integrisati direktno u R jezik.
Uvod u R jezik v Pruža širok izbor statističkih metoda za linearno i nelinearno modeliranje, klasične statističke testove, analize vremenskih serija ili klasterizaciju. v Do skora je postojalo mišljenje da R jezik koristi uglavnom akademska zajednica, ali se to danas promenilo. v Federalna agencija za lekove (Federal Drug Administration - FDA) identifikovala je delove R jezika pogodnim za tumačenje podataka iz kliničkih istraživanja. v Veliki je broj kompanija (Google, Oracle, Microsoft), koje sada prelaze na R jezik za analizu i prezentaciju svojih podataka.
Izbor algoritama u jeziku R
Prednosti R jezika v Proizvod je međunarodne saradnje vrhunskih statističara i dizajnera programskih jezika. v R je dostupan kao slobodan softver pod uslovima Free Software Foundation GNU. v Dostupan je putem interneta. v Radi na raznim platformama: UNIX (uključujući Free. BSD i Linux), Windows i Mac OS.
Prednosti R jezika v Omogućava statističke analize i vizuelizaciju podataka. v Omogućava rad sa velikim i kompleksnim objektima. v Nudi mogućnost razmene podataka sa drugim programima korišćenjem datoteka različitih formata (MS Excel, teksta, SAS, CSV). v Omogućava pristup bazama podataka (Oracle i MS Access).
Nedostaci R jezika v Postoji slaba podrška analizama korišćenjem grafičkogkorisničkog interfejsa (Graphical User Interface – GUI). v Zahteva pisanje naredbi kako bi se vršile analize i napravila vizuelizacija rezultata.
R – analiza tržišta v Istraživanja upotrebe softverskih alata u oblasti analitike, mašinskog učenja i nauke o podacima pokazuju veću upotrebu različitih metoda direktno iz programskog koda. v Najviše se koriste programski jezici R i Python i njihove programske biblioteke, kao što su Tensorflow i scikit-learn.
R – analiza tržišta
Language Platform What is • The most popular statistical programming language • A data visualization tool • Open source • 2. 5+M users Community Ecosystem • Taught in most universities • New and recent grad’s use it • Thriving user groups worldwide • 8000+ contributed packages • Rich application & platform integration
Četiri trenda transformacije cloud computing 2011 2016 5 x increase data science Universities filling 300, 000 US talent gap big data 90% of the data in the world today has been created in the last two years alone open source including R, Linux, Hadoop
Instalacija R jezika v U internet čitač uneti adresu https: //cran. rproject. org/bin/windows/base/ v Instalirati odgovarajuću verziju koja odgovara vašem operativnom sistemu. v Ako posedujete operativni sistem Windows, treba izabrati verziju R 3. 5. 2 za Windows.
Instalacija R jezika
Koraci tokom instalacije
Pokretanje programa v Nakon instaliranja treba pokrenuti R za unos naredbi i kreiranje statističkih interpretacija i grafika. v U ovom materijalu su naredbe pisane proporcionalnim slovima (na primer, naredba install. packages()). v Sintaksa naredbi pisana je crvenim proporcionalnim slovima sa sivim komentarima za delove koje program ne izvodi. v Izlazni rezultati predstavljeni su plavom bojom.
Radno okruženje
Instalacija RStudio v Instalacija RStudio za Windows: https: //www. rstudio. com/products/rstudio/download/
Upoznavanje sa RStudio IDE
Upoznavanje sa RStudio IDE
R ekosistem Tools -> Install Packages… Image source: The network structure of R packages on CRAN and Bio. Conductor, Andrie de Vries & Joseph Rickert, Microsoft.
CRAN: The Comprehensive R Archive Network
Instaliranje paketa > install. packages(“ggplot 2”) # Uputstvo: ne instaliraju se *svi* R paketi ovako; > installed. packages() # alternativno: > library() > library(ggplot 2) # šta je trenutno u okruženju od paketa > old. packages() # šta je zastarelo? > update. packages() # update svega
Programske biblioteke jezika R v Biblioteka programa na referentnom sajtu trenutno sadrži 11. 682 programska paketa: https: //cran. r-project. org/ v Osim matematičkih i statističkih metoda, veliki broj paketa razvijen je za potrebe istraživanja podataka metodima mašinskog učenja, npr. paketi: q caret (učenje stabala odlučivanja) q random. Forest (učenje slučajnih šuma) q nnet (učenje veštačkih neuronskih mreža) q e 1071 q ksvm (učenje nosećih vektora)
Radni direktorijum v Pre početka rada potrebno je definisati radni direktorijum. v Informacija o trenutnom radnom direktorijumu > getwd() v Postavljanje radnog direktorijuma > setwd("putanja/moj_direktorijum") v Informacije o funkciji koju želimo koristiti dobijaju se unosom upitnika ispred željene naredbe. Na primer, za funkciju lm(): > ? lm
Radni direktorijum > getwd() # ispisuje koji je radni direktorijum > setwd("C: /") # menja radni direktorijum > dir() # ispisuje sadržaj radnog direktorijuma > savehistory() # sprema sve naredbe u radni direktorijum > loadhistory() # učitava spremljene naredbe
Spremanje radnog prostora > ls() ili objects() # daje listu svih objekata > rm(a) # briše objekat a > rm(list=ls()) # briše sve objekte > save. image() # sprema objekte u radni direktorijum u. RData > save(a, "file") # sprema objekat a u zadati dokument > load("file") # učitava sačuvane objekte iz datog dokumenta
Osnove programskog jezika R v Vrste podataka v Operacije u R jeziku v Osnovne matematičke funkcije v Promenljive, dodela vrednosti i izrazi
Osnovne vrste podataka v Jezik R prepoznaje šest osnovnih atomskih (engl. atomic) vrsta podataka: q znak / slovo / tekst (engl. character, string) q realan broj (engl. numeric) q celobrojni broj (engl. integer) q kompleksni broj (engl. complex) q logički (engl. logical) q sirovi (engl. raw)
Podaci v Definisani su i specijalni brojevi beskonačnosti Inf (engl. infinity) koji se mogu dobiti deljenjem nulom, na primer 1/0, dok je 1/Inf = 0. > 1/0 > 1/Inf v Generalno definisane, a nedostajuće vrednosti u R okruženju označene su oznakom NA (engl. not available). v Nedefinisane vrednosti, kao što je slučaj sa 0/0 označavaju se sa Na. N i predstavljaju nedefinisanu vrednost (engl. not a number).
Primer > a <- c(10, 25) > a[3] [1] NA > is. na(c(0/0, NA)) [1] TRUE > is. nan(c(0/0, NA)) [1] TRUE FALSE v U ovom kontekstu za ispitivanje svojstava brojeva koriste se naredbe is. finite() i is. infinite().
Operacije u R jeziku R znakovi za operatore Operator +, -, *, /, %, ^ aritmetički >, >=, <, <=, ==, != relacioni !, &, |, &&, ||, xor(x, y) logički ~ model formule <-, -> pridruživanje $ indeksiranje liste : kreiranje sekvence
Primer > 5 + 6 + 3 + 6 + 4 [1] 24 > 2 + 7; 5 * 6; 3 - 8 [1] 9 [1] 30 [1] -5
Osnovne matematičke funkcije Funkcija abs(x) log(x) exp(x) log(x, n) log 10(x) sqrt(x) factorial(x) choose(n, x) gamma(x) floor(x) ceiling(x) trunc(x) Značenje apsolutna vrednost za x logaritam od x za osnovu e (ln) eksponent broja x logaritam od x za osnovu n logaritam od x za osnovu 10 kvadratni koren od x faktorijel broja x, x! binomni koeficijent, n!/(x! (n-x)!) Γ(x), za realno x (x-1)!, za celobrojnu vrednost x najveći ceo broj manji od x najmanji ceo broj veći od x ceo broj najbliži vrednosti x između x i 0; trunc(1. 5) = 1, trunc(-1. 5) = -1
Osnovne matematičke funkcije Funkcija Značenje round(x, digits=0) zaokružena vrednost x na ceo broj signif(x, digits=6) x na 6 decimala runif(n) n slučajnih brojeva između 0 i 1 (uniformna distribucija) cos(x), sin(x), tan(x) trigonometrijske funkcije u radijanima acos(x), asin(x), atan(x) acosh(x), asinh(x), atanh(x) inverzne trigonometrijske funkcije inverzne hiperboličke trigonometrijske funkcije
Primer > log(10) [1] 2. 302585 > log(42/7. 3) [1] 1. 749795 > pi [1] 3. 141593 > exp(1) [1] 2. 718282 > log 10(10) [1] 1 > cos(pi/2) [1] 6. 123032 e-17 > sin(pi/2) [1] 1
Promenljive, dodela vrednosti i izrazi v Sintaksa jezika inspirisana je jezikom C. Promenljive se ne deklarišu, već dobijaju tip vrednosti koja im se dodeli v Dodela vrednosti promenljivoj vrši se naredbom oblika > x <- 5 > x [1] 5 v Dodela rezultata aritmetičkog izraza i prikaz vrednosti > x <- 5 * x ^ 2 + 1 > x [1] 126
Promenljive, dodela vrednosti i izrazi v Dodela rezultata nenumeričkog izraza i prikaz vrednosti > x <- "abcd " + "efg" > x [1] "abcdefg"
Strukture podataka v Pregled struktura podataka u R okruženju na osnovu njihove dimenzionalnosti i homogenosti podataka (svi sadržaji moraju biti iste vrste) ili heterogeni (sadržaj može biti različitih vrsta) N- dimenzija Homogeni Heterogeni 1 Vektori (Atomic Vector) Liste (List) 2 Matrice (Matrix) Skupovi podataka (Data Frame) N Nizovi / polja (Array)
Strukture podataka v Može se primetiti jedna osobina okruženja R, a to je da ne postoji skalar, odnosno vrsta podataka bez dimenzije. v Svi skalari (alfanumerički znakovi) su u okruženju R definisani kao vektori dužine 1. v Ako želite da bolje razumete strukturu nekog objekta u okruženju R, najvažnija je funkcija str(), što je skraćenica engleske reči structure koja nam na konzoli daje opis objekta na jednostavno čitljiv način. > x <- 5 > str(x) num 5
Vektori v Vektori se sreću u dva oblika: atomski (engl. atomic) i liste (engl. list). v Ove dve vrste razlikuju se po svom sadržaju. v Dok podaci unutar atomskog vektora nužno moraju biti iste vrste, sadržaj liste to ne mora biti.
Osnovna svojstva vektora 1. Ko su? Koje su vrste? > typeof() 2. Dužina vektora > length() 3. Atributi – dodatni metapodaci o vektoru > attributes()
Vektori v Vektori se najčešće generišu funkcijom c() što predstavlja prvo slovo engleske reči combine. v U literaturi se sreće i „c“ kao prvo slovo reči concatenate, što znači povezivanje u obliku lanca.
Indeksiranje i selekcija podskupa vektora v Selekcija elemenata vektora (engl. subset) izvodi se operandom []. v Unutar zagrada indeksom rednog broja elementa u vektoru dobija se željena vrednost. v Selekcija drugog elementa objekta vektor_1: > vektor_1[2] v Selekcija prvog i trećeg elementa vektor_3: > vektor_3[c(1, 3)]
Selekcija kod vektora v Selekcija nad vektorima, matricama, poljima i skupovima podataka može biti u uslovu, odnosno iz objekta će biti prepoznati samo oni elementi koji odgovaraju zadatom uslovu: > selekt <- vektor_d > 10 #daje logički vektor označavajući sve elemente koji zadovoljavaju uslov > vektor_d[selekt] ili korišćenjem funkcije which() > select_2 <- which(vektor_d > 10, arr. in = TRUE) > vektor_d[select_2]
Primer > A <- 1: 20 > A [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 > B <- c(3, 5, 7) > B [1] 3 5 7 > x <- c(4, 3, 8, 7, 2, 7, 6) > x[4] # IV element u vektoru x [1] 7
Primer > y <- 4 > z <- y[1] > length(z) [1] 1
Kreiranje različitih tipova vektora v Vektor stringova > tekstualni_vektor <- c("tekst 1", "tekst 2", "tekst 3") > tekstualni_vektor [1] "tekst 1" "tekst 2" "tekst 3" v Vektor numeričkih vrednosti > numericki_vektor <- c(1, 3. 5, 6, 4. 4) > numericki_vektor_2 <- c(1, 5, 28, 13) > celobrojni_vektor <- c(2 L, 4 L, 6 L) #eksplicitna izrada celobrojnog vektora > celobrojni_vektor [1] 2 4 6 > celobrojni_vektor_2 <- 1: 10 #sekvenca celobrojnih vrednosti
Kreiranje različitih tipova vektora v Vektor logičkih vrednosti > logicki_vektor <- c(TRUE, FALSE, T, F) > logicki_vektor [1] TRUE FALSE v Vektor se može generisati i funkcijom vector(). > logicki_vektor_2 <- vector("logical", length = 10) v Određivanje tipa vektora radi se upitima typeof(), ili specifičnim testovima kao što su: is. character(), is. double(), is. integer(), is. logical(), ili posebnim kao: is. atomic(), is. na().
Operacije sa vektorima Funkcija max(x) min(x) sum(x) mean(x) median(x) range(x) var(x) cor(x, y) sort(x) rank(x) order(x) Značenje funkcije Maksimalna vrednost vektora x Minimalna vrednost vektora x Suma vrednosti vektora x Aritmetička sredina vrednosti vektora x Vrednost funkcije medijane vektora x Vektor od minimalnog x i maksimalnog x Varijansa vektora x Korelacija između vektora x i y Sortirane vrednosti vektora x Vektor rangova vektora x Celobrojni vektor koji sadrži indekse elemenata sortiranih vrednosti vektora x u rastućem redosledu
Operacije sa vektorima Funkcija quantile(x) cumsum(x) cumprod(x) cummax(x) cummin(x) pmax(x, y, z) Značenje funkcije Vektor koji sadrži minimum, niži kvartil, medijan, gornji kvartil i maksimum vektora x Vektor koji sadrži sumu svih elemenata do tog trenutka Vektor koji sadrži proizvod svih elemenata do tog trenutka Vektor neopadajućih brojeva koji su kumulativni maksimumi vrednosti u vektoru x do te tačke Vektor neopadajućih brojeva koji su kumulativni minimumi vrednosti u x do te tačke Vektor dužine jednake najdužem od x i y i z za i-ti položaj u svakom od njih
Primer > x <- c(4, 3, 8, 7, 2, 7, 6) > max(x) [1] 8 > min(x) [1] 2 > sum(x) [1] 37 > mean(x) [1] 5. 285714 > median(x) [1] 6 > range(x) [1] 2 8 > var(x) [1] 5. 238095 > sort(x) [1] 2 3 4 6 7 7 8 > rank(x) [1] 3. 0 2. 0 7. 0 5. 5 1. 0 5. 5 4. 0 > order(x) [1] 5 2 1 7 4 6 3 > quantile(x) 0% 25% 50% 75% 100% 2. 0 3. 5 6. 0 7. 0 8. 0 > cumsum(x) [1] 4 7 15 22 24 31 37
Primer > x <- c(4, 3, 8, 7, 2, 7, 6) > cumprod(x) [1] 4 12 96 672 1344 9408 56448 > cummax(x) [1] 4 4 8 8 8 > cummin(x) [1] 4 3 3 3 2 2 2 > y <- c(3, 6, 4, -1, -2, 5, 8) > cor(x, y) [1] 0. 2487543
Imenovanje vektora Vektor možemo imenovati na tri načina: q prilikom kreiranja vektora > x <- c(var 1 = 1, var 2 = 2, var 3 = 3) q izmenom postojećeg vektora > x <- 1: 3 > names(x) <- c("var 1", "var 2", "var 3") q kreiranjem proizvoljnog vektora > x <- set. Names(1: 3, c("var 1", "var 2", "var 3"))
Matrice i polja v Polje (engl. array) je struktura podataka. v Može biti višedimenzionalno, a poseban slučaj dvodimenzionalnog polja je matrica (engl. matrix) i one čine osnovu za veliki deo statističke analize. Sadrže atribut dimenzija koji se traži funkcijom dim(). v Matrica se može generisati sa argumentima broja redova i kolona, a pritom treba obratiti pažnju na način popunjavanja matrice vektorom. > matrica_1 <- matrix(1: 20, ncol = 4, nrow = 5)
Primer > X <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow = 3) > X [, 1] [, 2] [, 3] [1, ] 1 4 7 [2, ] 2 5 8 [3, ] 3 6 9 > attributes(X) $dim [1] 3 3
Primer > array <- 1: 25 > is. matrix(array) [1] FALSE > dim(array) NULL > dim(array) <- c(5, 5) > dim(array) [1] 5 5 > is. matrix(array) [1] TRUE > array [, 1] [, 2] [, 3] [, 4] [, 5] [1, ] 1 6 11 16 21 [2, ] 2 7 12 17 22 [3, ] 3 8 13 18 23 [4, ] 4 9 14 19 24 [5, ] 5 10 15 20 25 > is. table(array) [1] FALSE
Indeksiranje i selekcija podskupa matrice v Selekcija elemenata matrice (engl. subset) radi se operatorom []. Unutar zagrada, indeksom reda i kolone željenog elementa u matrici dobija se njegova vrednost. v Selekcija elemenata u drugom redu i trećoj koloni matrice > matrica_1[2, 3] ili putem atributa, drugi element u promenljivoj var_3: > matrica_1[2, "var_3"]
Generisanje sekvenci v Funkcija seq() koristi se za generisanje sekvenci > vektor_d <- seq(1, 100, by = 5) > vektor_d [1] 1 6 11 16 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96 > vektor_d[c(T, F)] [1] 1 11 21 31 41 51 61 71 81 91
Svojstva matrica v Osnovna svojstva vektora length() i names() sada dobijaju višedimenzionalnu nadgradnju kod matrica i polja na način: q funkcija length() nadograđuje se funkcijama nrow() i ncol() za matrice, kao i dim() za polja. qfunkcija names() nadograđuje se funkcijama rownames() i colnames() za matrice, kao i dimnames() za polja.
Osnovne operacije s matricama v Kreiranje matrice 2 x 3 od dve matrice 1 x 3, koje su kreirane konkatenacijom niza skalarnih vrednosti > y <- rbind(c(1, 2, 3), c(4, 5, 6)) > y [, 1] [, 2] [, 3] [1, ] 1 2 3 [2, ] 4 5 6 v Transponovanje matrice i dodavanje skalarne vrednosti > z <- t(y) + 1 > z [, 1] [, 2] [1, ] 2 5 [2, ] 3 6 [3, ] 4 7
Lista v Lista (engl. list) za razliku od atomskih vektora, može sadržati i druge vrste vektora, uključujući i same liste. Zbog ovog svojstva još ih nazivamo i rekurzivnim vektorima. v Mogu se generisati pomoću funkcije list(), a ne više uz pomoć funkcije c().
Primer > lista_1 <- list(10, "z", TRUE, matrix(1: 15, ncol = 5, nrow = 3)) > lista_1 [[1]] [1] 10 [[2]] [1] "z" [[3]] [1] TRUE [[4]] [, 1] [, 2] [, 3] [, 4] [, 5] [1, ] 1 4 7 10 13 [2, ] 2 5 8 11 14 [3, ] 3 6 9 12 15
Selekcija elemenata liste v Selekcija drugog reda, treće kolone, na četvrtom elementu liste bi se radila na ovaj način: > lista_1[[4]][2, 3] [1] 8 v Traženje drugog elementa u listi: > lista_1[[2]] [1] "z"
Dodavanje imena u listi > lista_2 <- list("Pera", 1, matrix(runif(10)), 5. 3) > names(lista_2) <- c("ime", "broj", "moja_matrica", "starost") > lista_2 $ime [1] "Pera" $broj [1] 1 $moja_matrica [, 1] [1, ] 0. 43173665 [2, ] 0. 87019483 [3, ] 0. 32389248 [4, ] 0. 05303274 [5, ] 0. 43557863 [6, ] 0. 44810105 [7, ] 0. 09058317 [8, ] 0. 69548471 [9, ] 0. 80159780 [10, ] 0. 87850047 $starost [1] 5. 3
Traženje elementa sa nazivom u listi v Traženje elementa određenog naziva u listi > lista_2[["starost"]] [1] 5. 3
Skupovi podataka – Data frames v Skupovi podataka (engl. data frames) su najuobičajeniji način čuvanja podataka u okruženju R. v Skup podataka je ispis vektora iste dužine. Prema ovoj definiciji oni imaju dve dimenzije i dele svojstva i matrica i ispisa. v Skup podataka ima names(), colnames() i rownames() s obzirom da su u ovom slučaju names() i colnames() iste stvari.
Konstruisanje data frames v Struktura podataka u kojoj su vektori iste dužine složeni u matricu kao kolone konstruišu se naredbom data. frame > Zemlje <- c("Španija", "Francuska", "Japan", "Indija") > Gustina. Naseljenosti <- c(79, 113, 337, 329) > d <- data. frame(Zemlje, Gustina. Naseljenosti) > d Zemlje Gustina. Naseljenosti 1 Španija 79 2 Francuska 113 3 Japan 337 4 Indija 329
Ispisivanje imena v. Data frame ima dodatni red s imenima objekata (ako su zadati) i dodatnu kolonu s imenima redova koji se mogu menjati > names(d) #ispisuje imena objekata [1] "Zemlje" "Gustina. Naseljenosti“ > row. names(d) #ispisuje imena redova [1] "1" "2" "3" "4“
Uređivanje podataka v Podaci se mogu uređivati koristeći tabele u R-u > novid <- edit(d)
Indeksiranje v Indeksiranje se vrši na jedan od sledećih načina > d[i, j] # element u i-tom redu i j-toj koloni > d[i, ] # i-ti red > d[, j] # ili samo d[j] j-ta kolona
Funkcije za rad sa skupovima podataka > subset(d, Gustina. Naseljenosti > 150) # ispisuje deo od d koji zadovoljava zadati kriterijum Zemlje Gustina. Naseljenosti 3 Japan 337 4 Indija 329 > transform(d, e) # dodaje kolonu e u d
Učitavanje postojećih podataka u R v U okruženju R podatke možemo da učitamo na više načina. v Osnovni tipovi učitavanja: q tabeliranih podataka (read. table() unutar kojih je moguće definisati veliki broj parametara, q teksta read. Lines(), q koda okruženja R source(), q objekata okruženja R dget(), q binarnih objekata unserialize(), q radnog prostora okruženja R (engl. workspace) load().
Ulaz-izlaz v Čitanje tekstualnih podataka s fajla > x <-as. matrix(read. table(file("tabela. txt")) v Podaci u Excel formatu > library(xts) > x <- as. xts(read. zoo('podaci. csv', header=T))
Učitavanje postojećih podataka u R v Posebno su razvijeni paketi i funkcije za učitavanje SAS datoteka (paket sas 7 bdat), kao i prostornih podataka (paketi rgdal, shapefiles, maptools, . . . ). v Postoji niz razvijenih specifičnih paketa za rad sa datotekama programa Excel (paketi xlsx i openxlsx). Veliki broj formata zapisa moguće je učitati uz pomoć paketa foreign. v SPSS, STATA i SAS datoteka se mogu učitati uz pomoć paketa Hmisc.
Funkcije u R jeziku v R je tzv. funkcionalni program koji se fokusira na izradu i upravljanje funkcijama. v Osnovno je pravilo da se unutar okruženja R sa funkcijama može napraviti sve što se može napraviti s vektorima - mogu se dodeliti nekoj promenljivoj, spremiti za ispis, biti argumenti nekih drugih funkcija.
Kreiranje funkcije v Korisnik može kreirati svoju funkciju upotrebom naredbe function(): > f <- function(<arguments>) {# funkcija nešto radi} > args(f) #traženje informacije o definisanim argumentima funkcije
Primer > fakt <- function(n) { n <- 1 for (i in 1: n) n <- n * i return (n) } > fakt(6) [1] 120
Primer # elementarne: definicija fun <- function(x) x+10; fun(5) # sa 2 argumenta fun 2 <- function(x, y) x+y; fun 2(3, 4) # koriste se "{" i "}" da zatvore R # izraze u telu f-je fun <- function(x, y) { a <- sum(x); b <- sum(y); a-b } r <- c(5, 4, 3); q <- c(1, 1, 1); fun(r, q) fun(c(5, 4, 3), c(1, 1, 1)) # Napomena: "{" and "}" koriste se u R jeziku za početak i kraj bloka # da li je funkcija: is. function(fun) is. function(log) # log je ugrađen
Primeri funkcija > min(x) > max(x) > sum(x) > range(x) > cumsum(x) > cumprod(x) > diff(x) > summary(x) > mean(x) > median(x) > sd(x) > sd(X) > var(X) > cor(X) > quantile(x, 0. 75) > quantile(x) > rank(x) > sort(x) > order(x)
Selekcija v Selekcija: naredba if > x <- 0 > if (x < 0) { print("Negativan broj") } else if (x > 0) { print("Pozitivan broj") } else print("Nula") [1] Nula
Iteracija v Iteracija, naredba for: inicijalizacije matrice > x <- as. matrix(10) > for(i in 1: 10) x[i] <- i * 2 > x [1] 2 4 6 8 10 12 14 16 18 20
Primer > p <- 0. 01 > if(p < 0. 05) print("Dobar podatak!") [1] "Dobar podatak!" For-petlja: > for(i in 1: 10) print(i) While-petlja: > i <- 1 > while(i < 10){ print(i) i = i + 1 }
Osnovno o petljama u R jeziku v Unutar okruženja R postoji nekoliko načina kojim se definišu petlje. v Osim standardnih for i while petlji, okruženje R ima razvijene i nestandardne petlje koje su izrađene kako bi radile ponavljajuće stvari u specifičnim slučajevima (apply petlja, a osim funkcije sadrži i lapply(), sapply() i tapply()).
Funkcija apply() v Izvršava drugu zadatu funkciju sa zadatim marginama (red ili kolona) matrice ili niza (polja). > apply(X, MARGIN, FUN, . . . ) Primer: > apply(moji_podaci, 2, mean) # sredine po kolonama > apply(moji_podaci, 1, mean) # sredine po redovima
Funkcija lapply() v Primenjuje zadatu funkciju na svaki element ispisa (liste). Rezultat funkcije je ispis. > numericka_lista <- list(ime 1 = 1: 5, ime 2 = rnorm(10)) > lapply(numericka_lista, max) $ime 1 [1] 5 $ime 2 [1] 0. 05009413
Funkcija sapply() v Slična funkciji lapply() s tom razlikom da rezultat pokušava struktuirati u jednostavniji oblik ako je to moguće. > sapply(numericka_lista, max) ime 1 ime 2 5. 0000 0. 05009413
Funkcija tapply() v Radi određeni proces na selekciji vektora sa poljima promenljivih dužina. Grupisanje unutar petlje tapply definiše se faktorskom promenljivom. > set. seed(1) # reproduktivan primer > podaci <- data. frame(osoba = 1: 100, pritisak = rnorm(100, mean = 120, sd = 80), tretman = gl(2, 50, labels = c("Tretman", "Kontrola"))) osoba pritisak tretman 1 69. 883695 Tretman 2 134. 691466 Tretman 3 53. 149711 Tretman . . . 98 74. 138767 Kontrola 99 22. 030991 Kontrola 100 82. 127949 Kontrola
Primer > summary(podaci) osoba pritisak tretman Min. : 1. 00 Min. : -57. 18 Tretman : 50 1 st Qu. : 25. 75 1 st Qu. : 80. 46 Kontrola: 50 Median : 50. 50 Median : 129. 11 Mean : 50. 50 Mean : 128. 71 3 rd Qu. : 75. 25 3 rd Qu. : 175. 32 Max. : 100. 00 Max. : 312. 13 > names(podaci) #imena promenljivih u skupu podataka [1] "osoba" "pritisak" "tretman" > tapply(podaci$pritisak, podaci$tretman, mean) Tretman Kontrola 128. 0359 129. 3861
Raspodele u R jeziku v Okruženje R poseduje bogatu familiju funkcija distribucije verovatnoće: normalna, beta, binomna, gama, hipergeometrijska, itd. v Funkcija ? distributions iz paketa stats daće popis svih ugrađenih distribucija u okruženju R.
Raspodele u R jeziku v Funkcija d(x, . . . ) računa gustinu raspodele na x-osi > dnorm(0) #gustina na 0; standardna normalna distribucija [1] 0. 3989423 v Funkcija p(q, . . . ) računa kumulativnu verovatnoću do q P(x # q) > pnorm(1. 96) #kumulativna distribucija P(Z<1. 96) [1] 0. 9750021
Raspodele u R jeziku v Funkcija q(p, . . . ) za dato p > qnorm(0. 89) #98 -i kvantil [1] 1. 226528 v Funkcija r(n, . . . ) generiše slučajnu promenljivu zadate veličine > set. seed(1) > rnorm(10) [1] -0. 6264538 0. 1836433 -0. 8356286 1. 5952808 0. 3295078 -0. 8204684 [7] 0. 4874291 0. 7383247 0. 5757814 -0. 3053884
Grafika u okruženju R jezika v Grafika osnovnog okruženja nalazi se automatski nakon instalacije softvera. v Funkcije za rad sa grafikom nalaze se u osnovnom paketu graphics, a uključuju funkcije kao što su plot() za crtanje grafika, hist() za izradu histograma, boxplot() za Box-Whiskers plot itd. v Više detalja o paketu graphics mogu se dobiti naredbom > help(package = graphics)
Grafika v Ako pozovemo funkciju plot() u paketu base i nemamo otvoren grafički prozor (engl. plotting device), ona ga automatski otvara. v Ako želimo da imamo veći broj otvorenih grafičkih prozora možemo sami otvoriti novi grafički prozor funkcijom dev. new(). Ovo nije slučaj ako se radi sa RStudiom. v Ako se kreira neka grafika radi prezentacije u nekom dokumentu bolje je otvoriti datotečki uređaj (engl. file device) nego ekran (engl. screen device).
Grafički prikaz podataka > plot(y) # crta vrednosti od y u pripadnim indeksima > plot(x, y) #crta vrednosti od y u tačkama iz vektora x v Neki argumenti funkcije plot su: main, sub, xlab, ylab, axes, type. > points(x, y) #dodaje tačke na postojeći grafik > lines(x, y) #dodaje linije na postojeći grafik
Primer > x = 0: 100 > x [1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [19] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 [37] 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 [55] 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 [73] 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 [91] 90 91 92 93 94 95 96 97 98 99 100 > xx = x * 2 * pi/100 > y = sin(xx) > plot(xx, y)
Grafički prikaz podataka > abline(a, b) # dodaje pravac y = a + b x na postojeći grafik > text(x, y) # dodaje tekst na mesto (x, y) > curve(f, from = a, to = b) #crta grafik funkcije f iznad [a, b] v Za crtanje preko postojećeg grafika dodaje se argument add = TRUE. Slika se može sačuvati u recimo ". pdf" formatu na sledeći način: > pdf("file. pdf") > curve(sin, 0, 4 * pi) > dev. off()
Korišćenje boja > data(volcano) > library(RColor. Brewer) > boje <- brewer. pal(5, "Blues") #biramo pet boja iz plave palete > boje [1] "#EFF 3 FF" "#BDD 7 E 7" "#6 BAED 6" "#3182 BD" "#08519 C"
Primer Ako želimo, na primer 20 boja, ali na osnovu gore izabranih 5 pisaćemo > boje 20 <- color. Ramp. Palette(boje)(20) ili > boje 20 <- color. Ramp. Palette(brewer. pal(5, "Blues"))(20) > str(volcano) num [1: 87, 1: 61] 100 101 102 103 104 105 106 107 108. . .
Primer > image(volcano, col = boje 20)
Vizuelizacija podataka v Spomenućemo još jednu funkciju koja je vrlo korisna pri vizuelizaciji velikog broja tačaka > X <- rnorm(10000) > Y <- rnorm(10000) > Z <- cbind(X, Y) > plot(X, Y) > smooth. Scatter(Z) > graphics: : plot(Z, col = dens. Cols(Z), pch = 20, main = "Gustina tacaka") > save. Plot(filename = "Proba_smooth. jpg", type = "jpg") > dev. copy(png, 'myplot. png')
save. Plot() v. Funkcija save. Plot() kreira grafike trenutno prikazane u aktivnom grafičkom prozoru, ali ne radi iz RStudio-ja. Ovo nije optimalan način da se prikaže grafik, trebalo bi da se uradi to ovako: > jpeg('rsmoothplot. jpg') #otvaramo zeljeni medij - jpg > smooth. Scatter(Z) #crtamo u medij > dev. off() #zatvaramo medij
rgb() v Tačno određena boja može se napraviti funkcijom rgb() definisanjem tačnih specifikacija crvene, zelene i plave boje uz mogućnost definisanja prozirnosti boje kao poslednjeg argumenta funkcije. > plot(X, Y, pch = 19) #gotovo nista se ne vidi > plot(X, Y, col = rgb(0, 0, 0, 0. 2), pch = 19, main = "Scatterplot prozirno") #prozirno > save. Plot(filename = "Proba_smooth. jpg", type = "jpg“)
Linearni model podataka v Prilikom istraživanja međusobnih veza dveju promenljivih primenjuju se metode proste (linearne i nelinearne) regresione i korelacione analize. v U slučaju više promenljivih reč je o metodama višestruke (linearne i nelinearne) regresione i korelacione analize. v Prost regresioni model je matematički model koji ima samo dve promenljive: zavisnu i nezavisnu. v Prost linearni regresioni model je regresioni model kojim se opisuje linearna veza između zavisne i nezavisne promenljive.
Primer Pretpostavimo da imamo eksperiment da vidimo koliko ljudi odrastaju (po visini) u skladu sa svojim godinama. Bira se nekoliko osoba različite starosti bez obzira na njihov pol, rasu i sl. Godine Visina (cm) 5 55 15 120 20 170 25 175 Linearni model nam pokazuje relaciju i korelaciju između starosti i visine, dok se mora uzeti u obzir greška, jer ako se stavi rasa i pol kao parametar rezultat je promenjen.
Primer Formula za fiksni element linearnog modela je: > visina ~ godine + error "visina" zavisna promenljiva jer se meri na osnovu "doba", a "godine" se naziva nezavisna promenljiva ili prediktor ili fiksni efekat error uključuje sve ostale faktore i parametre koji bi mogli uticati na rezultat, ali ih nismo svesni ili ih ne uzimamo u obzir namerno ili nedovoljno.
Primer > visina <- c(55, 120, 175) > godine <- c(5, 15, 20, 25) > mojdf <- data. frame(godine, visina) > moj_model <- lm(visina ~ godine, mojdf) # "lm" je komanda za linearni model > summary(moj_model) # daje informacije o podacima
Rezultat Call: lm(formula = visina ~ godine, data = mojdf) Residuals: 1 2 3 4 -3 -2 16 -11 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 26. 0000 16. 8565 1. 542 0. 2629 godine 6. 4000 0. 9442 6. 779 0. 0211 * --Signif. codes: 0 ‘***’ 0. 001 ‘**’ 0. 01 ‘*’ 0. 05 ‘. ’ 0. 1 ‘ ’ 1 Residual standard error: 13. 96 on 2 degrees of freedom Multiple R-squared: 0. 9583, Adjusted R-squared: 0. 9374 F-statistic: 45. 95 on 1 and 2 DF, p-value: 0. 02108
Primer > hist(residuals(moj_model)) # pravi model histograma > qqnorm(residuals(moj_model)) # dijagram reziduala kojim se uporedjuje naš skup podataka sa normalnom distribucijom v Rezidual je razlika između stvarne vrednosti visine i predviđene visine. Komanda plot(godine, visina) može ilustrovati razbacane tačke, dok plot(moj_model) ima više smislenog grafikona o našem modelu.
Grafici
Primer Zadavanje: Istraživač je ispitivao vezu holesterola u krvi sa sistolnim i dijastolnim krvnim pritiskom kod 11 muškaraca i žena. Izmerene vrednosti je poslagao u tabelu. Postupak: U prvom koraku napravio je matricu (tabelu) izmerenih vrednosti, tako da je najpre stavio izmerene vrednosti u pojedine promenljive, a onda je od njih napravio matricu pr 1.
Primer > uzrast <- c(23, 45, 36, 29, 56, 54, 33, 27, 23, 47, 45) > hol <- c(6. 8, 4. 5, 6. 4, 4. 7, 5. 1, 6. 2, 19, 6. 2, 16. 9, 4. 9, 7. 3) > skp <- c(135, 145, 157, 145, 135, 155, 146, 176, 135, 129, 144) > dkp <- c(75, 80, 75, 90, 75, 80, 75, 90) > mas <- c(66, 88, 72, 67, 82, 102, 65, 88, 55, 70, 63)
Primer Komanda cbind() spojiće pojedine vektore u matricu po kolonama, a ako želimo da spaja po redovima koristićemo analognu komandu rbind(). > pr 1 <- cbind(uzrast, hol, skp, dkp, mas) uzrast hol skp dkp mas [1, ] 23 6. 8 135 75 66 [2, ] 45 4. 5 145 80 88 [3, ] 36 6. 4 157 80 72 [4, ] 29 4. 7 145 75 67 [5, ] 56 5. 1 135 90 82 [6, ] 54 6. 2 155 90 102 [7, ] 33 19. 0 146 75 65 [8, ] 27 6. 2 176 80 88 [9, ] 23 16. 9 135 80 55 [10, ] 47 4. 9 129 75 70 [11, ] 45 7. 3 144 90 63
Primer Øsummary(pr 1)
Primer Istraživač prilikom merenja krvnog pritiska nije saznao jednu vrednost u četvrtom merenju i naveo ju je kao nedostajuću. U programu R zadaće se nedostajuću vrednost slovima NA. > skp <- c(135, 145, 157, NA, 135, 155, 146, 176, 135, 129, 144) > skp [1] 135 145 157 NA 135 155 146 176 135 129 144 Komanda sumary() onda daje sledeću tabelu, koja karakteriše zadate podatke > summary(skp) Min. 1 st Qu. Median Mean 3 rd Qu. Max. NA's 129. 0 135. 0 144. 5 145. 7 152. 8 176. 0 1. 0
HELP v R ima ugrađen sistem za pomoć. Ako se već zna koja se funkcija koristi, onda se može upisati > help(plot) > library(help = "base") #pomoć za paket base ili > ? plot
HELP v U slučaju da se želi videti koje se sve funkcije imaju na raspolaganju > help. start() v Na kraju se izlazi iz programa sa > quit()
Literatura v v v Chambers (2008) Software for data analysis, Springer Chambers (1998) Programming with data, Springer Murrel (2005) R Graphics, Chapman & Hall / CRC Press Use R! Serija knjiga, Springer http: //www. r-project. org/doc/bib/R-books. html The R Journal – http: //journal. r-project. org/current. html. vhttp: //cran. r-project. org/doc/manuals/R-intro. pdf v Priručnici su dostupni i upotrebom funkcije help. start(). > help. start()
Literatura The Comprehensive R Archive Network http: //cran. r-project. org/ Korisno: • Inside R: http: //www. inside-r. org/ • Quick R: http: //www. statmethods. net/ • R-bloggers: http: //www. r-bloggers. com/ Knjige: • The Art of R Programming, Norman Matloff, September 1, 2009: http: //heather. cs. ucdavis. edu/~matloff/132/NSPpart. pdf
- Vrjednovanje
- Individualizirani program
- Listego herbicid
- Ch3(ch2)3cooh
- Ekstremne vrednosti funkcije
- Pitagorina teorema pravougli trougao
- Vrste baza podataka
- Msfi 9 primena
- Izvodi i integrali
- Primer pravilnika o računovodstvu za mikro pravna lica
- Anoda i katoda fizikalna terapija
- Saponifikacija
- Primena odredjenog integrala povrsina
- Primena informacionih tehnologija
- Prva primena msfi za msp
- Primena racunara u medicini
- šta su izotopi
- Ljudski organizam kao termodinamicki sistem
- Dr risti
- Toricelijeva formula
- Primena silicijuma
- Osobine alkalnih metala
- Alkoholi podela
- брејв програмски језици
- Engleski kurikulum
- Podjela jezika u svijetu
- Povijest hrvatskog jezika 7 razred
- Sta je sintaksa
- Europski dan jezika kviz
- Vladimir filipovic matf
- Pravila za citanje latinskog
- Diktat iz bosanskog jezika za 7 razred
- Osnovni programski jezik
- Podela programskih jezika
- Branimirov natpis latinica
- Ishodi engleski jezik
- Meje mojega jezika so meje mojega sveta
- Ijekavski
- Povijest hrvatskog jezika kviz
- Povezovalni pogovor
- Vladimir filipovic matf
- Sta je masinski jezik
- Bečki književni dogovor
- Semantika programskog jezika
- Masinski jezik
- Naslovna strana maturskog rada
- Funkcionalno raslojavanje jezika
- Jotacija i palatalizacija razlika
- Posuđenice iz portugalskog jezika
- Tri jezika hrvata u srednjem vijeku
- Povijest hrvatskog jezika od 20 stoljeća
- Branimirov natpis glagoljica
- Slovnica hrvatskog jezika
- Smicanje
- Prevajalnik
- Držislavov natpis
- Eponim
- Raslojavanje jezika
- Funkcije jezika
- Korpus slovenskega jezika
- Tipologija
- Faze bosanskog jezika
- Podela programskih jezika
- Kompajleri
- Internacionalizmi u hrvatskom jeziku
- Izgovor latinskog