#==========================================================================================
# Aula 11 da disciplina ce223 (12/04/2011)
# Junção de arquivos de dados, gráficos para duas variáveis e estatísticas descritivas
#                                                               Professor Walmes M. Zeviani
#                                                                     www.leg.ufpr.br/ce223
#==========================================================================================

#------------------------------------------------------------------------------------------
# dados de renda por município no ano de 2000 (.xls)

require(gdata) # contém a função read.xls() para importar planilhas
renda <- read.xls("http://www.leg.ufpr.br/~walmes/ensino/ce223-2011-01/renda2000municipios.xls",
                  sheet=1, fileEncoding='latin1', encoding="latin1")
names(renda) <- tolower(names(renda))
names(renda)[4] <- "renda"
str(renda)

#------------------------------------------------------------------------------------------
# dados de alfabetizados por município no ano de 2000 (.xls)

alfab <- read.xls("http://www.leg.ufpr.br/~walmes/ensino/ce223-2011-01/alfabetizados2000municipios.xls",
                  sheet=1, fileEncoding='latin1', encoding="latin1")
names(alfab) <- tolower(names(alfab))
names(alfab)[4] <- "alfabetizados"
str(alfab)

#------------------------------------------------------------------------------------------
# como fazer a junção dos dados?

#------------------------------------------------------------------------------------------
# imagine se os dados não fossem de mesma dimensão e conteúdo?

teste <- merge(alfab[1:10,],  # conjunto menor
               renda[1:15,],  # conjunto maior
               by.x="codigo", by.y="codigo")
str(teste)

teste <- merge(alfab[sample(1:nrow(alfab), nrow(alfab)/2),], # metade aleatóriamente
               renda[sample(1:nrow(renda), nrow(renda)/2),], # metade aleatóriamente
               by.x="codigo", by.y="codigo")
str(teste)

#------------------------------------------------------------------------------------------
# juntando os dois conjuntos

ar <- merge(alfab, renda[,c("codigo","renda")],
            by.x="codigo", by.y="codigo")
str(ar)
ar <- ar[complete.cases(ar),]
str(ar)

#------------------------------------------------------------------------------------------
# qual a distribuição de frequência das variáveis?

hist(ar$alfabetizados, freq=FALSE)
hist(ar$renda)
hist(log(ar$renda))

#------------------------------------------------------------------------------------------
# fazer o gráfico de caixas para as variáveis em função dos estados

boxplot(alfabetizados~sigla, data=ar)

A <- with(ar, tapply(alfabetizados, sigla, function(x){ max(x)-min(x) }))
A <- with(ar, tapply(alfabetizados, sigla, function(x){ diff(range(x)) }))
A[which.max(A)]
A[which.min(A)]

boxplot(log(renda)~sigla, data=ar)

#------------------------------------------------------------------------------------------
# criar uma nova coluna no arquivo

ar$logrenda <- log(ar$renda)
ar <- transform(ar, logrenda=log(renda))
str(ar)

#------------------------------------------------------------------------------------------
# como se relacionam as duas variáveis?

plot(alfabetizados~renda, data=ar)
plot(alfabetizados~log(renda), data=ar)

#------------------------------------------------------------------------------------------
# como fazer o gráfico e destacar com cores/simbolos os pontos de SP?

plot(alfabetizados~log(renda), data=ar, col=ifelse(ar$sigla=="SP", 2, 1))
plot(alfabetizados~log(renda), data=ar,
     pch=ifelse(ar$sigla%in%c("PR","SC","RS"), 19, 1),
     col=ifelse(ar$sigla%in%c("PR","SC","RS"), 2, 1))
with(ar, identify(y=alfabetizados, x=log(renda), label=município))

#------------------------------------------------------------------------------------------
# como ver o gráfico para cada estado separado? opção 1

sapply(levels(ar$sigla),
       function(s){
         da <- subset(ar, sigla==s)
         plot(alfabetizados~log(renda), data=da, main=s)
         Sys.sleep(3)
       })

#------------------------------------------------------------------------------------------
# como ver o gráfico para cada estado separado? opção 2

