Exploração e Visualização de Dados

R

Gilberto Sassi

IME/UFBA - OBEC

Preparando o ambiente

Use o editor de texto certo

Durante o curso

  • Usaremos nas aulas: posit.cloud.
  • Recomendamos instalar e usar R com versão pelo menos 4.1: cran.r-project.org.
  • usaremos o framework (pacote) tidyverse e o pacote datacult:
    • Instalação: install.packages("tidyverse")
    • Instalação: install.packages("datacult")

Na sua casa ou trabalho

Parênteses 1: guia de estilo no R

O nome de um objeto precisa ter um significado. O nome deve indicar e deixar claro o que este objeto é ou faz.

  • Use a convenção do R:
    • Use apenas letras minúsculas, números e underscore (comece sempre com letras minúsculas).
    • Nomes de objetos precisam ser substantivos e precisam descrever o que este objeto é ou faz (seja conciso, direto e significativo).
    • Evite ao máximo os nomes que já são usados ( buit-in ) do R. Por exemplo: c.
    • Coloque espaço depois da vírgula.
    • Não coloque espaço antes nem depois de (). Exceção: Coloque um espaço antes e depois de () quando usar if, for ou while.
    • Coloque espaço entre operadores básicos: +, -, *, == e outros. Exceção: ^.

Para mais detalhes, consulte: guia de estilo do tidyverse.

Parênteses 2: estrutura de diretórios

Mantenha uma estrutura (organização) consistente de diretórios em seus projetos.

  • Sugestão de estrutura:
    • dados: diretório para armazenar seus conjuntos de dados.
      • brutos: dados brutos.
      • processados: dados processados.
    • codigo_fonte: código fonte do seu projeto.
    • figuras: figuras criadas no seu projeto.
    • output: outros arquivos que não são figuras.
    • legado: arquivos da versão anterior do projeto.
    • notas: notas de reuniões e afins.
    • relatorio (ou artigos): documento final de seu projeto.
    • documentos: livros, artigos e qualquer coisa que são referências em seu projeto.

Para mais detalhes, consulte esse guia do curso-r: diretórios e .Rproj.

A linguagem R

A linguagem R

A precursora da linguagem R: S.

  • R é uma linguagem derivada do S.
  • S foi desenvolvido em fortran por John Chambers em 1976 no Bell Labs.
  • S foi desenvolvido para ser um ambiente de análise estatística.
  • Filosofia do S: permitir que usuários possam analisar dados usando estatística com pouco conhecimento de programação.

História da linguagem R

  • Em 1991, Ross Ihaka e Robert Gentleman criaram o R na Nova Zelândia.
  • Em 1996, Ross e Robert liberam o R sob a licença “GNU General License”, o que tornou o R um software livre.
  • Em 1997, The Core Group é criado para melhorar e controlar o código fonte do R.

Motivos para usar R

  • Constante melhoramento e atualização.
  • Portabilidade (roda em praticamente todos os sistemas operacionais).
  • Grande comunidade de desenvolvedores que adicionam novas capacidades ao R através de pacotes.
  • Gráficos de maneira relativamente simples.
  • Interatividade.
  • Um grande comunidade de usuários (especialmente útil para resolução de problemas).

Onde estudar fora de aula?

Livros populares

Minha sugestão

Depois desse curso, comece por aqui: R for Data Science.

O que você pode fazer quando estiver em apuros?

  • consultar a documentação do R:
help(mean)
?mean
  • Peça ajuda a um programador mais experiente.
  • Use ferramentas de busca como o google e duckduckgo.com.
log("G")
  • Na ferramenta de busca, pesquise por
    Error in log("G"): non-numeric argument to mathematical function

Operações básicas

Soma

1 + 1
[1] 2

Substração

2 - 1
[1] 1

Multiplicação

3 * 3
[1] 9

Divisão

3 / 2
[1] 1.5

Potenciação

2^3
[1] 8

Operações básicas
Exercício

Qual o resultado das seguintes operações?

  1. \(5,32 + 7,99\)
  2. \(5,55 - 10\)
  3. \(3,33 \cdot 5,12\)
  4. \(\frac{1}{4,55}\)
  5. \(5^{1,23}\)

Pacotes na linguagem R

  • códigos criados pela comunidade
  • disponibilizados principalmente na plataforma cran.r-project.org

Instalação

install.packages(pacman)

Carregando pacotes

Pacotes precisam estar instalados

library(pacman)

Carregando pacotes com pacman

  • Se os pacotes estão instalados: pacman carrega os pacotes
  • Se os pacotes não estão instalados: pacman instala e depois carrega os pacotes
  • Omite mensagens dos pacotes
  • Pacote separados por vírgula
p_load(readxl, writexl, janitor, ggthemes, datacult, tidyverse)

Funções na linguagem R

Função: é uma ação e tem os seguinte componentes na ordem:

  • nome da função
  • parênteses
  • argumentos posicionais
  • argumentos nomeados

\[ \texttt{resultado <- } \overbrace{\texttt{nome_funcao}}^{\textit{nome da função}} \overbrace{(}^{\textit{parênteses}} \overbrace{\texttt{valor1},\quad \texttt{valor2}}^{\textit{argumentos posicionais}},\quad \overbrace{\texttt{nome1 = valor3},\quad \texttt{nome2 = valor4}}^{\textit{argumentos nomeados}} \overbrace{)}^{\textit{parênteses}} \]

Exemplo

pnab_capitais <- read_xlsx('dados/brutos/pnab-capitais.xlsx', sheet=1)

Funções na linguagem R
Exercício

  • Obtenha ajuda para mean usando a função help.
  • Calcule o logaritmo de 10 na base 3 usando a função log.
  • Leia o conjunto de dados pnab-capitais.xlsx (está na pasta dados/brutos/) usando a função read_xlsx.

A função read_xlsx faz parte do readxl.

