Sommaire
Dans le domaine de l’analyse de données, PowerQuery et R sont des outils puissants qui peuvent être utilisés ensemble pour résoudre des problèmes complexes. Cet article présente deux énigmes PowerQuery et les solutions correspondantes en utilisant le langage R.
Énigme #225
Dans cette énigme, nous avons un ensemble de données organisé sous forme de tableaux. Cependant, cette structure peut rendre la recherche et l’interprétation des données difficiles. Il est souvent nécessaire de transformer ces données pour leur donner une forme plus lisible.
Chargement des bibliothèques et des données
Pour commencer, nous devons charger les bibliothèques nécessaires et les données :
library(tidyverse)
library(readxl)
path = "Power Query/PQ_Challenge_225.xlsx"
input = read_excel(path, range = "A1:D9")
test = read_excel(path, range = "F1:G12")
Transformation des données
Nous appliquons plusieurs transformations pour obtenir le format souhaité :
r1 = input %>%
mutate(Id = consecutive_id(Group),
`Emp ID` = as.character(`Emp ID`),
Group = ifelse(Group == "Group A", "GroupA", Group))
r1_1 = r1 %>%
select(Column1 = 1, Column2 = 2, ID = 5)
r1_2 = r1 %>%
select(Column1 = 4, Column2 = 3, ID = 5)
r2 = rbind(r1_2, r1_1) %>%
arrange(ID) %>%
distinct() %>%
select(-ID)
Validation
Pour valider notre transformation, nous comparons le résultat avec les données de test :
all.equal(r2, test, check.attributes = FALSE) #> [1] TRUE
Énigme #226
Cette fois, nous sommes confrontés à des données qui peuvent sembler redondantes. L’objectif est de les transformer afin d’en extraire les informations pertinentes.
Chargement des bibliothèques et des données
Comme précédemment, nous chargeons les bibliothèques et les données :
library(tidyverse)
library(readxl)
path = "Power Query/PQ_Challenge_226.xlsx"
input = read_excel(path, range = "A1:D13")
test = read_excel(path, range = "F1:I19")
Transformation des données
Voici comment les données sont transformées :
result = input %>%
fill(`Dept ID`) %>%
select(-`Highest Paid Employee`) %>%
pivot_longer(-`Dept ID`, values_to = "Value") %>%
separate(Value, into = c("Emp Names", "Salary", "Promotion Date"), sep = "-") %>%
select(-name) %>%
filter(!is.na(`Emp Names`)) %>%
arrange(`Dept ID`, `Emp Names`) %>%
mutate(`Promotion Date` = as.POSIXct(`Promotion Date`, format = "%m/%d/%Y", tz = "UTC"),
Salary = as.numeric(Salary)) %>%
select(`Dept ID`, `Emp Names`, `Promotion Date`, Salary)
Validation
Nous vérifions si notre résultat final est conforme aux attentes :
all.equal(result, test, check.attributes = FALSE) #> [1] TRUE