# Instalar y cargar el paquete necesario
#install.packages("readxl")
#install.packages("dplyr")
library(readxl)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
  1. Actividad 2.1.1. Identidad de Pacientes: (Número de Cédula, Nombres del paciente, Apellidos del paciente, Edad, Sexo, Domicilio, Ciudad, Departamento, Número de teléfono, Número de historial clínico, Fumante(S/N)) 2.1.2. Proceso de Ingreso a la entidad: (Procedencia, Fecha de ingreso, Número de piso, Número de cama, Causa de Ingreso)
# Instalar y cargar el paquete openxlsx
# install.packages("openxlsx")
library(openxlsx)
# Crear una base de datos de historias clínicas
# Crear una base de datos de historias clínicas
historias_clinicas <- data.frame(
  Numero_de_paciente = 1:20,
  Numero_de_Cedula = integer(20),
  Nombres_del_paciente = character(20),
  Apellidos_del_paciente = character(20),
  Edad = integer(20),
  Sexo = character(20),
  Domicilio = character(20),
  Ciudad = character(20),
  Departamento = character(20),
  Numero_de_telefono = character(20),
  Numero_de_historial_clinico = integer(20),
  Fumante = character(20),
  Procedencia = character(20),
  Fecha_Ingreso = as.Date(character(20)),
  Num_Piso = integer(20),
  Num_Cama = integer(20),
  Causa_Ingreso = character(20)
)

# Llenar la base de datos con datos ficticios
historias_clinicas$Numero_de_Cedula <- sample(1000000:9999999, 20)
historias_clinicas$Nombres_del_paciente <- c("Juan", "Maria", "Luis", "Ana", "Carlos", "Sofia", "Pedro", "Laura", "Raul", "Elena", "Diego", "Isabel", "Javier", "Carmen", "Fernando", "Marta", "Gabriel", "Silvia", "Hector", "Patricia")
historias_clinicas$Apellidos_del_paciente <- c("Gomez", "Lopez", "Martinez", "Rodriguez", "Perez", "Fernandez", "Sanchez", "Gonzalez", "Ramirez", "Diaz", "Torres", "Ruiz", "Ortega", "Vargas", "Castro", "Jimenez", "Molina", "Hernandez", "Rios", "Garcia")
historias_clinicas$Edad <- sample(18:80, 20)
historias_clinicas$Sexo <- sample(c("M", "F"), 20, replace = TRUE)
historias_clinicas$Domicilio <- c("Calle 123", "Avenida 456", "Carrera 789", "Calle 1011", "Avenida 1213", "Carrera 1415", "Calle 1617", "Avenida 1819", "Carrera 2021", "Calle 2223", "Avenida 2425", "Carrera 2627", "Calle 2829", "Avenida 3031", "Carrera 3233", "Calle 3435", "Avenida 3637", "Carrera 3839", "Calle 4041", "Avenida 4243")
historias_clinicas$Ciudad <- c("Bogota", "Medellin", "Cali", "Barranquilla", "Cartagena", "Bucaramanga", "Pereira", "Cucuta", "Villavicencio", "Santa Marta", "Ibague", "Pasto", "Manizales", "Neiva", "Valledupar", "Armenia", "Popayan", "Sincelejo", "Monteria", "Tunja")
historias_clinicas$Departamento <- c("Cundinamarca", "Antioquia", "Valle del Cauca", "Atlantico", "Bolivar", "Santander", "Risaralda", "Norte de Santander", "Meta", "Magdalena", "Tolima", "Narino", "Caldas", "Huila", "Cesar", "Quindio", "Cauca", "Sucre", "Cordoba", "Boyaca")
historias_clinicas$Numero_de_telefono <- sample(3000000:3999999, 20)
historias_clinicas$Numero_de_historial_clinico <- sample(1000:1999, 20)
historias_clinicas$Fumante <- sample(c("S", "N"), 20, replace = TRUE)
historias_clinicas$Procedencia <- sample(c("Emergencia", "Referido", "Consulta Externa"), 20, replace = TRUE)
historias_clinicas$Fecha_Ingreso <- as.Date(c("2023-01-01", "2023-02-15", "2023-03-10", "2023-04-20", "2023-05-05", "2023-06-08", "2023-07-12", "2023-08-24", "2023-09-30", "2023-10-15", "2023-11-05", "2023-12-20", "2024-01-02", "2024-02-18", "2024-03-11", "2024-04-22", "2024-05-08", "2024-06-10", "2024-07-22", "2024-08-30"))
historias_clinicas$Num_Piso <- sample(1:10, 20, replace = TRUE)
historias_clinicas$Num_Cama <- sample(1:50, 20, replace = TRUE)
historias_clinicas$Causa_Ingreso <- c("Fiebre", "Fractura de brazo", "Dolor abdominal", "Neumonía", "Infarto de miocardio", "Gripe", "Dolor de cabeza", "Cirugía programada", "Dolor lumbar", "Gastroenteritis", "Accidente automovilístico", "Infección respiratoria", "Dolor de espalda", "Intoxicación alimentaria", "Problemas de visión", "Apendicitis", "Dolor de garganta", "Problemas cardíacos", "Problemas respiratorios", "Gripe")

