################################################################################
### 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,... 