CARRERA: Ingeniería de Sistemas

CURSO : Minería de datos

CICLO : VII

SECCIÓN: D

TURNO : NOCHE

FECHA : 22/05/2020

INTEGRANTES:

Este proyecto está ubicado en GitHub: https://github.com/AdonisVentocillaSanchez/MineriaDatosE1.git

Paso 1: Entendimiento del negocio

1.1 Determinar el objetivo del negocio (organización)

Brindar una atención asistencial y de apoyo al diagnóstico especializada. Emitiendo informes y resultados confiables y oportunos en los distintos servicios asistenciales y así realizar un proceso de atención asistencial con óptimo nivel de calidad y seguridad. Todo esto basados en la mineria de datos usando tecnicas de modelado, descriptivo y predictivo.

1.2 Evaluar la situación actual (entorno)

Se cuenta con una base de datos Mysql con información detallada de los pacientes que han sido atendidos en alguna de las areas del laboratorio desde el año 2005 hasta la actualidad, por lo que a priori se puede afirmar que se dispone de una cantidad de datos más que suficiente para poder resolver el problema. Esta información incluye toda la informacion de acceso a los analisis clinicos de diabetes en los laboratorios de todas las sedes, otros datos personales del paciente que nos pueden ser útiles a la hora de hacer la minería de datos.

1.3 Determinar el objetivo de la minería de datos

EL objetivo de la mineria de datos en nuestro caso, apunta a poder evaluar las variables obtenidas durante arduos años de trabajo, y con esto, cumplir nuestro objetivo de negocio, que es ofrecer servicios y/o procesos de atención asistencial con óptimo nivel de calidad y seguridad, proyectandonos a un factor adicional que es la prediccion en las futuras asistencias.

  • Predecir de forma diagnóstica si un paciente tiene diabetes o no (Resultado: positivo o negativo), basándose en ciertas mediciones de diagnóstico incluidas en el conjunto de datos.
  • Identificar a pacientes con diabetes y proponer un posible tratamiento.

1.4 Realizar un plan de proyecto

El proyecto se dividirá en las siguientes etapas para facilitar su organización y estimar el tiempo de realización del mismo:

  • Etapa 1: Análisis de la estructura de los datos y la información de la base de datos. Tiempo estimado: 4 semanas.
  • Etapa 2: Ejecución de consultas para tener muestras representativas de los datos. Tiempo estimado: 2 semana.
  • Etapa 3: Preparación de los datos (selección, limpieza, conversión y formateo, si fuera necesario) para facilitar la minería de datos sobre ellos. Tiempo estimado: 5 semanas.
  • Etapa 4: Elección de las técnicas de modelado y ejecución de las mismas sobre los datos. Tiempo estimado: 2 semana.
  • Etapa 5: Análisis de los resultados obtenidos en la etapa anterior, si fuera necesario repetir la etapa 4. Tiempo estimado: 1 semana.
  • Etapa 6: Producción de informes con los resultados obtenidos en función de los objetivos de negocio y los criterios de éxito establecidos. Tiempo estimado: 1 semana.
  • Etapa 7: Presentación de los resultados finales. Tiempo estimado: 2 semana.

Paso 2: Entendimiento de la data

A partir de la data brindada en https://raw.githubusercontent.com/VictorGuevaraP/Mineria-de-datos-2020/master/diabetes_m.csv, se realizó un gist en Github: https://gist.githubusercontent.com/AdonisVentocillaSanchez/6152195f6a6ea4a00ff6f8c11eb0c699/raw/c2084034753b1be7398fd5ef33762f381326c88f/diabetes_m.csv para poder acceder a la data.

2.1 Información inicial de la data

laboratorio=read.csv("https://gist.githubusercontent.com/AdonisVentocillaSanchez/6152195f6a6ea4a00ff6f8c11eb0c699/raw/c2084034753b1be7398fd5ef33762f381326c88f/diabetes_m.csv", sep=";")

head(laboratorio)
##   n NumeroEmbarazos Concentrac.blucosa.plama Presión.arterial.diastólica
## 1 1               6                      148                          72
## 2 2               1                       85                          66
## 3 3               8                      183                          64
## 4 4               1                       89                          NA
## 5 5               0                      137                          40
## 6 6               5                      116                          74
##   Tríceps.espesor.del.pliegue.cutáneo X2.horas.suero.insulina
## 1                                  35                       0
## 2                                  29                       0
## 3                                   0                       0
## 4                                  23                      94
## 5                                  NA                     168
## 6                                   0                       0
##   Índice.de.masa.corporal Función.pedigrí.de.la.diabetes edad resultado
## 1                    33.6                          0.627   50  Positivo
## 2                    26.6                          0.351   31  Negativo
## 3                    23.3                          0.672   32  Positivo
## 4                    28.1                          0.167   21  Negativo
## 5                    43.1                          2.288   33  Positivo
## 6                    25.6                          0.201   30  Negativo