Como os dados estão organizado na R

  • Tipo de dados: caracter ou texto (character), número real (double), número inteiro (integer), número complexo (complex) e lógico (logical).
  • Estrutura de dados: atomic vector (a estrutura de dados mais básica no R), matrix, array, list e data.frame (tibble no tidyverse).
  • Estrutura de dados Homogênea: vector, matrix e array.
  • Estrutura de dados Heterôgenea: list e data.frame (tibble no tidyverse).

Neste curso, vamos usar vetores e dataframes.

O vetor

  • Agrupamento de valores de mesmo tipo em um único objeto.
  • Criação de vetor:
    • c(...)
    • primeiro_numero_inteiro:ultimo_numero_inteiro
    • seq(from = a, to = b, by = c).

Criando um vetor na mão

vetor_nomes  <- c("Gilberto", "Sassi")
vetor_nomes
[1] "Gilberto" "Sassi"   
vetor_num_int <- 1:2
vetor_num_int
[1] 1 2
vetor_num_real <- seq(from = 1, to = 2, by = 0.05)
vetor_num_real
 [1] 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70
[16] 1.75 1.80 1.85 1.90 1.95 2.00

Operações com vetores

  • Slicing: extrair parte de um vetor
  • Operações com vetores númericos (double, integer e complex): Operações básicas (operação, substração, multiplicação e divisão ) realizada em cada elemento do vetor.

Slicing

Selecionando todos os elementos entre o primeiro e o quinto.

letras <- c("a", "b", "c", "d", "e", "f", "g", "h", "i")
letras[1:5]
[1] "a" "b" "c" "d" "e"
letras[9]
[1] "i"

Operações numéricas com vetores numéricos

Adição (vetores númericos)

vetor_1 <- 1:5
vetor_2 <- 6:10
vetor_1 - vetor_2
[1] -5 -5 -5 -5 -5

Substração (vetores numéricos)

vetor_1 <- 1:5
vetor_2 <- 6:10
vetor_1 - vetor_2
[1] -5 -5 -5 -5 -5

Multiplicação (vetores numéricos)

vetor_1 <- 1:5
vetor_2 <- 6:10
vetor_1 * vetor_2
[1]  6 14 24 36 50

Divisão (vetores numéricos)

vetor_1 <- 1:5
vetor_2 <- 6:10
vetor_1 / vetor_2
[1] 0.1666667 0.2857143 0.3750000 0.4444444 0.5000000

Operações com vetoresExercício

Realize as seguintes operações envolvendo vetores:

  1. \(\begin{pmatrix} 1 & 2 & 3 \end{pmatrix} + \begin{pmatrix} 0,1 & 0,05 & 0,33 \end{pmatrix}\)
  2. \(\begin{pmatrix} 1 & 2 & 3 \end{pmatrix} - \begin{pmatrix} 0,1 & 0,05 & 0,33 \end{pmatrix}\)
  3. \(\begin{pmatrix} 1 & 2 & 3 \end{pmatrix} \cdot \begin{pmatrix} 0,1 & 0,05 & 0,33 \end{pmatrix}\)
  4. \(\begin{pmatrix} 1 & 2 & 3 \end{pmatrix} / \begin{pmatrix} 0,1 & 0,05 & 0,33 \end{pmatrix}\)

data frame (tibble)
A planilha da linguagem R

  • Implementação de Planilha Eletrônica na linguagem R
  • Cada coluna é uma variável e é um vetor
  • cada linha é uma observação
  • Suposição desse curso - a tabela está tidy:
    • Cada variável em uma única coluna
    • Cada unidade observacional em uma única linha
  • Criação de planilha eletrônica a mão tibble: tibble(...) e tribble(....).

As funçõestibble e tribble fazem parte do pacote tidyverse.

Construção um dataframe a mão

df <- tibble(
  nome = c("João", "Josué", "Joaquim", "José"),
  idade = c(20L, 21L, 23L, 32L),
  salario = c(1000.10,2000.20, 3000.30, 4000.40)
)
glimpse(df)
Rows: 4
Columns: 3
$ nome    <chr> "João", "Josué", "Joaquim", "José"
$ idade   <int> 20, 21, 23, 32
$ salario <dbl> 1000.1, 2000.2, 3000.3, 4000.4

Operações em data frame

Operações em um tibble

Algumas funções úteis para dataframe.
Código em R Descrição
head() Mostra as primeiras linhas de um tibble
tail() Mostra as últimas linhas de um tibble
glimpse() Impressão de informações básicas dos dados
operador $ Recupera uma coluna de dataframe
head(df, n = 2)
# A tibble: 2 × 3
  nome  idade salario
  <chr> <int>   <dbl>
1 João     20   1000.
2 Josué    21   2000.
tail(df, n = 2)
# A tibble: 2 × 3
  nome    idade salario
  <chr>   <int>   <dbl>
1 Joaquim    23   3000.
2 José       32   4000.
df$salario
[1] 1000.1 2000.2 3000.3 4000.4

Dataframe
Exercício

Realize as seguintes operações no dataset iris:

  • imprima um resumo sobre o dataset iris
  • pegue as 5 primeiras linhas de iris
  • pegue as 5 últimas linhas de iris
  • recupere a coluna Sepal.Length de iris

iris é toy dataset da linguagem: você pode usá-lo diretamente.

Valores especiais em R

Valor Descrição O que é Função para identificar
NA Not Available Valor faltante. is.na()
NaN Not a Number Resultado do cálculo indefinido. is.nan()
Inf Infinito Valor que excede o valor máximo que sua máquina aguenta. is.inf()
NULL Nulo Valor indefinido de expressões e funções (diferente de NaN e NA) is.null()

Importação e exportação de dados

Importação de planilha eletrônica: xlsx ou xls

  • Pacote: readxl
  • Funções:
    • read_xls: importação de arquivos .xls
    • read_xlsx: importação de arquivos .xlsx
  • Parêmetros:
    • path: caminho até o arquivo.
    • sheet: especifica a planilha do arquivo que será lida.