# Mostrar la base de datos
print(historias_clinicas)
##    Numero_de_paciente Numero_de_Cedula Nombres_del_paciente
## 1                   1          8221271                 Juan
## 2                   2          9994724                Maria
## 3                   3          3261663                 Luis
## 4                   4          5843222                  Ana
## 5                   5          2376405               Carlos
## 6                   6          6722213                Sofia
## 7                   7          2635351                Pedro
## 8                   8          7752429                Laura
## 9                   9          8378300                 Raul
## 10                 10          3111181                Elena
## 11                 11          4821647                Diego
## 12                 12          4167691               Isabel
## 13                 13          4053792               Javier
## 14                 14          4936793               Carmen
## 15                 15          4130829             Fernando
## 16                 16          9907997                Marta
## 17                 17          5161125              Gabriel
## 18                 18          2317516               Silvia
## 19                 19          9605388               Hector
## 20                 20          5711154             Patricia
##    Apellidos_del_paciente Edad Sexo    Domicilio        Ciudad
## 1                   Gomez   24    F    Calle 123        Bogota
## 2                   Lopez   73    M  Avenida 456      Medellin
## 3                Martinez   26    M  Carrera 789          Cali
## 4               Rodriguez   42    M   Calle 1011  Barranquilla
## 5                   Perez   74    F Avenida 1213     Cartagena
## 6               Fernandez   70    M Carrera 1415   Bucaramanga
## 7                 Sanchez   33    M   Calle 1617       Pereira
## 8                Gonzalez   44    F Avenida 1819        Cucuta
## 9                 Ramirez   38    F Carrera 2021 Villavicencio
## 10                   Diaz   22    M   Calle 2223   Santa Marta
## 11                 Torres   31    F Avenida 2425        Ibague
## 12                   Ruiz   64    M Carrera 2627         Pasto
## 13                 Ortega   39    F   Calle 2829     Manizales
## 14                 Vargas   46    M Avenida 3031         Neiva
## 15                 Castro   50    M Carrera 3233    Valledupar
## 16                Jimenez   20    F   Calle 3435       Armenia
## 17                 Molina   56    M Avenida 3637       Popayan
## 18              Hernandez   23    F Carrera 3839     Sincelejo
## 19                   Rios   75    M   Calle 4041      Monteria
## 20                 Garcia   78    M Avenida 4243         Tunja
##          Departamento Numero_de_telefono Numero_de_historial_clinico Fumante
## 1        Cundinamarca            3110509                        1025       N
## 2           Antioquia            3351997                        1543       N
## 3     Valle del Cauca            3714862                        1962       S
## 4           Atlantico            3560922                        1616       N
## 5             Bolivar            3516513                        1568       N
## 6           Santander            3830723                        1987       S
## 7           Risaralda            3767779                        1955       N
## 8  Norte de Santander            3278741                        1317       N
## 9                Meta            3738602                        1015       N
## 10          Magdalena            3386828                        1265       S
## 11             Tolima            3513789                        1628       S
## 12             Narino            3405414                        1210       S
## 13             Caldas            3289137                        1941       N
## 14              Huila            3042092                        1174       N
## 15              Cesar            3162737                        1744       S
## 16            Quindio            3238548                        1589       S
## 17              Cauca            3065148                        1321       S
## 18              Sucre            3315858                        1846       S
## 19            Cordoba            3999615                        1070       N
## 20             Boyaca            3841727                        1959       S
##         Procedencia Fecha_Ingreso Num_Piso Num_Cama             Causa_Ingreso
## 1  Consulta Externa    2023-01-01        1       41                    Fiebre
## 2        Emergencia    2023-02-15        9       31         Fractura de brazo
## 3        Emergencia    2023-03-10        5       18           Dolor abdominal
## 4          Referido    2023-04-20        3       12                  Neumonía
## 5  Consulta Externa    2023-05-05        6        9      Infarto de miocardio
## 6  Consulta Externa    2023-06-08       10       42                     Gripe
## 7  Consulta Externa    2023-07-12        8       27           Dolor de cabeza
## 8  Consulta Externa    2023-08-24       10       30        Cirugía programada
## 9          Referido    2023-09-30        1       49              Dolor lumbar
## 10         Referido    2023-10-15        5       36           Gastroenteritis
## 11 Consulta Externa    2023-11-05        3        9 Accidente automovilístico
## 12 Consulta Externa    2023-12-20        1       10    Infección respiratoria
## 13       Emergencia    2024-01-02        7       32          Dolor de espalda
## 14         Referido    2024-02-18        4       27  Intoxicación alimentaria
## 15 Consulta Externa    2024-03-11        8       23       Problemas de visión
## 16         Referido    2024-04-22        4        8               Apendicitis
## 17       Emergencia    2024-05-08        5       42         Dolor de garganta
## 18         Referido    2024-06-10        2       43       Problemas cardíacos
## 19 Consulta Externa    2024-07-22        3       18   Problemas respiratorios
## 20         Referido    2024-08-30       10       39                     Gripe

