Introdução Link para o cabeçalho

Recentemente descobri o pacote skim, capaz de realizar diversas análises exploratórias simples, de forma rápida no R. Vou utilizar este post para demonstrar algumas funcionalidades dele e sua integração com o pacote dplyr.

Exemplo de Uso Link para o cabeçalho

Para ilustrar o uso do skimr, vou utilizar o conjunto de dados penguins, disponível no pacote palmerpenguins:

library(skimr)
library(tidyverse)
library(palmerpenguins)

Com o pacote carregado, basta usar a função skim para ter uma ideia geral das características do conjunto de dados. Número de linhas, colunas, tipo de cada coluna, taxa de missing data, média, desvio padrão e muito mais:

skim(penguins)

Table: Table 1: Data summary

Name penguins
Number of rows 344
Number of columns 8
_______________________
Column type frequency:
factor 3
numeric 5
________________________
Group variables None

Variable type: factor

skim_variable n_missing complete_rate ordered n_unique top_counts
species 0 1.00 FALSE 3 Ade: 152, Gen: 124, Chi: 68
island 0 1.00 FALSE 3 Bis: 168, Dre: 124, Tor: 52
sex 11 0.97 FALSE 2 mal: 168, fem: 165

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
bill_length_mm 2 0.99 43.92 5.46 32.1 39.23 44.45 48.5 59.6 ▃▇▇▆▁
bill_depth_mm 2 0.99 17.15 1.97 13.1 15.60 17.30 18.7 21.5 ▅▅▇▇▂
flipper_length_mm 2 0.99 200.92 14.06 172.0 190.00 197.00 213.0 231.0 ▂▇▃▅▂
body_mass_g 2 0.99 4201.75 801.95 2700.0 3550.00 4050.00 4750.0 6300.0 ▃▇▆▃▂
year 0 1.00 2008.03 0.82 2007.0 2007.00 2008.00 2009.0 2009.0 ▇▁▇▁▇

O interessante é que o pacote skim se comunica muito bem com o dplyr. Por exemplo, é possível reproduzir a análise acima para cada espécie de pinguim usando gruop_by():

penguins |> 
  group_by(species) |> 
  skim()

Table: Table 2: Data summary

Name group_by(penguins, specie…
Number of rows 344
Number of columns 8
_______________________
Column type frequency:
factor 2
numeric 5
________________________
Group variables species

Variable type: factor

skim_variable species n_missing complete_rate ordered n_unique top_counts
island Adelie 0 1.00 FALSE 3 Dre: 56, Tor: 52, Bis: 44
island Chinstrap 0 1.00 FALSE 1 Dre: 68, Bis: 0, Tor: 0
island Gentoo 0 1.00 FALSE 1 Bis: 124, Dre: 0, Tor: 0
sex Adelie 6 0.96 FALSE 2 fem: 73, mal: 73
sex Chinstrap 0 1.00 FALSE 2 fem: 34, mal: 34
sex Gentoo 5 0.96 FALSE 2 mal: 61, fem: 58

Variable type: numeric

skim_variable species n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
bill_length_mm Adelie 1 0.99 38.79 2.66 32.1 36.75 38.80 40.75 46.0 ▁▆▇▆▁
bill_length_mm Chinstrap 0 1.00 48.83 3.34 40.9 46.35 49.55 51.08 58.0 ▂▇▇▅▁
bill_length_mm Gentoo 1 0.99 47.50 3.08 40.9 45.30 47.30 49.55 59.6 ▃▇▆▁▁
bill_depth_mm Adelie 1 0.99 18.35 1.22 15.5 17.50 18.40 19.00 21.5 ▂▆▇▃▁
bill_depth_mm Chinstrap 0 1.00 18.42 1.14 16.4 17.50 18.45 19.40 20.8 ▅▇▇▆▂
bill_depth_mm Gentoo 1 0.99 14.98 0.98 13.1 14.20 15.00 15.70 17.3 ▅▇▇▆▂
flipper_length_mm Adelie 1 0.99 189.95 6.54 172.0 186.00 190.00 195.00 210.0 ▁▆▇▅▁
flipper_length_mm Chinstrap 0 1.00 195.82 7.13 178.0 191.00 196.00 201.00 212.0 ▁▅▇▅▂
flipper_length_mm Gentoo 1 0.99 217.19 6.48 203.0 212.00 216.00 221.00 231.0 ▂▇▇▆▃
body_mass_g Adelie 1 0.99 3700.66 458.57 2850.0 3350.00 3700.00 4000.00 4775.0 ▅▇▇▃▂
body_mass_g Chinstrap 0 1.00 3733.09 384.34 2700.0 3487.50 3700.00 3950.00 4800.0 ▁▅▇▃▁
body_mass_g Gentoo 1 0.99 5076.02 504.12 3950.0 4700.00 5000.00 5500.00 6300.0 ▃▇▇▇▂
year Adelie 0 1.00 2008.01 0.82 2007.0 2007.00 2008.00 2009.00 2009.0 ▇▁▇▁▇
year Chinstrap 0 1.00 2007.97 0.86 2007.0 2007.00 2008.00 2009.00 2009.0 ▇▁▆▁▇
year Gentoo 0 1.00 2008.08 0.79 2007.0 2007.00 2008.00 2009.00 2009.0 ▆▁▇▁▇

Logicamente, também é possível reduzir o número de variáveis analisadas com select(). Em meu exemplo, uso apenas as variáveis de medição, ou seja, apenas aquelas que contém a string "_mm" em seus nomes:

penguins |> 
  select(species, contains("_mm")) |> 
  group_by(species) |> 
  skim()

Table: Table 3: Data summary

Name group_by(select(penguins,…
Number of rows 344
Number of columns 4
_______________________
Column type frequency:
numeric 3
________________________
Group variables species

Variable type: numeric

skim_variable species n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
bill_length_mm Adelie 1 0.99 38.79 2.66 32.1 36.75 38.80 40.75 46.0 ▁▆▇▆▁
bill_length_mm Chinstrap 0 1.00 48.83 3.34 40.9 46.35 49.55 51.08 58.0 ▂▇▇▅▁
bill_length_mm Gentoo 1 0.99 47.50 3.08 40.9 45.30 47.30 49.55 59.6 ▃▇▆▁▁
bill_depth_mm Adelie 1 0.99 18.35 1.22 15.5 17.50 18.40 19.00 21.5 ▂▆▇▃▁
bill_depth_mm Chinstrap 0 1.00 18.42 1.14 16.4 17.50 18.45 19.40 20.8 ▅▇▇▆▂
bill_depth_mm Gentoo 1 0.99 14.98 0.98 13.1 14.20 15.00 15.70 17.3 ▅▇▇▆▂
flipper_length_mm Adelie 1 0.99 189.95 6.54 172.0 186.00 190.00 195.00 210.0 ▁▆▇▅▁
flipper_length_mm Chinstrap 0 1.00 195.82 7.13 178.0 191.00 196.00 201.00 212.0 ▁▅▇▅▂
flipper_length_mm Gentoo 1 0.99 217.19 6.48 203.0 212.00 216.00 221.00 231.0 ▂▇▇▆▃

Mais informações podem ser encontradas na vignette do pacote.