Hotel Operations
Je travaille pour LuxurStay Hotels, une grande chaîne hôtelière internationale. Nous accueillons aussi bien les voyageurs d'affaires que les vacanciers, dans les grandes villes du monde entier. Nous sommes reconnus pour la qualité de notre service client, dont nous sommes particulièrement fiers.
Mais dernièrement, la direction a commencé à recevoir des plaintes. Dans certaines de nos succursales (hôtels), le service en chambre est jugé trop lent. Ces retours négatifs ont un impact direct sur la satisfaction de nos clients, et cela devient préoccupant. Les données récentes montrent que notre note de satisfaction a chuté, en dessous du 4,5 que nous visons habituellement.
C'est dans ce contexte que je collabore avec le Responsable des Opérations. Notre objectif : identifier les causes possibles de ces lenteurs, et repérer les établissements où les problèmes sont les plus marqués.
Data
Le schéma ci-dessous présente les tables disponibles. Je ne dispose que des données pour lesquelles les clients ont fourni une évaluation.
Remarque : Les noms des hôtels ne sont pas présents dans le schéma de données, probablement pour des raisons de confidentialité.
Tâche 1
Avant de commencer toute analyse, je dois m'assurer que les données sont exactes et correspondent à ce que je m'attends à voir.
Il est connu qu’il existe certains problèmes avec la table Branch, et l’équipe de données a fourni la description suivante.
Je dois écrire une requête pour retourner les données correspondant à cette description, en identifiant et en nettoyant toutes les valeurs invalides. Je dois respecter tous les noms de colonnes et les critères décrits. Le résultat doit être un DataFrame nommé clean_branch_data.
| Nom de colonne | Critère |
|---|---|
| id | Discrète. Identifiant unique de l’hôtel. Les valeurs manquantes ne sont pas possibles en rasion de la structure de la bases de données. |
| location | Nominale. La localisation de l'hôtel. Doit être parmi les quatres valeurs suivantes, 'EMEA', 'NA', 'LATAM' et 'APAC'. Les valeurs manquantes doivent être remplacer par “Unknown”. |
| total_rooms | Discrète. Le nombre total de chambres dans l'hôtel. Doit être un nombre entier entre 1 et 400. Les valeurs manquantes doivent être remplacées par défaut par le nombre de chambres, 100. |
| staff_count | Discrète. Le nombre d'employées dans le service hôtelier. Les valeurs manquantes doivent être remplacées par total_rooms multplieé par 1.5. |
| opening_date | Discrète. L'année d'ouverture de l'hôtel. Doit être comprise entre 2000 et 2023. Les valeurs manquantes doivent être remplacées par 2023 |
| target_guests | Nominale. Les principaux types de client. Doit prendre que ces deux valeurs 'Leisure' (qui veut dire Loisir) ou 'Bussiness' (qui veut dire Affaire) Les valeurs manquantes doivent être remplacée par 'Leisure'. |
Exploration de la table Branch
BranchType des colonnes
Cela permet de vérifier le typage des colonnes pour détecter d’éventuelles incohérences. Dans le cas écheant, il faudra proceder à des conversions des colonnes.
-- Quelles sont les types des colonnes de la table Branch ?
SELECT
column_name,
data_type
FROM information_schema.columns
WHERE table_name = 'branch';On remarque que opening_date ne répond pas aux critères enoncé plus haut.
Détéction d'anomalie sur les variables qualitatives
Nous pouvons avoir des valeurs nulles mais representé de différentes manières.
Par exemple : par un "." , un "-" ou du vide ' ', etc...
- target_guest
SELECT target_guests
FROM branch
GROUP BY target_guests;Grace à la requete ci-dessus, je remarque que le champ target_guest possede des valeurs incohérentes comme "B." et "Busniess" qui devront être remplacées par "Bussiness" lors de mon nettoyage de la table Branch.
Pour ceux qui n'auraient pas compris l'utilté de cette requête, (mettez-vous dans la tête d'un enfant) imaginez que vous regoupez vos jouets par couleur et que vous remarquez que dans vos jouets de couleur rouge, il y a un jouet de couleur vert et rouge (un mélange de couleur). Il n'est pas tout à fait rouge donc c'est une incohérence. Dans notre cas la variable target_guests doit prendre que 2 valeurs : soit "Leisure" ou "Business".
- opening_date
-- Vérifions la proprété des variables qualitatives
-- opening_date
SELECT opening_date
FROM branch
GROUP BY opening_date
ORDER BY opening_date desc;Remarque : il y a un '-' qui est une valeur manquante qu'il faudra remplacer par 2023.
Nettoyage des donnees selon les criteres