Análisis de datos de enfermedades cardíacas
El análisis de datos es un proceso de extracción, presentación y modelado basado en información extraída de fuentes primarias. En este ejemplo, se muestra un flujo de trabajo de análisis de datos en Wolfram Language. El conjunto de datos utilizado aquí proviene del repositorio UCI Machine Learning Repository, el cual consiste en datos de diagnósticos de enfermedades cardíacas en 1.541 pacientes.
Importe los datos de diagnóstico de enfermedades cardíacas y segméntelos, con el fin de que las filas correspondan con distintos pacientes, y las columnas correspondan con distintas propiedades.
![Click for copyable input](assets.es/heart-disease-data-analysis/In_111.png)
rawdata =
Import["https://archive.ics.uci.edu/ml/machine-learning-databases/\
heart-disease/new.data", "Text"];
data = StringSplit[rawdata, LetterCharacter ..];
data = Table[
ToExpression[StringSplit[dat, (" " | "\n") ..]], {dat, data}];
Extraiga las propiedades relevantes como "etiquetas" y "propiedades". Los valores almacenados en "etiquetas" son 0 y 1, los cuales corresponden a la presencia u ausencia de enfermedades cardíacas, respectivamente.
![Click for copyable input](assets.es/heart-disease-data-analysis/In_112.png)
labels = Unitize[data[[All, 58]]];
features =
data[[All, {3, 4, 9, 10, 12, 16, 19, 32, 38, 40, 41, 44, 51}]];
![Click for copyable input](assets.es/heart-disease-data-analysis/In_113.png)
Take[labels, 10]
![](assets.es/heart-disease-data-analysis/O_81.png)
Para cada paciente, el vector propiedad es una lista de valores numéricos. Sin embargo, los datos no están completos y posee campos faltantes almacenados como .
![Click for copyable input](assets.es/heart-disease-data-analysis/In_114.png)
features[[-3]]
![](assets.es/heart-disease-data-analysis/O_82.png)
Remplace los valores faltantes por el promedio de los datos disponibles en el atributo correspondiente, luego visualice la correlación entre distintos atributos.
![Click for copyable input](assets.es/heart-disease-data-analysis/In_115.png)
features = Transpose[Table[
N[attribute /. {-9 -> Mean[N[DeleteCases[attribute, -9]]]}]
, {attribute, Transpose[features]}]];
cormat = Correlation[features];
![](assets.es/heart-disease-data-analysis/O_83.png)
Para visualizar la distribución de los datos, se realiza PCA para extraer los primeros dos componentes principales, luego los datos proyectados son presentados en un gráfico de dispersión.
![Click for copyable input](assets.es/heart-disease-data-analysis/In_117.png)
pcs2 = Take[PrincipalComponents[features, Method -> "Correlation"],
All, 2];
![](assets.es/heart-disease-data-analysis/O_84.png)
Para distinguir las dos clases, los datos proyectados son ajustados en un modelo gaussiano mixto de dos componentes.
![Click for copyable input](assets.es/heart-disease-data-analysis/In_119.png)
edist = EstimatedDistribution[pcs2,
MixtureDistribution[{p1,
p2}, {BinormalDistribution[{m11, m12}, {s11, s12}, r1],
BinormalDistribution[{m21, m22}, {s21, s22}, r2]}]];
Con base en el modelo mixto, grafique los límites de decisión (curva negra) y los contornos de densidad de probabilidad (curva roja) del modelo mixto, y muéstrelos junto con el gráfico de dispersión. El primer componente de la mezcla gaussiana tiene mayor probabilidad dentro del límite de decisión.
![](assets.es/heart-disease-data-analysis/O_85.png)