0% encontró este documento útil (0 votos)
170 vistas38 páginas

Librerias

El documento describe el proceso de carga y preprocesamiento de un conjunto de datos sobre pacientes, incluyendo la imputación de datos faltantes y la eliminación de columnas con datos insuficientes. Se utiliza el algoritmo KPrototypes para la clusterización de datos mixtos, aplicando métodos como el codo y la silueta para determinar el número óptimo de clusters. Finalmente, se normalizan las variables numéricas para asegurar la consistencia en el análisis.

Cargado por

Daniel Eguiluz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
170 vistas38 páginas

Librerias

El documento describe el proceso de carga y preprocesamiento de un conjunto de datos sobre pacientes, incluyendo la imputación de datos faltantes y la eliminación de columnas con datos insuficientes. Se utiliza el algoritmo KPrototypes para la clusterización de datos mixtos, aplicando métodos como el codo y la silueta para determinar el número óptimo de clusters. Finalmente, se normalizan las variables numéricas para asegurar la consistencia en el análisis.

Cargado por

Daniel Eguiluz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Librerias

In [195]:

import [Link] as plt

import pandas as pd

import numpy as np

from scipy import stats

import seaborn as sns

from [Link] import SimpleImputer

Lectura de datos y formateo

In [196]:

FILENAME = '[Link]'

dataset = pd.read_csv(FILENAME, index_col=0, dtype="Int64")

cols = [Link]

[Link]()

dataset

<class '[Link]'>

Index: 273 entries, 0 to 272

Data columns (total 19 columns):

# Column Non-Null Count Dtype

--- ------ -------------- -----

0 Gender 273 non-null Int64


1 Age 273 non-null Int64

2 Schooling 272 non-null Int64

3 Breastfeeding 273 non-null Int64

4 Varicella 273 non-null Int64

5 Initial_Symptom 272 non-null Int64

6 Mono_or_Polysymptomatic 273 non-null Int64

7 Oligoclonal_Bands 273 non-null Int64

8 LLSSEP 273 non-null Int64

9 ULSSEP 273 non-null Int64

10 VEP 273 non-null Int64

11 BAEP 273 non-null Int64

12 Periventricular_MRI 273 non-null Int64

13 Cortical_MRI 273 non-null Int64

14 Infratentorial_MRI 273 non-null Int64

15 Spinal_Cord_MRI 273 non-null Int64

16 Initial_EDSS 125 non-null Int64

17 Final_EDSS 125 non-null Int64

18 group 273 non-null Int64

dtypes: Int64(19)

memory usage: 48.0 KB

Out[196]:
S Br Ini C In Fi
V Mon Oli Per Inf Sp
G c e tia L U or iti n
a o_or go ive rat in g
e h as l_ L L B ti al al
A ri _Pol clo V ntr en al_ r
n o tf Sy S S A c _ _
g c ysy nal E icu tor Co o
d o e m S S E al E E
e e mpt _B P lar ial rd u
e li e pt E E P _ D D
ll oma an _M _M _M p
r n di o P P M S S
a tic ds RI RI RI
g ng m RI S S

3 2
0 1 1 1 2 1 0 1 1 0 0 0 1 0 1 1 1 1
4 0

6 2
1 1 3 2 10 2 1 1 0 1 0 0 0 0 1 2 2 1
1 5

2 2
2 1 3 1 3 1 1 0 0 0 0 0 1 0 0 1 1 1
2 0

4 1
3 2 1 1 7 2 1 0 1 1 0 1 1 0 0 1 1 1
1 5

3 2
4 2 2 1 6 2 0 1 0 0 0 1 0 0 0 1 1 1
4 0

. . . . .
.. .. .. .. ..
. . ... ... ... ... . . ... ... ... ... ... ... .
. . . . .
. . . . .

< <
2
3 N N
6 2 8 3 1 9 2 0 0 0 0 0 0 0 0 0 2
1 A A
8
> >

< <
2
2 1 N N
6 1 3 3 5 2 1 0 0 0 0 0 0 0 1 2
1 5 A A
9
> >
S Br Ini C In Fi
V Mon Oli Per Inf Sp
G c e tia L U or iti n
a o_or go ive rat in g
e h as l_ L L B ti al al
A ri _Pol clo V ntr en al_ r
n o tf Sy S S A c _ _
g c ysy nal E icu tor Co o
d o e m S S E al E E
e e mpt _B P lar ial rd u
e li e pt E E P _ D D
ll oma an _M _M _M p
r n di o P P M S S
a tic ds RI RI RI
g ng m RI S S

< <
2
1 1 N N
7 2 3 3 13 2 0 1 1 1 0 0 0 0 1 2
9 2 A A
0
> >

< <
2
3 1 N N
7 2 3 3 15 2 1 1 1 1 0 1 1 1 0 2
2 5 A A
1
> >