2.2. Por medio de informe gráfico clasifique por: a) Pacientes mujeres y Hombres

#2.2.
# a) # Instalar y cargar el paquete ggplot2 si no está instalado
if (!requireNamespace("ggplot2", quietly = TRUE)) {
  install.packages("ggplot2")
}
library(ggplot2)

# Contar el número de hombres y mujeres
conteo_sexo <- table(historias_clinicas$Sexo)

# Crear un gráfico de barras
grafico_sexo <- ggplot(data = data.frame(Sexo = names(conteo_sexo), Cantidad = as.numeric(conteo_sexo)), aes(x = Sexo, y = Cantidad, fill = Sexo)) +
  geom_bar(stat = "identity") +
  labs(title = "Cantidad de Pacientes por Género",
       x = "Género",
       y = "Cantidad de Pacientes") +
  theme_minimal() +
  scale_fill_manual(values = c("blue", "pink"))  # Personalizar colores si se desea

# Mostrar el gráfico
print(grafico_sexo)

  1. edad y si es fumante o no
#b)
# Establecer el diseño de la disposición de los gráficos
par(mfrow = c(1, 2))

# Crear histograma para no fumantes
hist(historias_clinicas$Edad[historias_clinicas$Fumante == "N"], 
     main = "Edad de No Fumantes",
     xlab = "Edad",
     ylab = "Cantidad de Pacientes",
     col = "darkslategray2")

# Crear histograma para fumantes
hist(historias_clinicas$Edad[historias_clinicas$Fumante == "S"], 
     main = "Edad de Fumantes",
     xlab = "Edad",
     ylab = "Cantidad de Pacientes",
     col = "lightsalmon")

# Instalar y cargar el paquete gridExtra si no está instalado
if (!requireNamespace("gridExtra", quietly = TRUE)) {
  install.packages("gridExtra")
}
library(gridExtra)
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
# Tu código aquí (incluyendo la creación de los gráficos de pastel)

# Calcular la cantidad de hombres y mujeres por edad
conteo_sexo_edad <- table(historias_clinicas$Edad, historias_clinicas$Sexo)

# Convertir la tabla en un data frame
df_sexo_edad <- as.data.frame(conteo_sexo_edad)
names(df_sexo_edad) <- c("Edad", "Sexo", "Cantidad")

# Filtrar para obtener solo los registros de mujeres
df_mujeres <- subset(df_sexo_edad, Sexo == "F")
# Filtrar para obtener solo los registros de hombres
df_hombres <- subset(df_sexo_edad, Sexo == "M")

# Crear el gráfico de pastel para mujeres por edad
grafico_pastel_mujeres <- ggplot(df_mujeres, aes(x = "", y = Cantidad, fill = as.factor(Edad))) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  labs(title = "Distribución de Mujeres por Edad",
       fill = "Edad") +
  theme_void()

# Crear el gráfico de pastel para hombres por edad
grafico_pastel_hombres <- ggplot(df_hombres, aes(x = "", y = Cantidad, fill = as.factor(Edad))) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  labs(title = "Distribución de Hombres por Edad",
       fill = "Edad") +
  theme_void()

# Mostrar los gráficos de pastel lado a lado
grid.arrange(grafico_pastel_mujeres, grafico_pastel_hombres, ncol = 2)

c) Pacientes por piso divididos por sexo

