Occupation des lits d’hôpitaux avec Tableau Prep

Atteindre la capacité maximale dans un hôpital est certes problématiques, mais une surabondance des ressources l’est également. Il est important de comprendre les lits d’hôpitaux en considérant le lit en tant que ressource. Toutefois, les données sont souvent enregistrées du point de vue d’un patient. Comment prendre des données qui capturent le moment où des patients occupent des lits et déterminer l’occupation des lits?

Remarque : pour effectuer les tâches décrites dans ce tutoriel, vous aurez besoin d’installer Tableau Prep et, de manière facultative, Tableau Desktop :

Pour installer Tableau Prep et Tableau Desktop, consultez le Guide de déploiement de Tableau Desktop et Tableau Prep.(Le lien s’ouvre dans une nouvelle fenêtre) Sinon, vous pouvez télécharger les versions d’évaluation gratuites de Tableau Prep(Le lien s’ouvre dans une nouvelle fenêtre) et Tableau Desktop(Le lien s’ouvre dans une nouvelle fenêtre).

Vous devrez également télécharger trois fichiers de données. Il est recommandé de les enregistrer dans le dossier Mon référentiel Tableau Prep > Sources de données.
- Beds.xlsx(Le lien s’ouvre dans une nouvelle fenêtre)
- Hours.xlsx(Le lien s’ouvre dans une nouvelle fenêtre)
- Patient Beds.xlsx(Le lien s’ouvre dans une nouvelle fenêtre)

Les données

Pour nos quatre lits, A, B, C et D, nous suivons quel patient occupait le lit, et l’heure de début et de fin de son occupation. Les données se présentent comme suit :

aperçu de l’ensemble de données de lit de patient

Analyse préliminaire

Si nous introduisons les données dans Tableau Desktop, nous pouvons créer un diagramme de Gantt pour montrer à quel moment les patients occupent les lits.

Diagramme de Gantt dans Tableau Desktop de l’ensemble de données de lit de patient

Cette représentation visuelle est utile. Nous pouvons voir qu’il n’existe que de brefs intervalles entre les occupations pour les lits A et B, mais que le lit C, quant à lui, est très sous-utilisé. Il n’y a pas d’heure de fin pour le patient du lit D, mais nous pourrons gérer ce problème avec quelques calculs. Nous disposons ainsi d’une vue d’ensemble visuelle du mode d’occupation des lits.

Par contre, comment faire pour compter le nombre d’heures pendant lequel un lit était vacant? Ou comparer la durée d’inoccupation des lits avant ou près la mise en place d’une nouvelle politique? Il n’existe aucun moyen facile de répondre à ces questions avec la structure actuelle des données.

Structure souhaitée des données

En créant quelques ensembles de données très élémentaires et en les combinant dans Tableau Prep, nous pouvons transformer la structure de cet ensemble de données de manière à pouvoir effectuer des analyses plus approfondies et créer des visualisations encore plus utiles.

Avant de passer à Tableau Prep, prenons du recul et considérons ce dont nous avons besoin pour répondre à la question, « Pendant combien d’heures chaque lit a-t-il été inoccupé? »

Nous devons pouvoir examiner chaque lit pour chaque heure, et savoir si un patient occupait ou non le lit. Actuellement, les données relèvent seulement quand un patient occupait le lit. Nous n’avons pas donné d’informations à Tableau au sujet des heures d’inoccupation.

Pour créer cette matrice complète de tous les lits et de toutes les heures, nous allons créer deux ensembles de données. L’un d’eux est simplement une liste de lits (A, B, C, D) et l’autre une liste d’heure (1, 2, 3, …, 23, 24). En effectuant une jointure croisée (en liant chaque ligne d’un ensemble de données avec chaque ligne de l’autre ensemble de données), nous obtiendrons chaque combinaison possible de lits et d’heures.

L’ensemble de données Beds.xlsx se présente comme suit :L’ensemble de données Hours.xlsx se présente comme suit :Et les résultats de la jointure croisée se présentent comme suit : 
Aperçu de l’ensemble de données LitsAperçu de l’ensemble de données HeuresAperçu des données de la matrice Lits-Heures

Ensuite, nous allons intégrer les informations Patient Beds (Lits de patients) en étiquetant chaque combinaison lit-heure comme ayant ou non un patient spécifique. Nous obtenons un ensemble de données qui inclut une ligne pour chaque lit-heure, et indique si un patient occupait le lit, le nombre et les heures de début et de fin. Les valeurs nulles indiquent que le lit était inoccupé.

