Não foi possível enviar o arquivo. Será algum problema com as permissões?
Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
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(1, hills$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") | ||
z | z | ||
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 colunas, exceto a primeira, foram 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> | ||
+ | |||
+ |