import streamlit as st import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt import plotly.express as px from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA scaler = StandardScaler() st.title("Visualización y Clusterización automática de Data de Estudiantes") st.write("Cargue el archivo PKL para visualizar el análisis de su contenido.") uploaded_file = st.file_uploader("Cargar archivo: ", type='pkl') if uploaded_file is not None: df = pd.read_pickle(uploaded_file) # Eliminación de datos inválidos df_050 = df.dropna(axis=0) df_050.index = df_050.DNI # Depuración de columnas sólo para aquellas que contribuyen al clustering col_selec = [] for col in df_050.columns: u_col = df_050[col].unique() if len(u_col) < 25: col_selec.append(col) st.write('Esta es la lista de variables que será usada para la clusterización.') st.write(col_selec) df_100 = df_050[col_selec] df_110 = pd.get_dummies(df_100) st.write('Esta es la matriz de correlación de todas las categorías') corr_matrix = df_110.corr() plt.figure(figsize=(21, 21)) # Adjust the figure size as needed sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt=".2f", linewidths=0.5, annot_kws={'size': 5}) plt.title('Mapa de Calor de la Correlation de Variables') st.pyplot(plt) st.write('A continuación se va a hacer el clustering usando PCA.') X_sc = scaler.fit_transform(df_110) st.write('La forma de la data es: ', X_sc.shape) has_nan = np.isnan(X_sc).sum() pca = PCA(n_components=2) pca.fit(X_sc) X_pca = pca.transform(X_sc) data_200 = df_100 data_200['pca_1'] = X_pca[:, 0] data_200['pca_2'] = X_pca[:, 1] plt.figure(figsize=(8, 8)) plt.scatter(data_200.pca_1, data_200.pca_2) plt.title('Diagrama de Dispersión PCA') plt.xlabel('Principal Component 1') plt.ylabel('Principal Component 2') st.pyplot(plt) st.write(data_200.columns) VIRTU = st.selectbox('Virtual: ', [0, 1]) INGRE = st.selectbox('Ingresante: ', [0, 1]) data_210 = data_200[(data_200['COD_DEPARTAMENTO']==VIRTU) & (data_200['ESTADO_ESTUDIANTE']==INGRE)] fig2 = px.scatter(data_210, x='pca_1', y='pca_2', title='Distribución PCA', width=800, height=800) st.plotly_chart(fig2) plt.figure(figsize=(10, 8)) plt_extracto = plt.hexbin(data_200.pca_1, data_200.pca_2, gridsize=50, cmap='inferno') plt.colorbar() plt.title('Hexbin Plot of PCA-Transformed Data') plt.xlabel('Principal Component 1') plt.ylabel('Principal Component 2') st.pyplot(plt) plt.figure(figsize=(7, 4)) densidades = pd.DataFrame(plt_extracto.get_array()) densidades.hist(bins=50, log=True) plt.xlabel('Cantidad de Ocurrencias') plt.ylabel('Frecuencia') plt.title('Histograma de Densidades') st.pyplot(plt)