Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Oficina R

Oficina R

Treinamento ocorrido na UTFPR pelo Fórum de Tecnologia em Software Livre - FTSL 2015 em Curitiba.
Essa foi a primeira versão da oficina R
O desafio foi mostrar em 3h como é trabalhar com R e RStudio para perfis que conheciam pouco ou não conheciam a linguagem. A experiência foi muito boa e o tempo foi sufuciente para percorrer a apresentação enquanto os participantes executavam os exemplos propostos, com auxílios pontuais.
A dinâmica incremental foi interessante, pois ao fim da primeira parte já foi gerado gráfico (simples, claro) de vetores básicos trabalhados.
Como principal feedback, o código exemplo poderia estar em um arquivo/script disponível a todos (não somente na apresentação) para que os particpantes apenas rodassem e vissem o resultado de forma mais rápida caso necessário.

Avatar for Daniel Araujo Domingues

Daniel Araujo Domingues

September 18, 2015
Tweet

Other Decks in Programming

Transcript

  1. Oficina R Volta ao mundo R em 80 dias 3

    horas Daniel Araújo Domingues Fórum de Tecnologia em Software Livre Curitiba, setembro de 2015 v1
  2. Agenda • Breve introdução extremamente resumida ◦ Resumo do R

    ◦ Ambiente ◦ RStudio e algumas características • Definições para a oficina (forma de trabalho e tempo/intervalo) • Mão na massa em 4 partes ◦ explorando o ambiente de forma iterativa e incremental ◦ o conteúdo explorado dependerá do avanço do conteúdo
  3. Sobre o R • projeto open source • linguagem interpretada

    • ambiente interativo • foco na manipulação de dados • milhares de pacotes (CRAN) • importa e exporta dados facilmente • gera produtos em diversos formatos • fontes de informação: r-project.org statmethods.net rseek.org r-tutor.com inside-r.org
  4. Ambiente: instalação, sessão e coisas a fim • instalação: ◦

    de preferência para sistemas 64bits; ◦ use a última versão (r-project.org) • sessão: ◦ objetos permanecem durante a sessão; ◦ pode alterar o diretório de trabalho durante o uso; ◦ possível salvar a sessão para uso futuro. • quase tudo no R é objeto: ◦ todo retorno é um vetor de algum tipo; ◦ MODE: character, numeric, logical, factotr, list, function; ◦ CLASS: numeric (vector), matrix, data.frame …
  5. RStudio: algumas características • layout do IDE bem amigável para

    trabalho com dados; • projetos, scripts, console, objetos da sessão, ajuda, pacotes carregados; • pode executar os scripts completos ou passo a passo; • pode reexecutar comandos ou pular instruções; • fácil geração de gráficos e exportação de produtos a partir dele.
  6. Definições para a oficina 4 blocos de conteúdo R tem

    muita coisa e 3h é muito pouco! Vamos aproveitar o máximo o tempo que temos!
  7. Um pouco de definições para o programador • R é

    “case sensitive”: diferencia caractere maiúsculo de minúsculo ◦ var é diferente de VAR • cada comando é finalizado com “ponto-vírgula” ; ou com uma quebra de linha • uma expressão pode ser executada ou atribuída a uma variável com: ◦ <- ◦ -> ◦ = • instruções agrupadas (como funções) ficam entre chaves { } • nomes podem ter “ponto” . e isso é comum • # significa que tudo à sua direita é um comentário
  8. Operadores matemáticos operações simples e básicas: • + - /

    * operações simples não tão básicas: • ^ ou ** %% • sqrt %/% • abs • factorial operações matemáticas: • sin, cos, tan • exp, log • 1 + 2 • x <- 6; y <- 4; x + y; • 10 - 3 • x = 9 • x ** 2 • sqrt(36) • sqrt(x ^ 2) • abs(y - x) • pi • sin(pi/2)
  9. Observando os tipos básicos de dados meu.valor <- 7 assign(“nome”,”daniel”

    ) “Ola mundo!” -> meu.texto variavel = 765 meu.vetor <- c(1,2,3) is.r = TRUE Brincando com as funções: • mode(meu.valor) • class(meu.texto) • length(nome) • mode(1==1) • mode(5+2i) • length(meu.vetor) • mode(is.r)
  10. Criando vetores numéricos A função “c” concatena; A função “seq”

    gera uma sequência; Também, de forma simples: (m:n) A função “rep” gera uma repetição; Usar [ ] para obter ou atribuir determinado item; • posição 0 retorna o tipo (mode) do vetor • posições inexistentes, NA. vetor <- c(1,2,3) vetor <- seq(0, 2, by=0.3) seq(0, 10, len=15) (1:5) vetor <- rep(7, 5) rep(c(1, 2, 3), c(3, 5, 7)) vetor[3], vetor[1+1], vetor[-2] vetor[5] <- 10
  11. Criando vetores de strings/caracteres As funções “c” e “rep” podem

    ser usadas para strings também; Constantes: • letters • LETTERS • month.abb • month.name • pi nomes <- c("fulano", "beltrano") rep(c("a","b"),5:6) mode(nomes) letters LETTERS[4] month.abb month.name[5]
  12. Testando (objetos) Criar um vetor numérico (aprox. 10 itens) Funções

    que testam individualmente cada item: • is.na() • is.nan() • is.finite() Funções que testam o conjunto • is.numeric(), is.character() • is.vector(), is.matrix() • all(), any() vetor + 10 1 / vetor vetor[5] <- NA is.na(vetor) is.finite(vetor / 0) is.numeric(vetor) all(vetor) # altere algum item para 0
  13. Funções com números Aleatório: • sample(vetor, qtde, replace=F) • round

    • trunc • floor • ceiling sample(1:10, 1) sample(5:15, 5) vetor <- seq(1,10, 0.3) v1 <- sample(vetor, 10) round(v1) trunc(v1) floor(v1)
  14. Estatística com vetores Retorna o valor resultante: • min •

    max • sum • prod • mean • median Sumário estatístico: • summary • fivenum Retorna um vetor com o resultado cumulativo: • cummin • cummax • cumsum • cumprod Removendo valores inválidos: • mean(vetor, na.rm=TRUE) Opção “na.rm=TRUE” (padrão FALSE)
  15. Tabulando vetores Criar vetor com valores repetidos numeros = trunc(rnorm(20,

    mean=10, sd=1)) table(numeros) estados = c(“AC”, ”AL”, ”AP”, ”AM”, ”BA”, ”AC”, ”AP”, ”AC”, “AM”) table(estados)
  16. Incrementando funções interessantes str(x) summary(x) help(str) ou ?summary paste(..., sep=”

    “) mode(x) class(x) ls() rm(x) dir() getwd() setwd(“~/diretorio”) q()
  17. Trabalhando Scripts Open | New - R Script > Save

    Execução: • Control + Enter (parcial) ◦ estando na linha ◦ selecionando o bloco Incluindo Script: source(“nome_do_script.R”)
  18. Tipos de dados (mode) • numeric • complex • character

    • logical • list • 1 / 0 = Inf • -1 / 0 = -Inf • 1 / Inf = 0 • 0 / 0 = NaN m.cpx <- c(2+4i, 1+0i) m.num <- seq(0, 9, 0.3) m.log <- c(TRUE, F, T, FALSE) m.chr <- letters[1:5] m.int <- -5:15 1 / m.int
  19. Estruturas de dados (classe) Vetor de números reais numeric Vetor

    de números inteiros integer Vetor de núm. complexos complex Vetor de lógicos logical Vetor de string/caracteres character Matriz matrix Lista list Dataframe data.frame comp <- 5 + 3i vetn <- vector(“numeric”, length=5) vetl <- vector(“logical”, length=3) vet <- 1:12 mat <- matrix(vet, 4) df <- data.frame(mat)
  20. Misturando dados na mesma estrutura Conversão para o tipo mais

    abrangente. Conversão explícita: funções as.* • as.numeric • as.logical • as.character • as.complex Lista é um vetor com valores de tipos diferentes. O acesso é feito com [[posicao]]. vetor <- c(1, “a”) vetor.num <- 1:6 as.logical(vetor.num) as.character(vetor.num) m.lista <- list(1,”a”,TRUE) m.lista <- vector(“list”,3) m.lista[[2]] <- 7 m.lista[[2]]
  21. Categoria (factor) A função factor(vetor) categoriza valores de um vetor

    ou de uma coluna de uma tabela. Exemplo: • Masculino/Feminino, • UF, • Sim/Não. As posições da categoria são denominadas “levels”. função levels() retorna/atribui as posições. respostas <- c(“sim”,”nao”,”nao”,”sim”,” nao) enviar.email <- factor(respostas) enviar.email levels(enviar.email) levels(enviar.email) <- c(“sim”,”nao”,” talvez”) table(enviar.email) plot(enviar.email)
  22. Matriz Matriz é um vetor de 2 dimensões e seus

    valores são de um tipo só. Funções: • matrix(vetor, nrow, ncol, byrow=FALSE) • dim() nrow() ncol() • as.matrix() • is.matrix() Acrescentar: • rbind • cbind matrix(nrow=5, ncol=3 ) mat1 <- matrix(1:12, 4) vet <- 1:15 as.matrix(vet) mat2 <- matrix(vet, 3, byrow=TRUE ) dim(mat1) is.matrix(mat2) x <- 1:4 y <- 20:23 cbind(x, y) rbind(x, y)
  23. Dataframe Dataframe é uma tabela com atributos (colunas) e observações

    (linhas). Funções: • data.frame() expand.grid() • names() • as.data.frame() is.data.frame() Função is.factor() informa se um atributo é uma categoria. Outras interessantes: nrow() ncol() dim() rbind() cbind() v1 <- c(“Joao”,”Maria”,”Jose”) v2 <- c(25, 32, 41) v3 <- factor(c(“M”,”F”,”M”)) df1 <- data.frame(v1,v2,v3) names(df1) <- c(“nome”,”idade”,”sexo”) is.data.frame(v3); is.data.frame(df1); is.factor(df1$uf); is.factor(df1$nome); v4 <- letters[1:3] cbind(df1,v4) expand.grid(v4,v1)
  24. Funções e operações com matrizes Utilidades: • dimnames() retorna/atribui nomes

    às linhas/colunas da matriz. • apply() aplica uma função aos elementos de um objeto • colSums() rowSums() • margin.table() m2 <- matrix(sample(1:10, 4), 2) dimnames(m2) <- list(c(“L1”,”L2),c(“C1”,” C2”)) print(m2) apply(m2, 1, sum) colSums(m2) margin.table(m2, 1)
  25. Atributos dos objetos Os objetos R podem ter atributos e

    esses metadados ajudam muito para filtrar e tomar decisões no código. Exemplos: • names, dimnames • dim, dimensions • class • length i
  26. Amostras Aleatórios: • sample(vetor, qtde, replace=F) • rnorm(qtde, mean=0, sd=1)

    • runif(qtde, min=0, max=1) sample(1:60, 6, replace=FALSE ) sample(letters, 15, replace=TRUE ) rnorm(1) rnorm(10) rnorm(5, mean=50, sd=0.3 ) v1 <- rnorm(10, mean=10, sd=0.1 ) runif(5, 12, 19)
  27. Ordenação rev() retorna os elementos na ordem reversa do vetor

    (de trás para frente) sort() retorna os elementos ordenados order() retorna os índices dos elementos ordenados rank() retorna a ordem (posição pós ordenado) de cada elemento vetor <- sample(1:60, 6) vetor rev(vetor) sort(vetor) order(vetor) vetor[order(vetor)] rank(vetor)
  28. Operadores lógicos Operadores: • & ou && (AND), | ou

    || (OR), ! (NOT) • ou exclusivo: xor(valor1, valor2) • == igual • != diferente (não igual) • < (menor) • > (maior) • <= (menor ou igual) • >= (maior ou igual) Retorna: • TRUE ou T ou 1 • FALSE ou F ou 0 • (1==1) • (1 > 2) • !(1>2) • (“str” == “STR”) • (“str” != “STR”) • (1==1 | 2==3)
  29. Seleção (vetor) Posicional: vetor[x] vetor[-x] “x” pode ser: • uma

    posição • um vetor de posições ou lógico • uma sequência de posições Lógica: vetor[condição] “condição” verifica individualmente cada elemento quando passado o nome do vetor. Função: which(condição) retorna a posição dos elementos que atendem ao critério. vetor <- sample(1:100,15) • vetor[5] • vetor[c(1,5,10,15)] • vetor[7:11] • vetor[-c(4,12)] • vetor[-(1:5)] vetor[vetor > 5] which(vetor < 4)
  30. Seleção (matriz) Matriz: similar ao vetor, porém os índices são

    “linha,coluna” (sempre linha,coluna). • matriz[x,y] matriz[-x,-y] • matriz[x,] matriz[,y] • matriz[“nome”,”nome”] Array é uma matriz de “n” dimensões. O acesso é similar. Condicional: fica um pouco complexo por conta das duas dimensões. matriz <- matrix(sample(1:100, 50), 5) • matriz[3,2] • matriz[c(1,5,10,15)] • matriz[3:5,4:6] • matriz[-c(2,5),-c(8,10)] • matriz[-(1:5)] • matriz[matriz[,2]==6,] mat2 <- matrix(sample(1:10, 4), 2) dimnames(mat2) <- list(c(“L1”,”L2),c(“C1”,”C2”)) • mat2[mat2[,"C1"]==4]
  31. Seleção (dataframe) Em tabelas o acesso é feito como em

    matrizes, porém o nome do atributo (coluna) é usado: • dataframe$coluna • dataframe[x, y] Condicional: usando o nome do atributo • datafame[dataframe$coluna > 10,] • subset(dataframe, coluna>=20) Simplificando: • attach(dataframe) detach(dataframe) matriz <- matrix(sample(1:100, 50), 5) df <- data.frame(matriz) • df[3,2] • df[4,] • df[df$X2>20,] • df[-c(2,5),-c(8,10)] attach(df) print(X1) df2 <- cbind(X1, X3) detach(df)
  32. Funções interessantes • Gerais para estruturas ◦ nrow() ncol() length()

    ◦ is.* as.* ◦ names() colnames() rownames() ◦ attach() dettach() • Matemática/Estatística simples ◦ sum() cumsum() ◦ prod() cumprod() ◦ summary() fivenum() range() ◦ sample() rnorm() runif() • Visualização ◦ table() stem() ◦ head() tail() ◦ hist() plot() barplot() vetor <- runif(20,1,10) length(vetor) range(vetor) cumsum(vetor) head(vetor) tail(vetor, 3) stem(vetor)
  33. Carregando datasets (exemplos do R) Função data() - Exemplos: •

    AirPassengers • mtcars • precip • pressure • women Analisando: • mode(obj), class(obj) • head(obj), tail(obj), obj[x,y], obj$atributo • str(obj), summary(obj$atributo) data(“pressure”) class(pressure) summary(pressure) meu.lm <- lm(pressure ~ temperature, pressure) plot(meu.lm) plot(meu.lm$fitted.values)
  34. Incrementando às análises summary() retorna um sumário estatístico sd() retorna

    o desvio padrão var() retorna a variância (sd²) cov() retorna a covariância cor() retorna a correlação lm() retorna o modelo linear data(“faithful”) erupcao.lm <- lm(eruptions ~ waiting, data=faithful) coefficients(erupcao.lm) duracao <- faithful$eruptions # duração da erupção espera <- faithful$waiting # período de espera sd(duracao) var(duracao) cov(duracao, espera) cor(duracao, espera) exemplo: r-tutor.com
  35. Entrada do usuário readline() • prompt=”” scan() • sep=” “

    • what=”double()” • n=-1 Editar um objeto: edit(objeto) gera um novo objeto fix(objeto) altera o objeto nome <- readline(“digite seu nome: ”) meu.vetor <- scan(what=”character”) edit(meu.vetor) vetor2 <- edit(meu.vetor) fix(vetor2) vetor3 <- fix(vetor2)
  36. Importando dados (lendo arquivos) scan(“arquivo.txt”) • por padrão recebe números

    reais readLines(“arquivo.txt”, qtde) read.table(“arquivo.dat”, header=F, skip=0) read.csv() == read.table() library(xlsx) read.xlsx(arquivo, num_planilha) arq1 <- scan(“exemplos/numeros.txt”) arq2 <- readLines(“exemplos/texto.txt”, 10) df1 <- read.table(“exemplos/tabela.dat”, header=TRUE) df2 <- read.csv(“exemplos/tabela.csv”)
  37. Exportando dados (gravando arquivos) cat(objetos, file=”arquivo.dat”, sep=”\n”) write(matriz, “arquivo.dat”, sep=”\n”)

    writeLines(vetor, “arquivo.txt”) write.table(objeto, ”arquivo.dat”) write.csv() == write.table() meu.vet <- c(alguns_nomes) writeLines(meu.vet, “meu-vetor.txt”) arq.meu.vet <- readLines(“meu-vetor.txt”, 10) tail(arq.meu.vet, 3) write.table(meu.vet, “meu-vetor.dat”)
  38. Gravando e carregando objetos saveRDS(objeto, file=”arquivo.rds”) save(objetos, file=”arquivo.RData”) save.image() readRDS(“arquivo.rds”)

    load(“arquivo.RData”) readBin(), readChar(), writeBin(), writeChar() saveRDS(escolha, file=”meu_obj.rds”) save(escolha_varios, file=”meus_objetos. RData”) rm(escolha_varios_incluindo_salvos) novo_objeto <- readRDS(“meu_obj.rds”) load(“meus_objetos.RData”)
  39. Acessando banco de dados Pacotes como: • RMySQL • ROracle

    • RPostgreSQL, RPgSQL • RSQLite • RMongo library(RMySQL) con <- dbConnect(dbDrive(“MySQL”), dbname=”oficinar”) dbGetQuery(con, “select * from pessoas”) i
  40. Controles de programação diretorio <- paste(“exemplos”, ”dir-oficinar”, sep=”/”) if (!file.exists(diretorio)){

    dir.create(diretorio) } coluna <- ifelse(ncol(matriz)>=3, matriz[,3], matriz[,2] ) for (letra in letters ) { if (letra <= “h”) print(letra) } for (var in 1:10) print(paste(“valor de var: ”, var))
  41. Criando funções nome.da.funcao <- function(argumentos) { # conteudo } Argumentos:

    • por sequência • nomeados • podem ter valor padrão Retorno: • com “return” • a última expressão: simplesmente o valor potencia <- function(num1, num2) { num1 ** num2 }
  42. Geração de Gráficos As funções de geração de gráficos tem

    parametrizações bem extensas. demo(graphics)
  43. RMarkdown = Título 1 == Título 2 === Título 3

    *italico* **negrito** `código em linha` $equação me linha$ ``` bloco de código ``` ![título imagem](caminho/da/imagem.png) - item 1 + sub-item 1.1 + sub-item 1.2 - item 2 1. item 1 2. item 2 + sub-item 2.1 + sub-item 2.2 [Texto do link](http://www.rstudio.com/) <http://www.ftsl.org>
  44. Gerando um relatório File > New > R Markdown Nome

    do arquivo e autor Teste marcações no novo documento criado e peça para gerar a saída através de “Knit HTML” (Ctrl+Shift+K). --- title: "Título do Documento" author: "Seu Nome Aqui" date: "18/09/2015" output: html_document --- Código R: ```{r} código... ``` Parâmetros principais ```{r, parâmetros}...: • echo=false|true • eval=false|true • result=false|true
  45. Criando uma apresentação File > New > R Presentation Salve

    o arquivo da apresentação. Teste marcações na apresentação criada clicando em “Preview” (Ctrl+Shift+Y). Salve em um diretório, pois mais de um arquivo é criado após a visualização ou geração. Título === author: "Seu Nome Aqui" date: "18/09/2015" Nome do slide ===