Tema 1. Exploración Analítica de Datos

El presente apartado tiene como propósito realizar una exploración inicial de la base de datos de citas médicas. La exploración se centra en reconocer la estructura de los datos, identificar las variables disponibles, revisar los tipos de información, verificar la presencia de datos faltantes y realizar visualizaciones exploratorias.

1.1. Importación y reconocimiento de la base de datos

# Cargar paquetes
library(readxl)
library(tidyverse)
library(plotly)

# Importar el archivo Excel
appointment <- read_excel(
  "Appointment . Proyecto.xlsx",
  sheet = "Appointment (1)"
)

# Mostrar las primeras filas
head(appointment)
# Mostrar los archivos disponibles en la carpeta de trabajo
list.files()
## [1] "Analitica de datos.Rproj"              
## [2] "Appointment . Proyecto.xlsx"           
## [3] "appointments final.xlsx"               
## [4] "EncuestaBrfss2020-selected-columns.csv"
## [5] "Practica de R mack.Rmd"                
## [6] "R-Marckdown--clase.html"               
## [7] "R-Marckdown--clase.Rmd"                
## [8] "R Marckdown- clase.Rmd"                
## [9] "RD202401.csv.crdownload"

Appointment . Proyecto.xlsx

1.2. Identificación del número de filas y columnas

# Número de filas
nrow(appointment)
## [1] 1000
# Número de columnas
ncol(appointment)
## [1] 5
# Dimensiones completas
dim(appointment)
## [1] 1000    5

1.3. Identificación de las variables

# Mostrar los nombres de las variables
names(appointment)
## [1] "AppointmentID" "Date"          "Time"          "PatientID"    
## [5] "DoctorID"

Las variables disponibles son:

  • AppointmentID: identificador de cada cita.
  • Date: fecha asociada al registro de la cita.
  • Time: información temporal registrada en la base.
  • PatientID: identificador del paciente.
  • DoctorID: identificador del médico.

1.4. Reconocimiento de los tipos de variables

# Revisar la estructura de la base
str(appointment)
## tibble [1,000 × 5] (S3: tbl_df/tbl/data.frame)
##  $ AppointmentID: num [1:1000] 639 404 281 628 889 551 769 385 813 986 ...
##  $ Date         : POSIXct[1:1000], format: "2022-04-08" "2023-04-10" ...
##  $ Time         : chr [1:1000] "2023-12-23T14:33:46.406Z" "2023-12-23T14:33:46.407Z" "2023-12-23T14:33:46.407Z" "2023-12-23T14:33:46.407Z" ...
##  $ PatientID    : num [1:1000] 109 823 465 443 852 160 886 480 634 898 ...
##  $ DoctorID     : num [1:1000] 462 774 226 656 262 748 580 438 662 653 ...
# Tipo de cada variable
sapply(appointment, class)
## $AppointmentID
## [1] "numeric"
## 
## $Date
## [1] "POSIXct" "POSIXt" 
## 
## $Time
## [1] "character"
## 
## $PatientID
## [1] "numeric"
## 
## $DoctorID
## [1] "numeric"

1.5. Exploración inicial de los registros

# Primeros 10 registros
head(appointment, 10)
# Últimos 10 registros
tail(appointment, 10)

1.6. Reconocimiento de valores diferentes

# Cantidad de valores diferentes por variable
sapply(appointment, n_distinct)
## AppointmentID          Date          Time     PatientID      DoctorID 
##           602           721            12           610           611

1.7. Revisión de datos faltantes

# Cantidad de datos faltantes por variable
colSums(is.na(appointment))
## AppointmentID          Date          Time     PatientID      DoctorID 
##             0             0             0             0             0
# Comprobar si existe algún dato faltante
any(is.na(appointment))
## [1] FALSE

1.8. Preparación básica de las fechas

# Convertir Date a formato de fecha
appointment$Date <- as.Date(appointment$Date)

# Revisar la variable
class(appointment$Date)
## [1] "Date"
# Fecha más antigua registrada
min(appointment$Date)
## [1] "2020-01-01"
# Fecha más reciente registrada
max(appointment$Date)
## [1] "2023-12-31"

1.9. Visualización exploratoria mediante gráficos interactivos

Se utilizará el paquete plotly, que permite generar gráficos interactivos en el documento HTML de R Markdown.

1.9.1. Registros de citas según fecha

# Contar registros por fecha
citas_fecha <- appointment %>%
  count(Date)

# Crear gráfico interactivo
plot_ly(
  data = citas_fecha,
  x = ~Date,
  y = ~n,
  type = "scatter",
  mode = "lines+markers"
) %>%
  layout(
    title = "Registros de citas según fecha",
    xaxis = list(title = "Fecha"),
    yaxis = list(title = "Número de registros")
  )

El gráfico permite observar visualmente cómo se distribuyen los registros de citas a través de las diferentes fechas disponibles en la base de datos.

1.9.2. Registros de citas por DoctorID

# Contar registros por médico
citas_doctor <- appointment %>%
  count(DoctorID, sort = TRUE)

# Seleccionar los 10 DoctorID con mayor cantidad de registros
citas_doctor_10 <- citas_doctor %>%
  slice_head(n = 10)

# Crear gráfico interactivo
plot_ly(
  data = citas_doctor_10,
  x = ~DoctorID,
  y = ~n,
  type = "bar",
  text = ~n,
  textposition = "auto"
) %>%
  layout(
    title = "Registros de citas por DoctorID",
    xaxis = list(title = "DoctorID"),
    yaxis = list(title = "Número de registros")
  )

El gráfico permite observar cuáles son los DoctorID que aparecen con mayor frecuencia entre los registros de citas. Esta visualización permite reconocer cómo están distribuidos los registros entre los identificadores de los médicos, sin interpretar estos valores como indicadores de productividad o desempeño.

1.9.3. Registros asociados a PatientID

# Contar registros por paciente
citas_paciente <- appointment %>%
  count(PatientID, sort = TRUE)

# Seleccionar los 10 PatientID con mayor cantidad de registros
citas_paciente_10 <- citas_paciente %>%
  slice_head(n = 10)

# Crear gráfico interactivo
plot_ly(
  data = citas_paciente_10,
  x = ~PatientID,
  y = ~n,
  type = "bar",
  text = ~n,
  textposition = "auto"
) %>%
  layout(
    title = "Registros asociados a PatientID",
    xaxis = list(title = "PatientID"),
    yaxis = list(title = "Número de registros")
  )

El gráfico permite identificar visualmente los PatientID que presentan una mayor cantidad de registros dentro de la base de datos.