Para mais detalhes, consulte a documentação: documentação de read_xl.

Importação de planilha eletrônica: xlsx ou xls

Exemplo

personagens_starwars <- read_xlsx("dados/brutos/starwars.xlsx")
glimpse(personagens_starwars)
Rows: 87
Columns: 14
$ nome            <chr> "Luke Skywalker", "C-3PO", "R2-D2", "Darth Vader", "Le…
$ altura          <dbl> 172, 167, 96, 202, 150, 178, 165, 97, 183, 182, 188, 1…
$ massa           <dbl> 77.0, 75.0, 32.0, 136.0, 49.0, 120.0, 75.0, 32.0, 84.0…
$ cor_do_cabelo   <chr> "Loiro", NA, NA, "Nenhum", "Castanho", "Castanho, Cinz…
$ cor_da_pele     <chr> "Branca clara", "Ouro", "Branca, Azul", "Branca", "Cla…
$ cor_dos_olhos   <chr> "Azul", "Amarelo", "Vermelho", "Amarelo", "Castanho", …
$ ano_nascimento  <dbl> 19.0, 112.0, 33.0, 41.9, 19.0, 52.0, 47.0, NA, 24.0, 5…
$ sexo_biologico  <chr> "Macho", "Nenhum", "Nenhum", "Macho", "Fêmea", "Macho"…
$ genero          <chr> "Masculino", "Masculino", "Masculino", "Masculino", "F…
$ planeta_natal   <chr> "Tatooine", "Tatooine", "Naboo", "Tatooine", "Alderaan…
$ especie         <chr> "Humano", "Droide", "Droide", "Humano", "Humano", "Hum…
$ filmes          <chr> "A New Hope; The Empire Strikes Back; Return of the Je…
$ veiculos        <chr> "Snowspeeder; Imperial Speeder Bike", NA, NA, NA, "Imp…
$ naves_espaciais <chr> "X-wing; Imperial shuttle", NA, NA, "TIE Advanced x1",…

Importação de planilha eletrônica: xlsx ou xls

Exercício

  1. Importe a planilha pnab-capitais.xlsx na linguagem R sob o nome pnab_capitais.
  2. Importe a planilha pnab-estados.xlsx na linguagem R sob o nome pnab_estados.

comma separated value - csv

  • Planilha eletrônica sem formatação salva em arquivo de texto.
  • Usado para distribuição de dados públicos: IPEA, INEP, IBGE e outros.

Planilha eletrônica em formato .csv

Atenção nas diferenças nas unidades de medidas entre países

As unidades de medidas usadas no Brasil e EUA são diferentes.

BR EUA
separador decimal . ,
agrupador de milhar . ,
separador de colunas em arquivos .csv ; ,

  • Salário de João usando no BR: 10.000,33
  • Salário de João usando no EUA: 10,000.33

Importação de planilhas eletrônicas: csv

  • Pacote: tidyverse
  • Funções:
    • read_csv: importação de arquivos .csv - sistema imperial (EUA)
    • read_csv2: importação de arquivos .csv - sistema métrico (BR)
  • Parêmetros:
    • path: caminho até o arquivo.

Para mais detalhes, consulte a documentação: documentação.

Importação de planilha eletrônica: csv

Exemplo - sistema métrico

personagens_starwars <- read_csv2("dados/brutos/starwars_padrao_metrico.csv")
glimpse(personagens_starwars)
Rows: 87
Columns: 14
$ nome            <chr> "Luke Skywalker", "C-3PO", "R2-D2", "Darth Vader", "Le…
$ altura          <dbl> 172, 167, 96, 202, 150, 178, 165, 97, 183, 182, 188, 1…
$ massa           <dbl> 77.0, 75.0, 32.0, 136.0, 49.0, 120.0, 75.0, 32.0, 84.0…
$ cor_do_cabelo   <chr> "Loiro", NA, NA, "Nenhum", "Castanho", "Castanho, Cinz…
$ cor_da_pele     <chr> "Branca clara", "Ouro", "Branca, Azul", "Branca", "Cla…
$ cor_dos_olhos   <chr> "Azul", "Amarelo", "Vermelho", "Amarelo", "Castanho", …
$ ano_nascimento  <dbl> 19.0, 112.0, 33.0, 41.9, 19.0, 52.0, 47.0, NA, 24.0, 5…
$ sexo_biologico  <chr> "Macho", "Nenhum", "Nenhum", "Macho", "Fêmea", "Macho"…
$ genero          <chr> "Masculino", "Masculino", "Masculino", "Masculino", "F…
$ planeta_natal   <chr> "Tatooine", "Tatooine", "Naboo", "Tatooine", "Alderaan…
$ especie         <chr> "Humano", "Droide", "Droide", "Humano", "Humano", "Hum…
$ filmes          <chr> "A New Hope; The Empire Strikes Back; Return of the Je…
$ veiculos        <chr> "Snowspeeder; Imperial Speeder Bike", NA, NA, NA, "Imp…
$ naves_espaciais <chr> "X-wing; Imperial shuttle", NA, NA, "TIE Advanced x1",…

Exemplo - sistema imperial