< <
2
7 N N
7 2 6 3 3 2 1 0 0 1 0 0 0 0 0 0 2
7 A A
2
> >

273 rows × 19 columns

Pre-procesamiento

• Limpieza de datos

Imputación de datos faltantes para las variables Schooling y Initial_Symptoms

Schooling: Se imputa el dato faltante usando la mediana de la variable dado que es una
variable numerica entera

In [197]:

cleaned_dataset = [Link]()

imputer = SimpleImputer(strategy='median')

cleaned_dataset['Schooling'] = imputer.fit_transform(

cleaned_dataset[['Schooling']])

cleaned_dataset['Schooling'] = cleaned_dataset['Schooling'].astype('int64')
cleaned_dataset.info()

<class '[Link]'>

Index: 273 entries, 0 to 272

Data columns (total 19 columns):

# Column Non-Null Count Dtype

--- ------ -------------- -----

0 Gender 273 non-null Int64

1 Age 273 non-null Int64

2 Schooling 273 non-null int64

3 Breastfeeding 273 non-null Int64

4 Varicella 273 non-null Int64

5 Initial_Symptom 272 non-null Int64

6 Mono_or_Polysymptomatic 273 non-null Int64

7 Oligoclonal_Bands 273 non-null Int64

8 LLSSEP 273 non-null Int64

9 ULSSEP 273 non-null Int64

10 VEP 273 non-null Int64

11 BAEP 273 non-null Int64

12 Periventricular_MRI 273 non-null Int64

13 Cortical_MRI 273 non-null Int64

14 Infratentorial_MRI 273 non-null Int64

15 Spinal_Cord_MRI 273 non-null Int64

16 Initial_EDSS 125 non-null Int64

17 Final_EDSS 125 non-null Int64

18 group 273 non-null Int64

dtypes: Int64(18), int64(1)


memory usage: 47.7 KB

Initial_Symptoms: Se imputa el dato faltante usando la moda de la variable dado que es una
variable categorica

In [198]:

imputer = SimpleImputer(strategy='most_frequent')

cleaned_dataset['Initial_Symptom'] = imputer.fit_transform(

cleaned_dataset[['Initial_Symptom']])

cleaned_dataset['Initial_Symptom'] = cleaned_dataset['Initial_Symptom'].astype(

'int64')

cleaned_dataset.info()

<class '[Link]'>

Index: 273 entries, 0 to 272

Data columns (total 19 columns):

# Column Non-Null Count Dtype

--- ------ -------------- -----

0 Gender 273 non-null Int64

1 Age 273 non-null Int64

2 Schooling 273 non-null int64

3 Breastfeeding 273 non-null Int64

4 Varicella 273 non-null Int64

5 Initial_Symptom 273 non-null int64

6 Mono_or_Polysymptomatic 273 non-null Int64

7 Oligoclonal_Bands 273 non-null Int64

8 LLSSEP 273 non-null Int64

9 ULSSEP 273 non-null Int64


10 VEP 273 non-null Int64

11 BAEP 273 non-null Int64

12 Periventricular_MRI 273 non-null Int64

13 Cortical_MRI 273 non-null Int64

14 Infratentorial_MRI 273 non-null Int64

15 Spinal_Cord_MRI 273 non-null Int64

16 Initial_EDSS 125 non-null Int64

17 Final_EDSS 125 non-null Int64

18 group 273 non-null Int64

dtypes: Int64(17), int64(2)

memory usage: 47.5 KB

Se selecciono la imputacion de datos, ya que permite mantener la integridad del conjunto de


datos, evitando perder informacion valiosa contenida en las filas con datos faltantes.
Ademas, en este caso es poco probable que la imputacion de datos introduzca un sesgo, ya
que la cantidad de datos faltantes es baja en comparacion con el total de datos.

• Eliminar columnas con muchos datos faltantes

Dada la ausencia total de los datos de las variables initial_edss y final_edss para el grupo 2
(no EMCD) y considerando que estas variables representan una escala de discapacidad
aplicable a pacientes con esclerosis múltiple clínicamente definida (EMCD), parece
estructuralmente coherente que estos datos estén faltantes para un grupo que no desarrolló
la enfermedad. La eliminación de estas variables es justificada porque su inclusión con datos
imputados artificialmente o su uso incompleto podría inducir un sesgo significativo en el
análisis. Además, la imputación no sería apropiada dado que no hay base para estimar la
discapacidad en pacientes que no han progresado a EMCD. Por lo tanto, para mantener la
integridad y la precisión del análisis de clustering destinado a identificar patrones predictivos
de progresión a EM desde SCA, es prudente excluir estas variables del análisis global y
concentrarse en otras características clínicas y demográficas presentes en ambos grupos.

In [199]:

cleaned_dataset = cleaned_dataset.drop(

["Initial_EDSS", "Final_EDSS"], axis=1)