Aperçu des données de la matrice Lit-Heure-Patient

Avec les données de cette structure, nous pouvons effectuer des analyses de ce type, afin d’analyser les lits vacants aussi facilement que les lits avec patients.

Tableau de bord des données mises en forme montrant l’utilisation du lit par heure et par patient

Restructuration des données

Comment utiliser Tableau Prep à cette fin? Nous allons créer le flux en deux parties, tout d’abord en créant la matrice Lits Heures, puis en la combinant avec les données Lits de patients. Assurez-vous de télécharger les trois fichiers (Beds.xlsx, Hours.xlsx et Patient Beds.xlsx) pour bien suivre le didacticiel.

Matrice Lits Heures

Tout d’abord, nous allons nous connecter au fichier Beds.xlsx.

  1. Ouvrez Tableau Prep.

  2. Dans l’écran de démarrage, cliquez sur Se connecter aux données.

  3. Dans le volet Connexions, cliquez sur Microsoft Excel. Accédez à l’emplacement où vous avez enregistré Bed.xlsx et cliquez sur Ouvrir.

  4. La feuille Beds devrait apparaître automatiquement dans le volet Flux.

Conseil : pour plus d’informations sur la connexion aux données, consultez Se connecter aux données(Le lien s’ouvre dans une nouvelle fenêtre).

Ensuite, nous devons créer un champ pour effectuer la jointure croisée avec l’ensemble de données Hours (Heures). Nous allons ajouter un calcul, qui est simplement la valeur 1.

  1. Dans le volet Flux, sélectionnez Beds (Lits) et cliquez sur l’étape de nettoyage suggérée.

  2. Avec l’étape Nettoyer que nous venons d’ajouter, le volet Profil s’affiche. Cliquez sur Créer un champ calculé dans la barre d’outils.

  3. Nommez le champ Jointure croisée et entrez la valeur 1.

  4. La grille Données devrait se mettre à jour pour afficher l’état actuel des données.

Nous allons répéter le processus pour l’ensemble de données Hours (Heures).

Cliquez pour des instructions
  1. Dans le volet Connexions, cliquez sur le bouton Ajouter une connexion pour ajouter une autre connexion de données.

  2. Choisissez Microsoft Excel puis sélectionnez Hours.xlsx file et cliquez sur Ouvrir.

  3. Dans le volet Flux, sélectionnez Heures et cliquez sur l’étape de nettoyage suggérée pour l’ajouter au flux.

  4. Dans la barre d’outils du volet Profil, créez un champ calculé appelé Jointure croisée et entrez la valeur 1.

Les deux ensemble de données ont maintenant un champ partagé, Jointure croisée, et peuvent être liés.

  1. Liez les deux étapes de nettoyage en faisant glisser Nettoyer 2 sur Nettoyer 1 et en déposant sur l’option Lier.

    Le volet de flux affichant la zone de dépôt Jointure lorsque Nettoyer 2 est déplacé vers Nettoyer 1

  2. Dans le Profil de jointure ci-dessous, les configurations de jointure devraient se remplir automatiquement.

    • Étant donné que nous avons nommé les deux champs Jointure croisée, Tableau Prep les identifie automatiquement comme champ partagé et crée les Clauses de jointure appliquées appropriées.

    • Le Type de jointure par défaut est interne, et c’est ce que nous souhaitons.

    • Cette jointure correspondra à toutes les lignes issues de Beds avec toutes les lignes issues de Hours, comme nous l’avons vu dans la grille Données.

    Le volet Profil de jointure avec divers éléments appelés pour correspondre à la liste ci-dessus

    A. Clause de jointure

    B. Type de jointure

    C. Résultats de la grille de données

Conseil : pour plus d’informations sur les jointures, consultez Lier vos données(Le lien s’ouvre dans une nouvelle fenêtre).

Nous n’avons plus besoin des champs Jointure croisée, donc nous pouvons les supprimer.

  1. Dans le volet Flux, sélectionnez Jointure 1, cliquez sur l’icône plus , puis sélectionnez Ajouter une étape de nettoyage.

  2. Sélectionnez les champs Jointure croisée-1 et Jointure croisée, et cliquez sur Supprimer les champs.

  3. Double-cliquez sur l’étiquette Nettoyer 3 et renommez cette étape Bed Hour Matrix (Matrice Lits Heures).

