Septiembre, 2017
En este notebook se hace el procesamiento de las variables del estudio a partir de los cálculos hechos para los indicadores. El código del notebook consiste básicamente en una sola función que genera las tablas y gráficas correspondientes por cada variable. Para ello, las variables se definen en términos de sus etiquetas y los indicadores que las conforman.
En esta sección se hace la preparación del código con el cual serán calculadas y presentadas las variables del estudio. Para poder ejecutar este código se requiere que antes hayan sido procesados todos los indicadores y que los datos correspondientes se encuentren en el archivo resultados.csv
.
# Carga de librerías y configuración del notebook
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
# Carga del archivo de datos
data = pd.read_csv('resultados.csv')
def annotate(ax):
for p in ax.patches:
ax.annotate(np.round(p.get_height(),decimals=2),
(p.get_x()+p.get_width()/2., p.get_height()),
ha='center', va='center', xytext=(0, 10),
textcoords='offset points')
def processVariable(index, llaves):
"""
Esta función se encarga de procesar cada variable. Para usarla se debe preparar
un arreglo con el nombre de las variables, sus etiquetas y la lista de indicadores
que las conforman.
"""
# Cálculo de los promedios por variable
for el in llaves:
data[el['var']] = data[el['keys']].mean(axis=1)
data[el['var'] + '_dev'] = data[el['keys']].std(axis=1)
# Extracción de los nombres de las variables y de las etiquetas
labels = [x['label'] for x in llaves]
# Presentación de los resultados por variables e instituciones
print('Medias:')
keys = [x['var'] for x in llaves]
print(data[['institucion'] + keys])
print()
print('Desviaciones estandar:')
keys = [x['var'] + '_dev' for x in llaves]
print(data[['institucion'] + keys])
print()
keys = [x['var'] for x in llaves]
for k in keys:
ax = data[k].plot(kind='bar',
title=labels[keys.index(k)],
alpha=0.5, color='#01b1af')
ax.set_xticklabels(data['institucion'])
ax.set_ylim(0, 1)
annotate(ax)
plt.show()
data[index] = data[keys].mean(axis=1)
data[index + '_dev'] = data[keys].std(axis=1)
print('Medias por variable:')
print(data[keys].mean())
print()
print('Desviaciones estándar por variable:')
print(data[keys].std())
print()
ax = data[keys].mean().plot(kind='bar',
title='Distribuciones por variable',
alpha=0.5, color='#01b1af')
ax.set_xticklabels(labels)
ax.set_ylim(0, 1)
annotate(ax)
plt.show()
ax = data[keys].plot(kind='box', title='Distribuciones por variable',
rot=90, color='#01b1af')
ax.set_xticklabels(labels)
ax.set_ylim(0, 1)
annotate(ax)
plt.show()
ax = data[index].plot(kind='bar', title='Promedios por oficina',
alpha=0.5, color='#01b1af')
ax.set_xticklabels(data['institucion'])
ax.set_ylim(0, 1)
annotate(ax)
plt.show()
subdata = data[keys]
subdata.set_index(data['institucion'])
ax = subdata.T.boxplot(grid=False, rot=90)
ax.set_xticklabels(data['institucion'])
ax.set_ylim(0, 1)
annotate(ax)
plt.show()
print('Media de %s: %f' % (index, data[index].mean()))
print('Desviación estandar de %s: %f' % (index, data[index].std()))
gral = {}
index = 'mandato'
llaves = [
{
'var': 's_disp_requisitos',
'label': 'Se tienen disposiciones para la atención de denuncias',
'keys' : ['viacomm', 'reqdenun','avisos_y_anonimos', 'multas_sanciones']
},
{
'var': 's_investigacion',
'label': 'Se realizan investigaciones a partir de denuncias',
'keys': ['iniinvest', 'docnorm_validacion', 'afirm01_reg_no_validas',
'potestad_investigar']
},
{
'var': 's_independencia',
'label': 'Se posee independencia para desarrollar el trabajo',
'keys': ['lugrecep', 'viaproblem', 'recursos_asignados', 'lineamientos_tecnicos']
},
{
'var': 's_proteccion',
'label': 'Se tienen medidas para dar protección al usuario',
'keys': ['confidencialidad', 'proteccion_denunciantes', 'oportunidad']
},
{
'var': 's_coordinacion',
'label': 'Se mantiene coordinación con otras instituciones',
'keys': ['convenios']
}
]
gral[index] = llaves
processVariable(index, llaves)
index = 'desempeno'
llaves = [
{
'var': 's_admision',
'label': 'Se tramitan denuncias en forma agil',
'keys': ['eficiencia_admision', 'herramientas_seg', 'tpoatencion']
},
{
'var': 's_personal',
'label': 'Se cuenta con personal apropiado',
'keys': ['desempeno_personal', 'evaluacion_personal']
},
{
'var': 's_normas',
'label': 'Se dispone de normas de conducta y procedimientos',
'keys': ['docnorm_conducta', 'docnorm_procedimientos']
},
{
'var': 's_recursos',
'label': 'Se tienen recursos asignados para la oficina',
'keys': ['presupuesto', 'afirm01_personal_exclusivo']
},
{
'var': 's_plan_objetivos',
'label': 'Se trabaja con base en planes y objetivos',
'keys': ['planificacion', 'cumpl_objetivos', 'retroalimentacion', 'areas_sensibles']
}
]
gral[index] = llaves
processVariable(index,llaves)
index = 'accesibilidad'
llaves = [
{
'var': 's_equidad',
'label': 'Se garantiza un trato equitativo',
'keys': ['reqdenun', 'discapacidades', 'viacomm']
},
{
'var': 's_gratuidad',
'label': 'Se brinda servicio y atención gratuita',
'keys': ['cobro_denuncia', 'asesoria_legal']
},
{ 'var': 's_facil_acceso',
'label': 'Se tienen instalaciones de fácil acceso',
'keys': ['numofi', 'horario', 'acceso_instalacion', 'rotulos']
},
{
'var': 's_divulgacion_res',
'label': 'Se divulgan los servicios y el trabajo de la oficina',
'keys': ['info_online', 'divulgacion_trabajo', 'informacion_resultados',
'divulgacion_mecanismos']
}
]
gral[index] = llaves
processVariable(index, llaves)
index = 'empoderamiento'
llaves = [
{
'var': 's_atencion_usuario',
'label': 'Se brinda una buena atención al usuario',
'keys': ['atencion_usuario', 'medorient', 'viasuger_sum']
},
{
'var': 's_med_proteccion',
'label': 'Se brinda protección al denunciante',
'keys': ['confidencialidad_garant', 'viasegusr', 'afirm02_prot_dat_pers', 'linprotec']
},
{
'var': 's_rec_derechos',
'label': 'Se orienta al usuario sobre sus derechos',
'keys': ['docnorm_derechos', 'ddusarios']
},
{
'var': 's_formacion_mot',
'label': 'Se realizan actividades de formación',
'keys': ['divulgacion_imp', 'formacion_ciudadana', 'intacciones_capacitacion']
}
]
gral[index] = llaves
processVariable(index, llaves)
index = 'global'
llaves = [
{
'var': 'g_mandato',
'label': 'Ejercer el mandato',
'keys': ['mandato']
},
{
'var': 'g_desempeno',
'label': 'Propiciar un buen desempeño',
'keys': ['desempeno']
},
{
'var': 'g_accesibilidad',
'label': 'Facilitar el acceso a denunciar',
'keys': ['accesibilidad']
},
{
'var': 'g_empoderamiento',
'label': 'Empoderar a la ciudadanía',
'keys': ['empoderamiento']
}
]
processVariable(index, llaves)
data.to_csv('final.csv', index=False)
keys = []
labels = []
for k in gral.keys():
for sk in gral[k]:
keys.append(sk['var'])
labels.append(sk['label'])
print(keys)
print(labels)
sd = data[keys]
sd.columns = labels
sd.index = data['institucion']
sd.T
sd.T.to_excel('sumario.xlsx')