cleaned_dataset.info()
<class '[Link]'>

Index: 273 entries, 0 to 272

Data columns (total 17 columns):

# Column Non-Null Count Dtype

--- ------ -------------- -----

0 Gender 273 non-null Int64

1 Age 273 non-null Int64

2 Schooling 273 non-null int64

3 Breastfeeding 273 non-null Int64

4 Varicella 273 non-null Int64

5 Initial_Symptom 273 non-null int64

6 Mono_or_Polysymptomatic 273 non-null Int64

7 Oligoclonal_Bands 273 non-null Int64

8 LLSSEP 273 non-null Int64

9 ULSSEP 273 non-null Int64

10 VEP 273 non-null Int64

11 BAEP 273 non-null Int64

12 Periventricular_MRI 273 non-null Int64

13 Cortical_MRI 273 non-null Int64

14 Infratentorial_MRI 273 non-null Int64

15 Spinal_Cord_MRI 273 non-null Int64

16 group 273 non-null Int64

dtypes: Int64(15), int64(2)

memory usage: 42.7 KB

• Normalizacion de los datos numericos

Se normalizan las variables numericas para que todas tengan la misma escala y no se vean
afectadas por la magnitud de los valores al momento de realizar el clustering.
In [200]:

from [Link] import StandardScaler

normalized_dataset = cleaned_dataset.copy()

scaled_dataset = StandardScaler().fit_transform(

normalized_dataset[['Age', 'Schooling']])

normalized_dataset[['Age', 'Schooling']] = scaled_dataset

Clusterización de los datos

Se selecciona el algoritmo de KPrototypes, ya que es una extension del algoritmo KMeans


que permite trabajar con datos mixtos (categoricos y numericos) y es adecuado para el tipo
de datos que se tienen en el dataset.

Para escoger el numero de clusters se utiliza el metodo del codo y el metodo de la silueta.

In [201]:

from [Link] import KPrototypes

from [Link] import silhouette_score, davies_bouldin_score, homogeneity_score

RANDOM_STATE = 9

def elbow_method(dataset, start, end):

range_num_clusters = list(range(start, end))

categorical_index = list(range(3, 16))


categorical_index.insert(0, 0)

cost = []

for n in range_num_clusters:

kproto = KPrototypes(n_clusters=n,

init='Cao', verbose=0, n_jobs=-1, random_state=RANDOM_STATE)

clusters = kproto.fit_predict(

dataset, categorical=categorical_index)

[Link](kproto.cost_)

[Link](figsize=(10, 6))

ax = [Link](x=range_num_clusters, y=cost,

marker='o', dashes=False)

[Link](xlabel='Número de clusters', ylabel='Costo')

ax.set_title('Método del codo')

[Link]()
def silhouette_method(dataset, start, end):

range_num_clusters = list(range(start, end))

categorical_index = list(range(3, 16))

categorical_index.insert(0, 0)

silhouette_avg_scores = []

for n in range_num_clusters:

kproto = KPrototypes(n_clusters=n,

init='Cao', verbose=0, n_jobs=-1, random_state=RANDOM_STATE)

clusters = kproto.fit_predict(

dataset, categorical=categorical_index)

score = silhouette_score(dataset, clusters)

silhouette_avg_scores.append(score)

[Link](figsize=(10, 6))

ax = [Link](x=range_num_clusters, y=silhouette_avg_scores,
marker='o', dashes=False)

[Link](xlabel='Número de clusters', ylabel='Puntaje de Silhouette')

ax.set_title(f'Método de la silueta')

[Link]()

cluster_dataset = normalized_dataset.copy()

elbow_method(cluster_dataset.to_numpy(), 2, 10)

silhouette_method(cluster_dataset.to_numpy(), 2, 10)
Segun los dos metodos se tiene lo siguiente:

1. Método del Codo: En el grafico se puede observar una desaceleración del descenso
en el costo alrededor de 4 clusters, sugiriendo que 4 podría ser un buen número de
clusters.
2. Método de la Silueta: El gráfico muestra una disminución general en el puntaje
después de 3 clusters, pero se observa un pequeño pico en 4 clusters antes de
continuar descendiendo, lo cual podría indicar que 3 o 4 es un buen número de
clusters.

Basado en lo anterior, la opcion más consistente y respaldada por ambos métodos es 4


clusters. Este número está respaldado por la presencia del "codo" en el gráfico del Método
del Codo y un pico relativo en el puntaje de Silueta, lo cual sugiere que es un balance entre
una buena partición de los datos y mantener el costo relativamente bajo.

Ahora se aplica el algoritmo de KPrototypes con 4 clusters y se obtiene la clusterizacion de


los datos.

In [202]:

from [Link] import KPrototypes

X = cluster_dataset.to_numpy()

categorical_index = list(range(3, 16))