2.2 Descripción de la data

str(laboratorio)
## 'data.frame':    768 obs. of  10 variables:
##  $ n                                  : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ NumeroEmbarazos                    : int  6 1 8 1 0 5 3 10 2 8 ...
##  $ Concentrac.blucosa.plama           : int  148 85 183 89 137 116 78 115 197 125 ...
##  $ Presión.arterial.diastólica        : int  72 66 64 NA 40 74 NA 0 70 96 ...
##  $ Tríceps.espesor.del.pliegue.cutáneo: int  35 29 0 23 NA 0 32 0 45 0 ...
##  $ X2.horas.suero.insulina            : int  0 0 0 94 168 0 88 0 543 0 ...
##  $ Índice.de.masa.corporal            : num  33.6 26.6 23.3 28.1 43.1 25.6 31 35.3 30.5 0 ...
##  $ Función.pedigrí.de.la.diabetes     : num  0.627 0.351 0.672 0.167 2.288 ...
##  $ edad                               : int  50 31 32 21 33 30 26 29 53 54 ...
##  $ resultado                          : Factor w/ 2 levels "Negativo","Positivo": 2 1 2 1 2 1 2 1 2 2 ...
  • N:
  • NumeroEmbarazos:
  • Concentrac.blucosa.plama:
  • Presión.arterial.diastólica:
  • Tríceps.espesor.del.pliegue.cutáneo:
  • X2.horas.suero.insulina:
  • Índice.de.masa.corporal:
  • Función.pedigrí.de.la.diabetes:
  • edad:
  • resultado:

2.3 Exploración de la data

Gráfica de datos NumeroEmbarazos

Estamos notando que la cantidad de embarazosos en las personas del laboratorio llevan un descenso significativo, y es como notamos que la mayor parte de personas han estado embarazadas solo una vez, y que hay claramente eventos atipicos superando los 13 embarazos.

par(mfrow=c(2,1))
boxplot(laboratorio$NumeroEmbarazos, horizontal=TRUE, main = "Número de embarazos por persona")
hist(laboratorio$NumeroEmbarazos, main = "")

Gráfica de datos Presión.arterial.diastólica

Observamos que en la mayoria de las personas la presion arterial varia de 40 a 100mmhg, ascendiendo hasta #un punto medio de aproximadamente 70mmhg en el cual se muestra la mayor cantidad. Así mismo notamos los #eventos atipicos en personas que estan teniendo menos de 40mmhg y otros superan los 110mmhg #respectivamente.

par(mfrow=c(2,1))
boxplot(laboratorio$Presión.arterial.diastólica, horizontal=TRUE, main = "Presión Arterial Diastólica")
hist(laboratorio$Presión.arterial.diastólica, main = "")

Gráfica de datos Tríceps.espesor.del.pliegue.cutáneo

A partir de los pliegues cutáneos es posible obtener la densidad corporal utilizando fórmulas desarrolladas por regresión múltiple, que relacionan los pliegues medidos y la densidad corporal determinada por pesada hidrostática,los pliegues cutáneos permiten determinar el estado de la obesidad de una persona, y estos estudios son de gran relevancia entendiendo que las consecuencias adversas de la obesidad son significativas e incluyen incremento del riesgo de diabetes.

par(mfrow=c(2,1))
boxplot(laboratorio$Tríceps.espesor.del.pliegue.cutáneo, horizontal = TRUE, main = "Esppesor del pliegue cutáneo")
hist(laboratorio$Tríceps.espesor.del.pliegue.cutáneo, main = "")

Gráfica de datos X2.horas.suero.insulina

El objetivo fundamental de la terapia con insulina es imitar los niveles de insulina normales. Desafortunadamente, la terapia de reemplazo de insulina actual sólo puede aproximarse a los niveles de insulina normales. La terapia con insulina para la diabetes tipo 2 varía desde una inyección por día hasta múltiples inyecciones y la utilización de una bomba de insulina. Cuanto más frecuentes las inyecciones de insulina mejor la aproximación a los niveles de insulina naturales o normales.

par(mfrow=c(2,1))
boxplot(laboratorio$X2.horas.suero.insulina, horizontal = TRUE, main = "Suero de insulina por cada 2 horas")
hist(laboratorio$X2.horas.suero.insulina, main = "")

Gráfica de datos Índice.de.masa.corporal

Notamos que el indice de masa corporal se eleva entre 25 y 40kg, lo cual nos muestra que en la mayoria de personas existe obesidad, como tambien una cantidad notoria de mejor salud en el indice de MC 20 a 25kg y un muy mal indice de 40 a 45kg. Asi mismo notamos vamos atipicos menores a 5kg y mayores a 65kg.

