SlideShare uma empresa Scribd logo
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
 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
   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
 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
   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
 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
   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ções
No R, sempre existem muitas
formas de fazer a mesma coisa.

                           Vamos focar sempre em uma.

                                                        10
   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
12
   Ambiente que facilita o uso do R
   Organiza as janelas de trabalho
   Acesso facilitado aos objetos e histórico de
    comandos.




                                                   13
Edição de Scripts e
exibição de objetos




           Console


                      14
Lista de objetos
e histórico




Ajuda, gráficos,
arquivos e
pacotes




                   15
 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
   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
 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
> 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
   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
   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
 length(m1)
 [1] 12
 dim(m1)
 [1] 4 3
 nrow(m1)
 [1] 4
 ncol(m1)
 [1] 3


               22
 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
m1[1:2, 2:3]
   [,1]    [,2]
[1,]   5   9
[2,]   6   10




                  24
colnames(m1)
NULL
rownames(m1)
NULL

colnames(m1) = c("C1","C2","C3")

m1[,”C1”]
[1] 1 2 3 4     t(m1) transposta de m1
                                         25
   “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
     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 DE
2010 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ÃO
2010 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 e
2010 AC       1 indireta              1 Adm direta e indireta     19      122      2009 2227     DEPARTAMENTO DE GESTÃO INTERNA        R$           - R$ 2.266.169,90




                                                                                                                                                                27
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
   lista
   fator




            veremos depois...
                            29
   Diversas fontes.
   Veremos:
     Teclado        x = scan( )
     Arquivos Excel
     Arquivos CSV
     Bancos de Dados SQL




                                   30
require(XLConnect)

wb <- loadWorkbook(“AC_PDACTCaula.xls”)

plan1 <- readWorksheet(wb, sheet = 1)

str(plan1)

View(plan1)


                                        31
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 windows
install.packages("XLConnect", dep=T)


                                             32
   Cria um objeto “wb” que aponta para o
    arquivo excel:
wb <-
  loadWorkbook(“AC_PDACTCaula.xls”)




                                            33
   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
   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
args(readWorksheet) #mostra parâmetros
function (
object,     #o workbook “wb”
sheet,      #número ou nome da
            “aba”/planilha
startRow,   #linha inicial da importação
startCol,   #col. inicial da importação
endRow,     #linha final da importação
endCol,     #col. final da    importação
header      # T ou F: usar primeira
            linha para dar nome às
            colunas )
                                       36
 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      somapd
AC   2009   1        34296430.67   3630841.04
AC   2010   1        29397712.04   3579715.12
AL   2009   1        12650160.51   8903714.41

                                                  37
   Exemplo:
uf    ano    valido     somaactc      somapd
AC    2009   1          34296430,67   3630841,04
AC    2010   1          29397712,04   3579715,12
AL    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
   str(d)       #estrutura criada

   summary(d)   #resumo estatístico

   head(d)      #primeiros registros

   tail(d)      #últimos registros

   plot(d)      #visualização padrão

                                        39
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
   Como fazer a soma de uma coluna de um
    data.frame?
    sum(data.frame$coluna)
    sum(d$somapd)
    [1] NA




                                            41
   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
   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
   Para estes exemplos:
    milsa = read.csv("milsaText.txt",
      sep="t", head=T, dec=".")




                                        44
 Frequências absolutas
table(milsa$civil)
 Frequências relativas
table(milsa$civil) /
     length(milsa$civil)
    ou
prop.table(milsa$civil)
 Gráfico de setores
pie(table(milsa$civil))

                           45
 Com attach(milsa)
 Frequências absolutas
table(civil)
 Frequências relativas
table(civil) /
     length(civil)
    ou
prop.table(civil)
 Gráfico de setores
                          depois: detach(milsa)
pie(table(civil))
                                                  46
 Gráfico de barras:
barplot(table(instrucao))
 Lembrando:
     Posso salvar resultados como objetos e usá-los
     várias vezes
instrucao.tb = table(instrucao)
barplot(instrucao.tb )
pie(instrucao.tb )


                                                       47
 Tente:
prop.table(filhos)
 Solução:
prop.table(table(filhos))
 Outra solução:
     Filtrar os elementos com NA




                                    48
 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
 plot(milsa)
 plot(salario ~ ano)
 hist(salario)
 boxplot(salario)
 stem(salario)

                        50
   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
 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
 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
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
   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
 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
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
   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
   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
 Apagando um objeto
  rm(milsaNovo)     ls() : lista de
 Apagando tudo    objetos correntes

  rm(list = ls())



                                       60
 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
 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
 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
   Criando uma coluna em um data.frame:
    milsa$idade =
      milsa$ano + milsa$mes/12




                                           64
X         Y




6+3+5=14

               65
