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.