require(lattice)
xyplot(alfabetizados~log(renda)|sigla, data=ar)

#------------------------------------------------------------------------------------------
# histogramas separados por categoria

histogram(~log(renda)|sigla, data=ar)
histogram(~alfabetizados|sigla, data=ar)

#------------------------------------------------------------------------------------------
# gráficos de densidade suavizada separados por categoria

densityplot(~log(renda)|sigla, data=ar)
densityplot(~alfabetizados|sigla, data=ar)

#------------------------------------------------------------------------------------------
# criar categorias 9 de log(renda)

range(log(ar$renda))
ar$r.cat <- cut(log(ar$renda), seq(3.9, 15.70, length=9))
str(ar)
table(ar$r.cat)

#------------------------------------------------------------------------------------------
# qual a média/mediana/variância de alfabetizados por categoria?

with(ar, tapply(alfabetizados, r.cat, mean))
with(ar, tapply(alfabetizados, r.cat, median))
with(ar, tapply(alfabetizados, r.cat, var))

#------------------------------------------------------------------------------------------
# fazer o gráfico de box plot em função dos estados separados por categoria de renda

bwplot(alfabetizados~sigla|r.cat, data=ar)

#------------------------------------------------------------------------------------------
# como fazer categorias que tenham o mesmo número (aproximadamente) de elementos? opção 1

lev <- floor(seq(1, nrow(ar), length=9+1))
cuts <- sort(log(ar$renda))[lev]
cuts

ar$r.cat <- cut(log(ar$renda), cuts)
str(ar)
table(ar$r.cat)

bwplot(alfabetizados~sigla|r.cat, data=ar, pch="|",
       scales=list(x=list(rot=90)), # rotaciona os níveis no eixo x
       layout=c(3,3))               # define a disposição dos gráficos

#------------------------------------------------------------------------------------------
# como fazer categorias que tenham o mesmo número (aproximadamente) de elementos? opção 2

help(equal.count, help_type="html")

ar$r.cat <- equal.count(log(ar$renda), number=9, overlap=0.1)
str(ar)
summary(ar$r.cat)

bwplot(alfabetizados~sigla|r.cat, data=ar)

#------------------------------------------------------------------------------------------
# obter média, variância e correlação separado por estado

with(ar, tapply(log(renda), sigla, mean))
with(ar, tapply(alfabetizados, sigla, mean))
with(ar, tapply(log(renda), sigla, var))
with(ar, tapply(alfabetizados, sigla, var))
with(ar, tapply(?, sigla, cor)) # ??? envolve duas variáveis

#------------------------------------------------------------------------------------------
# correlação por estado

sapply(levels(ar$sigla),
       function(s){
         da <- subset(ar, sigla==s)
         with(da, cor(log(renda), alfabetizados))
       })

#------------------------------------------------------------------------------------------
# como obter tudo com uma única função?
x <- 
sapply(levels(ar$sigla),
       function(s){
         da <- subset(ar, sigla==s)
         mr <- mean(log(ar$renda))
         ma <- mean(ar$alfabetizados)
         vr <- var(log(ar$renda))
         va <- var(ar$alfabetizados)
         co <- with(da, cor(log(renda), alfabetizados))
         c(m.renda=mr, m.alfab=ma, v.renda=vr, v.alfab=va, cor=co)
       })

str(x)

x <- t(x)
str(x)
x <- as.data.frame(x)
x[order(x$cor),]

#------------------------------------------------------------------------------------------


#==========================================================================================
#==========================================================================================
# CMR para r-br

require(gdata) # contém a função read.xls() para importar planilhas
teste <- read.xls("http://www.leg.ufpr.br/~walmes/foo/teste.xls", sheet=1, method="tab")
teste$Municipio <- iconv(teste$Muni, "latin1", "UTF-8")
head(teste)

teste <- read.xls("http://www.leg.ufpr.br/~walmes/foo/teste.xls", sheet=2, method="tab")

teste <- read.xls("http://www.leg.ufpr.br/~walmes/foo/teste.xls", sheet=2,
                  fileEncoding='latin1', encoding="latin1")
str(teste)

#------------------------------------------------------------------------------------------
