Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Próxima revisão
Revisão anterior
cursos:mct:exemplo1b [2011/05/26 00:32] – criada paulojuscursos:mct:exemplo1b [2011/05/27 19:18] (atual) paulojus
Linha 41: Linha 41:
 ## lendo ## lendo
 dados <- ReadExcel("COLOQUE_AQUI_O_NOME_DO_SEU_ARQUIVO") dados <- ReadExcel("COLOQUE_AQUI_O_NOME_DO_SEU_ARQUIVO")
 +</code>
 +
 +
 +==== Dados de largura fixa  ====
 +
 +Considere que temos um arquivo de dados ''exFWF.txt'' com o seguinte conteúdo.
 +Considere ainda que estes dados se reverem a 4 variáveis, sendo que os 2 primeiros campos da primeira,
 +depois 3 da segunda, 6 de terceira e 2 da quarta.
 +<code>
 +  1200512345627
 +  1100227372912
 +  1000312034115
 +  0900414732112
 +</code>
 +
 +Lendo as dados com colunas de tamanho definido
 +<code R>
 +foo <- read.fwf("exFWF.txt", wid=c(2,3,6,2))
 +foo
 +</code>
 +
 +É possível excluir um conjunto de caracteres (uma ou mais variáveis), usando índices negativos.\\
 +Isto permite selecionar somente o que se quer ler.
 +<code R>
 +read.fwf("exFWF.txt", wid=c(2,-3,6,2))
 +</code>
 +
 +Agora vamos supor que temos uma variável (como caracter) com a especificação da composição das colunas.\\
 +Supondo que a terceira variável tem duas casas decimal e a quarta tem uma e a variável seria da forma:
 +<code R>
 +DEC <- c("2", "3", "4,2", "1,1")
 +</code>
 +
 +Vamos ilustrar o uso da linguagem com alguns elementos usados para ler e preparar os dados.
 +<code R>
 +## achando o total de caracteres de cada campo
 +foo1 <- strsplit(DEC, split=",")
 +foo1
 +foo2 <- sapply(foo1, function(x) sum(as.numeric(x)))
 +foo2
 +read.fwf("exFWF.txt", wid=foo2)
 +</code>
 +
 +Agora preparando os campos decimais.
 +<code R>
 +foo3 <- sapply(foo1, function(x) as.numeric(x[2]))
 +foo3
 +COLS <- !is.na(foo3)
 +COLS
 +
 +sweep(data.matrix(foo[,COLS]), 2, 10^foo3[COLS], FUN="/")
 +foo[,COLS] <- sweep(data.matrix(foo[,COLS]), 2, 10^foo3[COLS], FUN="/")
 +foo
 +</code> 
 +
 +Limpeza...
 +<code R>
 +rm(foo, DEC, foo1, foo2, foo3)
 +</code>
 +
 +Agora vamos montar uma função que concatena os comandos acima para facilitar a leitura de arquivos deste tipo sempre que preciso.
 +<code R>
 +read.meudado <- function(file, formato, ...){
 +       lformato <- strsplit(formato, split=",")
 +       ncampos <- sapply(lformato, function(x) sum(as.numeric(x)))
 +       arq <- read.fwf(file, width=ncampos, ...)
 +       decimais <- sapply(lformato, function(x) as.numeric(x[2]))
 +    COLS <- !is.na(decimais) 
 +       arq[,COLS] <- sweep(data.matrix(arq[,COLS, drop=F]), 2, 10^decimais[COLS], FUN="/")
 +    return(arq)
 +}
 +
 +read.meudado("exFWF.txt", formato = DEC)
 +</code>
 +
 +Outro exemplo, os dados abaixo no arquivo ''exFWF-2.txt'', com campos alfanuméricos no arquivo.
 +<code>
 + 12005AA12345627
 + 11002BB27372912
 + 10003BB12034115
 + 09004CC14732112
 +</code> 
 +
 +<code R>
 +read.fwf("exFWF-2.txt", wid=c(2,3,2,6,2))
 +
 +DEC1 <- c("2", "3", "2", "4,2", "1,1")
 +read.meudado("exFWF-2.txt", formato = DEC1)
 +</code>
 +
 +Outro exemplo, os dados abaixo no arquivo ''exFWF-3.txt'', com campos alfanuméricos no arquivo e linhas a serem ignoradas.
 +<code>
 + Dados no formato FWF
 + Exemplo do curso
 + 12005AA12345627
 + 11002BB27372912
 + 10003BB12034115
 + 09004CC14732112
 +</code>
 +
 +Lendo com a função, note o uso do mecanismo de '' . . . '' para passar argumentos para ''read.fwf()''
 +
 +<code R>
 +read.meudado("exFWF-3.txt", formato = DEC1, skip=2)
 +</code>
 +
 +===== Dados reais da Regina =====
 +Lendo arquivo descritor
 +<code R>
 +desc <- read.table("dados/11CRDDI.ref.txt", as.is=T)
 +desc
 +desc$V3
 +
 +desc$V4 <- ifelse(desc$V2 == "A", "character", "integer")
 +desc
 +desc$V4[grep("\\,", desc$V3)] <- "numeric"
 +desc
 +</code>
 +
 +Lendo os dados usando nossa função.
 +<code R>
 +Regina <- read.meudado("dados/11CRDDI.txt", formato = desc$V3, as.is=T )
 +#, skip=2, n=20)
 +Regina
 +
 +## algumas operacoes uteis:
 +which(grepl("\\,", desc$V3))
 +which(desc$V4=="integer")
 +which(grepl("CREDITO", desc$V1))
 +Regina[,which(grepl("CREDITO", desc$V1))]
 +apply(Regina[,which(grepl("CREDITO", desc$V1))], 1, sum)
 +
 +## colocar aqui os nome dasd variaveis trabalhado/cortado etc
 +#names(Regina) <- desc$V1
 +
 +Regina$V29
 +as.Date(as.character(Regina$V29), "%Y%m%d")
 +
 +Regina$V29 <- as.Date(as.character(Regina$V29), "%Y%m%d")
 +
 +Regina <- read.meudado("dados/11CRDDI.txt", formato = desc$V3, as.is=T, skip=2, n=15)
 +Regina
 +</code>
 +
 +Queremos ordenar os dados por data. Antes uma revisão sobre ordenação.
 +<code R>
 +x <- rpois(10, lam=10)
 +x
 +sort(x)
 +order(x)
 +x[order(x)]
 +x[rev(order(x))]
 +args(order)
 +order(x, decreasing=T)
 +</code>
 +
 +Agora de volta aos  dados
 +<code R>
 +Regina <- Regina[order(Regina$V29),]
 +Regina
 +Regina[, c("V7","V8","V9","V29")]
 +aggregate(V7+V8+V9 ~ V29, FUN=sum, data=Regina)
 +
 +## algumas manipulacoes
 +Regina[,c(7,8,9,29)]
 +
 +aggregate(. ~ V29, data=Regina[,c(7,8,9,29)], FUN=sum)
 +aggregate(V7+V8 ~ V29, data=Regina[,c(7,8,9,29)], FUN=sum)
 +aggregate(cbind(V7,V8) ~ V29, data=Regina[,c(7,8,9,29)], FUN=sum)
 +</code>
 +
 +
 +===== Um pequeno exemplo de análises automáticas =====
 +
 +Suponha que voce tem um diretório (pasta) com alguns arquivos que devem ser lidos e processados por análises\\
 +
 +Vamos supor aqui o diretório ''Regina'' com arquivos com o seguinte conteúdo que supomos ser o mês e a despesa:\\
 +<code>
 +dir.create("Regina")
 +cat(
 +"12  23,10 \n",
 +"12  20,70 \n",
 +"10  12,10 \n",
 +"10  8,13  \n",
 + file = "Regina/arq1.txt")
 +
 +cat(
 +"09  33,10 \n",
 +"09  50,70 \n",
 +"10  22,10 \n",
 +"10  18,13 \n",
 + file = "Regina/arq2.txt")
 +</code>
 +
 +Para cada um dos arquivos queremos:\\ 
 +(i) ler os dados, (ii) calcular a  despesa total por mês, (iii) colocar os resultados em uma página ''html''.
 +
 +<code R>
 +arquivos <- dir("Regina", full.names=T)
 +arquivos
 +
 +names(arquivos) <- c("MCT", "MEC")
 +arquivos
 +
 +resumo1 <- function(x){
 +    gastos <- read.table(x, dec=",", head=F)
 +    names(gastos) <- c("Mes", "Despesa")
 +    totM <- aggregate(Despesa ~ Mes, FUN = sum, data=gastos)
 +    return(totM)
 +    }
 +
 +res <- lapply(arquivos, resumo1)
 +res
 +
 +require(R2HTML)
 +saida <- HTMLInitFile("./",filename="regina", BackGroundColor="#BBBBEE")
 +HTML.title("Exemplo simples de automatizacao de analise", file=saida)
 +HTML("<br>Use um arquivo CSS para configurar a pagina!!!",file=saida)
 +lapply(res, HTML, file=saida)
 +HTMLEndFile()
 </code> </code>
  

QR Code
QR Code cursos:mct:exemplo1b (generated for current page)