Mòdul pràctic d’ITA
(Grup M)
Vam aprendre a carregar dades, però és rar que les dades estiguin preparades per començar la nostra anàlisi, així que cal “arreglar/netejar” les dades. Per això, hem de:
Fer les nostres dades TIDY
Arreglar-los/modificar-los perquè siguin útils per als nostres propòsits
Arreglant les dades
¿què és el tidyverse?
principals pkgs del Tidyverse
tidyr
: convertir a tidy data
dplyr
: per manipular dades
ggplot2
: per fer gràfics
… i alguns més
ens centrarem principalment en dos paquets: dplyr
y ggplot2
“Filosofia” del Tidyverse
Dos principis del tidyverse:
Els scripts han de ser “fàcilment” llegibles per les persones
Resoldre problemes complexos encadenant funcions simples amb l’operador pipe (%>%
)
L’operador %>%
és crucial al tidyverse
The pipe ha tingut tant èxit que el 2021 va aparèixer una nova pipe a R-base: |>
Pots llegir sobre ella aquí
L’operador %>%
és crucial al tidyverse. Cal saber fer-lo servir i entendre’l
És fàcil. Aviat us sentireu còmodes amb ell
The pipe
The pipe (més exemples)
-El concepte de dades tidy és senzill. Fer les dades tidy no tant però tenim un paquet per fer-ho fàcil: el pkg tidyr
Un aspecte important del tidyverse és fer les dades tidy
Sembla fàcil, i ho és: realment és la situació a què estem acostumats, però … … millor desenvolupar-ho amb uns exemples
Tidy data … exemple I
¿Aquestes dades son tidy?
Tidy data … exemple II
Aquestes dades son tidy?
Tidy data … exemple III
Aquestes dades son tidy?
Sí, aquestes sí són dades tidy
Són més difícils de llegir pels humans, però és que les dades les llegeixen les màquines!!
Les dades tidy solen estar en format llarg o long
Per treballar à la tidyverse és crucial que les dades siguin “tidy”(en format LONG)
És important aprendre a passar de dades WIDE a LONG y viceversa
Amb el pkg tidyr és senzill però …
De wide a LONG format amb … tidyr::pivot_longer()
Tasca: converteix “df_wide” a format LLARG
Aquí tens un df en format AMPLE, passa-ho a format LLARG
Està en format ample:
T’ajudarà a visualitzar df_wide
i veure que columnes contenen valors de la mateixa variable
Has de fer servir tidyr::pivot_longer()
i en el seu primer argument li has de dir que columnes cal convertir a format “llarg”
#- la funció pivot_longer() transforma les dades de format ample(wide) a format llarg(long)
library(tidyverse)
df_long <- df_wide %>%
tidyr::pivot_longer(cols = 2:4)
knitr::kable(df_long)
students | name | value |
---|---|---|
Pedro | w_2014 | 100 |
Pedro | w_2015 | 500 |
Pedro | w_2016 | 200 |
Carla | w_2014 | 400 |
Carla | w_2015 | 600 |
Carla | w_2016 | 250 |
María | w_2014 | 200 |
María | w_2015 | 700 |
María | w_2016 | 900 |
#- la funció pivot_longer() transforma les dades de format ample(wide) a format llarg(long)
df_long <- df_wide %>%
tidyr::pivot_longer(cols = 2:4,
names_to = "periodo",
values_to = "salario")
knitr::kable(df_long)
students | periodo | salario |
---|---|---|
Pedro | w_2014 | 100 |
Pedro | w_2015 | 500 |
Pedro | w_2016 | 200 |
Carla | w_2014 | 400 |
Carla | w_2015 | 600 |
Carla | w_2016 | 250 |
María | w_2014 | 200 |
María | w_2015 | 700 |
María | w_2016 | 900 |
De long a WIDE format amb tidyr::pivot_wider()
Per què voldríem convertir-lo a format AMPLE?
Tasca: converteix “df_long” a format AMPLE
df_long
està en format LLARG, passa-ho a format AMPLE
Has de distribuir les dades de salari en columnes: una columna per a cada any
Està a format llarg:
Ho vull en format ample: (amb una columna per a cada any)
students | w_2014 | w_2015 | w_2016 |
---|---|---|---|
Pedro | 100 | 500 | 200 |
Carla | 400 | 600 | 250 |
María | 200 | 700 | 900 |
tidyr::pivot_wider()
values_from
li has de dir quina columna vols que els seus valors es distribueixin entre diverses columnesnames_from
li heu de dir quina columna voleu que els seus valors apareguin com els títols de les noves columnes que es crearanTasca: converteix UNA ALTRA VEGADA
“df_long” a format AMPLE
df_long
està a format LLARG, passa-ho a format AMPLE
Has de distribuir les dades de salari en columnes: PERÒ aquesta vegada vull que hi hagi una columna per a cada persona (Pedro, Carla, …)
Està a format llarg:
Ho vull en format ample:
(amb una columna per a cada PERSONA)
periodo | Pedro | Carla | María |
---|---|---|---|
w_2014 | 100 | 400 | 200 |
w_2015 | 500 | 600 | 700 |
w_2016 | 200 | 250 | 900 |
tidyr::pivot_wider()
values_from
li has de dir quina columna vols que els seus valors es distribueixin entre diverses columnesnames_from
li heu de dir quina columna voleu que els seus valors apareguin com els títols de les noves columnes que es crearantidyr
les funcions separate()
i unite()
separate()
i unite()
ens facilitaran poder separar i unir columnespersonajes | year |
---|---|
Pedro Navaja | 1978 |
Bob Dylan | 1941 |
Peter Pan | 1904 |
Tasca: Utilitzant tidyr::separate()
personajes
en dues columnes: nombre
y apellido
personajes | year |
---|---|
Pedro Navaja | 1978 |
Bob Dylan | 1941 |
Peter Pan | 1904 |
tidyr::separate()
Hauràs de donar-li els valors de 3 arguments: col
, into
y sep
a l’argument col
has de dir quina columna vols separar
a into
has de dir quins noms vols que tinguin les noves columnes
a sep
has de dir quin caràcter separa els dos elements
Tasca: Utilitzant tidyr::unite()
nombre
i apellido
en una sola columnanombre | apellido | year |
---|---|---|
Pedro | Navaja | 1978 |
Bob | Dylan | 1941 |
Peter | Pan | 1904 |
tidyr::unite()
Hauràs de donar-li els valors de “3” arguments:
a l’argument col
has de dir el nom de la nova columna que es crearà
després has de dir quines columnes vols unir
a sep
has de dir quin caràcter separarà els dos elements que unirem
(Web del curso aquí)