X   Y




        66
X   Y




        67
X   Y




        68
X   Y




        69
   Exemplo:



    com




               70
   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
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
   De texto para número
d.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
   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
Nominal:
milsa$fatorcivil=factor(milsa$civil, ordered=F)

$fatorcivil : Factor w/ 2 levels
  "casado","solteiro": 2 1 1 2 2 1 2 2 1 2

Ordinal:
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
 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
   Para:
    m1 <- matrix(1:12, ncol = 3)
   Soma das colunas (um valor para cada coluna):
colSums(m1)
[1] 10 26 42
 Ou
apply(m1,2,sum)
[1] 10 26 42



                                                    77
   Soma das linhas (um valor para cada linha):
rowSums(m1)
[1] 15 18 21 24
   Ou
apply(m1,1,sum)
[1] 15 18 21 24

        Posso usar
     qualquer função.
       Até próprias

                                                  78
aggregate(salario ~ instrucao,
              data = milsa, mean)

  instrucao   salario
1    1oGrau 7.836667
2    2oGrau 11.528333
3 Superior 16.475000


                                79
aggregate(
  salario ~ instrucao   + civil,
               data =   milsa, mean)
   instrucao    civil     salario
1     1oGrau   casado    7.044000
2     2oGrau   casado   12.825000
3 Superior     casado   17.783333
4     1oGrau solteiro    8.402857
5     2oGrau solteiro    8.935000
6 Superior solteiro     15.166667
                                       80
modelo = lm(
 formula = salario ~ ano + instrucao,
 data = milsa)

summary(modelo)




                         É uma linha mesmo!!!

                                                81

Mais conteúdo relacionado

DOC
χρονικο τησ ελληνικησ επαναστασησ
PDF
05-06-13 ΕΠΑΛ-Ηλεκτροτεχνία ΙΙ
PPTX
Ο ΑΪ ΒΑΣΙΛΗΣ ΣΤΙΣ ΔΙΑΦΟΡΕΣ ΧΩΡΕΣ ΜΕΡΟΣ Β.pptx
PPT
коледа
PPTX
As Coisas e Os Dados
PDF
Tutorial matlab
PDF
Apostila matlab
χρονικο τησ ελληνικησ επαναστασησ
05-06-13 ΕΠΑΛ-Ηλεκτροτεχνία ΙΙ
Ο ΑΪ ΒΑΣΙΛΗΣ ΣΤΙΣ ΔΙΑΦΟΡΕΣ ΧΩΡΕΣ ΜΕΡΟΣ Β.pptx
коледа
As Coisas e Os Dados
Tutorial matlab
Apostila matlab

Semelhante a Curso Básico de R (20)

PPT
Manual PSInf - Modulo 5
PDF
Apostila curso matlab
PDF
Aula 01
ODP
Linguagem R
PDF
Apostila rpira
DOC
Algoritmos
PDF
Conceitos e técnicas de programação aula 3
PPT
Excel_2000.ppt - Conceitos básicos, fórmulas e funções
PDF
Apostila estrutura de dados 2
PDF
Estrutura de dados
PDF
Scilab programacao
PDF
Introdução à programação em R
PDF
Minicurso Matlab IVSEE 2013 UERJ
PDF
Algoritmos
PDF
Curso basico matlab
PDF
Curso basico matlab
PPTX
2 teste Power point'.pptxuyuerbuszbrzebyrsdusr
PPTX
Python: Funcionalidades Básicas
PPT
Pesquisa ppi 2
Manual PSInf - Modulo 5
Apostila curso matlab
Aula 01
Linguagem R
Apostila rpira
Algoritmos
Conceitos e técnicas de programação aula 3
Excel_2000.ppt - Conceitos básicos, fórmulas e funções
Apostila estrutura de dados 2
Estrutura de dados
Scilab programacao
Introdução à programação em R
Minicurso Matlab IVSEE 2013 UERJ
Algoritmos
Curso basico matlab
Curso basico matlab
2 teste Power point'.pptxuyuerbuszbrzebyrsdusr
Python: Funcionalidades Básicas
Pesquisa ppi 2
Anúncio

Mais de Roberto de Pinho (18)