# Instalar y cargar el paquete dplyr
install.packages("dplyr")
## Warning: package 'dplyr' is in use and will not be installed
library(dplyr)

# Calcular la cantidad de pacientes por piso y sexo
conteo_piso_sexo <- table(historias_clinicas$Num_Piso, historias_clinicas$Sexo)

# Convertir la tabla en un data frame
df_piso_sexo <- as.data.frame(conteo_piso_sexo)
names(df_piso_sexo) <- c("Num_Piso", "Sexo", "Cantidad")

# Cargar paquete ggplot2 si no está cargado
if (!requireNamespace("ggplot2", quietly = TRUE)) {
  install.packages("ggplot2")
}
library(ggplot2)

# Crear el gráfico de barras apiladas
grafico_barras_apiladas <- ggplot(df_piso_sexo, aes(x = factor(Num_Piso), y = Cantidad, fill = Sexo)) +
  geom_bar(stat = "identity") +
  labs(title = "Distribución de Pacientes por Piso y Sexo",
       x = "Número de Piso",
       y = "Cantidad de Pacientes",
       fill = "Sexo") +
  theme_minimal()

# Mostrar el gráfico
print(grafico_barras_apiladas)

D)Edad y causa de ingreso

# Encontrar el rango mínimo y máximo de edades en los datos
min_edad <- min(historias_clinicas$Edad)
max_edad <- max(historias_clinicas$Edad)

# Establecer el número de intervalos deseado (ajusta según sea necesario)
num_intervalos <- 10

# Calcular la amplitud del intervalo
amplitud <- ceiling((max_edad - min_edad) / num_intervalos)

# Crear un rango de intervalos basado en la amplitud
intervalos <- seq(min_edad, max_edad + amplitud, by = amplitud)

# Obtener colores únicos para cada causa de ingreso
colores <- rainbow(length(unique(historias_clinicas$Causa_Ingreso)), alpha = 0.5)

# Crear el gráfico de barras con colores personalizados
par(mfrow = c(1, 1))
for (i in 1:length(unique(historias_clinicas$Causa_Ingreso))) {
  hist(
    # Filtrar edades por cada causa de ingreso
    historias_clinicas$Edad[historias_clinicas$Causa_Ingreso == unique(historias_clinicas$Causa_Ingreso)[i]],
    breaks = intervalos,
    main = "Distribución de Edad de Pacientes por Causa de Ingreso",
    xlab = "Edad",
    ylab = "Cantidad de Pacientes",
    col = colores[i],
    border = "white",   # Agregar un borde blanco a las barras
    density = 50,       # Aumentar la densidad de las barras
    xlim = c(min_edad, max_edad),  # Ajustar el rango del eje x
    ylim = c(0, max(table(historias_clinicas$Edad))),  # Ajustar el rango del eje y
    # Agregar histogramas adicionales sin sobrescribir el primero
    add = i > 1
  )
}

# Agregar una leyenda
legend("topright", unique(historias_clinicas$Causa_Ingreso), fill = colores, border = "white")

E) Promedio de edad por género (Mujeres y Hombres)

# Cargar el paquete ggplot2 si no está cargado
if (!requireNamespace("ggplot2", quietly = TRUE)) {
  install.packages("ggplot2")
}
library(ggplot2)

# Calcular el conteo de edades por género
conteo_edades <- aggregate(Edad ~ Sexo, data = historias_clinicas, FUN = length)

# Crear el gráfico de barras
grafico_barras <- ggplot(conteo_edades, aes(x = Sexo, y = Edad, fill = Sexo)) +
  geom_bar(stat = "identity") +
  labs(title = "Distribución de Edades por Género",
       x = "Género",
       y = "Cantidad de Pacientes") +
  theme_minimal()

# Mostrar el gráfico
print(grafico_barras)

F)Datos independientes de 3 pacientes

# Establecer una semilla aleatoria para reproducibilidad
set.seed(123)

# Seleccionar tres filas aleatorias de la base de datos historias_clinicas
datos_independientes <- historias_clinicas[sample(nrow(historias_clinicas), 3), ]