categorical_index.insert(0, 0)

kproto = KPrototypes(n_clusters=4, init='Cao', verbose=2,

n_jobs=-1, random_state=RANDOM_STATE)

clusters = kproto.fit_predict(

X, categorical=categorical_index)

# print(kproto.cluster_centroids_)

# print(clusters)

Initialization method and algorithm are deterministic. Setting n_init to 1.

Best run was number 9

Evaluacion de los clusters

In [203]:
# Cálculo del Puntaje de Silueta

silhouette_avg = silhouette_score(X, clusters)

print(f"Puntaje de Silueta: {silhouette_avg}")

# Cálculo del Índice Davies-Bouldin

davies_bouldin_idx = davies_bouldin_score(X, clusters)

print(f"Índice Davies-Bouldin: {davies_bouldin_idx}")

Puntaje de Silueta: 0.001114201681195495

Índice Davies-Bouldin: 3.938712282767227

Realizado el clustering, se procede a analizar los resultados obtenidos.

se deja una funcion para pasar los datos categoricos a su valor escrito

In [204]:

def set_categorical_values(dataset):

dataset = [Link]()

gender = {1: "Masculino", 2: "Femenino"}

breastfeeding = {1: "Si", 2: "No", 3: "Desconocido"}

varicella = {1: "Positivo", 2: "Negativo", 3: "Desconocido"}

initial_symptom = {1: "Visual", 2: "Sensorial", 3: "Motor", 4: "Otro",

5: "Visual y Sensorial", 6: "Visual y Motor", 7: "Visual y Otro",

8: "Sensorial y Motor", 9: "Sensorial y Otro", 10: "Motor y Otro",

11: "Visual, Sensorial y Motor", 12: "Visual, Sensorial y Otro",

13: "Visual, Motor y Otro", 14: "Sensorial, Motor y Otro",

15: "Visual, Sensorial, Motor y Otro"}

mono_or_polysymptomatic = {1: "Monosintomático",


2: "Polisintomático", 3: "Desconocido"}

oligoclonal_bands = {0: "Negativo", 1: "Positivo", 2: "Desconocido"}

neg_pos = {0: "Negativo", 1: "Positivo"}

group = {1: "EMCD", 2: "No EMCD"}

neg_pos_vars = ["LLSSEP", "ULSSEP", "VEP", "BAEP", "Periventricular_MRI",

"Cortical_MRI", "Infratentorial_MRI", "Spinal_Cord_MRI"]

dataset["Gender"] = dataset["Gender"].map(gender)

dataset["Breastfeeding"] = dataset["Breastfeeding"].map(breastfeeding)

dataset["Varicella"] = dataset["Varicella"].map(varicella)

dataset["Initial_Symptom"] = dataset["Initial_Symptom"].map(

initial_symptom)

dataset["Mono_or_Polysymptomatic"] = dataset["Mono_or_Polysymptomatic"].map(

mono_or_polysymptomatic)

dataset["Oligoclonal_Bands"] = dataset["Oligoclonal_Bands"].map(

oligoclonal_bands)

for var in neg_pos_vars:

dataset[var] = dataset[var].map(neg_pos)

dataset["group"] = dataset["group"].map(group)

return dataset

Se muestra la cantidad de datos en cada cluster divididos por el grupo al que pertenecen
(EMCD [1] o no EMCD [2])

In [205]:

def plot_frecuency(dataset, var, hue="group", name=False):

[Link](figsize=(10, 6))
ax = [Link](x=var, data=dataset,

stat="count", palette="viridis", hue=hue)

if(not name):

name = var

[Link](f"Distribución de {name}")

total = float(len(dataset))

for p in [Link]:

height = p.get_height()

[Link](x=p.get_x()+(p.get_width()/2),

y=height - height/2,

s=f'{height:.0f}\n{height/total:.1%}',

ha='center',

fontdict={'size': p.get_width()*16},

bbox=dict(facecolor='white', alpha=0.7, boxstyle="round,pad=0.2",


edgecolor="none"))

[Link]()

analisys_dataset = cleaned_dataset.copy()

analisys_dataset['Cluster'] = clusters

analisys_dataset_cat = set_categorical_values(analisys_dataset)

plot_frecuency(analisys_dataset_cat, 'Cluster')
Resumen para el analisis de las variables numericas para cada cluster asignado

In [206]:

numeric_summary = analisys_dataset.groupby('Cluster').agg(

['median', 'mean', 'std', 'min', 'max'])[['Age', 'Schooling']]

numeric_summary

Out[206]:
Age Schooling

medi mi ma medi mi ma
mean std mean std
an n x an n x

Clust
er

28.4157 7.0868 19.0224 2.3883


0 28.0 16 46 20.0 15 25
3 14 72 12

27.9298 6.6274 15.0175 2.7156


1 28.0 15 43 15.0 9 20
25 85 44 37

