#==========================================================================================
# Aula 22 da disciplina ce223 (03/06/2011)
# Operações com datas
#                                                               Professor Walmes M. Zeviani
#                                                                     www.leg.ufpr.br/ce223
#==========================================================================================

#------------------------------------------------------------------------------------------
# uma string que representa uma data precisa ser convertido para data, usando as.Date()

x <- c("02/02/1986","09/06/1988","09/12/1990") # formato nacional dd/mm/aaaa
x
y <- as.Date(x, "%d/%m/%Y")                    # converte para o formato aaaa-mm-dd
y
class(y)
diff(y)

#------------------------------------------------------------------------------------------
# usando a função ISOdate

z1 <- ISOdate(2012, 2, 2, 21) # aaaa, mm, dd, hh; meu próximo aniversário
z2 <- Sys.time()              # data do sistema operacional
z1-z2
difftime(z1, z2, units="weeks")
difftime(z1, z2, units="mins")
difftime(z1, z2, units="hours")

#------------------------------------------------------------------------------------------
# usando a POSIXlt

as.POSIXct(Sys.time(), tz="GTM")
as.POSIXlt(Sys.time(), tz="GTM")

as.POSIXct(Sys.time(), tz="")
as.POSIXlt(Sys.time(), tz="")

browseURL("http://upload.wikimedia.org/wikipedia/commons/a/ad/Standard_time_zones_of_the_world.png")

#------------------------------------------------------------------------------------------
# conversão de datas no formato de string

as.POSIXlt(x, tz="", format="%d/%m/%Y")

#------------------------------------------------------------------------------------------
# conversão de datas no formato numérico

z <- c(823377600, 897436800, 976316400)
as.POSIXct(z, origin="1960-01-01")

#------------------------------------------------------------------------------------------
# formatação de datas

format(Sys.Date(), "%a %d %b %Y")
format(Sys.time(), "%a %d %b %Y %H:%M:%S")
format(Sys.time(), "%A dia %d de %B do ano de %Y às %H:%M:%S")
format(y, "%A dia %d de %B do ano de %Y")

#------------------------------------------------------------------------------------------
# importando um arquivo com datas

dac <- read.table("http://www.leg.ufpr.br/~walmes/ensino/ce223-2011-01/dac.txt")
str(dac)
dac <- dac$V1

#------------------------------------------------------------------------------------------
# conversão para datas

dac <- as.POSIXlt(dac, origin="1970-01-01")
dac <- sort(dac)
str(dac)

hac <- as.POSIXct(format(dac, "%H:%M:%S"), format="%H:%M:%S")

plot(dac, hac, type="l", ylab="Hora do acesso", xlab="Data do acesso", xaxt="n")
axis.POSIXct(1, at=seq(as.POSIXct("2010-10-01"), as.POSIXct("2011-06-15"), by="month"), format="%B", col=2)
axis.POSIXct(3, at=seq(min(dac), max(dac), by="week"), format="%d/%m")
axis.POSIXct(1, at=seq(as.POSIXct("2010-10-01"), as.POSIXct("2011-06-15"), by="3 days"), format="%d", col=2, labels=FALSE, tcl=-0.2)
axis.POSIXct(2, at=seq(as.POSIXct("03:00:00", format="%H:%M:%S"), as.POSIXct("21:00:00", format="%H:%M:%S"), by="hour"),
             format="%H", labels=FALSE, tcl=-0.2)

#------------------------------------------------------------------------------------------
# obtendo resultados diários, semanais, mensais, etc

td <- tapply(dac, as.Date(dac), length)
barplot(td)

plot(as.Date(names(td)), td, type="b")
abline(h=mean(td))

dd <- tapply(dac, as.Date(dac), function(x) as.numeric(diff(range(x)), units="hours"))
str(dd)
barplot(dd)

plot(as.Date(names(dd)), dd, type="b")
abline(h=mean(dd))

#------------------------------------------------------------------------------------------
# dados sobre a média semanal de exportação e importação do brasil em milhores de dólares

ex <- read.table("http://www.leg.ufpr.br/~walmes/ensino/ce223-2011-01/exportacao.txt",
                 header=TRUE, sep="\t")
ex <- ex[complete.cases(ex),]
str(ex)

im <- read.table("http://www.leg.ufpr.br/~walmes/ensino/ce223-2011-01/importacao.txt",
                 header=TRUE, sep="\t")
im <- ex[complete.cases(im),]
str(im)

#------------------------------------------------------------------------------------------
# converter das strings para datas

ex$dia <- as.Date(ex$dia, "%d/%m/%Y")
im$dia <- as.Date(im$dia, "%d/%m/%Y")

#------------------------------------------------------------------------------------------
# gráficos das séries

par(mfrow=c(2,1))
plot(milhoesdolares~dia, ex, main="Exportação")
plot(milhoesdolares~dia, im, main="Importação")
layout(1)

#------------------------------------------------------------------------------------------
# juntando os dois dados num único data.frame

ex$tipo <- "expor"
im$tipo <- "impor"
trans <- rbind(ex, im)
str(trans)

#------------------------------------------------------------------------------------------
# gráfico das duas séries juntas

plot(milhoesdolares~dia, trans, col=ifelse(trans$tipo=="impor",1,2))

plot(milhoesdolares~dia, trans, col=ifelse(trans$tipo=="impor",1,2), type="n")
lines(milhoesdolares~dia, ex)
lines(milhoesdolares~dia, im, col=2)

#------------------------------------------------------------------------------------------
# gráfico da lattice

require(lattice)

xyplot(milhoesdolares~dia, groups=tipo, data=trans, type="b")
xyplot(milhoesdolares~dia|tipo, data=trans, type="b")

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