PDF
Avaliação de impacto em Ciência, Tecnologia e Inovação
PDF
Rumo a uma política de dados científicos
PDF
Towards a scientific data policy
PPTX
Cientometria: Duas xícaras de ciência e três pitadas de citações
PPTX
Indicadores de políticas públicas e métricas de software: uma visão em paralelo
PPT
Fábrica de Experiência
PPT
Metodologia de Análise e Solução de Problemas (MASP)
PPT
Natureza dos Problemas
PPTX
Elaboração de Indicadores para quem tem pressa
PPTX
Indicadores bibliométricos
PPTX
Evolução e perspectivas dos investimentos em CTI no Brasil
PPTX
Key words of Brazilian science
PPTX
Doutores 2010-word-clouds_apres
PDF
Dados abertos: dados pessoais e anonimização de bases" no II Encontro Naciona...
PPTX
In vino veritas - Dans le vin la vérité - L’étiquette de vin
PDF
Espaço incremental para a mineração visual de conjuntos dinâmicos de documentos
PDF
Dados abertos: dados pessoais e anonimização de bases
PDF
Avaliação de impacto em Ciência, Tecnologia e Inovação
Rumo a uma política de dados científicos
Towards a scientific data policy
Cientometria: Duas xícaras de ciência e três pitadas de citações
Indicadores de políticas públicas e métricas de software: uma visão em paralelo
Fábrica de Experiência
Metodologia de Análise e Solução de Problemas (MASP)
Natureza dos Problemas
Elaboração de Indicadores para quem tem pressa
Indicadores bibliométricos
Evolução e perspectivas dos investimentos em CTI no Brasil
Key words of Brazilian science
Doutores 2010-word-clouds_apres
Dados abertos: dados pessoais e anonimização de bases" no II Encontro Naciona...
In vino veritas - Dans le vin la vérité - L’étiquette de vin
Espaço incremental para a mineração visual de conjuntos dinâmicos de documentos
Dados abertos: dados pessoais e anonimização de bases
Anúncio

Último (20)

PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Processos na gestão de transportes, TM100 Col18
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Curso de Java 11 - (Serializable (Serialização de Objetos)).pptx
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Curso de Java 9 - (Threads) Multitarefas.pptx
PPTX
Curso de Java 15 - (Uso de Servlets (Entendendo a Estrutura)).pptx
PPTX
Aula 18 - Manipulacao De Arquivos python
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Émile Durkheim slide elaborado muito bom
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Curso de Java 13 - (JavaEE (JSP e Servlets)).pptx
PPTX
Aula sobre desenvolvimento de aplicativos
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Processos na gestão de transportes, TM100 Col18
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Curso de Java 11 - (Serializable (Serialização de Objetos)).pptx
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Curso de Java 9 - (Threads) Multitarefas.pptx
Curso de Java 15 - (Uso de Servlets (Entendendo a Estrutura)).pptx
Aula 18 - Manipulacao De Arquivos python
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Émile Durkheim slide elaborado muito bom
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Custos e liquidação no SAP Transportation Management, TM130 Col18
Curso de Java 13 - (JavaEE (JSP e Servlets)).pptx
Aula sobre desenvolvimento de aplicativos
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
COBITxITIL-Entenda as diferença em uso governança TI
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...

Curso Básico de R

  • 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ções No R, sempre existem muitas formas 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 e exibição de objetos Console 14
  • 12. Lista de objetos e histórico Ajuda, gráficos, arquivos e pacotes 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
  • 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 DE 2010 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ÃO 2010 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 e 2010 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 windows install.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âmetros function ( object, #o workbook “wb” sheet, #número ou nome da “aba”/planilha startRow, #linha inicial da importação startCol, #col. inicial da importação endRow, #linha final da importação endCol, #col. final da importação header # 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 somapd AC 2009 1 34296430.67 3630841.04 AC 2010 1 29397712.04 3579715.12 AL 2009 1 12650160.51 8903714.41 37
  • 35. Exemplo: uf ano valido somaactc somapd AC 2009 1 34296430,67 3630841,04 AC 2010 1 29397712,04 3579715,12 AL 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 absolutas table(milsa$civil)  Frequências relativas table(milsa$civil) / length(milsa$civil) ou prop.table(milsa$civil)  Gráfico de setores pie(table(milsa$civil)) 45
  • 43.  Com attach(milsa)  Frequências absolutas table(civil)  Frequências relativas table(civil) / length(civil) ou prop.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 vezes instrucao.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 Y 6+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úmero d.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 2 Ordinal: 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  Ou apply(m1,2,sum) [1] 10 26 42 77
  • 75. Soma das linhas (um valor para cada linha): rowSums(m1) [1] 15 18 21 24  Ou apply(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 salario 1 1oGrau 7.836667 2 2oGrau 11.528333 3 Superior 16.475000 79
  • 77. aggregate( salario ~ instrucao + civil, data = milsa, mean) instrucao civil salario 1 1oGrau casado 7.044000 2 2oGrau casado 12.825000 3 Superior casado 17.783333 4 1oGrau solteiro 8.402857 5 2oGrau solteiro 8.935000 6 Superior solteiro 15.166667 80
  • 78. modelo = lm( formula = salario ~ ano + instrucao, data = milsa) summary(modelo) É uma linha mesmo!!! 81