51.9130 7.3630 14.7391 4.3991


2 50.0 41 77 15.0 6 25
43 49 30 65

34.4444 7.6075 11.3086 2.6393


3 36.0 17 51 12.0 0 15
44 62 42 27

Resumen para el analisis de las variables categoricas para cada cluster asignado

In [207]:

variables_categoricas = [Link][3:16]

variables_categoricas = variables_categoricas.insert(0, [Link][0])

categoryc_summary = analisys_dataset_cat.groupby('Cluster').agg(

[lambda x: [Link](x).iat[0]])[variables_categoricas]

categoryc_summary

Out[207]:
G Bre Va Initi Mono_ Olig LL U Peri Co Infr Spi
B
e ast ri al_ or_Pol oclo S LS V vent rti aten nal_
A
n fee ce Sy ysymp nal_ S S E ricul cal tori Cor
E
d din ll mpt tomati Ban E E P ar_M _M al_ d_M
P
er g a om c ds P P RI RI MRI RI

<l <l <l <l <l <l


a <la a a a a a <la
<la <la <la <la <la
m mb m <lamb m m m m m
mb mbd mbd mb mb
b da b da> b b b b bd
da> a> a> da> da>
d > d d d d d a>
a> a> a> a> a> a>

C
l
u
s
t
e
r

Fe Sen
Po N N N N
m sori Polisin Ne Neg Neg
sit Neg eg eg eg eg Neg
0 en Si al y tomáti gat ativ ativ
iv ativo ati ati ati ati ativo
in Mot co ivo o o
o vo vo vo vo
o or

M
N Po Po Po N
as Polisin Po Neg
eg Mot Neg sit sit sit eg Posit Posi
1 cu Si tomáti siti ativ
ati or ativo iv iv iv ati ivo tivo
lin co vo o
vo o o o vo
o

Fe Sen
N Po Po N N
m sori Polisin Po Neg
eg Neg sit sit eg eg Posit Posi
2 en Si al y tomáti siti ativ
ati ativo iv iv ati ati ivo tivo
in Mot co vo o
vo o o vo vo
o or
G Bre Va Initi Mono_ Olig LL U Peri Co Infr Spi
B
e ast ri al_ or_Pol oclo S LS V vent rti aten nal_
A
n fee ce Sy ysymp nal_ S S E ricul cal tori Cor
E
d din ll mpt tomati Ban E E P ar_M _M al_ d_M
P
er g a om c ds P P RI RI MRI RI

<l <l <l <l <l <l


a <la a a a a a <la
<la <la <la <la <la
m mb m <lamb m m m m m
mb mbd mbd mb mb
b da b da> b b b b bd
da> a> a> da> da>
d > d d d d d a>
a> a> a> a> a> a>

C
l
u
s
t
e
r

Fe De
N N N N N
m sco Polisin Ne Neg Neg
eg Vis Neg eg eg eg eg Neg
3 en no tomáti gat ativ ativ
ati ual ativo ati ati ati ati ativo
in cid co ivo o o
vo vo vo vo vo
o o

Grafico de las variables categoricas para cada cluster asignado

In [208]:

for var in variables_categoricas:

plot_frecuency(

analisys_dataset_cat if var != "Initial_Symptom" else analisys_dataset, "Cluster", hue=var,


name=f"Cluster con {var}")
Grafico de las variables numericas para cada cluster asignado

In [209]:
# Histograma de la edad por grupo

[Link](analisys_dataset, x="Age", hue="Cluster", kde=True)

[Link]([Link](10, 80, 5))

[Link]("Histograma de la edad por Cluster")

[Link]()

# Histograma de tiempo en la escuela por grupo

[Link](analisys_dataset, x="Schooling", hue="Cluster", kde=True)

[Link]("Histograma de Schooling por Cluster")

[Link]()
Analisis de Componentes Principales (PCA)

In [210]:

from [Link] import PCA

import [Link] as plt

pca_dataset = cluster_dataset.copy()

pca_dataset['Cluster'] = clusters

pca = PCA()

X_pca = pca.fit_transform(pca_dataset)

# Valores propios

eigenvalues = pca.explained_variance_
# Obtener los vectores de las variables

vectors = pca.components_.T * [Link](pca.explained_variance_)

percent_eigenvalues = eigenvalues / sum(eigenvalues) * 100

pca_array = [Link](vectors, 0, percent_eigenvalues, axis=0)

pca_array = [Link](pca_array, 0, eigenvalues, axis=0)

dataset_columns = pca_dataset.columns

dataset_columns = dataset_columns.insert(0, 'Explicacion de Varianza (%)')

dataset_columns = dataset_columns.insert(0, 'Lambda')

# Crear un DataFrame con los vectores

pca_df = [Link](pca_array, columns=[

f'PC{i+1}' for i in range(len(eigenvalues))], index=dataset_columns)

