Your SlideShare is downloading. ×
Curso Básico de R
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Curso Básico de R

1,681

Published on

Curso básico de R preparado para o MCTI

Curso básico de R preparado para o MCTI

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,681
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
39
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Prof. Dr. Roberto Dantas de Pinho, roberto.pinho@mct.gov.br Este curso tomou como base material dos profs. Dr. Paulo Justiniano Ribeiro Jr (UFPR) e Dr. Cosme Marcelo Furtado Passos da Silva (FIOCRUZ) 1
  • 2.  Um primeira  Salvando seu sessão com o R trabalho Objetos  Manipulando Entrada de dados dados Agora que temos  Somas e os dados... agregações  Algumas análises  Regressão linear Filtragem e seleção E muitas outras coisas ao longo do caminho 2
  • 3.  Você pode usar o R para avaliar algumas expressões aritméticas simples. Digite: 1 + 2 + 3 2 + 3 * 4 3/2 + 1 4 * 3**3 O R é uma ambiente e uma linguagem 6
  • 4.  O ambiente R permite que você envie comandos e veja seus resultados imediatamente A linguagem R é composta pelo conjunto de regras e funções disponíveis que podem ser executados no ambiente R. Você pode juntar sequências de comandos em scripts para uso posterior 7
  • 5.  Um série de funções estão disponíveis. Alguns exemplos simples:  sqrt(2) 2  abs(-10) 10  sin(pi) sin( ) pi é uma constante do R, seu valor já é definido 8
  • 6.  Resultados, dados de entrada , tabelas, etc são armazenados no R em Objetos Objetos possuem um nome, conteúdo , um tipo e são armazenados na memória. Ex. Criar o objeto “x” contendo o número 10: x <- 10 Exibir o conteúdo de x: x No R, abc é diferente de ABC 9
  • 7.  Experimente: X <- sqrt(2) <- e = são equivalentes. Y = sin(pi) Z = sqrt(X+Y) Nos exemplos acima, X, Y e Z armazenam os resultados das respectivas operaçõesNo R, sempre existem muitasformas de fazer a mesma coisa. Vamos focar sempre em uma. 10
  • 8.  Qual o valor de C ao final da sequência de comandos abaixo? A = 1 B = 2 C = A + B A = 5 B = 5 Por quê? 11
  • 9. 12
  • 10.  Ambiente que facilita o uso do R Organiza as janelas de trabalho Acesso facilitado aos objetos e histórico de comandos. 13
  • 11. Edição de Scripts eexibição de objetos Console 14
  • 12. Lista de objetose históricoAjuda, gráficos,arquivos epacotes 15
  • 13.  Objeto que armazena múltiplos dados de um único tipo A função c( ) (“c” de concatenar ou de conjunto) permite agrupar valores para formar um vetor: X = c(1,3,6) Para acessar elementos do vetor: X[1] X[3] 16
  • 14.  Operações aritméticas e funções podem ser aplicadas a todo um vetor. Ex. X = c(1,3,5) Y = c(10,20,30) X+Y 11 23 35 sum(X) 9 E X + 100 ? 101 103 105 pela Lei da reciclagem 17
  • 15.  Quando o tamanho pedido por uma operação é diferente dos dados disponíveis, os dados existentes são repetidos até completar o necessário. Como X tem 3 elementos, X+100 é o mesmo que X + c(100,100,100) 18
  • 16. > X = 1:10> [1] 1 2 3 4 5 6 7 8 9 10> X = seq(0,1,by=0.1)> [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0> rep(“a”,5)> “a” “a” “a” “a” “a”> nomes = c("fulano", "beltrano", "cicrano")> nomes [1] "fulano" "beltrano" "cicrano"> letras = letters[1:5]> letras [1] "a" "b" "c" "d" "e"> letras = LETTERS[1:5]> letras [1] "A" "B" "C" "D" "E" 19
  • 17.  numeric  integer  is.numeric( )  is.integer( )  as.numeric( )  as.integer( ) character  logical  is.character( )  T == TRUE == 1  as.character( )  F == FALSE == 0 A == B significa “A é igual a B?” 20
  • 18.  Vetor organizado em linhas e colunas m1 <- matrix(1:12, ncol = 3) [,1] [,2] [,3] [1,] 1 5 9 [2,] 2 6 10 [3,] 3 7 11 [4,] 4 8 12 21
  • 19.  length(m1) [1] 12 dim(m1) [1] 4 3 nrow(m1) [1] 4 ncol(m1) [1] 3 22
  • 20.  m1[1, 2] [1] 5 m1[2, 2] [1] 6 m1[ , 2] [1] 5 6 7 8 m1[3, ] m1[1,2]= 99 [1] 3 7 11 muda o valor da célula 23
  • 21. m1[1:2, 2:3] [,1] [,2][1,] 5 9[2,] 6 10 24
  • 22. colnames(m1)NULLrownames(m1)NULLcolnames(m1) = c("C1","C2","C3")m1[,”C1”][1] 1 2 3 4 t(m1) transposta de m1 25
  • 23.  “matriz” com várias dimensões. Ex. com 3 dim.:ar1 <- array(1:24, dim = c(3, 4, 2)), , 1 1ª matriz [,1] [,2] [,3] [,4][1,] 1 4 7 10[2,] 2 5 8 11[3,] 3 6 9 12 Para um array de 3 dimensões, você pode entender a 3ª, , 2 dimensão como uma coleção de matrizes. [,1] [,2] [,3] [,4][1,] 13 16 19 22[2,] 14 17 20 23 2ª matriz[3,] 15 18 21 24 26
  • 24.  Como trabalhar com coisas assim?Ano Código do Órgão UF Órgão Código da UO unidade orçamentária função subfunção programa ação localizador descrição da ação valor P&D valor ACTC Adm direta e MODERNIZAÇÃO DO SISTEMA DE2010 AC 1 indireta 1 Adm direta e indireta 19 121 2056 1548 PLANEJAMENTO E GESTÃO DA SDCT R$ - R$ 16.655,00 PROGRAMA DE COOPERAÇÃO TÉCNICA E Adm FINANCEIRA COM INSTIT. NAC. INTERN. direta e GOVERNAMENTAIS E NÃO2010 AC 1 indireta 1 Adm direta e indireta 19 121 2056 1549 GOVERNAMENTAIS R$ - R$ 715.000,00 Adm direta e MANUTENÇÃO DO GABINETE DO SECRETÁ2010 AC 1 indireta 1 Adm direta e indireta 19 122 2009 2224 RIO R$ - R$ 27.732,11 Adm direta e2010 AC 1 indireta 1 Adm direta e indireta 19 122 2009 2227 DEPARTAMENTO DE GESTÃO INTERNA R$ - R$ 2.266.169,90 27
  • 25. colnames(d) [1] "letra" "num" "valor"  Cada coluna tem o seu tipo d = data.frame(letters[1:4], 1:4, 10.5) letters.1.4. X1.4 X10.5 1 a 1 10.5 Na maior parte do 2 b 2 10.5 tempo usaremos 3 c 3 10.5 data.frames 4 d 4 10.5  Podemos mudar o nome das colunas: colnames(d) = c("letra","num", "valor") colnames(d) [1] "letra" "num" "valor“ d$valor # seleciona a coluna “valor” de d 28
  • 26.  lista fator veremos depois... 29
  • 27.  Diversas fontes. Veremos:  Teclado x = scan( )  Arquivos Excel  Arquivos CSV  Bancos de Dados SQL 30
  • 28. require(XLConnect)wb <- loadWorkbook(“AC_PDACTCaula.xls”)plan1 <- readWorksheet(wb, sheet = 1)str(plan1)View(plan1) 31
  • 29. require(XLConnect) Carrega o pacote XLConnect Pacotes são conjuntos de funções e dados que adicionam funcionalidades ao R. Se o pacote não estiver instalado:setInternet2() #somente no windowsinstall.packages("XLConnect", dep=T) 32
  • 30.  Cria um objeto “wb” que aponta para o arquivo excel:wb <- loadWorkbook(“AC_PDACTCaula.xls”) 33
  • 31.  Carrega os dados da primeira planilha (“aba”) em um objeto chamado “plan1”plan1 <- readWorksheet(wb, sheet = 1)As funções no R identificam os parâmetros As funções no R identificam os pela ordem parâmetros pela Ou utilizando o nome do ordem parâmetro 34
  • 32.  Mostra a estrutura do objeto criado:str(plan1) str() funciona para qualquer objeto do R. É muito útil. Mostra os dados carregados em uma janela:View(plan1) No RStudio, você pode clicar em um objeto na lista de objetos 35
  • 33. args(readWorksheet) #mostra parâmetrosfunction (object, #o workbook “wb”sheet, #número ou nome da “aba”/planilhastartRow, #linha inicial da importaçãostartCol, #col. inicial da importaçãoendRow, #linha final da importaçãoendCol, #col. final da importaçãoheader # T ou F: usar primeira linha para dar nome às colunas ) 36
  • 34.  Comma-separated values: valores separados por vírgula Formato de arquivo muito comum para troca de dados ; São comuns outros separadores: <tab> <espaço> Exemplo:uf ano valido somaactc somapdAC 2009 1 34296430.67 3630841.04AC 2010 1 29397712.04 3579715.12AL 2009 1 12650160.51 8903714.41 37
  • 35.  Exemplo:uf ano valido somaactc somapdAC 2009 1 34296430,67 3630841,04AC 2010 1 29397712,04 3579715,12AL 2009 1 12650160,51 8903714,41 Para ler este arquivo:d = read.csv(file="AgregaUF20110930_b.txt", header=T, # usa primeira linha como cabeçalho sep="t", # separador de valores é <tab> dec="," # separador decimal é vírgula) 38
  • 36.  str(d) #estrutura criada summary(d) #resumo estatístico head(d) #primeiros registros tail(d) #últimos registros plot(d) #visualização padrão 39
  • 37. require(RODBC)canal <- odbcConnect(“base_ODBC",case="tolower“,uid=“usuário”,pwd=“senha”)d <- sqlQuery(canal,”select * from tabela where ano = 2010”,as.is=T) 40
  • 38.  Como fazer a soma de uma coluna de um data.frame? sum(data.frame$coluna) sum(d$somapd) [1] NA 41
  • 39.  NA Not Available  denota dados faltantes. Note que deve utilizar maiúsculas. NaN Not a Number  denota um valor que não é representável por um número. Inf e -Inf  mais ou menos infinito. Tente: c(-1,0,1)/0 42
  • 40.  Soma: sum(d$somapd, na.rm=T) [1] 4836882446 Média:sum(d$somapd, na.rm=T) Mediana:median(d$somapd, na.rm=T) Desvio padrão:sd(d$somapd, na.rm=T) 43
  • 41.  Para estes exemplos: milsa = read.csv("milsaText.txt", sep="t", head=T, dec=".") 44
  • 42.  Frequências absolutastable(milsa$civil) Frequências relativastable(milsa$civil) / length(milsa$civil) ouprop.table(milsa$civil) Gráfico de setorespie(table(milsa$civil)) 45
  • 43.  Com attach(milsa) Frequências absolutastable(civil) Frequências relativastable(civil) / length(civil) ouprop.table(civil) Gráfico de setores depois: detach(milsa)pie(table(civil)) 46
  • 44.  Gráfico de barras:barplot(table(instrucao)) Lembrando:  Posso salvar resultados como objetos e usá-los várias vezesinstrucao.tb = table(instrucao)barplot(instrucao.tb )pie(instrucao.tb ) 47
  • 45.  Tente:prop.table(filhos) Solução:prop.table(table(filhos)) Outra solução:  Filtrar os elementos com NA 48
  • 46.  mean(filhos, na.rm=T) #média  median(filhos, na.rm=T) #mediana  range(filhos, na.rm=T) #amplitude  var(filhos, na.rm=T) #variância  sd(filhos, na.rm=T) #desvio padrão Quartis:  filhos.quartis = quantile(filhos, na.rm=T) Amplitude inter-quartis:  filhos.quartis [4] -filhos.quartis [1] 49
  • 47.  plot(milsa) plot(salario ~ ano) hist(salario) boxplot(salario) stem(salario) 50
  • 48.  Selecionando algumas linhas milsaNovo = milsa[c(1,3,5,6) , ] Selecionando algumas colunas milsaNovo = milsa[ , c(1,3,5)] milsaNovo = milsa[ , c(“funcionario”, ”instrucao“, “salario”)] Atenção:  Cria cópia milsaNovo=milsa[c(1,3,5,6) ,]  Substitui anterior milsa=milsa[c(1,3,5,6) , ] 51
  • 49.  Quem ganha acima da mediana acimamediana = milsa[ salario > median(salario), ] Quais são os casados com nível superior? casadoEsuperior = milsa[ civil==“casado” & instrucao == “Superior”, ] E: ambas as condições devem ser verdadeiras 52
  • 50.  Quais são os casados ou quem tem nível superior? casadoOUsuperior = milsa[ civil==“casado” | instrucao == “Superior”, ] OU: pelo menos uma das condições deve ser verdadeira 53
  • 51. NÃO milsaLimpo=milsa[!is.na(salario), ] Em português: Nova tabela milsaLimpo É igual = Tabela antiga milsa Selecione [ Linhas Salário não é NA ! is.na(salario) e todas as colunas , ] 54
  • 52.  QUANTOS são os casados? sum(civil==“casado”)  ou table(civil)["casado"] QUANTOS são os casados e tem nível superior? sum(civil==“casado” & instrucao == “Superior” ) table(civil,instrucao)["casado", "Superior"] 55
  • 53.  milsaNovo é igual a milsa, sem as linhas 1,2 e 5 e sem as colunas 1 e 8:milsaNovo =milsa[-c(1,2,5), -c(1,8)] 56
  • 54. Quais linhas atendem à condição sup = which(instrucao=="Superior“) [1] 19 24 31 33 34 36 Posso usar depois: mean(milsa[sup,”salario”])  Média salarial dos que tem nível superior vantagem: não cria cópia!! 57
  • 55.  Uma amostra aleatória de 10 elementos de milsa:  amostra = sample(x=nrow(milsa),size=10)  [1] 12 29 1 3 17 14 26 33 20 31 Média salarial da amostra:  mean(milsa[amostra,”salario”]) 58
  • 56.  Em ordem de número de filhos: milsa[order(filhos),] Decrescente: milsa[order(filhos, decreasing=T),] Em ordem de número de filhos e depois por idade: milsa[order(filhos,ano),] Ver os 10 mais novos: head(milsa[order(ano),], 10) Ver os 10 mais velhos: tail(milsa[order(ano),], 10) 59
  • 57.  Apagando um objeto  rm(milsaNovo) ls() : lista de Apagando tudo objetos correntes  rm(list = ls()) 60
  • 58.  Objetos do tipo lista são coleções que podem conter objetos de tipos diferentes.lis = list(A=1:10, B=“Texto”, C = matrix(1:9,ncol=3) São muito utilizadas na passagem de parâmetros para funções ou nos resultados de funções. lis[1:2]  uma lista com os dois primeiros itens de lis (A e B) lis[[1]]:  objeto armazenado na primeira posição da lista ( o conteúdo de A). O mesmo que lis$A 61
  • 59.  Para salvar todos os objetos: save.image(“arquivo.RData”) Para salvar alguns objetos: save( x, y, file=“arquivo.RData”) Carregando: load(“arquivo.RData“) Vários “load”: os objetos com nomes distintos se acumulam 62
  • 60.  Salvar um script “.R” que reproduza os passos feitos. Vantagem: Além de servir de documentação da criação da base, incorpora alterações na base, se houver. Modelo híbrido:  Resultados intermediários que requerem muito tempo processamento pode ser salvos em imagem. Ex. agregação de dados de empregados por empresa 63
  • 61.  Criando uma coluna em um data.frame: milsa$idade = milsa$ano + milsa$mes/12 64
  • 62. X Y6+3+5=14 65
  • 63. X Y 66
  • 64. X Y 67
  • 65. X Y 68
  • 66. X Y 69
  • 67.  Exemplo: com 70
  • 68.  Registros com correspondência :merge(x=milsa, y=tabInst,by.x="instrucao", by.y="desc“, all=F)Todos os registros da tabela X:merge(x=milsa, y=tabInst,by.x="instrucao", by.y="desc", all.x=T) 71
  • 69. Todos os registros da tabela y:merge(x=milsa, y=tabInst,by.x="instrucao", by.y="desc", all.y=T)Todos os registros das tabela x e y:merge(x=milsa, y=tabInst,by.x="instrucao", by.y="desc", all=T) 72
  • 70.  De texto para númerod.f$novaColuna = as.numeric(d.f$coluna) De número para texto:d.f$novaColuna=as.character(d.f$coluna) De texto ou número para inteiro:d.f$novaColuna = as.integer(d.f$coluna) Inteiros economizam memória 73
  • 71.  Representação de variáveis qualitativas  Nominais ▪ “casado”, “solteiro”  Ordinais Fatores economizam memória ▪ “alto”, “baixo” Economizam espaço de memória Tratamento apropriado para este tipo de variável pelas funções do R 74
  • 72. Nominal:milsa$fatorcivil=factor(milsa$civil, ordered=F)$fatorcivil : Factor w/ 2 levels "casado","solteiro": 2 1 1 2 2 1 2 2 1 2Ordinal:milsa$fatormes = factor(milsa$mes, ordered=T)$fatormes : Ord.factor w/ 12 levels "0"<"1"<"2"<"3"<..: 4 11 6 11 8 1 1 5 11 7 ... É possível definir uma ordem específica: ?factor 75
  • 73.  De fator para texto:d.f$novaColuna = as.character(d.f$colunaFator) De fator para número:d.f$novaColuna = as.numeric( as.character(d.f$colunaFator)) A representação interna de um fator é diferente do seu texto 76
  • 74.  Para: m1 <- matrix(1:12, ncol = 3) Soma das colunas (um valor para cada coluna):colSums(m1)[1] 10 26 42 Ouapply(m1,2,sum)[1] 10 26 42 77
  • 75.  Soma das linhas (um valor para cada linha):rowSums(m1)[1] 15 18 21 24 Ouapply(m1,1,sum)[1] 15 18 21 24 Posso usar qualquer função. Até próprias 78
  • 76. aggregate(salario ~ instrucao, data = milsa, mean) instrucao salario1 1oGrau 7.8366672 2oGrau 11.5283333 Superior 16.475000 79
  • 77. aggregate( salario ~ instrucao + civil, data = milsa, mean) instrucao civil salario1 1oGrau casado 7.0440002 2oGrau casado 12.8250003 Superior casado 17.7833334 1oGrau solteiro 8.4028575 2oGrau solteiro 8.9350006 Superior solteiro 15.166667 80
  • 78. modelo = lm( formula = salario ~ ano + instrucao, data = milsa)summary(modelo) É uma linha mesmo!!! 81

×