par(mfrow=c(2,1))
boxplot(laboratorio$Índice.de.masa.corporal, horizontal = TRUE, main = "Índice de masa corporal (peso en kg / (altura en m) ^ 2)")
hist(laboratorio$Índice.de.masa.corporal, main = "")

Gráfica de datos Función.pedigrí.de.la.diabetes

Encontramos que la mayoría de personas en estudio tienen entre un 20% y 30% de probabilidad de tener diabetes según antecedentes familiares.

par(mfrow=c(2,1))
boxplot(laboratorio$Función.pedigrí.de.la.diabetes, horizontal = TRUE, main = "Función de pedigrí de la diabetes")
hist(laboratorio$Función.pedigrí.de.la.diabetes, main = "")

Gráfica de datos edad

Mostramos que la mayor cantidad de personas entre 20 y 25 años es donde hay mas casos de diabetes

par(mfrow=c(2,1))
boxplot(laboratorio$edad, horizontal = TRUE, main = "Rango de edad")
hist(laboratorio$edad, main = "")

Gráfica de datos resultado

La claridad de dicha presentación es de vital importancia para la comprensión de los resultados y la interpretación de los mismos. A la hora de representar los resultados de un análisis estadístico de un modo adecuado, son varias las publicaciones que podemos consultar. Aunque la presentación de datos numéricos se haga habitualmente por medio de tablas, en ocasiones un diagrama o un gráfico pueden ayudarnos a representar de un modo más eficiente nuestros datos.

plot(laboratorio$resultado, main = "Resultados de personas con diabetes")

2.4 Verificación de la calidad de la data

Las variables con datos nulos son los siguientes:

  • Presión.arterial.diastólica: Un 10.94% de esta data es nula por lo que debemos realizar métodos de imputación para no perderlo.
  • Tríceps.espesor.del.pliegue.cutáneo: Un 8.59% de la data es nula y debemos utilizar la mismas técnicas que la anterior.
  • X2.horas.suero.insulina: Un 9.11% de esta data es nula.
#Ver porcentaje de datos nulos por cada variable
mean(is.na(laboratorio$Presión.arterial.diastólica)) * 100           #10.9375
mean(is.na(laboratorio$Tríceps.espesor.del.pliegue.cutáneo)) * 100   #8.59375
mean(is.na(laboratorio$X2.horas.suero.insulina)) * 100               #9.114583

Paso 3: Preparación de la data

3.1 Seleccionar la data

Suprimimos la variable N debido a que no la utilizaremos para los posteriores análisis.

labnew = laboratorio[,2:10]
head(labnew)
##   NumeroEmbarazos Concentrac.blucosa.plama Presión.arterial.diastólica
## 1               6                      148                          72
## 2               1                       85                          66
## 3               8                      183                          64
## 4               1                       89                          NA
## 5               0                      137                          40
## 6               5                      116                          74
##   Tríceps.espesor.del.pliegue.cutáneo X2.horas.suero.insulina
## 1                                  35                       0
## 2                                  29                       0
## 3                                   0                       0
## 4                                  23                      94
## 5                                  NA                     168
## 6                                   0                       0
##   Índice.de.masa.corporal Función.pedigrí.de.la.diabetes edad resultado
## 1                    33.6                          0.627   50  Positivo
## 2                    26.6                          0.351   31  Negativo
## 3                    23.3                          0.672   32  Positivo
## 4                    28.1                          0.167   21  Negativo
## 5                    43.1                          2.288   33  Positivo
## 6                    25.6                          0.201   30  Negativo

3.2 Limpiar la data

Instalamos la librería para imputar datos.

install.packages("DMwR")
install.packages("VIM")
require(DMwR)
require(VIM)

Utilizaremos el método de imputación de KNN vecinos más cercanos para llenar los datos vacios en cada variable.

labnew2 = knnImputation(labnew)
summary(labnew2)

3.3 Construir data

Instalamos la librería para discretizar datos.

install.packages("arules")
require(arules)

Creamos las variables discretizadas a partir de: - NumeroEmbarazos - edad

3.4 Integración de data

Juntamos las 2 variables creadas anteriormente con la data principal.

labnew3=cbind(labnew2, Embarazo_disc)
labnew4=cbind(labnew3, Edad_disc)
summary(labnew4)

3.5 Formato de data

Realizamos un nuevo archivo “data_laboratorio.csv” con la nueva data creada. Esta nueva data se puede ubicar en: https://raw.githubusercontent.com/AdonisVentocillaSanchez/MineriaDatosE1/master/data_laboratorio.csv

write.csv(labnew3,file = "data_laboratorio.csv")
#obtenemos la data
getwd()