# print(pca_df)

# Añadir una fila con los valores propios

# pca_df.loc[0, 'Lambda'] = eigenvalues

pca_df

# Añadir las varianzas explicadas en porcentaje

# pca_df.loc['Explicacion de Varianza (%)'] = eigenvalues / \

# sum(eigenvalues) * 100

# Mostrar la tabla

# print(pca_df)

dataset_columns = ['Age', 'Schooling', 'Initial_Symptom']


# Agregar los resultados al DataFrame para facilitar el plotting

pca_dataset['PCA1'] = X_pca[:, 0]

pca_dataset['PCA2'] = X_pca[:, 1]

[Link](figsize=(10, 8))

[Link](data=pca_dataset, x='PCA1', y='PCA2',

hue='Cluster', palette='viridis', style='Cluster')

for i, varname in enumerate(dataset_columns):

[Link](0, 0, vectors[i, 0], vectors[i, 1], color='r', alpha=0.8)

[Link](vectors[i, 0] * 1.15, vectors[i, 1] * 1.15,

varname, color='black', ha='center', va='center')

[Link]('PCA de los Datos de Clusters')

[Link]('Componente Principal 1')

[Link]('Componente Principal 2')

[Link](title='Cluster')

[Link](True)

[Link]()

print("Varianza explicada por cada componente:", pca.explained_variance_ratio_)


Varianza explicada por cada componente: [0.71114303 0.09481576 0.04129515 0.03395296
0.0214349 0.01517117

0.01382293 0.0107059 0.00925338 0.00831604 0.00782945 0.00695057

0.00615434 0.00544871 0.00478332 0.00383137 0.00312461 0.00196642]

In [211]:

pca_df

Out[211]:
P P P P P P P P P
P P P P P P P P P
C C C C C C C C C
C C C C C C C C C
1 1 1 1 1 1 1 1 1
1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8

1
2. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
7.
3 0 8 5 3 3 2 2 2 1 1 1 1 1 0 0 0
9
9 4 5 4 8 4 7 3 1 9 7 5 3 2 9 7 4
Lamb 8
8 4 8 2 3 9 0 4 0 8 5 5 7 0 6 9 9
da 8
3 5 8 1 7 6 8 0 3 0 8 6 8 9 9 0 7
4
7 6 4 9 5 5 0 6 5 4 1 7 2 9 1 3 4
0
0 3 2 7 6 2 6 5 5 6 5 4 5 4 5 7 1
6

7
9. 4. 3. 2. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
Explic 1.
4 1 3 1 5 3 0 9 8 7 6 6 5 4 3 3 1
acion 1
8 2 9 4 1 8 7 2 3 8 9 1 4 7 8 1 9
de 1
1 9 5 3 7 2 0 5 1 2 5 5 4 8 3 2 6
Varia 4
5 5 2 4 1 2 5 3 6 9 0 4 8 3 1 4 6
nza 3
7 1 9 9 1 9 9 3 0 4 5 3 7 3 3 6 4
(%) 0
6 5 6 0 7 3 0 8 4 5 7 4 1 2 7 1 2
3

- - - - - - - - - -
0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0 0 0 0 0 0 0 0
0 0 2 1 0 0 0 1 3 0
3 1 6 7 2 1 0 2
Gend 7 4 1 3 2 2 8 4 4 9
0 7 4 7 3 2 0 0
er 1 6 0 1 7 1 6 6 0 9
0 6 8 4 1 5 7 7
3 9 1 1 0 8 7 8 8 2
4 7 8 3 7 0 9 2
7 3 9 8 3 8 9 8 2 3
7 8 1 7 4 6 5 8
8 2 1 4 4 7 1 1 3 6

- - - - - -
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0.
1 4 6 0 1 0 0 0 0 0 0 0
4 0 0 0 0 0
0 9 9 9 1 0 3 1 3 2 0 0
9 0 4 4 0 1
Age 9 2 0 9 5 8 5 3 0 2 0 2
2 2 2 3 4 1
7 7 0 9 0 1 8 3 0 7 5 3
6 0 5 2 4 5
5 8 0 2 5 8 3 2 1 7 1 3
2 9 8 2 9 9
1 0 1 2 9 9 3 5 7 9 3 4
6 1 8 0 0 0
P P P P P P P P P
P P P P P P P P P
C C C C C C C C C
C C C C C C C C C
1 1 1 1 1 1 1 1 1
1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8

- - - - - - - - - - -
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0 4 1 1 0 0 0
8 0 1 2 1 1 0 0 0 0 0
1 2 8 0 0 1 5
Scho 1 1 4 3 5 1 1 1 1 1 1
4 1 1 6 1 8 6
oling 5 2 1 2 6 5 0 0 5 3 2
9 1 4 1 3 6 6
8 9 0 5 6 3 3 2 1 2 4
2 7 9 2 0 5 3
2 2 8 0 4 0 9 1 3 4 9
6 5 3 0 1 9 3
4 5 4 6 7 6 6 9 5 4 6