personagens_starwars <- read_csv("dados/brutos/starwars_padrao_imperial.csv")
glimpse(personagens_starwars)
Rows: 87
Columns: 14
$ nome            <chr> "Luke Skywalker", "C-3PO", "R2-D2", "Darth Vader", "Le…
$ altura          <dbl> 172, 167, 96, 202, 150, 178, 165, 97, 183, 182, 188, 1…
$ massa           <dbl> 77.0, 75.0, 32.0, 136.0, 49.0, 120.0, 75.0, 32.0, 84.0…
$ cor_do_cabelo   <chr> "Loiro", NA, NA, "Nenhum", "Castanho", "Castanho, Cinz…
$ cor_da_pele     <chr> "Branca clara", "Ouro", "Branca, Azul", "Branca", "Cla…
$ cor_dos_olhos   <chr> "Azul", "Amarelo", "Vermelho", "Amarelo", "Castanho", …
$ ano_nascimento  <dbl> 19.0, 112.0, 33.0, 41.9, 19.0, 52.0, 47.0, NA, 24.0, 5…
$ sexo_biologico  <chr> "Macho", "Nenhum", "Nenhum", "Macho", "Fêmea", "Macho"…
$ genero          <chr> "Masculino", "Masculino", "Masculino", "Masculino", "F…
$ planeta_natal   <chr> "Tatooine", "Tatooine", "Naboo", "Tatooine", "Alderaan…
$ especie         <chr> "Humano", "Droide", "Droide", "Humano", "Humano", "Hum…
$ filmes          <chr> "A New Hope; The Empire Strikes Back; Return of the Je…
$ veiculos        <chr> "Snowspeeder; Imperial Speeder Bike", NA, NA, NA, "Imp…
$ naves_espaciais <chr> "X-wing; Imperial shuttle", NA, NA, "TIE Advanced x1",…

Importação de planilha eletrônica: csv

Exercício

  1. Importe a planilha editais-proprios-capitais-separador-virgula.csv na linguagem R sob o nome editais_proprios_capitais.
  2. Importe a planilha editais-proprios-estados.csv na linguagem R sob o nome editais_proprios_estados.

Exportação para planilha eletrônica

Salvar no formato .csv (sistema métrico)

write_csv2 é parte do pacote tidyverse.

write_csv2(dados_dentes, "dados/processados/nome.csv")

Salvar no formato .xlsx

write_xlsx é parte do pacote writexl.

write_xlsx(dados_dentes, "dados/processados/nome.xlsx")

Exportação para planilha eletrônica

Exercício

  1. Salvar o dataframe iris como uma planilha eletrônica em formato .csv sob o nome iris_novo.
  2. Salvar o dataframe cars como uma planilha eletrônica em formato .xlsx sob o nome carros.

cars é toy dataset da linguagem: você pode usá-lo diretamente.

O operador pipe
|>

O operador pipe
|>

Extensamente usado!

  • O valor do lado esquerdo vira primeiro argumento da função do lado direito.
  • Principal vantagem: simplifica a leitura e a documentação de funções compostas.


Executar

f(x, y)

é exatamente a mesma coisa que executar

x |> f(y)
log(sqrt(sum(x^2)))

é exatamente a mesma coisa que executar

x^2 |> sum() |> sqrt() |> log()

Leia a codificação como se fosse um texto literário

  • Operações são realizadas exatamente como lemos em português:
    • da esquerda para direita
    • de cima para baixo

Conceitos iniciais de Estatística

Conceitos iniciais

  • População: todos os elementos ou indivíduos alvo do estudo.
  • Amostra: parte da população.
  • Parâmetro: característica numérica da população. Usamos letras gregas para denotar parâmetros populacionais.
  • Estatística: função ou cálculo da amostra
  • Estimativa: característica numérica da amostra, obtida da estatística computada na amostra. Em geral, usamos uma estimativa para estimar o parâmetro populacional.
  • Variável: característica mensurável comum a todos os elementos da população.
  • Observação: um elemento ou indivíduo alvo do estudo.

Conceitos iniciais

Exemplo

Pesquisa de Fomento às Artes no Brasil.

  • População: todos os estados, todos municípios e o Distrito Federal.
  • Amostra: 96 entes - 69 cidades, 26 estados e o Distrito Federal.
  • Variável: ente publicou edital com recursos próprios (“sim” ou “não”).
  • Parâmetro: porcentagem de entes que publicaram editais com recursos próprios no Brasil.
  • Estatística: porcentagem de entes que publicaram editais com recursos próprios.
  • Estimativa: porcentagem de entes que publicaram editais com recursos próprios entre os 96 entes.
  • Observação: ente federativo que participou da pesquisa.

Classificação de variáveis

