Não foi possível enviar o arquivo. Será algum problema com as permissões?
Diferenças

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]
paulojus criada
cursos: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)