CARRERA: Ingeniería de Sistemas
CURSO : Minería de datos
CICLO : VII
SECCIÓN: D
TURNO : NOCHE
FECHA : 22/05/2020
Inca Huaman, Cielo
Santos Quispe, Benji
Toledo Paulino, Luis
Ventocilla Sanchez, Adonis
Este proyecto está ubicado en GitHub: https://github.com/AdonisVentocillaSanchez/MineriaDatosE1.git
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.
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.
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.
El proyecto se dividirá en las siguientes etapas para facilitar su organización y estimar el tiempo de realización del mismo:
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.
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
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 ...
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 = "")
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 = "")
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 = "")
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 = "")
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 = "")
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 = "")
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 = "")
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")
Las variables con datos nulos son los siguientes:
#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
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
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)
Instalamos la librería para discretizar datos.
install.packages("arules")
require(arules)
Creamos las variables discretizadas a partir de: - NumeroEmbarazos - edad
Juntamos las 2 variables creadas anteriormente con la data principal.
labnew3=cbind(labnew2, Embarazo_disc)
labnew4=cbind(labnew3, Edad_disc)
summary(labnew4)
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()