- - - - -
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0.
0 1 7 2 1 0 0 1 0 0 0 0 0
1 0 0 0 0
Breas 1 9 4 8 0 1 1 9 2 4 1 1 0
9 3 3 3 0
tfeedi 3 0 6 2 1 4 4 2 6 6 0 6 0
1 2 4 5 1
ng 7 8 8 6 7 0 2 2 7 8 9 7 4
9 4 2 2 7
0 3 7 0 5 2 1 4 0 7 4 5 5
2 7 0 2 2
5 7 7 6 1 2 3 3 5 5 1 8 3
4 3 8 2 1

- - - - -
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0.
0 2 4 3 0 0 2 0 0 0 0 0 0
0 2 0 0 0
0 8 4 1 4 4 7 4 4 3 0 2 0
Varic 6 3 9 6 1
5 6 8 0 5 6 7 2 9 0 2 1 9
ella 2 1 1 9 0
9 9 2 1 0 0 8 2 8 4 1 6 9
6 1 0 8 9
8 4 7 7 5 0 3 9 4 1 5 0 1
9 5 2 2 4
8 0 3 4 5 1 0 7 6 9 9 8 6
3 5 8 9 3

- - - - - - - - - -
4. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
Initial 1 1 2 0 0 1 0 1
2 5 0 0 0 1 0 0 0 0
_Sym 4 3 0 7 4 0 5 4
1 3 8 8 9 7 5 2 7 2
ptom 7 4 0 1 0 0 9 1
0 4 7 6 7 0 6 6 0 1
3 5 0 0 6 1 9 4
1 3 9 2 3 0 2 0 1 0
0 8 2 4 0 3 6 5
9 0 6 9 1 6 2 8 1 9
P P P P P P P P P
P P P P P P P P P
C C C C C C C C C
C C C C C C C C C
1 1 1 1 1 1 1 1 1
1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8

- - - - - - - - -
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
Mono 2 0 0 1 1 0 0 0 0
0 0 0 0 1 0 0 2 1
_or_P 6 3 5 0 8 8 4 8 0
1 2 4 1 3 0 4 6 4
olysy 1 9 3 2 4 8 7 0 1
4 7 0 5 0 2 1 1 0
mpto 3 9 5 4 8 6 9 8 0
0 9 9 9 5 4 8 9 0
matic 7 1 5 2 4 2 7 5 4
6 7 5 2 5 2 2 9 6
5 2 2 5 9 1 9 2 7
7 4 7 7 3 3 2 4 6

- - - - - - -
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0 0 0 0 4 2 2 0 0 0 0
Oligo 0 1 0 0 0 0 0
6 2 1 3 2 0 2 3 4 4 0
clona 3 1 8 7 4 3 0
5 5 0 7 1 7 2 3 1 4 1
l_Ban 2 7 7 0 4 1 9
4 6 6 8 6 0 4 9 4 1 2
ds 9 0 7 0 1 5 3
6 1 6 5 5 4 1 2 6 7 3
5 0 0 2 2 9 9
5 1 2 2 4 0 3 3 9 4 2
2 5 4 0 0 1 6

- - - - - - - - -
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
1 3 0 0 0 0 0 1 0
0 0 0 1 2 0 0 0 1
1 0 4 1 0 2 5 7 0
LLSSE 1 7 0 6 0 1 6 2 3
0 9 2 8 9 4 6 7 7
P 7 9 6 8 4 6 2 6 3
1 7 7 2 0 3 3 7 0
7 3 2 6 0 4 8 3 6
5 6 6 0 8 8 1 0 5
2 7 2 4 8 8 6 8 9
3 4 6 1 4 9 0 3 8
2 3 0 1 1 5 3 1 6

- - - - - - - -
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0.
1 0 2 0 0 0 0 0 1 1
0 0 1 1 0 1 1 0
2 0 8 3 6 7 8 2 3 3
ULSS 8 0 6 4 0 0 1 1
4 0 2 9 9 9 3 9 9 6
EP 4 6 6 0 0 7 6 6
8 2 8 7 1 0 3 8 0 4
1 4 6 5 3 2 2 1
8 2 4 8 3 8 8 9 4 5
9 2 8 6 0 2 0 5
7 2 3 4 6 4 6 8 7 9
8 6 1 4 2 1 0 9
P P P P P P P P P
P P P P P P P P P
C C C C C C C C C
C C C C C C C C C
1 1 1 1 1 1 1 1 1
1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8

