Uso de las camas de los hospitales con Tableau Prep
Si un hospital alcanza su capacidad máxima es un problema, pero también lo es la superabundancia de recursos. Entender las camas de un hospital como un recurso es fundamental. Sin embargo, los datos se suelen almacenar desde la perspectiva de los pacientes. ¿Cómo se pueden obtener datos que reflejen el momento en que los pacientes están en las camas y determinar el uso de este recurso?
Nota: para completar las tareas de estos tutoriales, es necesario que tenga instalado Tableau Prep y, de manera opcional, Tableau Desktop:
Para instalar Tableau Prep y Tableau Desktop, consulte la Guía de implementación de Tableau Desktop y Tableau Prep(El enlace se abre en una ventana nueva). También puede descargar las versiones de prueba gratuitas de Tableau Prep(El enlace se abre en una ventana nueva) y Tableau Desktop(El enlace se abre en una ventana nueva).
También tendrá que descargar tres archivos de datos. Le recomendamos que los guarde en la carpeta Mi Repositorio de Tableau Prep > Fuentes de datos.
- Beds.xlsx(El enlace se abre en una ventana nueva)
- Hours.xlsx(El enlace se abre en una ventana nueva)
- Patient Beds.xlsx(El enlace se abre en una ventana nueva)
Los datos
Realizamos un seguimiento de los pacientes que estaban en alguna de nuestras cuatro camas, A, B, C y D, el momento en que empezaron a estarlo y el que se fueron. El aspecto de los datos es similar a este:
Análisis previo
Si incluimos estos datos en Tableau Desktop, podemos crear un gráfico de Gantt para mostrar el momento en que los pacientes están en las camas.
Este elemento visual es muy útil. Se puede observar que tan solo hay unos pequeños huecos en el uso de las camas A y B, pero la cama C se usa muy poco. El paciente de la cama D sigue en ella, pero podemos realizar algunos cálculos para analizar su ocupación. Así, obtenemos un resumen visual del uso que se les da a las camas.
Sin embargo, ¿qué ocurriría si quisiéramos hacer un recuento de las horas durante las que ha estado vacía una cama? ¿O bien si comparamos el tiempo que las camas han estado disponibles antes y después de que se implantara una nueva directiva? No hay ninguna forma sencilla de hacerlo de la forma en que están estructurados actualmente los datos.
Estructura de datos deseada
Al crear varios conjuntos de datos muy básicos y combinarlos en Tableau Prep, podemos modificar ese conjunto de datos en un formulario con el que podremos llevar a cabo un análisis más detallado y crear visualizaciones todavía más útiles.
Antes de pasar a Tableau Prep, vamos a volver atrás y a pensar qué necesitamos crear para responder a la siguiente pregunta: "¿Cuántas horas ha estado vacía cada cama?"
Tenemos que ser capaces de analizar cada cama durante cada hora y saber si había algún paciente en ella o no. Ahora mismo, los datos hacen referencia únicamente a los momentos en que un paciente ha estado en la cama, pero Tableau no tiene ninguna información sobre las horas en que ha estado vacía.
Para crear esa matriz completa de todas las camas y horas, crearemos dos nuevos conjuntos de datos. Uno es simplemente una lista de camas (A, B, C y D) y el otro una de horas (1, 2, 3, …, 23, 24). Al llevar a cabo una unión cruzada (unir todas las filas de un conjunto de datos con las del otro), conseguiremos todas las combinaciones posibles de camas y horas.
El aspecto del conjunto de datos Beds.xlsx es similar a este: | El aspecto del conjunto de datos Hours.xlsx es similar a este: | Y el resultado de la unión cruzada sería algo así: |
Lo siguiente que debemos hacer es incluir la información de Camas de pacientes y etiquetar cada combinación de cama-hora mediante la indicación de si había un paciente concreto o no. Así, obtenemos un conjunto de datos en el que hay una fila para cada cama-hora y la información sobre si el paciente estaba en la cama, el número de horas, el momento en que empezó a estar allí y cuándo salió. Los valores nulos indican que la cama no estaba ocupada.
Al estructurar los datos de esta manera, podemos llevar a cabo un análisis como este, con el que podemos examinar qué camas no estaban ocupadas de una forma tan sencilla a como lo hacemos con aquellas en las que había pacientes.
Restructuración de los datos
¿Cómo podemos conseguir eso con Tableau Prep? Construiremos el flujo en dos partes, primero crearemos la matriz de horas y camas y, luego, la combinaremos con la de los datos de las camas en las que hay pacientes. Asegúrese de que ha descargado los tres archivos Excel (Beds.xlsx, Hours.xlsx y Patient Beds.xlsx) para poder seguir.
Matriz de horas y camas
Primeros, conectaremos con el archivo Beds.xlsx.
Abra Tableau Prep.
En la pantalla de inicio, haga clic en Conectar a datos.
En el panel Conexiones, haga clic en Microsoft Excel. Vaya a la ubicación en que guardó el archivo Beds.xlsx y haga clic en Abrir.
La hoja Camas debe ir automáticamente al panel de flujo.
Consejo: para obtener más información sobre la conexión a los datos, consulte Conectarse a los datos(El enlace se abre en una ventana nueva).
A continuación, tenemos que crear un campo que podamos usar para llevar a cabo la unión cruzada con el conjunto de datos de Horas. Añadiremos un cálculo que sea simplemente el valor 1.
En el panel de flujo, seleccione Camas y haga clic en el Paso de limpieza recomendado.
Tras haber añadido el paso de limpieza, aparecerá el panel de perfil. Haga clic en Crear campo calculado en la barra de tareas.
Asigne un nombre al campo de unión cruzada e introduzca el valor 1.
La cuadrícula de datos se debe actualizar y en ella debe aparecer el estado actual de los datos.
Ahora repetiremos el proceso con el conjunto de datos Horas.
En el panel Conexiones, haga clic en el botón Añadir conexión para añadir otra conexión de datos.
Elija Microsoft Excel y, luego, seleccione el archivo Hours.xlsx y haga clic en Abrir.
En el panel de flujo, seleccione Horas y haga clic en el Paso de limpieza para añadirlo al flujo.
En la barra de tareas del panel de perfil, cree un campo calculado que se llame Unión cruzada e introduzca el valor 1.
Ahora los dos conjuntos de datos comparten un campo, Unión cruzada, y se pueden unir.
Una los dos pasos de limpieza. Para ello, arrastre Limpieza 2 a Limpieza 1 y suéltelos en la opción Unir columnas.
En la opción Unir perfil que aparece debajo, deberían rellenarse automáticamente las configuraciones de las uniones.
Como hemos llamado a ambos archivos Unión cruzada, Tableau Prep los identifica automáticamente como el campo compartido y crea las cláusulas de unión de columnas aplicadas adecuadas.
El tipo de unión predeterminado es interno, que es el que queremos.
Esta unión de columnas hará que todas las columnas de Horas coincidan con las de Camas, como se puede observar en la cuadrícula Datos.
A. Cláusula de unión
B. Tipo de unión
C. Resultados de la cuadrícula de datos
Consejo: para obtener más información sobre las uniones, consulte Unir columnas de datos(El enlace se abre en una ventana nueva).
Ya no necesitamos los campos de unión cruzada, por lo que podemos eliminarlos.
En el panel de flujo, seleccione Unión 1, haga clic en el icono del signo más y elija Añadir paso de limpieza.
Seleccione los campos Unión cruzada 1 y Unión cruzada, y haga clic en Eliminar campos.
Haga doble clic en la etiqueta Limpieza 3 y cambie el nombre de ese paso a Matriz de horas y camas.
Ahora tenemos el conjunto de datos Matriz de horas y camas en el que se incluyen todas las camas y horas, y hemos terminado la primera parte del proceso de creación de nuestro conjunto de datos.
Uso de las camas por parte de los pacientes
La segunda parte consiste en añadir el uso de las camas por parte del paciente. Para empezar, conectaremos con los datos.
En el panel Conexiones, haga clic en el botón Añadir conexión para añadir otra conexión de datos.
Elija Microsoft Excel y, luego, seleccione el archivo Patient Beds.xlsx y haga clic en Abrir.
En el panel Flujo , seleccione Camas de pacientes y luego haga clic en el Paso de limpieza sugerido para agregarlo al flujo.
Como el archivo Matriz de horas y camas se basa en horas, pero Camas de pacientes se basa en el tiempo real, tenemos que quitar las horas de inicio y finalización del segundo. Además, en cuanto a la hora de finalización, queremos asegurarnos de que si un paciente sigue en la cama al final del día (a medianoche, a las 0:00), indiquemos que la cama está ocupada, aunque no haya hora de finalización en el conjunto de datos. Añadiremos un campo calculado en este nuevo paso.
En la barra de tareas, haga clic en Crear campo calculado.
Asigne al campo el nombre Hora de inicio. Para llevar a cabo el cálculo, introduzca
DATEPART('hour',[Start Time])
.Cree otro campo calculado con el nombre Hora de finalización. Para llevar a cabo el cálculo, introduzca
IFNULL(DATEPART('hour',[End Time]), 24)
.
Así, se selecciona la hora de inicio y se elimina. Por lo tanto, "1/1/18 9:35" pasa a ser simplemente "9".
La parte DATEPART
selecciona la hora de la de finalización. La parte IFNULL
asignará una hora de finalización de 0:00 (medianoche) en todas las horas de finalización que falten.
Ahora estamos preparados para unir el uso de las camas por parte del paciente a la Matriz de horas y camas. Esta unión es un poco más compleja que las que hemos realizado previamente. Una unión interna solo devolvería valores presentes en ambos conjuntos de datos. Como queremos asegurarnos de que mantenemos todos los espacios de cama-hora, sin importar si había un paciente en la cama o no, tendremos que llevar a cabo una unión de columnas izquierda. Esta acción tendrá como resultado que haya muchos valores nulos, pero debe ser así.
También tenemos que ajustar el momento en que un paciente (o pacientes) ocupa un espacio cama-hora. Además de ajustar la cama en la que está el paciente, debemos tener en cuenta el tiempo. El conjunto de datos Matriz de horas y camas solo tiene un campo de hora y el conjunto de datos Camas de pacientes está formado por Hora de inicio y Hora de finalización. Usaremos la lógica básica para determinar si se debe asignar un paciente a un espacio de cama-hora determinado: se considera que un paciente está en una cama si la hora de inicio es inferior a o igual a (<=) el espacio de cama-hora Y la hora de finalización es superior o igual a (>=) el espacio de cama-hora.
Por lo tanto, se necesitan tres cláusulas de unión de columnas para conseguir que estos dos conjuntos de datos coincidan de una manera adecuada.
Una el paso Limpieza 3 con el paso Matriz de horas y camas.
En la zona Cláusulas de unión de columnas aplicadas, el valor predeterminado debe ser Hora = Hora de finalización. Haga clic en la cláusula de unión de columnas para cambiar el operador de "=" a "<=".
Haga clic en el botón más de la esquina superior derecha de la zona Cláusulas de unión de columnas aplicadas para añadir otra cláusula de unión de columnas. Configúrela para que sea Hora >= Hora de inicio.
Añada una tercera cláusula de unión de columnas para Cama = Cama de hospital.
En la sección Tipo de unión de columnas, haga clic en la zona no sombreada del gráfico que se encuentra junto a Matriz de horas y camas para cambiar el tipo de unión a una unión izquierda.
Nota: Si arrastra Matriz de horas y camas a Limpieza 3 en lugar de a la inversa, los resultados deseados se pueden obtener si se usa una unión derecha en lugar de izquierda. El orden de arrastre de los pasos influye en la orientación de la unión de columnas. Las cláusulas de unión de columnas también se realizarán en orden inverso. Asegúrese de mantener la lógica correcta de comparación de horas.
Ahora los datos están unidos, pero hay que limpiar varios objetos de una unión y asegurarse de que los campos estén ordenados. Ya no necesitamos los campos de Hora de inicio y Hora de finalización. Cama de hospital y Cama también son redundantes. Finalmente, un valor nulo en el campo Paciente sí que significa que la cama está vacía.
En el panel de flujo, añada un paso de limpieza para que podamos ordenar los datos unidos.
Pulse la tecla Ctrl y haga clic (cmd+clic en Mac) para realizar una selección múltiple de los campos Hora de finalización, Hora de inicio y Cama de hospital. Luego, haga clic en Eliminar campos en la barra de herramientas.
En la tarjeta de perfil del campo Paciente, haga doble clic en el valor nulo y escriba Vacía.
Ahora tenemos una estructura de datos con una fila para cada cama-hora y si había un paciente en la cama durante esa hora, tenemos también la información sobre este. Lo que queda por hacer es añadir un paso de salida y generar el propio conjunto de datos.
En el panel de flujo, seleccione Limpieza 4, haga clic en el icono del signo más y seleccione Añadir salida.
En el panel de salida, cambie el tipo de salida a .csv y haga clic en Examinar.
Introduzca Matriz de cama, hora y paciente como nombre y elija la ubicación que desee antes de hacer clic en Aceptar para guardar.
Haga clic en el botón Ejecutar flujo de la parte inferior del panel para generar su salida. Haga clic en Listo en el cuadro de diálogo de estado para cerrarlo.
Consejo: para obtener más información sobre las salidas y la ejecución de un flujo, consulte Guardar y compartir el trabajo(El enlace se abre en una ventana nueva).
El flujo final debe tener este aspecto:
Análisis en Tableau Desktop
Para instalar Tableau Desktop antes de seguir con este tutorial, puede descargar la versión de prueba gratuita.
Ahora que el conjunto de datos tiene la estructura que queríamos, podemos realizar un análisis más detallado que con los datos originales.
Abra Tableau Desktop. En el panel Conectar, seleccione Archivo de texto, vaya al archivo Bed Hour Patient Matrix.csv y haga clic en Abrir.
En la pestaña Fuente de datos, los datos deberían aparecer en el lienzo de forma predeterminada. Haga clic en Hoja 1.
En el panel Datos, arrastre Hora sobre la línea que separa Medidas y Dimensiones para que tenga una dimensión discreta.
Arrastre Cama al estante Filas y Hora al estante Columnas.
Arrastre Paciente al estante Color.
El formato es opcional, pero puede ayudar a que la representación visual sea más comprensible.
Haga clic en el estante Color y seleccione Editar colores.
En la zona de la izquierda, seleccione Vacía. En el menú desplegable de la derecha, elija la paleta de colores Grises piedra.
Seleccione el cuarto gris, el más claro, y haga clic en Aceptar.
Haga clic de nuevo en el estante Color y, luego, en el menú desplegable Borde. Elija la segunda opción de gris del extremo derecho.
En la barra de herramientas, en el menú desplegable Tamaño, cambie de Estándar a Ajustar anchura.
Haga clic en el menú Formato y, luego, en Bordes.
En Divisor de filas, haga clic en el menú desplegable Panel y elija un gris muy claro.
Ajuste el control deslizante Nivel en la segunda marca de graduación.
Repita la acción en Divisor de columnas. Establezca que el color del panel sea gris claro y coloque el nivel en la segunda marca de graduación.
Haga doble clic en la pestaña Hoja en la parte inferior y cámbiele el nombre a Uso de las camas por horas.
Esta vista nos permite comprobar rápidamente el momento en que una cama determinada ha estado ocupada o disponible.
Sin embargo, podemos ir más allá y contar el número de horas que ha estado vacía cada cama.
Haga clic en el icono de la pestaña Nueva hoja en la parte inferior para abrir una hoja vacía.
Arrastre Paciente a Filas.
Arrastre Hora a Columnas. Haga clic con el botón derecho del ratón en el fragmento Hora para abrir el menú. Elija Medida > Conteo.
Arrastre otra copia del campo Paciente desde el panel Datos al estante Color.
Haga clic con el botón derecho del ratón en el eje y seleccione Editar eje. Cambie el título a Horas y cierre el cuadro de diálogo.
Cambie el nombre de la pestaña de la hoja a Horas de cama por paciente.
Con esta vista podemos identificar el número de horas que las camas han estado vacías, acción que no podíamos hacer con el conjunto de datos original. ¿Qué otros gráficos y dashboards puede crear? Pruebe ahora que sus datos tienen la estructura adecuada.
Resumen y recursos
Para crear esta estructura de datos con Tableau Prep, hemos tenido que llevar a cabo las siguientes acciones:
Crear un conjunto de datos para cada aspecto que queríamos analizar; en este caso, Camas y Horas.
Cree una unión cruzada de columnas para formar el conjunto de datos Matriz de horas y camas con todas las combinaciones posibles de camas y horas.
Una el conjunto Matriz de horas y camas con los datos de Camas de pacientes y compruebe que la unión mantiene todos los espacios de horas de cama y que en las cláusulas de unión coinciden de manera adecuada los datos de las camas de los pacientes con los espacios de cama-hora.
Hemos usado los siguientes cálculos para crear campos que pudiéramos unir. El segundo y el tercero nos sirvieron para quitar la información sobre las horas de los campos de fecha y hora originales.
Unión cruzada =
1
Así se asigna simplemente el valor 1 a todas las filas.
Hora de inicio =
DATEPART('hour',[Start Time])
Así, se selecciona la hora de inicio y se elimina. Por lo tanto, "1/1/18 9:35" pasa a ser simplemente "9".
Hora de finalización =
IFNULL(DATEPART('hour',[End Time]), 24)
Podemos usar
DATEPART('hour',[End Time])
, como hemos hecho con Hora de inicio. Así, se selecciona la hora de finalización y se elimina. Por lo tanto, "1/1/18 16:34" pasa a ser simplemente "16".Sin embargo, queremos indicar que la cama del paciente que sigue ocupada (no hay hora de finalización) está en uso, no vacía. Para hacerlo, asignaremos una hora de finalización de 0:00 (medianoche) en todas las horas de finalización que falten con la función
IFNULL
. Si el primer argumentoDATEPART('hour',[End Time])
es nulo, el cálculo volverá a ser "0:00".
Nota: ¿Quiere comprobar lo que ha hecho? Descargue el archivo de flujo empaquetado de Tableau Prep (Hospital Beds.tflx(El enlace se abre en una ventana nueva)) y el archivo de libro de trabajo empaquetado de Tableau Desktop (Hospital Beds.twbx(El enlace se abre en una ventana nueva)).
Recursos: ¿Necesita más formación? Realice un curso de formación presencial(El enlace se abre en una ventana nueva). ¿Tiene curiosidad por las funcionalidades que se tratan? Consulte el resto de los temas de la ayuda en línea de Tableau Prep. ¿Está buscando recursos adicionales? La publicación Master Tableau Prep with this list of learning resources(El enlace se abre en una ventana nueva) del blog es lo que necesita.