Spaces:
Runtime error
Runtime error
File size: 5,076 Bytes
fd03181 b906a5a 943aa96 fd03181 803b4f5 25d6c71 803b4f5 cd371d1 943aa96 590da27 b906a5a 943aa96 803b4f5 943aa96 803b4f5 943aa96 51d73a8 943aa96 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
import streamlit as st
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
c1, c2, = st.columns([7,7])
with c2:
st.image('figures/gdmk_logo.png', width=100, caption='2023')
with c1:
st.image('figures/giz_logo.png', width=200, caption='Peru')
st.title('Estudio de Encuesta Integridad')
st.write('Elija si prefiere analizar textos graficos.')
option0 = st.selectbox('Formato de Analisis: ', (None, 'Textos', 'Gráficos'))
option3 = st.selectbox('Documento: ', (None, 'Todos', 'Encuesta', 'Indicadores'))
maprange = {'0 a 50%': 10, '10 a 50%': 20, '20 a 50%': 30, '30 a 50%': 40, '40 a 50%': 50}
option2 = st.selectbox('Franja de Discrepancia siendo la máxima [0, 50]', ('0 a 50%', '10 a 50%', '20 a 50%', '30 a 50%', '40 a 50%'))
mapn = maprange[option2]
st.write('La franja de discrepancia mostrada es entre ', mapn-10, ' y 50%')
if option0 and option2 and option3 is not None:
# Load dataframe
file = st.file_uploader('Seleccione un archivo Excel: ')
if file is not None:
df00 = pd.read_excel(file, engine='openpyxl')
st.write(df00.shape)
if option0 == 'Textos':
option1 = st.selectbox('Clasificar resultados por:', ('Pregunta', 'Categoria'))
#df = df00[(df00['diff'] > mapn-10) & (df00['diff'] < mapn)]
df = df00[(df00['diff'] > mapn-10)]
if option3 != 'Todos':
df = df[df['documento']==option3]
else:
df = df
# Group dataframe by chosen option
if option1 == 'Pregunta':
grouped_df = df.groupby('pregunta')
elif option1 == 'Categoria':
grouped_df = df.groupby('cat_sup')
# Generate text with bullets
text = ''
for name, group in grouped_df:
cad01 = '\n\n > **'+ option1+ ': '+ name + '**'
st.write(cad01)
st.write('Cantidad de afirmaciones: ', len(group))
texto_tot = ''
for index, row in group.iterrows():
val0 = str(row['diff'])
text = '* En el rubro sobre ' + row.pregunta + ' la categoría ' + row.cat_sup + ' responde ' + \
row.respuesta + ' un **' + val0 + '%** más que la categoría ' + row.cat_inf + '\n'
texto_tot = texto_tot + '\n' + text
st.write(texto_tot)
# Download link for text file
st.download_button(label='Descargar Reporte', data=texto_tot, file_name='reporte.txt', mime='text/plain')
else:
option21 = st.selectbox('Tipo de Gráfico ', ('Total', 'Parcial') )
if option21 == 'Total':
st.write('Este diagrama muestra las discrepancias promedio de categorías y preguntas, con discrepancias mayores a 15%.')
st.write('Permite un panorama general de las discrepancias.')
st.image('figures/discrepancias_heatmap.png', width=1200)
else:
df2 = df00[(df00['diff'] > mapn-10)]
if option3 != 'Todos':
df2 = df2[df2['documento']==option3]
else:
pass
df_pv = pd.pivot_table(df2, values='diff', index='pid', columns='cat_sup', aggfunc='mean').fillna(0)
st.write(df_pv.shape)
data_pv_s = df_pv[df_pv > 10]
row_to_drop = list(data_pv_s.index[data_pv_s.sum(axis=1) == 0])
data_pv_s = data_pv_s.drop(row_to_drop, axis=0)
col_to_drop = list(data_pv_s.columns[data_pv_s.sum(axis=0) == 0])
data_pv_s = data_pv_s.drop(col_to_drop, axis=1)
fig, ax = plt.subplots(figsize=(40, 20))
heatmap = ax.imshow(data_pv_s.T, cmap='inferno')
ax.set_yticks(range(len(data_pv_s.columns)))
ax.set_yticklabels(data_pv_s.columns, fontsize=16)
ax.set_xticks(range(len(data_pv_s.index)))
ax.set_xticklabels(data_pv_s.index, rotation=90, fontsize=16)
for i in range(len(data_pv_s.index)):
for j in range(len(data_pv_s.columns)):
value = data_pv_s.iloc[i, j]
if not np.isnan(value):
ax.annotate(int(value), xy=(i, j), horizontalalignment='center',
verticalalignment='center', fontsize=18, color='darkgray',
fontweight='bold'
)
ax.set_title('Distribución de Discrepancias Máximas en Categorías y Preguntas', fontsize=20)
ax.set_ylabel('Categorías')
ax.set_xlabel('Preguntas')
plt.colorbar(heatmap, ax=ax)
plt.grid(True)
st.pyplot(fig)
st.write('Para grabar la imagen solo presione botón derecho y guardela como imagen en su servidor.')
|