- - - - - - - - -
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0 0 0 0 2 0 1 1 1
1 0 0 0 0 1 0 0 0
8 0 0 1 4 0 3 3 7
7 8 2 5 0 8 5 1 0
VEP 9 9 4 1 6 0 6 3 9
3 0 0 4 4 3 1 4 3
1 5 1 0 2 0 9 2 2
2 0 5 6 0 3 6 0 3
8 1 4 9 2 3 8 1 4
7 4 4 3 6 7 0 5 3
1 7 2 5 3 1 9 6 1
5 4 1 3 6 2 2 0 7

- - - - - - - -
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0.
0 0 0 0 0 0 0 0 0 2
0 0 0 0 0 0 0 0
3 1 4 2 2 0 5 2 3 1
4 3 1 2 3 0 3 0
BAEP 6 1 0 6 6 8 4 3 0 5
1 1 6 2 3 3 9 7
5 2 0 3 7 3 1 0 3 9
9 7 3 4 4 4 3 6
8 1 6 4 3 2 1 8 1 1
0 0 7 1 3 2 4 0
2 4 2 4 3 9 6 3 1 5
1 5 5 5 0 0 7 5

- - - - - - - - - - - -
0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
1 2 1 1 1 0
Periv 0 0 0 0 1 0 0 0 1 0 1 0
6 4 1 8 7 0
entric 5 5 0 1 2 1 6 5 8 2 1 8
8 5 8 6 4 6
ular_ 5 1 9 6 6 9 1 6 2 2 0 4
9 9 7 2 0 4
MRI 3 5 0 4 7 9 5 8 2 7 5 8
2 9 5 8 1 8
3 7 2 9 9 2 9 8 1 1 3 3
8 0 4 4 3 8
2 8 6 9 9 1 3 6 9 7 1 6

- - - - - - - - - -
0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0 0 2 0 0 0 0 0
0 0 2 0 2 1 1 0 0 0
Corti 0 5 3 8 2 5 2 1
1 5 2 1 5 9 3 0 1 2
cal_M 6 6 4 1 4 3 3 1
2 7 7 4 0 9 3 1 7 8
RI 6 7 5 6 0 5 6 2
1 6 5 2 9 5 5 4 4 7
6 6 8 0 7 5 7 7
8 4 2 2 5 8 5 0 1 7
1 0 2 2 0 5 8 4
6 3 5 6 1 5 1 6 2 9
P P P P P P P P P
P P P P P P P P P
C C C C C C C C C
C C C C C C C C C
1 1 1 1 1 1 1 1 1
1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8

- - - - - - - - - -
0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
1 1 0 1 0 2 0 1
Infrat 0 0 0 0 0 1 1 0 0 0
1 9 5 5 5 1 9 8
entori 2 2 5 4 5 2 0 2 5 1
7 5 1 1 2 4 6 1
al_MR 8 8 8 3 1 4 2 8 3 2
9 5 9 0 1 1 7 1
I 3 2 0 5 8 6 9 9 2 0
6 1 9 2 7 6 8 9
4 0 6 4 0 1 4 6 1 9
6 7 9 0 7 3 2 0
3 0 5 2 3 0 2 3 3 1

- - - - - - - - -
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
1 0 0 1 0 0 0 0 0
0 0 0 2 1 2 1 1 0
Spina 1 5 8 2 1 3 7 0 0
0 4 7 2 5 1 5 0 7
l_Cor 2 6 9 1 8 1 6 3 2
0 7 3 1 8 8 5 2 9
d_MRI 7 9 3 7 4 7 3 0 1
1 5 8 7 9 0 1 6 7
4 8 0 1 2 0 2 5 3
5 9 9 1 1 2 5 8 1
5 9 4 9 7 7 4 0 6
2 2 2 1 6 9 0 4 1

- - - - - - - - - -
0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
1 1 0 0 1 0 0 0
1 0 2 1 1 0 0 1 1 0
1 1 1 6 1 0 2 7
9 2 3 8 1 9 0 5 5 2
group 2 0 8 2 5 1 5 1
7 9 4 1 9 7 3 7 4 8
4 3 0 7 4 0 0 4
7 0 0 7 2 7 1 2 7 7
0 1 5 1 0 1 5 8
2 0 5 1 6 8 7 4 1 8
4 9 2 7 6 8 9 2
0 3 0 6 0 2 7 0 1 0

- - - - - - - - - - - -
1. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
1 1 0 0 0 0
0 0 1 0 1 1 1 0 0 0 0 0
6 7 9 0 3 0
Clust 5 4 1 7 9 4 3 0 1 2 0 0
2 5 8 2 5 2
er 4 7 8 7 4 1 8 2 6 2 3 6
7 0 1 7 1 1
2 5 6 2 6 6 3 1 3 6 8 1
9 9 8 9 9 6
9 0 7 3 0 0 2 9 3 6 2 1
8 9 0 5 1 0
9 5 3 2 5 1 2 9 6 1 3 8

También podría gustarte