flowchart TD
  A[VARIÁVEL] == texto ==> B["`QUALITATIVA`"]
  A == número ==> C["`QUANTITATIVA`"]
  B == com ordem ==> D["`ORDINAL`"]
  D --> H["`Exemplo:
  <br/>
  Escala Likert`"]
  B == sem ordem ==> E["`NOMINAL`"]
  E --> I["`Exemplo:
  <br/>
  UF`"]
  C == parte decimal ==> F["`CONTÍNUA`"]
  F --> J["`Exemplo:
  <br/>
  Montante do edital
  `"]
  C == número inteiro ==> G["`DISCRETA`"]
  G --> K["`Exemplo:
  <br/>
  Número de propostas previstas
  `"]

Medidas de Resumo

Medidas de resumo

  • Estatísticas usadas em EDA (Exploratory Data Analysis).
  • Em alguns programas, também é chamado de métrica.

Medidas de posição

Um valor para sintetiza ou representa todos valores.

Média, Mediana, Moda, e Quantil.

Medidas de dispersão

Distribuição ou homogeneidade dos valores.

Variância, desvio padrão, amplitude e intervalo interquartílico.

Outras medidas de resumo

Mínimo, máximo, tamanho amostral, número de valores faltantes (células vazias), soma, frequência.

Tabela de distribuição de frequências
exceto variável quantitativa contínua

  • Estatística: frequência.
  • Variável qualitativa e variável quantitativa discreta (com poucos valores distintos).
Tabela de distribuição de frequência para uma variável qualitativa.
\(X\) frequência frequência relativa porcentagem
\(B_1\) \(n_1\) \(f_1=\frac{n_1}{n}\) \(100 \cdot f_1\%\)
\(B_2\) \(n_2\) \(f_2=\frac{n_2}{n}\) \(100 \cdot f_2\%\)
\(\vdots\) \(\vdots\) \(\vdots\) \(\vdots\)
\(B_k\) \(n_k\) \(f_k=\frac{n_k}{n}\) \(100 \cdot f_k\%\)
Total \(n=n_1+\cdots+n_k\) \(1\) \(100\%\)

Tabela de distribuição de frequências
exceto variável quantitativa contínua

Na linguagem R

  • pacote: janitor
  • funções: tabyl e adorn_totals
    • tabyl: calcula a frequência de cada categoria
    • adorn_total: adiciona uma linha de total
tabela <- dataframe |>
  tabyl(variavel) |>
  adorn_totals()

Tabela de distribuição de frequências
exceto variável quantitativa contínua

Exemplo

Proporção de cidades com plano de cultura.

df_resposta <- read_xlsx("dados/brutos/resposta.xlsx")
df_cidades <- df_resposta |>
  filter(tipo_ente == "Cidade") |>
  filter(resposta_completa == "Resposta completa")
tabela <- df_cidades |>
  tabyl(plano_cultura) |>
  adorn_totals()
tabela
1
filter (tidyverse) e semelhante a função FILTER do google planilha. A única diferente é substituição de = por ==.
 plano_cultura  n    percent
 Em elaboração 29 0.42028986
           Não  3 0.04347826
           Sim 37 0.53623188
         Total 69 1.00000000

Podemos exportar tabela como xlsx.

write_xlsx(tabela, "output/tab_plano_cultura.xlsx")

Tabela de distribuição de frequências
exceto variável quantitativa contínua

  1. Construa uma tabela de distribuição de frequência para a abragência (v_3_1) dos editais PNAB publicados pelos estados.
  2. Conte o número de editais públicados com recursos próprios pelas capitais por região (regiao).

Tabela de distribuição de frequências
variável quantitativa contínua

X: variável quantitativa contínua

Tabela de frequências para a variável quantitativa contínua.
X Frequência Frequência relativa Porcentagem
\([l_0, l_1)\) \(n_1\) \(f_1 = \frac{n_1}{n}\) \(p_1 = f_1 \cdot 100\)
\([l_1, l_2)\) \(n_2\) \(f_2 = \frac{n_2}{n}\) \(p_2 = f_2 \cdot 100\)
\(\vdots\) \(\vdots\) \(\vdots\) \(\vdots\)
\([l_{k-1}, l_k]\) \(n_k\) \(f_k = \frac{n_k}{n}\) \(p_k = f_k \cdot 100\)
total \(n=n_1+\cdots+n_k\) \(1\) \(100\)
  • \(\text{menor valor de }X = l_0 \leq l_1 \leq \cdots \leq l_{k-1} \leq l_k = \text{maior valor de }X\)
  • \(n_i\) é número de valores de X entre \(l_{i-1}\) e \(l_i\)
  • \(l_0, l_1, \dots, l_k\) quebram o suporte da variável X (breakpoints).
  • \(l_0, l_1, \cdots, l_k\) são escolhidos de acordo com a teoria por trás da análise de dados

Recomendações:

  • crie \(k\) intervalos:
    • \(l_0, l_1, \cdots, l_k\) igualmente espaçados
    • \([l_0, l_1)\), \([l_1, l_2)\), \(\cdots\), \([l_{k-1}, l_k]\): intervalos com mesma quantidade de observações - use quantil
  • use a regra de Sturges para determinar o valor de \(k\):
    • \(k = 1 + \log2(n)\) onde \(n\) é tamanho da amostra
    • Se \(1 + \log2(n)\) não é um número inteiro, usamos \(k = \lceil 1 + \log2(n) \rceil\).
ceiling(1 + log(n))

Tabela de distribuição de frequências
variável quantitativa contínua

Na linguagem R

  • pacote: obec
  • funções: tab_freq_cont
  • parâmetros:
    • variable: nome da variável quantitativa contínua
    • breaks: não forneça ou forneça o número de faixas ou forneça cada uma das faixas
    • labels: nome de cada faixa. Por padrão, usa notação matemática
    • include_lowest: menor limite do intervalo é incluído na faixa? Por padrão, TRUE.
    • right: maior limite do intervalo é incluído na faixa? Por padrão, FALSE.

Tabela de distribuição de frequências
variável quantitativa contínua

Exemplo

pnab_capitais <- read_excel("dados/brutos/pnab-capitais.xlsx")
tabela <- pnab_capitais |>
  tab_freq_cont(n_page,
                breaks = c(0, 10, 20, 40, 50, 60, Inf),
                labels = c("1 a 10", "10 a 20", "30 a 40", "40 a 50", "50 a 60", "mais de 60"))
tabela
     n_page   n   percent
     1 a 10   5 0.0462963
    10 a 20  14 0.1296296
    30 a 40  36 0.3333333
    40 a 50  16 0.1481481
    50 a 60  13 0.1203704
 mais de 60  24 0.2222222
      Total 108 1.0000000

Tabela de distribuição de frequências
variável quantitativa contínua

  1. Qual o número de faixas/intervalos para o conjunto de dados dos editais PNAB dos estados? Use a Regra de Sturges.
  2. Construa uma tabela de distribuição de frequências o montante (v_1_5) dos editais PNAB dos estados usando os intervalos: [0, 250000), [250000, 500000), [500000, 750000), [750000, 1000000), [1000000, 1250000), [1250000, 1500000), [1500000, \(\infty\)).
  3. Construa uma tabela de distribuição de frequência para o número de páginas (n_page) dos editais com recursos próprios das capitais. Use a Regra de Sturges.

Tabela de distribuição de frequência
pergunta checkbox

  • campo de formulário que permite assinalar mais de uma opção
  • cada opção precisa ter sua própria categoria
  • vamos contar o número de sucesso em cada coluna
  • pacote: datacult
  • funções: tab_freq_checkbox
  • parâmetros:
    • data: dataframe com os dados
    • columns: colunas com as respostas - uma coluna para cada opção
    • sucess: categoria indicando o sucesso. Por padrão, é "checked"
    • labels: rótulos - um para cada opção
    • variable_name: nome do campo do formulário

Tabela de distribuição de frequências
pergunta checkbox

Exemplo

respostas <- read_xlsx("dados/brutos/resposta.xlsx")
respostas <- respostas |>
  filter(resposta_completa == "Resposta completa")
tabela <- respostas |>
  tab_freq_checkbox(
    columns = c("linguagens_orgao___1", "linguagens_orgao___2",
                "linguagens_orgao___3", "linguagens_orgao___4",
                "linguagens_orgao___5", "linguagens_orgao___6",
                "linguagens_orgao___7", "linguagens_orgao___8"),
    sucess = "Checked"
  )
tabela
# A tibble: 8 × 3
  coluna                   n percent
  <chr>                <dbl>   <dbl>
1 linguagens_orgao___1    87   0.906
2 linguagens_orgao___2    85   0.885
3 linguagens_orgao___3    70   0.729
4 linguagens_orgao___4    91   0.948
5 linguagens_orgao___5    90   0.938
6 linguagens_orgao___6    90   0.938
7 linguagens_orgao___7    86   0.896
8 linguagens_orgao___8    48   0.5  

Tabela de distribuição de frequência
pergunta checkbox

Exercício

  1. Construa a tabela de distribuição de frequência para a natureza jurídica (v_1_10) permitida para as/os proponentes nos editais PNAB para estados.
  2. Construa a tabela de distribuição de frequência para a modalidade de fomento (v_2_1) prevista nos editais com recursos próprios das capitais.

Quantil, percentil e quartil

Quantil de ordem de 10% para os editais PNAB dos estados.

Quantil de ordem de 90% para os editais PNAB dos estados.


Seu salário na realidade brasileira.

Nomenclatura

  • Primeiro quartil: quantil de ordem \(\frac{1}{4}\).
  • Segundo quartil: quantil de ordem \(\frac{2}{4}\) - mediana.
  • Terceiro quartil: quantil de ordem \(\frac{3}{4}\).

  • Primeiro decil: quantil de ordem 10%.
  • Segundo decil: quantil de ordem 20%.
  • Sétimo decil: quantil de ordem 70%.

  • Primeiro percentil: quantil de ordem 1%.
  • Segundo percentil: quantil de ordem 2%.
  • Vigésimo terceiro percentil: quantil de ordem 23%.

Média

  • Centro de massa dos valores.
  • Como calcular: somar todos os valores e, em seguida, dividir esta soma pela quantidade de valores somados.

Interpretação de média.

Mediana

  • Meio da fila ordenada.
  • Como calcular: ordenar os valores do menor ao maior valor, em seguida pela o valor que está no meio da fila.

Mediana.

Variância e desvio padrão

Montante em 100 mil reais para cinco entes em 2022, 2023, 2024 e 2025.

Medidas de resumo

Na linguagem R

  • summarise: semelhante a tabela dinâmica do Google Planilha
  • group_by: semelhante as opções linhas ou colunas da tabela dinâmica do Google Planilha

As funções disponíveis para usar com summarise estão na Tabela 1.

Tabela 1: Medidas de resumo disponíveis para usar com summarise.
Descrição da função Função na linguagem R Classificação Pacote de origem
Máximo max Outras base
Mínimo min Outras base
Desvio padrão sd Posição base
Quantil (quartil e percentil) quantile Posição base
Intervalo interquartílico IQR Dispersão base
Mediana median Posição base
Média mean Posição base
Número de observações n Outras tidyverse
Número de observações faltantes n_missing Outras datacult
Número de observações não faltantes n_no_missing Outras datacult

Medidas de resumo

Exemplo

pnab_estados <- read_xlsx("dados/brutos/pnab-estados.xlsx")
tabela_resumo <- pnab_estados |>
  summarise(
    media = mean(v_1_5), mediana = median(v_1_5), 
    desv_pad = sd(v_1_5), q1 = quantile(v_1_5, probs = 0.25),
    n = n(), n_missing = n_missing(v_1_5),
    n_no_missing = n_no_missing(v_1_5), iqr = IQR(v_1_5),
    min = min(v_1_5), max = max(v_1_5)
  )
tabela_resumo
# A tibble: 1 × 10
     media mediana desv_pad    q1     n n_missing n_no_missing   iqr   min   max
     <dbl>   <dbl>    <dbl> <dbl> <int>     <int>        <int> <dbl> <dbl> <dbl>
1 3995006. 2000000 6129413.   1e6   314         0          314   3e6   1e5   4e7

Exemplo com group_by

pnab_estados <- read_xlsx("dados/brutos/pnab-estados.xlsx")
tabela_resumo <- pnab_estados |>
  group_by(regiao) |>
  summarise(
    media = mean(v_1_5), mediana = median(v_1_5), 
    desv_pad = sd(v_1_5), q1 = quantile(v_1_5, probs = 0.25),
    n = n(), n_missing = n_missing(v_1_5),
    n_no_missing = n_no_missing(v_1_5), iqr = IQR(v_1_5),
    min = min(v_1_5), max = max(v_1_5)
  )
tabela_resumo
1
As medidas de resumo serão calculadas para cada categoria. Neste, as medidas de resumo serão calculadas por regiao.
# A tibble: 5 × 11
  regiao       media mediana desv_pad     q1     n n_missing n_no_missing    iqr
  <chr>        <dbl>   <dbl>    <dbl>  <dbl> <int>     <int>        <int>  <dbl>
1 Centro Oes… 1.78e6  1   e6 3522818. 4.25e5    51         0           51 1.32e6
2 Nordeste    2.90e6  1.42e6 4364848. 9.05e5   114         0          114 1.74e6
3 Norte       2.96e6  2   e6 3740640. 1.09e6    48         0           48 1.75e6
4 Sudeste     6.57e6  3   e6 8497231. 1.7 e6    83         0           83 5.18e6
5 Sul         8.07e6  6.64e6 8127590. 3.47e6    18         0           18 5.16e6
# ℹ 2 more variables: min <dbl>, max <dbl>

Medidas de resumo

Exercício

Calcule a média, a mediana, o intervalo interquartílico, o primeiro quartil, o terceiro quartil, o desvio padrão, o mínimo e o máximo para cada uma das variáveis abaixo:

  1. montante (v_1_5) para os editais com recursos próprios dos estados.
  2. montante (v_1_5) para os editais PNAB dos estados e calcule as medidas de resumo pela abrangência do edital (v_3_1).

Gráficos

Gráficos no R

  • Pacote: ggplot2
  • Permite gráficos personalizados com uma sintaxe simples, rápida e iterativa por camadas.
  • Começamos com um camada com os dados ggplot(dados, x = var1, y = var2), e vamos adicionando as camadas de anotações, e sumários estatísticos.
  • Usa a gramática de gráficos proposta por Leland Wilkinson: Grammar of Graphics.
  • Ideia desta gramática: delinear os atributos estéticos das figuras geométricas (incluindo transformações nos dados e mudança no sistema de coordenadas).
  • Comunidade ativa na produção de extensões: extensões do ggplot2.

Para mais detalhes, você pode consultar ggplot2: elegant graphics for data analysis e documentação do ggplot2

Minha indicação de extensões

  • datacult: gráfico de barras de forma mais simples.
  • ggthemes: diversos temas para gráficos.
    Mais detalhes em ggthemes.
  • ggeasy: simplifica a modificação do tamanho da fonte dos eixos.
    Mais detalhes em ggeasy.
  • ggforce: implementação de sina plot.
    Mais detalhes em ggforce.

Gráfico de barras
exceto variável quantitativa contínua

  • pacote: datacult
  • funções: bar_chart
  • parâmetros:
    • data: dataframe com os dados.
    • variable: variável qualitativa ou quantitativa discreta.
    • axis_title: rótulo do eixo y.
    • fill: cor da barra. Por padrão, "blue".
    • axis_title_axis_size: tamanho da fonte dos rótulos dos eixos. Por padrão, 22.
    • axis_text_axis_size: tamanho da fonte nos eixos. Por padrão, 22.
    • data_label_size: tamanho da fonte para os rótulos dos dados. Por padrão, 15.
    • sort: barras devem estar ordenadas pela frequência? Por padrão, TRUE.
pnab_capitais <- read_xlsx("dados/brutos/pnab-capitais.xlsx")
p_load(datacult)

bar_chart(pnab_capitais, regiao) +
  xlim(c(0, 70))
1
A função bar_chart faz parte do pacote datacult.
2
A função xlim modifica o menor value e maior valor do eixo x.

Gráfico de Barras
caso checkbox

  • pacote: obec
  • funções: bar_chart_checkbox
  • parâmetros:
    • data: dataframe com os dados
    • columns: colunas com as respostas - uma coluna para cada opção
    • sucess: categoria indicando o sucesso. Por padrão, é "checked"
    • labels: rótulos - um para cada opção
    • axis_title: rótulo do eixo y.
    • fill: cor da barra. Por padrão, "blue".
    • axis_title_axis_size: tamanho da fonte dos rótulos dos eixos. Por padrão, 22.
    • axis_text_axis_size: tamanho da fonte nos eixos. Por padrão, 22.
    • data_label_size: tamanho da fonte para os rótulos dos dados. Por padrão, 15.
    • sort: barras devem estar ordenadas pela frequência? Por padrão, TRUE.

Gráfico de Barras – caso checkbox

respostas <- read_xlsx("dados/brutos/resposta.xlsx")
bar_chart_checkbox(respostas, paste0("linguagens_orgao___", 1:8),
                   sucess = "Checked",
                   labels = c(
                     "Artes Visuais", "Audiovisual", "Circo", "Dança",
                     "Literatura", "Música", "Teatro", "Outra(s)"
                   )) +
  xlim(c(0, 120))
1
paste0("linguagens_orgao__", 1:8) resulta no vetor c(linguagens_orgao__1, linguagens_orgao__2, linguagens_orgao__3, linguagens_orgao__4, linguagens_orgao__5, linguagens_orgao__6, linguagens_orgao__7, linguagens_orgao__8)

Gráfico de barras
Exercício

  • Construa o gráfico de barra para a abrangência dos editais (v_3_1) para os chamamentos públicos com recursos próprios das capitais.
  • Construa o gráfico de barra para a natureza jurídica dos editais (v_1_10) para os editais PNAB das capitais.

O pacote ggplot2

  • Construção da figura por camadas
  • Adicionamos camadas com +

Parte 1) quem é o eixo-x e o eixo-y

ggplot(dataframe, aes(x=primeira_variavel, y=segunda_variavel))

Parte 2) qual a figura

* é uma das diversas figuras disponíveis.

geom_*()

Parte 3) ajustes finos

Aqui mudamos os rótulos dos eixos, o tamanho das fontes, o tema da figura entre outros.

Tudo junto

# ggplot2 faz parte do tidyverse
ggplot(dataframe, aes(x=primeira_variavel, y=segunda_variavel)) +
  geom_*() +
  labs(x='x', y='y')
1
Parte 1): definindo o eixo-x e o eixo-y.
2
Parte 2): tipo de figura. Por exemplo, gráfico de barras.
3
Parte 3): editando a figura. Por exemplo, a função labs modifica os rótulos do gráfico.

Histograma

  • gráfico de barra para variável quantitativa contínua
  • variável quantitativa discreta com muitos valores distintos
  • agrupamos observações em faixas/intervalos
  • não existe espaço entre as barras
  • no eixo-x mostrar as faixas
  • duas formas de construir:
    • estatística - frequência: a altura da barra é a frequênca
    • estatística - densidade: a área é a frequência relativa
  • as faixas são especificadas com:
    • bins: número de faixas
    • breaks: os valores que delimitam as faixas
    • binwidth: largura de faixa
  • closed: "left" ou "right" - texto indicando se o valor da esquerda ou da direita são inclusos na contagem

Na linguagem R

Estatística - frequência

Padrão:

ggplot(dataframe, aes(x = variavel)) +
  geom_histograma(bins = k, closed = "left") 

Estatística - frequência

Usando para constuir sina e gráfico de densidade.

ggplot(dataframe, aes(x = variavel, y = after_stat(density))) +
  geom_histograma(breaks = vetor, closed = "right") 

Histograma

Exemplo

pnab_capitais <- read_xlsx("dados/brutos/pnab-capitais.xlsx")
p_load(ggeasy, ggthemes)

ggplot(pnab_capitais, aes(x = n_page)) +
  geom_histogram(binwidth = 20, closed = "left", fill = "blue") +
  labs(x = "Número de páginas", y = "Frequência") +
  theme_gdocs() +
  easy_all_text_size(size = 22)
ggsave('figuras/histograma.png')
ggsave('figuras/histograma.svg')
1
ggeasy: pacote para modificar o tamanho da fonte nos eixos, e ggthemes: adiciona temas pré-definidos ao ggplot2.
2
labs: função que modifica os rótulos dos eixos.
3
theme_gdocs: função que modifica os aspectos de design da figura para produzir uma imagem com cara de gráfico do Google Planilha. Este tema está no pacote ggthemes.
4
easy_all_text_size: modifica o tamanho da fonte para os textos da figura. Função do pacote ggeasy.
5
Salva a imagem histograma.png na pasta figuras.
6
Salva a imagem histograma.svg na pasta figuras.

Histograma

Exercício

  1. Construa o histograma para o montate (v_1_5) dos editais PNAB dos estados. Use a regra de Sturge.
  2. Construa o histograma para o número de páginas (n_page) dos editais com recursos próprios dos estados. Use faixa de 20 páginas.

Boxplot

Em português: diagrama de caixa.

  • diagrama construído apenas com quantis.
  • visualizamos: assimetria, mediana e intervalo interquartílico, outliers.
  • \(LI = q_1 - 1,5 \cdot (q_3 - q_1)\).
  • \(LS = q_3 + 1,5 \cdot (q_3 - q_1)\).

Diagrama de caixa - boxplot

Boxplot

Na linguagem R

pnab_capitais <- read_xlsx("dados/brutos/pnab-capitais.xlsx")

ggplot(pnab_capitais, aes(x = "", y = n_page)) +
  geom_boxplot(color = "orange", fill = "blue") +
  labs(x = "", y = "Número de páginas") +
  theme_gdocs() +
  easy_all_text_size(size = 22)
1
color modifica o desenho (contorno) da figura e fill modifica o preenchimento da figura.
2
labs: função que modifica os rótulos dos eixos.
3
theme_gdocs: função que modifica os aspectos de design da figura para produzir uma imagem com cara de gráfico do Google Planilha. Este tema está no pacote ggthemes.
4
easy_all_text_size: modifica o tamanho da fonte para os textos da figura. Função do pacote ggeasy.

Boxplot

Exemplo

Boxplot de n_page por regiao.

pnab_capitais <- read_xlsx("dados/brutos/pnab-capitais.xlsx")

ggplot(pnab_capitais, aes(x = regiao, y = n_page)) +
  geom_boxplot(color = "orange", fill = "blue") +
  labs(x = "Região", y = "Número de páginas") + 
  theme_gdocs() + 
  easy_all_text_size(size = 22) 

Boxplot

Exercício

  1. Construa o diagrama de caixa para o montate (v_1_5) dos editais PNAB dos estados.
  2. Construa o diagrama de caixa para o número de páginas (n_page) dos editais com recursos próprios dos estados.
  3. Construa o diagrama de caixa para o montate (v_1_5) dos editais PNAB dos estados por região (regiao).
  4. Construa o diagrama de caixa para o número de páginas (n_page) dos editais com recursos próprios dos estados por região (regiao).

sina plot

  • Distribuição da variável usando densidade e jitter.
  • Partes magras têm poucas observações.
  • Partes gordas têm muitas observações.
  • Não funciona muito bem com poucas observações. Neste caso, use boxplot.

Na linguagem R

  1. Primeira figura geométrica: geom_violin - ggplot2.
  2. Segunda figura geométrica: geom_sina - ggforce.

Exemplo

pnab_capitais <- read_xlsx("dados/brutos/pnab-capitais.xlsx")
p_load(ggforce)

ggplot(pnab_capitais, aes(x = "", y = n_page)) +
  geom_violin() + 
  geom_sina() +
  labs(x = "", y = "Número de páginas") + 
  theme_gdocs() + 
  easy_all_text_size(size = 22) 
1
geom_sina é uma função do pacote ggforce.

sina plot

pnab_estados <- read_xlsx("dados/brutos/pnab-estados.xlsx")

ggplot(pnab_capitais, aes(x = regiao, y = n_page)) +
  geom_violin() +
  geom_sina() +
  labs(x = "Região", y = "Número de páginas") + 
  theme_gdocs() + 
  easy_all_text_size(size = 22) 

sina plot

Exercício

  1. Construa o sina plot para o montate (v_1_5) dos editais PNAB dos estados.
  2. Construa o sina plot para o número de páginas (n_page) dos editais com recursos próprios dos estados.
  3. Construa o sina plot para o montate (v_1_5) dos editais PNAB dos estados por região (regiao).
  4. Construa o sina plot para o número de páginas (n_page) dos editais com recursos próprios dos estados por região (regiao).