# Mostrar los datos independientes de 3 pacientes
print(datos_independientes)
##    Numero_de_paciente Numero_de_Cedula Nombres_del_paciente
## 15                 15          4130829             Fernando
## 19                 19          9605388               Hector
## 14                 14          4936793               Carmen
##    Apellidos_del_paciente Edad Sexo    Domicilio     Ciudad Departamento
## 15                 Castro   50    M Carrera 3233 Valledupar        Cesar
## 19                   Rios   75    M   Calle 4041   Monteria      Cordoba
## 14                 Vargas   46    M Avenida 3031      Neiva        Huila
##    Numero_de_telefono Numero_de_historial_clinico Fumante      Procedencia
## 15            3162737                        1744       S Consulta Externa
## 19            3999615                        1070       N Consulta Externa
## 14            3042092                        1174       N         Referido
##    Fecha_Ingreso Num_Piso Num_Cama            Causa_Ingreso
## 15    2024-03-11        8       23      Problemas de visión
## 19    2024-07-22        3       18  Problemas respiratorios
## 14    2024-02-18        4       27 Intoxicación alimentaria

G)Datos de 3 pacientes por identidad.

# Obtener tres números de paciente únicos aleatorios
pacientes_aleatorios <- sample(unique(historias_clinicas$Numero_de_paciente), 3)

# Filtrar los datos de los tres pacientes por los números de paciente seleccionados
datos_por_paciente <- historias_clinicas[historias_clinicas$Numero_de_paciente %in% pacientes_aleatorios, ]

# Mostrar los datos de los tres pacientes por número de paciente
print(datos_por_paciente)
##    Numero_de_paciente Numero_de_Cedula Nombres_del_paciente
## 3                   3          3261663                 Luis
## 10                 10          3111181                Elena
## 18                 18          2317516               Silvia
##    Apellidos_del_paciente Edad Sexo    Domicilio      Ciudad    Departamento
## 3                Martinez   26    M  Carrera 789        Cali Valle del Cauca
## 10                   Diaz   22    M   Calle 2223 Santa Marta       Magdalena
## 18              Hernandez   23    F Carrera 3839   Sincelejo           Sucre
##    Numero_de_telefono Numero_de_historial_clinico Fumante Procedencia
## 3             3714862                        1962       S  Emergencia
## 10            3386828                        1265       S    Referido
## 18            3315858                        1846       S    Referido
##    Fecha_Ingreso Num_Piso Num_Cama       Causa_Ingreso
## 3     2023-03-10        5       18     Dolor abdominal
## 10    2023-10-15        5       36     Gastroenteritis
## 18    2024-06-10        2       43 Problemas cardíacos
# Cargar el paquete viridis si no está cargado
if (!requireNamespace("viridis", quietly = TRUE)) {
  install.packages("viridis")
}
library(viridis)
## Loading required package: viridisLite
# Obtener la lista de causas de ingreso y contar su frecuencia
causas_ingreso <- table(historias_clinicas$Causa_Ingreso)

# Ordenar las causas de ingreso por frecuencia, de mayor a menor
causas_ingreso_ordenadas <- sort(causas_ingreso, decreasing = TRUE)

# Obtener una paleta de colores de viridis
colores <- viridis_pal()(length(causas_ingreso_ordenadas))

# Mostrar la lista de causas de ingreso y su frecuencia
print(causas_ingreso_ordenadas)
## 
##                     Gripe Accidente automovilístico               Apendicitis 
##                         2                         1                         1 
##        Cirugía programada           Dolor abdominal           Dolor de cabeza 
##                         1                         1                         1 
##          Dolor de espalda         Dolor de garganta              Dolor lumbar 
##                         1                         1                         1 
##                    Fiebre         Fractura de brazo           Gastroenteritis 
##                         1                         1                         1 
##      Infarto de miocardio    Infección respiratoria  Intoxicación alimentaria 
##                         1                         1                         1 
##                  Neumonía       Problemas cardíacos       Problemas de visión 
##                         1                         1                         1 
##   Problemas respiratorios 
##                         1
# Crear un gráfico de barras para visualizar las causas de ingreso más comunes y menos comunes
barplot(causas_ingreso_ordenadas, main = "Causas de Ingreso más comunes y menos comunes",
        xlab = "Causa de Ingreso", ylab = "Frecuencia", col = colores,
        ylim = c(0, max(causas_ingreso_ordenadas) + 5))

I)

# Instalar y cargar el paquete openxlsx si no está instalado
if (!requireNamespace("openxlsx", quietly = TRUE)) {
  install.packages("openxlsx")
}
library(openxlsx)

# Definir el nombre del archivo de Excel
Taller2 <- "historias_clinicas.xlsx"

# Escribir la base de datos en el archivo de Excel
write.xlsx(historias_clinicas, Taller2)

# Imprimir un mensaje indicando que los datos se han exportado correctamente
cat("Los datos se han exportado a", Taller2, "\n")
## Los datos se han exportado a historias_clinicas.xlsx