jcmachicao commited on
Commit
cc14847
·
verified ·
1 Parent(s): ccb064f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +71 -4
app.py CHANGED
@@ -1,6 +1,13 @@
1
  import streamlit as st
2
  import pandas as pd
3
- import io
 
 
 
 
 
 
 
4
 
5
  st.title("Visualización y Clusterización automática de Data de Estudiantes")
6
  st.write("Cargue el archivo PKL para visualizar el análisis de su contenido.")
@@ -9,14 +16,74 @@ uploaded_file = st.file_uploader("Cargar archivo: ", type='pkl')
9
  if uploaded_file is not None:
10
 
11
  df = pd.read_pickle(uploaded_file)
12
- st.write(df.columns)
13
 
14
- df_050 = df.dropna(axis=0) # Eliminación de datos inválidos
 
15
  df_050.index = df_050.DNI
 
 
16
  col_selec = []
17
  for col in df_050.columns:
18
  u_col = df_050[col].unique()
19
  if len(u_col) < 25:
20
- print(col, '*****', u_col)
21
  col_selec.append(col)
 
 
22
  st.write(col_selec)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
  import pandas as pd
3
+ import numpy as np
4
+ import seaborn as sns
5
+ import matplotlib.pyplot as plt
6
+ import plotly.express as px
7
+ from sklearn.model_selection import train_test_split
8
+ from sklearn.preprocessing import StandardScaler
9
+ from sklearn.decomposition import PCA
10
+ scaler = StandardScaler()
11
 
12
  st.title("Visualización y Clusterización automática de Data de Estudiantes")
13
  st.write("Cargue el archivo PKL para visualizar el análisis de su contenido.")
 
16
  if uploaded_file is not None:
17
 
18
  df = pd.read_pickle(uploaded_file)
 
19
 
20
+ # Eliminación de datos inválidos
21
+ df_050 = df.dropna(axis=0)
22
  df_050.index = df_050.DNI
23
+
24
+ # Depuración de columnas sólo para aquellas que contribuyen al clustering
25
  col_selec = []
26
  for col in df_050.columns:
27
  u_col = df_050[col].unique()
28
  if len(u_col) < 25:
 
29
  col_selec.append(col)
30
+
31
+ st.write('Esta es la lista de variables que será usada para la clusterización.')
32
  st.write(col_selec)
33
+
34
+ df_100 = df_050[col_selec]
35
+ df_110 = pd.get_dummies(df_100)
36
+
37
+ st.write('Esta es la matriz de correlación de todas las categorías')
38
+
39
+ corr_matrix = df_110.corr()
40
+ plt.figure(figsize=(21, 21)) # Adjust the figure size as needed
41
+ sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt=".2f", linewidths=0.5, annot_kws={'size': 5})
42
+ plt.title('Mapa de Calor de la Correlation de Variables')
43
+ st.pyplot(plt)
44
+
45
+ st.write('A continuación se va a hacer el clustering usando PCA.')
46
+
47
+ X_sc = scaler.fit_transform(df_110)
48
+ st.write('La forma de la data es: ', X_sc.shape)
49
+ has_nan = np.isnan(X_sc).sum()
50
+ pca = PCA(n_components=2)
51
+ pca.fit(X_sc)
52
+ X_pca = pca.transform(X_sc)
53
+ data_200 = df_100
54
+ data_200['pca_1'] = X_pca[:, 0]
55
+ data_200['pca_2'] = X_pca[:, 1]
56
+
57
+ plt.figure(figsize=(8, 8))
58
+ plt.scatter(data_200.pca_1, data_200.pca_2)
59
+ plt.title('Diagrama de Dispersión PCA')
60
+ plt.xlabel('Principal Component 1')
61
+ plt.ylabel('Principal Component 2')
62
+
63
+ st.pyplot(plt)
64
+ st.write(data_200.columns)
65
+
66
+ VIRTU = st.selectbox('Virtual: ', [0, 1])
67
+ INGRE = st.selectbox('Ingresante: ', [0, 1])
68
+
69
+ data_210 = data_200[(data_200['COD_DEPARTAMENTO']==VIRTU) & (data_200['ESTADO_ESTUDIANTE']==INGRE)]
70
+
71
+ fig2 = px.scatter(data_210, x='pca_1', y='pca_2', title='Distribución PCA', width=800, height=800)
72
+ st.plotly_chart(fig2)
73
+
74
+ plt.figure(figsize=(10, 8))
75
+ plt_extracto = plt.hexbin(data_200.pca_1, data_200.pca_2, gridsize=50, cmap='inferno')
76
+ plt.colorbar()
77
+ plt.title('Hexbin Plot of PCA-Transformed Data')
78
+ plt.xlabel('Principal Component 1')
79
+ plt.ylabel('Principal Component 2')
80
+ st.pyplot(plt)
81
+
82
+ plt.figure(figsize=(7, 4))
83
+ densidades = pd.DataFrame(plt_extracto.get_array())
84
+ densidades.hist(bins=50, log=True)
85
+ plt.xlabel('Cantidad de Ocurrencias')
86
+ plt.ylabel('Frecuencia')
87
+ plt.title('Histograma de Densidades')
88
+ st.pyplot(plt)
89
+