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
Próxima revisão Ambos lados da revisão seguinte
cursos:mct:exemplo5 [2011/05/06 00:44]
paulojus criada
cursos:mct:exemplo5 [2011/05/09 10:54]
paulojus
Linha 1: Linha 1:
 ====== Miscelânia de tópicos ====== ====== Miscelânia de tópicos ======
  
-<​fs ​small>Um breve exemplo ​de operações matriciais - coeficientes de regressao(modelo) linear +<​fs ​medium>Representação e Manipulação ​de datas</fs> 
-</​fs><​code R> +<code R> 
-require(MASS+## transformando caracteres em datas 
-data(hills+dt1 <- as.Date("​4/​02/​2011 03:​24:​13",​ "​%d/​%m/​%Y %H:​%M:​%S"​
-names(hills+dt1 
-X <- cbind(1hills$dist+## exibindo a data de otras formas 
-y <- hills$time+format(dt1, "​%j"​   # dia do ano 
 +format(dt1, "​%A"​   # dia da semana 
 +format(dt1"​%c"​) ​   # referencia completa (de acordo com o locale do sistema
 +format(dt1, "​%m"​) ​   # número do mes
  
-## Há formas e formas de fazer operações...+## opcoes disponíveis para exibição:​ 
 +# a A b B c d H I j m M p S U w W x X y Y z Z
  
-## uma forma não muito adequada: 
-solve(t(X) %*% X) %*% t(X) %*% y 
- 
-## outra melhor: 
-solve(crossprod(X),​ crossprod(X,​ y))  
-</​code>​ 
- 
- 
-<fs small>​Representação e Manipulação de datas</​fs>​ 
-<code R> 
 Sys.time() Sys.time()
- 
-format(as.Date("​4/​02/​2011 03:​24:​13",​ "​%d/​%m/​%Y %H:​%M:​%S"​),​ "​%j"​) 
 format(as.Date(Sys.time(),​ "​%d/​%m/​%Y %H:​%M:​%S"​),​ "​%j"​) format(as.Date(Sys.time(),​ "​%d/​%m/​%Y %H:​%M:​%S"​),​ "​%j"​)
-# a A b B c d H I j m M p S U w W x X y Y z Z 
  
-x <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")+## as datas podem ser fornecidas de outras maneiras... 
 +x <- c("25set1967", "28set1969", "30jan2003", "05jul2004")
 z <- strptime(x, "​%d%b%Y"​) z <- strptime(x, "​%d%b%Y"​)
 z z
  
 +##
 +## Ver detalhes aqui!!! ​
 +##
 +## e note a confusão com a omisão do século !!!
 +x <- c("​1jan90",​ "​2jan90",​ "​31mar90",​ "​30jul90"​)
 +z <- strptime(x, "​%d%b%y"​)
 +z
 +x <- c("​25set67",​ "​28set69",​ "​30jan03",​ "​05jul04"​)
 +z <- strptime(x, "​%d%b%y"​)
 +z
 +
 +## concatenando datas e horarios para formar registros únicos
 dates <- c("​02/​27/​92",​ "​02/​27/​92",​ "​01/​14/​92",​ "​02/​28/​92",​ "​02/​01/​92"​) dates <- c("​02/​27/​92",​ "​02/​27/​92",​ "​01/​14/​92",​ "​02/​28/​92",​ "​02/​01/​92"​)
 times <- c("​23:​03:​20",​ "​22:​29:​56",​ "​01:​03:​30",​ "​18:​21:​03",​ "​16:​56:​26"​) times <- c("​23:​03:​20",​ "​22:​29:​56",​ "​01:​03:​30",​ "​18:​21:​03",​ "​16:​56:​26"​)
Linha 36: Linha 40:
 strptime(x, "​%m/​%d/​%y %H:​%M:​%S"​) strptime(x, "​%m/​%d/​%y %H:​%M:​%S"​)
  
-## fracoes ​de segundos+dt2 <- strptime(x, "​%m/​%d/​%y %H:​%M:​%S"​) 
 +format(dt2, "​%c"​) 
 + 
 +dt2 <- sort(dt2) 
 +dt2 
 + 
 +diff(dt2) 
 + 
 +## frações ​de segundos
 z <- strptime("​20/​2/​06 11:​16:​16.683",​ "​%d/​%m/​%y %H:​%M:​%OS"​) z <- strptime("​20/​2/​06 11:​16:​16.683",​ "​%d/​%m/​%y %H:​%M:​%OS"​)
  
Linha 43: Linha 55:
 </​code>​ </​code>​
  
-<​fs ​small>Lendo dados da área de transferência</​fs>​+<​fs ​medium>Lendo dados de teclado e da área de transferência</​fs>​
 <code R> <code R>
 +## digitar dados com <​ENTER>​ após cada registro. Digitar um <​ENTER>​ a mais para encerrar.
 s1 <- scan() s1 <- scan()
  
 +## recortar (CTRL-C) os seguintes
 12  13  14  ​ 12  13  14  ​
 21  21  14  ​ 21  21  14  ​
Linha 52: Linha 66:
 15  32  29 15  32  29
  
 +## lendo como vetor...
 s1 <- scan("​clipboard"​) s1 <- scan("​clipboard"​)
 +## .. e transformando para matriz
 +## le por linhas, portanto para montar matriz de ser por linha 
 +matrix(s1, nc=3, byrow=T)
  
 +## agora lendo diretamente como data-frame
 d1 <- read.table("​clipboard"​) d1 <- read.table("​clipboard"​)
 d1 d1
  
 +## mais opcoes
 +## recortar (CTRL-C) os seguintes
 +X;      Y;   ​Z; ​   S
 +12,3;  13;  14,2;  A
 +21,2;  21;  14,0;  A
 +12,1;  31;  25,1;  B
 +15,1;  32;  29,9;  B
  
-## +d2 <- read.table("​clipboard",​ sep=";",​ dec=",",​ header=T) 
-## exemplos de leitura e manipulacao para ajustes +d2 
-## +</code>
-## site MCT --indicadores ​+
  
-## Producao cientifica, tabela 5.1 (pesquisadores)+<fs medium>​Exemplo lendo tabelas da página do MCT/​Indicadores</​fs>​
  
 +Acessar tabelas na web por www.mct.gov.br/​indicadores
 +
 +Tabela de Produçãoo científica,​ tabela 5.1 (pesquisadores)
 +<code R>
 +## Marcar/​CTRL-C a tabela de indicadores de pesquisadores
 pcPesq <- read.table("​clipboard",​ sep="​\t",​ dec=","​) pcPesq <- read.table("​clipboard",​ sep="​\t",​ dec=","​)
 head(pcPesq) head(pcPesq)
  
 +## uma um pouco melhor usando mais argumentos
 pcPesq <- read.table("​clipboard",​ sep="​\t",​ dec=",",​ strip.white=T,​ as.is=T) pcPesq <- read.table("​clipboard",​ sep="​\t",​ dec=",",​ strip.white=T,​ as.is=T)
 head(pcPesq) head(pcPesq)
  
 str(pcPesq) str(pcPesq)
 +</​code>​
  
-ptMil <- function(x){  +Note que todas as colunasexceto a primeiraforam lidas como caracteres!
- if(!is.numeric(x) & !is.integer(x)) return(as.numeric(gsub("​\\."​""​x))) +
-        else return(x) +
-+
-pcPesq <- as.data.frame(lapply(pcPesq,​ ptMil))+
  
 +Note que a tabela usa o caracter "​."​ para separar milhares.\\
 +Entretanto o R usa "​."​ como caracter de separação decimal
 +
 +Duas possíveis formas para contornar e ajustar os dados neste contexto:
 +  - Item de lista ordenada converter para números e multiplicar por mil<code R>
 +pcPesq$V2
 +as.numeric(pcPesq$V2)
 +as.numeric(pcPesq$V2)*1000
 +
 +## agora automatizando para fazer em todas as colunas necessárias
 +Pesq <- as.data.frame(lapply(pcPesq,​ function(x){if(is.character(x)) x <- as.numeric(x)*1000;​ return(x)}))
 +Pesq</​code>​
 +  - Eliminando o caracter "​."​ (por substituição de caracteres.
 +<code R>
 +Pesq1 <- as.data.frame(lapply(pcPesq,​ function(x){ ​
 +                   if(!is.numeric(x) & !is.integer(x)) x <- as.numeric(gsub("​\\.",​ "",​ x))
 +                          return(x)}))
 +</​code>​
 +
 +Agora lendo os indicadores de estudantes e depois unir tudo em um único objeto
 +<code R>
 +pcEst <- read.table("​clipboard",​ sep="​\t",​ dec=",",​ strip.white=T,​ as.is=T)
 +head(pcEst)
 +
 +Est <- as.data.frame(lapply(pcEst,​ function(x){if(is.character(x)) x <- as.numeric(x)*1000;​ return(x)}))
 +Est
 +
 +Pesq$Autor <- "​Pesquisador"​
 +Est$Autor <- "​Estudante"​
 +
 +ProdC <- rbind(Pesq, Est)
 +ProdC
 +
 +head(ProdC)
 +names(ProdC) <- c("​Ano","​Autores","​Nacional","​Internacional","​Anais",​ "​Livros",​ "​Capítulos",​ "​Outras",​ "​Autor"​)
 +head(ProdC)
 +## sempre bom remover o que não é mais necessário...
 +rm(pcEst, pcPesq, Pesq1, Pesq, Est)
 +</​code>​
 +
 +**Alguns gráficos**\\
 +Vamos ilustrar o uso de três (3) dispositivos gráficos do R:
 +  - Gráficos básicos do sistema (pacote ''​graphics''/​default)
 +  - Gráficos da biblioteca ''​lattice''​
 +  - Gráficos da biblioteca ''​ggplot''​
 +
 +I. gráficos com ''​graphics''​ (padrões do sistema)
 +<code R>
 +## produção total, somando pesquisadores e estudantes
 +aggregate(Autores ~ Ano, data=ProdC, sum)
 +plot(aggregate(Autores ~ Ano, data=ProdC, sum))
 +plot(aggregate(Autores ~ Ano, data=ProdC, sum), type="​b",​ main="​Número total de autores"​)
 +
 +## somando agora todas as produções de Perq e Estudantes por ano
 +Totais <- aggregate(. ~ Ano, data=ProdC[,​-9],​ sum)
 +matplot(Totais[,​1],​ Totais[,​-1],​ type="​l"​)
 +
 +names(Totais)
 +
 +matplot(Totais[,​1],​ Totais[,​-1],​ type="​l",​ col=c(1, 2, 2, 3, 4, 4, 5), lty=c(1,​1,​2,​1,​1,​2,​5),​
 + xlab="​Ano",​ ylab="​Quantidade",​ main="​Produção Científica"​)
 +legend("​topleft",​ names(Totais)[-1],​ col=c(1, 2, 2, 3, 4, 4, 5), lty=c(1,​1,​2,​1,​1,​2,​5))
 +
 +## agora separando entre Pesquisadores e Estudantes
 +## gráficos podem ser feitos de várias formas, aqui alguns exemplos
 +with(ProdC, plot(Autores ~ Ano, type="​n"​))
 +with(ProdC, text(Ano, Autores, substr(Autor,​ 1, 1))
 +
 +with(ProdC, coplot(Autores ~ Ano|Autor, type="​b"​))
 +with(ProdC, coplot(Autores ~ Ano|Autor, type="​b",​ show.given=F))
 +
 +with(subset(ProdC,​ Autor=="​Pesquisador"​),​ plot(Autores ~ Ano, type="​b"​))
 +with(subset(ProdC,​ Autor=="​Estudante"​),​ lines(Autores ~ Ano, type="​b",​ col=2))
 +
 +AU <- reshape(ProdC[,​c(1,​2,​9)],​ idvar="​Ano",​ v.name="​Autores",​ timevar="​Autor",​ direction="​wide"​)
 +matplot(AU[,​1],​ AU[,-1], type="​l",​ col=c(2,4), lty=1, main="​Evolução do número de autores", ​
 +        xlab="​Ano",​ ylab="​Número de Autores"​)
 +legend("​topleft",​ c("​Pesquisadores","​Estudandes"​),​ col=c(2,4), lty=1)
 +</​code> ​
 +
 +II. Gráficos da biblioteca lattice
 +<code R>
 +require(lattice)
 +</​code>​
 +
 +III. Gráficos da biblioteca ggplot
 +<code R>
 +install.packages("​ggplot2",​ dep=T) ## contributed package"​ - é necessário instalar!
 +require(ggplot2)
 +</​code>​
 +
 +## Outro exemplo....
 ## Dados socio economicos --> 9.1 ## Dados socio economicos --> 9.1
 ScEc <- read.table("​clipboard",​ dec=",",​ sep="​\t",​ na.strings="​\\u2026 ") ScEc <- read.table("​clipboard",​ dec=",",​ sep="​\t",​ na.strings="​\\u2026 ")
Linha 84: Linha 204:
  
 ScEc <- as.data.frame(lapply(pcPesq,​ ptMil)) ScEc <- as.data.frame(lapply(pcPesq,​ ptMil))
 +
  
 </​code>​ </​code>​
 +
 +

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