Nous avons maintenant l’ensemble de données Bed Hour Matrix qui contient tous les lits et toutes les heures, et nous avons terminé la première partie de la création de notre ensemble de données.

Occupation des lits de patients

La deuxième partie consiste à introduire l’occupation des lits des patients. Pour commencer, nous nous connectons aux données.

  1. Dans le volet Connexions, cliquez sur le bouton Ajouter une connexion pour ajouter une autre connexion de données.

  2. Choisissez Microsoft Excel puis sélectionnez Patient Beds.xlsx et cliquez sur Ouvrir.

  3. Dans le volet Flux, sélectionnez Patient Beds, puis cliquez sur l’étape de nettoyage suggérée pour l’ajouter au flux.

Le fichier Bed Hour Matrix est basé sur le nombre d’heures mais Patient Beds est basé sur l’heure réelle, nous devons extraire les heures de début et de fin de Patient Beds. En outre, pour l’heure de fin, nous voulons nous assurer que, si un patient occupe encore le lit à la fin de la journée (minuit, heure 24), ce lit sera indiqué comme occupé alors même qu’il n’y a pas d’heure de fin dans l’ensemble de données. Nous allons ajouter un champ calculé dans cette nouvelle étape.

  1. Dans la barre d’outils, cliquez sur Créer un champ calculé.

  2. Nommez le champ Start Hour (Heure de début). Pour le calcul, entrez DATEPART('hour',[Start Time]).

  3. Ce calcul prend l’heure de début et l’extrait. De ce fait, « 1/1/18 9 :35 AM » devient simplement « 9 ».

  4. Créez un autre champ calculé appelé End Hour (Heure de fin). Pour le calcul, entrez IFNULL(DATEPART('hour',[End Time]), 24).

  5. La partie DATEPART prend l’heure de fin. La partie IFNULL affectera une heure de fin de 24 (minuit) en l’absence d’heure de fin.

Nous sommes maintenant prêts à lier l’occupation des lits de patients à Bed Hour Matrix. Cette jointure est un peu plus complexe que les précédentes. Une jointure interne retournerait uniquement les valeurs présentes dans les deux ensembles de données. Étant donné que nous souhaitons conserver tous les emplacements lit-heure, qu’un patient ait ou non occupé le lit, nous devons effectuer une jointure gauche. Ceci entraîne beaucoup de valeurs nulles, mais ce résultat est correct.

Nous devons également faire l’association lorsqu’un emplacement lit-heure est pris par un patient (ou des patients). Donc, en plus d’associer le lit occupé par le patient, nous devons également prendre en considération l’heure. L’ensemble de données Bed Hour Matrix a justement un champ Hour (Heure) et l’ensemble de données Patient Beds a des champs Start Hour (Heure de début) et End Hour (Heure de fin). Nous allons utiliser des notions de logique de base pour déterminer si un patient devrait être affecté à un emplacement lit-heure donné : Un patient est considéré comme occupant un lit si son heure de début est inférieure ou égale à (<=) l’emplacement lit-heure ET que son heure de fin est supérieure ou égale à (>=) l’emplacement lit-heure.

De ce fait, trois clauses de jointure sont nécessaires pour associer correctement ces deux ensembles de données ensemble.

  1. Liez l’étape Nettoyer 3 avec l’étape Bed Hour Matrix.

  2. Dans la zone Clauses de jointure appliquées, le paramètre par défaut devrait être Hour = End Hour. Cliquez sur la clause de jointure pour modifier l’opérateur de « = » en « <= ».

  3. Cliquez sur le bouton Plus en haut à droite de la zone Clauses de jointure appliquées pour ajouter une autre clause de jointure. Définissez-la de sorte que Hour >= Start Hour

  4. Ajoutez une troisième clause de jointure pour Bed = Hospital Bed.

  5. Dans la section Type de jointure, cliquez sur la zone sans ombrage du graphique à côté de Bed Hour Matrix pour modifier le type de jointure sur une jointure gauche.

    Le volet de profil de jointure pour Jointure 2 affichant la configuration correcte

