################################################################################ ### CETVRI CAS - UCITAVANJE PODATAKA, PAKETI, GRAFICKO PRIKAZIVANJE PODATAKA ### ################################################################################ # Sve tekuce promenljive su smestene u workspace-u ls() # Ako zelimo da obrisemo neku, f-ja RM a<-3 rm(a) # Brisanje svih objekata rm(list=ls()) ################### ## IMPORT/EXPORT ## ################### # Ucitavanje tabele kao data frame: read.table("putanja/ime_fajla.txt",header=T) # header=T znaci da prvu vrstu ne posmatra kao podatke, nego kao header # Prvo pravimo tekstualni fajl sa tabelom, npr kopiramo deo baze cars u neki fajl # Treba voditi racuna da working directory bude lokacija gde je fajl, ili u pozivu read.table u imenu fajla navesti celu putanju cars baza<-read.table("cars.txt",header=T) head(baza) # Ova fja podrazumeva da je separator prazno polje # Ako hocemo da separator bude zarez: f-ja read.csv # Napravimo novi fajl cars_zarezi tako da elementi vrste budu odvojeni zarezom, pa koristimo f-ju read.csv("cars_zarezi.txt",header=T) # Moguce je i sa separatorom TAB, onda se koristi f-ja read.delim # Pisanje tabele/baze podataka u fajl: write.table(data,fajl,sep="\t") # data je tipa data.frame ili matrica, ako nije automatski ce se konvertovati # sep oznacava kako ce biti razdvojeni podaci u okviru vrste u novom fajlu write.table(baza,"fajl1.txt",sep="\t") write.table(baza,"fajl2.txt",sep=" SEPARATOR ") # Funkcija scan # scan(file,what,nmax,sep) - what je tip podataka, nmax maksimalan broj karaktera koji hocemo da ucitamo, sep separator # Skeniracemo tekstualni fajl cars.txt: s<-scan("D:/FAX/2016_2017/SS_1/cars.txt",what=character(),nmax=30) # Dobija se vektor sa skeniranim podacima is.vector(s) # Ako zelimo da ne ucitava rec po rec, nego red po red koristimo f-ju readLines readLines("D:/FAX_POSAO/2016_2017/SS_1/cars.txt") # Generalno pisanje u fajl: f-ja write(podaci,"fajl",ncolumns=...,append=T/F,sep=" ") x<-1:120 write(x,"fajl.txt",sep=" ",ncolumns=12) ############ ## PAKETI ## ############ # Paket je kolekcija R-funkcija, podataka, koji se svi odnose na jedan pojam, povezani su # na primer, paket za grafiku, paket funkcija i baza za linearnu regresiju, paket uzoraka iz nekog istrazivanja # sa R-om dolazi set standardnih paketa, dok se ostali mogu preuzeti sa http://cran.r-project.org/ # Postupak sa instaliranje paketa: # install.packages("ime_paketa") instalira direktno sa neta # ili skinuti u zip formatu sa sajta, pa tools--install packages--- # Kada je paket instaliran ucitava se sa library(ime_paketa) # Sada su nam na raspolaganju njegove f-je, baze podataka i ostalo # Na primer paket PASWR sadrzi korisne f-je i baze za verovatnocu i statistiku install.packages("PASWR") library(PASWR) #paket probability and statistics with R #kada je paket ucitan bazu ucitavamo sa data(BAZA) data(Aggression) Aggression # Ako necemo da ucitavamo ceo paket, mozemo ucitati samo neku od baza, bez prethodnog poziva library data(Aggression,package="PASWR") # U ovom paketu ima i korisnih statistickih testova,npr test koji proverava hipotezu o srednjoj vrednosti uzorka iz normalne raspodele # Ho je da je srednja vrednost 0: x<-rnorm(100) z.test(x,sigma.x=1) # navodimo uzorak, kao i pretpostavljenu standardnu devijaciju raspodele # Jos neki paketi: install.packages("fortunes") library(fortunes) fortune() install.packages("fields") library(fields) data(CO2) bplot(CO2) #Kada zavrsimo sa radom: detach("package:PASWR") # Ugradjeni paketi u R-u: base, datasets, utils, graphics, i mnogi drugi # Za prikaz nekog paketa help(datasets) # ili library(help="datasets") help("airquality") # Odavde vidimo imena baza, jedna od njih sadrzi podatke o vazduhu iz Njujorka data(airquality) head(airquality) summary(airquality) help("airquality") # Promena tipa podataka: as.ime_tipa(x) as.matrix(x) as.character(x) z<-as.character(x) is.character(z) # Moze da konvertuje brojeve u odgovarajuce karaktere # ALI obrnuto ne moze!!! z<-c("wef",'wdf') as.numeric(z) # Moguce je konvertovati i izmedju slozenijih tipova: as.list(x), as.data.frame(x) m<-matrix(1:10,ncol=5) as.list(m) lista<-list("a","b","c") as.matrix(lista) # Iz liste u matricu ako su tipovi elemenata liste razliciti lista<-list(matrix(1:4,ncol=2),c("a","v"),1) as.matrix(lista) # Dobijemo matricu ali su podaci prikazani na drugaciji nacin ##################### ## CRTANJE GRAFIKA ## ##################### # najjednostavniji grafik x<-seq(2,16,1) y<-c(5,6,5,9,3,11,6,15,19,5,7,14,8,12,1) plot(x,y) ## Dodatna podesavanja pri crtanju grafika # Glavni i sporedni naslov, nazivi osa: MAIN, SUB, XLAB, YLAB plot(x,y,main="Main title",sub="subtitle",xlab="x-osa",ylab="y-osa") # duzinu osa mozemo i eksplicitno navesti parametrima xlim i ylim plot(x,y,xlim=c(0,30),ylim=c(0,30)) # mogu se dodati linije i tacke, ili u okviru poziva plot ili kasnije # Dodavanje tacaka points(25,25) # Zadajemo koordinate tacke koju dodajemo # Dodavanje teksta text(3,3,"ubaceni tekst") # Zadajemo koordinate i tekst koji se ispisuje # Ubacivanje linije na postojeci grafik: f-ja ABLINE(a,b) crta grafik f-je y=a+bx # Ako je argument h=... ili v=..., crta horizontalnu odnosno vertikalnu liniju sa datom koordinatom abline(0,1) # Dobili smo grafik f-je y=x abline(h=20) abline(v=20) # Isto kao da smo napisali i abline(h=20,v=20) # Ako hocemo da grafik bude veoma slozen, cesto je dobra ideja da na pocetku izostavimo sve elemente i posle ih pojedinacno dodajemo plot(x,y,type="n",xlab="",ylab="",axes=F) # Ne crta ose, ne obelezava ih, type="n" znaci da se tacke izostavljaju # Naknadno dodajemo elemente points(x,y) # Dodaje sve tacke na grafik axis(1) # Dodaje prvu osu axis(2,at=seq(0,20,5)) # Dodaje drug uosu, ali je obelezava na mestima naznacenim vektorom seq(..) box() # Dodaje okvir title(main="Glavni naslov",sub="podnaslov",xlab="x-osa",ylab="y-osa") # Grafik funkcije x^3 x <- seq(-2,2,0.01) plot(x, x^3, type = "l", main = "y=x^3", xlab ="x-osa", ylab ="y-osa", col = "blue") curve(x^3,from=-2,to=2, col = "blue",main = "y=x^3", xlab ="x-osa", ylab ="y-osa") # FUNKCIJA PAR se koristi za naprednija podesavanja svih grafickih parametara # Neka od ovih podesavanja mogu i preko plot fje # Razlika je sto ih par trajno podesava, dok se ne vrate na staro # Neke od opcija su boja, debljina i tip linija, podela osa, velicina grafika, podela na vise povrsina, itd. # Trenutno stanje svih parametara par() # Znacenje svih parametara mozemo procitati ako pozovemo help(par) # npr. col oznacava boju grafika, bg boju pozadine, itd. # Menjamo ih pozivom f-je par sa njima kao argumentima # Menjanje boje grafika par(col="red") plot(x,y) # Parametar mfrow oznacava koliko se grafika odjednom moze nalaziti na platnu, to je vektor sa dimenzijama # Deljenje platna za crtanje # Ako hocemo da se crtaju dva grafika jedan pored drugog par(mfrow=c(1,2)) # platno se deli na jednu vrstu i dve kolone plot(x,y) plot(y,x) # Vracamo sve na default par(mfrow=c(1,1),col="black",bg="white") plot(x,y) # Kombinovanje vise grafika jedan preko drugog - Grafici uzorka normalne raspodele x1 <- rnorm(20) par(mfrow = c(2,2)) plot(x1, type = "p", main = "points", ylab = "y-osa", xlab = "x-osa", col = "red") plot(x1, type = "l", main = "lines", ylab = "y-osa", xlab = "x-osa", col = "orange") plot(x1, type = "b", main = "both", ylab = "y-osa", xlab = "x-osa", col = "blue") plot(x1, type = "o", main = "both overplot", ylab = "y-osa", xlab = "x-osa", col = "green") # HISTOGRAM I FUNKCIJA GUSTINE data(faithful) attach(faithful) hist(eruptions, seq(1.6, 5.2, 0.2), prob=T, col = "orange") lines(density(eruptions)) # BOXPLOT data(InsectSprays) attach(InsectSprays) boxplot(count ~ spray, data = InsectSprays, col = "lightgray") means <- tapply(count,spray,mean) points(means,col="red",pch=18) boxplot(count ~ spray, data = InsectSprays, horizontal=T, col = "lightblue") # BARPLOT VADeaths barplot(VADeaths) barplot(t(VADeaths), col = gray(c(0.25,0.5,0.75, 1))) barplot(t(VADeaths), beside = TRUE) # DOTCHART - tackasti dijagram dotchart(VADeaths, xlab="Broj umrlih na 1000 ljudi",main="Stopa smrtnosti u Virdziniji") # PIECHART - pitice par(mfrow = c(2,2)) pie.sales <- c(0.12, 0.3, 0.26, 0.16, 0.04, 0.12) names(pie.sales) <- c("Blueberry", "Cherry", "Apple", "Boston Cream", "Other", "Vanilla") pie(pie.sales, main = "Obicna pitica") pie(pie.sales, col = gray(seq(0.4, 0.9, length = 6)), clockwise = TRUE, main = "Nijanse sive") pie(pie.sales, col = rainbow(6), clockwise = TRUE, main = "Boje duge") library(plotrix) pie3D(pie.sales, main = "3D pitica") ### PAKET lattice ### install.packages("lattice") library(lattice) data(mtcars) attach(mtcars) # kreiramo faktore gear.f<-factor(gear,levels=c(3,4,5),labels=c("3gears","4gears","5gears")) cyl.f <-factor(cyl,levels=c(4,6,8),labels=c("4cyl","6cyl","8cyl")) # gustina densityplot(~mpg, main="Density Plot",xlab="Miles per Gallon") # gustina po faktorima densityplot(~mpg|cyl.f, main="Density Plot by Number of Cylinders",xlab="Miles per Gallon") # gustina po faktorima densityplot(~mpg|cyl.f, main="Density Plot by Numer of Cylinders", xlab="Miles per Gallon",layout=c(1,3)) ### Pogledati pakete ggplot2, plotrix,...