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

Namepenguins
Number of rows344
Number of columns8
_______________________
Column type frequency:
factor3
numeric5
________________________
Group variablesNone

Variable type: factor

skim_variablen_missingcomplete_rateorderedn_uniquetop_counts
species01.00FALSE3Ade: 152, Gen: 124, Chi: 68
island01.00FALSE3Bis: 168, Dre: 124, Tor: 52
sex110.97FALSE2mal: 168, fem: 165

Variable type: numeric

skim_variablen_missingcomplete_ratemeansdp0p25p50p75p100hist
bill_length_mm20.9943.925.4632.139.2344.4548.559.6▃▇▇▆▁
bill_depth_mm20.9917.151.9713.115.6017.3018.721.5▅▅▇▇▂
flipper_length_mm20.99200.9214.06172.0190.00197.00213.0231.0▂▇▃▅▂
body_mass_g20.994201.75801.952700.03550.004050.004750.06300.0▃▇▆▃▂
year01.002008.030.822007.02007.002008.002009.02009.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

Namegroup_by(penguins, specie…
Number of rows344
Number of columns8
_______________________
Column type frequency:
factor2
numeric5
________________________
Group variablesspecies

Variable type: factor

skim_variablespeciesn_missingcomplete_rateorderedn_uniquetop_counts
islandAdelie01.00FALSE3Dre: 56, Tor: 52, Bis: 44
islandChinstrap01.00FALSE1Dre: 68, Bis: 0, Tor: 0
islandGentoo01.00FALSE1Bis: 124, Dre: 0, Tor: 0
sexAdelie60.96FALSE2fem: 73, mal: 73
sexChinstrap01.00FALSE2fem: 34, mal: 34
sexGentoo50.96FALSE2mal: 61, fem: 58

Variable type: numeric

skim_variablespeciesn_missingcomplete_ratemeansdp0p25p50p75p100hist
bill_length_mmAdelie10.9938.792.6632.136.7538.8040.7546.0▁▆▇▆▁
bill_length_mmChinstrap01.0048.833.3440.946.3549.5551.0858.0▂▇▇▅▁
bill_length_mmGentoo10.9947.503.0840.945.3047.3049.5559.6▃▇▆▁▁
bill_depth_mmAdelie10.9918.351.2215.517.5018.4019.0021.5▂▆▇▃▁
bill_depth_mmChinstrap01.0018.421.1416.417.5018.4519.4020.8▅▇▇▆▂
bill_depth_mmGentoo10.9914.980.9813.114.2015.0015.7017.3▅▇▇▆▂
flipper_length_mmAdelie10.99189.956.54172.0186.00190.00195.00210.0▁▆▇▅▁
flipper_length_mmChinstrap01.00195.827.13178.0191.00196.00201.00212.0▁▅▇▅▂
flipper_length_mmGentoo10.99217.196.48203.0212.00216.00221.00231.0▂▇▇▆▃
body_mass_gAdelie10.993700.66458.572850.03350.003700.004000.004775.0▅▇▇▃▂
body_mass_gChinstrap01.003733.09384.342700.03487.503700.003950.004800.0▁▅▇▃▁
body_mass_gGentoo10.995076.02504.123950.04700.005000.005500.006300.0▃▇▇▇▂
yearAdelie01.002008.010.822007.02007.002008.002009.002009.0▇▁▇▁▇
yearChinstrap01.002007.970.862007.02007.002008.002009.002009.0▇▁▆▁▇
yearGentoo01.002008.080.792007.02007.002008.002009.002009.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

Namegroup_by(select(penguins,…
Number of rows344
Number of columns4
_______________________
Column type frequency:
numeric3
________________________
Group variablesspecies

Variable type: numeric

skim_variablespeciesn_missingcomplete_ratemeansdp0p25p50p75p100hist
bill_length_mmAdelie10.9938.792.6632.136.7538.8040.7546.0▁▆▇▆▁
bill_length_mmChinstrap01.0048.833.3440.946.3549.5551.0858.0▂▇▇▅▁
bill_length_mmGentoo10.9947.503.0840.945.3047.3049.5559.6▃▇▆▁▁
bill_depth_mmAdelie10.9918.351.2215.517.5018.4019.0021.5▂▆▇▃▁
bill_depth_mmChinstrap01.0018.421.1416.417.5018.4519.4020.8▅▇▇▆▂
bill_depth_mmGentoo10.9914.980.9813.114.2015.0015.7017.3▅▇▇▆▂
flipper_length_mmAdelie10.99189.956.54172.0186.00190.00195.00210.0▁▆▇▅▁
flipper_length_mmChinstrap01.00195.827.13178.0191.00196.00201.00212.0▁▅▇▅▂
flipper_length_mmGentoo10.99217.196.48203.0212.00216.00221.00231.0▂▇▇▆▃

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