Remarque : si vous faites glisser Bed Hour Matrix vers Nettoyer 3 et non l’inverse, vous pouvez obtenir les résultats souhaités en utilisant une jointure droite au lieu d’une jointure gauche. L’ordre dans lequel vous faites glisser les étapes a une incidence sur l’orientation de la jointure. Les clauses de jointure seront également dans l’ordre inverse. Veillez à préserver la logique correcte de comparaison des heures.

Nos données sont maintenant liées, mais il nous faut nettoyer quelques artefacts de la jointure et nous assurer que les champs sont bien ordonnés. Nous n’avons plus besoin des paramètres Start Hour et End Hour. Hospital Bed et Bed sont également redondants. Enfin, une valeur nulle dans le champ Patient signifie réellement que le lit est vacant.

  1. Dans le volet Flux, ajoutez une étape de nettoyage afin que nous puissions mettre de l’ordre dans les données liées.

  2. Faites un Ctrl+clic (Command+clic sur un Mac) pour faire une sélection multiple des champs End Hour, Start Hour et Hospital Bed, puis cliquez sur Supprimer des champs dans la barre d’outils.

  3. Dans la fiche Profil du champ Patient, double-cliquez sur la valeur nulle et tapez Unoccupied (Inoccupé).

Nous avons maintenant une structure de données avec une ligne pour chaque lit-heure. Si un patient occupait un lit pendant cette heure, nous disposons également des informations sur le patient. Il ne nous reste plus qu’à ajouter une étape de sortie et à générer l’ensemble de données lui-même.

  1. Dans le volet Flux, sélectionnez Nettoyer 4, cliquez sur l’icône plus et sélectionnez Ajouter une sortie.

  2. Dans le volet Sortie, modifiez le Type de sortie sur .csv puis cliquez sur Parcourir.

  3. Entrez Bed Hour Patient Matrix comme nom, et choisissez l’emplacement souhaité avant de cliquer sur Accepter pour enregistrer.

  4. Cliquez sur le bouton Exécuter le flux au bas du volet pour générer votre sortie. Cliquez sur Terminé dans la boîte de dialogue d’état pour fermer la boîte de dialogue.

Conseil : pour plus d’informations sur les fichiers de sortie et l’exécution d’un flux, consultez Enregistrer et partager votre travail(Le lien s’ouvre dans une nouvelle fenêtre).

Le flux final devrait se présenter comme suit :

Le volet de flux avec toutes les étapes terminées

Analyse dans Tableau Desktop

Pour installer Tableau Desktop avant de poursuivre ce tutoriel, vous pouvez télécharger la version d’évaluation gratuite.

Maintenant que l’ensemble de données présente la structure souhaitée, nous pouvons effectuer une analyse plus approfondie qu’avec les données d’origine.

  1. Ouvrez Tableau Desktop. Dans le volet Connexion, sélectionnez Fichier texte, accédez au fichier Bed Hour Patient Matrix.csv, puis cliquez sur Ouvrir.

  2. Dans l’onglet Source de données, les données devraient apparaître dans l’espace de travail par défaut. Cliquez sur Sheet 1.

  3. Dans le volet Données, faites glisser Hour au-dessus de la ligne séparant les Mesures et les Dimensions pour en faire une dimension discrète.

  4. Faites glisser Bed vers l’étagère Lignes et Hour vers l’étagère Colonnes.

  5. Faites glisser Patient vers l’étagère Couleur.

Vue de base des données mises en forme dans Tableau Desktop montrant l’utilisation du lit par heure

La mise en forme est facultative mais contribue à rendre les visuels plus lisibles.

  1. Cliquez sur l’étagère Couleur et sélectionnez Modifier les couleurs.

  2. Dans la zone à gauche, sélectionnez Unoccupied. Dans la liste déroulante à droite, choisissez la palette de couleurs Seattle Grays.

  3. Sélectionnez le quatrième gris le plus clair, et cliquez sur OK.

  4. Cliquez à nouveau sur l’étagère Couleur, puis cliquez sur la liste déroulante Bordure. Choisissez la seconde option de gris tout à droite.

  5. Dans la barre d’outils, dans la liste déroulante Taille, changez de Standard en Adapter la largeur.

    Image de l’emplacement de la liste déroulante des tailles dans la barre d’outils

  6. Cliquez sur le menu Format puis sur Bordures.

  7. Dans Séparateur de lignes, cliquez sur la liste déroulante Volet et choisissez un gris très clair.

  8. Ajustez le curseur Niveau sur la seconde graduation.

  9. Répétez l’opération avec Séparateur de colonnes. Définissez la couleur Volet sur le gris clair et le Niveau sur la seconde graduation.

    Un extrait montrant le volet de format avec les paramètres corrects pour les bordures

  10. Double-cliquez sur l’onglet de feuille au bas et renommez-le Bed Use by Hour (Occupation des lits par heure).

Cette vue nous permet de voir rapidement quand un lit donné était occupé ou vacant.

Une vue montrant l’utilisation du lit par heure

Mais nous pouvons aller plus loin et compter le nombre d’heures pendant lesquelles chaque lit était inoccupé.

  1. Cliquez sur l’icône de l’onglet de nouvelle feuille en bas pour ouvrir une nouvelle feuille.

  2. Faites glisser Patient vers Lignes.

  3. Faites glisser Hour vers Colonnes. Faites un clic droit sur la pile Hour pour ouvrir le menu. Choisissez Mesure > Total.

  4. Faites glisser une autre copie du champ Patient depuis le volet Données vers l’étagère Couleur.

  5. Faites un clic droit sur l’axe et sélectionnez Modifier l’axe. Modifiez le titre sur Hours et fermez la boîte de dialogue.

  6. Renommez l’onglet de la feuille Bed Hours by Patient.

Une vue montrant les heures de lit par patient

Cette vue nous permet d’identifier le nombre d’heures de lits inoccupés, ce que nous ne pouvions pas faire avec l’ensemble de données d’origine. Quels autres graphiques ou tableaux de bord pouvez-vous créer? Lancez-vous maintenant que vos données présentent la structure correcte.

Récapitulatif et ressources

Pour créer cette structure de données à l’aide de Tableau Prep, nous avons dû effectuer les actions suivantes :

  1. Créer un ensemble de données pour chaque aspect que nous souhaitons analyser, dans ce cas Beds et Hours.

  2. Effectuer une jointure croisée de ces ensemble de données afin de créer un ensemble de données Bed Hour Matrix avec chaque combinaison possible de lits et d’heures.

  3. Lier Bed Hour Matrix avec les données Patient Bed, en s’assurant que la jointure conserve tous les emplacements lits-heures et que les clauses de jointure associent correctement les données de lits de patients avec les emplacements lits-heures.

Nous avons utilisé les calculs suivants pour créer des champs pour la jointure. Le second et le troisième extraient les informations d’heures à partir des champs date/heure d’origine.

  • Jointure croisée = 1

    • Affecte simplement la valeur 1 à chaque ligne

  • Heure de début = DATEPART('hour',[Start Time])

    • Ce calcul prend l’heure de début et l’extrait. De ce fait, « 1/1/18 9 :35 AM » devient simplement « 9 ».

  • Heure de fin = IFNULL(DATEPART('hour',[End Time]), 24)

    • Nous pourrions utiliser DATEPART('hour',[End Time]), comme nous l’avions fait pour Heure de début. Ce calcul prend l’heure de fin, et l’extrait. Ainsi, « 1/1/18 4 :34 PM » devient simplement « 4 ».

    • Mais nous souhaitons indiquer que le lit de patient qui est encore occupé (pas d’heure de fin) est utilisé, et non pas vacant. Pour cela, nous affectons une heure de fin de 24 (minuit) en l’absence d’heure de fin à l’aide de la fonction IFNULL. Si le premier argument DATEPART('hour',[End Time]) est null, le calcul renvoie « 24 » à la place.

Remarque : vous souhaitez vérifier votre travail? Téléchargez le fichier de flux complet Tableau Prep (Hospital Beds.tflx(Le lien s’ouvre dans une nouvelle fenêtre)) et le fichier de classeur complet Tableau Desktop (Hospital Beds.twbx(Le lien s’ouvre dans une nouvelle fenêtre)).

Ressources : besoin d’une formation supplémentaire? Suivre une formation en personne(Le lien s’ouvre dans une nouvelle fenêtre). Vous voulez en savoir plus sur les fonctionnalités que nous avons traitées? Consultez les autres rubriques dans l’aide en ligne de Tableau Prep. Vous recherchez des ressources supplémentaires? Le billet de blogue Master Tableau Prep with this list of learning resources(Le lien s’ouvre dans une nouvelle fenêtre) est là pour vous aider.

Merci de vos commentaires!Votre commentaire s été envoyé avec succès. Merci!