Procesamiento de variables

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.

Preparación

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.

In [1]:
# Carga de librerías y configuración del notebook

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
In [2]:
# Carga del archivo de datos

data = pd.read_csv('resultados.csv')
In [3]:
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()))
In [4]:
gral = {}

1. Condiciones para ejercer el mandato

In [5]:
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
In [6]:
processVariable(index, llaves)
Medias:
  institucion  s_disp_requisitos  s_investigacion  s_independencia  \
0         TEG           0.829175            0.725            0.850   
1      MINSAL           0.793750            0.650            0.425   
2  I.JUDICIAL           0.593750            1.000            0.450   
3    PROBIDAD           0.397900            0.575            0.400   
4        SPTA           0.608325            0.650            0.450   
5       MINED           0.775000            0.400            0.550   
6         FGR           0.891675            0.950            0.725   
7         PNC           0.710425            0.925            0.425   
8          MH           0.775000            0.900            0.800   
9         CCR           0.658325            0.650            0.450   

   s_proteccion  s_coordinacion  
0      0.500000             0.5  
1      0.166633             0.0  
2      0.500000             0.0  
3      0.500000             0.0  
4      0.166633             0.0  
5      0.500000             0.0  
6      0.166633             0.0  
7      0.333367             0.0  
8      0.500000             0.0  
9      0.444467             0.0  

Desviaciones estandar:
  institucion  s_disp_requisitos_dev  s_investigacion_dev  \
0         TEG               0.149292             0.485627   
1      MINSAL               0.334399             0.472582   
2  I.JUDICIAL               0.231694             0.000000   
3    PROBIDAD               0.152212             0.505800   
4        SPTA               0.462187             0.472582   
5       MINED               0.450000             0.489898   
6         FGR               0.157217             0.100000   
7         PNC               0.306213             0.150000   
8          MH               0.450000             0.200000   
9         CCR               0.394766             0.472582   

   s_independencia_dev  s_proteccion_dev  s_coordinacion_dev  
0             0.238048          0.500000                 NaN  
1             0.434933          0.166650                 NaN  
2             0.420317          0.500000                 NaN  
3             0.454606          0.500000                 NaN  
4             0.420317          0.166650                 NaN  
5             0.525991          0.500000                 NaN  
6             0.320156          0.166650                 NaN  
7             0.434933          0.333350                 NaN  
8             0.244949          0.500000                 NaN  
9             0.420317          0.384919                 NaN  

Medias por variable:
s_disp_requisitos    0.703332
s_investigacion      0.742500
s_independencia      0.552500
s_proteccion         0.377773
s_coordinacion       0.050000
dtype: float64

Desviaciones estándar por variable:
s_disp_requisitos    0.143820
s_investigacion      0.194025
s_independencia      0.172180
s_proteccion         0.154509
s_coordinacion       0.158114
dtype: float64

Media de mandato: 0.485221
Desviación estandar de mandato: 0.099330

2. Condiciones para propiciar un buen desempeño

In [7]:
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
In [8]:
processVariable(index,llaves)
Medias:
  institucion  s_admision  s_personal  s_normas  s_recursos  s_plan_objetivos
0         TEG    0.691667        0.90       0.5       0.925          0.816650
1      MINSAL    0.736100        0.95       1.0       0.225          0.879163
2  I.JUDICIAL    0.608333        0.85       1.0       0.200          0.775000
3    PROBIDAD    0.597233        0.80       0.5       0.050          0.691663
4        SPTA    0.791667        0.65       0.0       0.675          0.625000
5       MINED    0.583333        0.95       0.5       0.725          0.566675
6         FGR    0.894433        0.80       1.0       0.775          0.983325
7         PNC    0.750000        0.85       1.0       0.200          0.983325
8          MH    0.791667        0.95       1.0       0.825          1.000000
9         CCR    0.916667        0.75       0.5       0.650          0.624987

Desviaciones estandar:
  institucion  s_admision_dev  s_personal_dev  s_normas_dev  s_recursos_dev  \
0         TEG        0.430358        0.141421      0.707107        0.106066   
1      MINSAL        0.323639        0.070711      0.000000        0.318198   
2  I.JUDICIAL        0.400260        0.212132      0.000000        0.282843   
3    PROBIDAD        0.441617        0.282843      0.707107        0.070711   
4        SPTA        0.360844        0.212132      0.000000        0.459619   
5       MINED        0.381881        0.070711      0.707107        0.388909   
6         FGR        0.129453        0.282843      0.000000        0.318198   
7         PNC        0.433013        0.212132      0.000000        0.282843   
8          MH        0.360844        0.070711      0.000000        0.247487   
9         CCR        0.144338        0.353553      0.707107        0.494975   

   s_plan_objetivos_dev  
0              0.323764  
1              0.110022  
2              0.233122  
3              0.466166  
4              0.284651  
5              0.416336  
6              0.033350  
7              0.033350  
8              0.000000  
9              0.343614  

Medias por variable:
s_admision          0.736110
s_personal          0.845000
s_normas            0.700000
s_recursos          0.525000
s_plan_objetivos    0.794579
dtype: float64

Desviaciones estándar por variable:
s_admision          0.117833
s_personal          0.098460
s_normas            0.349603
s_recursos          0.319287
s_plan_objetivos    0.163817
dtype: float64

Media de desempeno: 0.720138
Desviación estandar de desempeno: 0.126048

3. Condiciones para facilitar el acceso a denunciar

In [9]:
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
In [10]:
processVariable(index, llaves)
Medias:
  institucion  s_equidad  s_gratuidad  s_facil_acceso  s_divulgacion_res
0         TEG   0.694433         1.00        0.395825             0.8750
1      MINSAL   0.736100         0.75        0.541675             0.7500
2  I.JUDICIAL   0.513867         1.00        0.604175             0.7500
3    PROBIDAD   0.430533         0.75        0.666675             0.6250
4        SPTA   0.888900         0.75        0.416675             0.3125
5       MINED   0.888900         0.75        0.458325             0.3125
6         FGR   0.777800         1.00        0.916675             0.6875
7         PNC   0.625000         1.00        0.812500             0.6250
8          MH   0.888900         1.00        0.500000             0.6250
9         CCR   0.666667         0.50        0.791675             0.5625

Desviaciones estandar:
  institucion  s_equidad_dev  s_gratuidad_dev  s_facil_acceso_dev  \
0         TEG       0.336806         0.000000            0.314579   
1      MINSAL       0.354390         0.353553            0.416670   
2  I.JUDICIAL       0.312751         0.000000            0.314579   
3    PROBIDAD       0.168413         0.353553            0.311805   
4        SPTA       0.192431         0.353553            0.353561   
5       MINED       0.192431         0.353553            0.416670   
6         FGR       0.192431         0.000000            0.166650   
7         PNC       0.544862         0.000000            0.375000   
8          MH       0.192431         0.000000            0.456435   
9         CCR       0.577350         0.000000            0.249994   

   s_divulgacion_res_dev  
0               0.144338  
1               0.204124  
2               0.500000  
3               0.144338  
4               0.239357  
5               0.473242  
6               0.473242  
7               0.478714  
8               0.478714  
9               0.314576  

Medias por variable:
s_equidad            0.71111
s_gratuidad          0.85000
s_facil_acceso       0.61042
s_divulgacion_res    0.61250
dtype: float64

Desviaciones estándar por variable:
s_equidad            0.158884
s_gratuidad          0.174801
s_facil_acceso       0.180839
s_divulgacion_res    0.181142
dtype: float64

Media de accesibilidad: 0.696007
Desviación estandar de accesibilidad: 0.083645

4. Condiciones para empoderar a los ciudadanos

In [11]:
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
In [12]:
processVariable(index, llaves)
Medias:
  institucion  s_atencion_usuario  s_med_proteccion  s_rec_derechos  \
0         TEG            0.500000            0.6875             1.0   
1      MINSAL            0.866667            0.6875             1.0   
2  I.JUDICIAL            0.544433            0.4375             0.0   
3    PROBIDAD            0.655567            0.4375             0.0   
4        SPTA            0.766667            0.3125             0.0   
5       MINED            0.622233            0.6250             1.0   
6         FGR            0.644433            0.2500             0.5   
7         PNC            0.400000            0.6250             0.5   
8          MH            0.866667            0.6875             1.0   
9         CCR            0.533333            0.6250             0.0   

   s_formacion_mot  
0         0.611133  
1         0.791667  
2         0.250000  
3         0.541667  
4         0.402800  
5         0.208333  
6         1.000000  
7         0.138867  
8         0.708333  
9         0.541667  

Desviaciones estandar:
  institucion  s_atencion_usuario_dev  s_med_proteccion_dev  \
0         TEG                0.500000              0.473242   
1      MINSAL                0.230940              0.473242   
2  I.JUDICIAL                0.236502              0.426956   
3    PROBIDAD                0.250186              0.426956   
4        SPTA                0.251661              0.375000   
5       MINED                0.203674              0.478714   
6         FGR                0.335564              0.288675   
7         PNC                0.400000              0.478714   
8          MH                0.230940              0.473242   
9         CCR                0.503322              0.478714   

   s_rec_derechos_dev  s_formacion_mot_dev  
0            0.000000             0.535772  
1            0.000000             0.260208  
2            0.000000             0.433013  
3            0.000000             0.438986  
4            0.000000             0.441609  
5            0.000000             0.260208  
6            0.707107             0.000000  
7            0.707107             0.127287  
8            0.000000             0.505181  
9            0.000000             0.505181  

Medias por variable:
s_atencion_usuario    0.640000
s_med_proteccion      0.537500
s_rec_derechos        0.500000
s_formacion_mot       0.519447
dtype: float64

Desviaciones estándar por variable:
s_atencion_usuario    0.155309
s_med_proteccion      0.164570
s_rec_derechos        0.471405
s_formacion_mot       0.274459
dtype: float64

Media de empoderamiento: 0.549237
Desviación estandar de empoderamiento: 0.190265

5. Resultados globales

In [13]:
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']
    }
]
In [14]:
processVariable(index, llaves)
Medias:
  institucion  g_mandato  g_desempeno  g_accesibilidad  g_empoderamiento
0         TEG   0.680835     0.766663         0.741315          0.699658
1      MINSAL   0.407077     0.758053         0.694444          0.836458
2  I.JUDICIAL   0.508750     0.686667         0.717010          0.307983
3    PROBIDAD   0.374580     0.527779         0.618052          0.408683
4        SPTA   0.374992     0.548333         0.592019          0.370492
5       MINED   0.445000     0.665002         0.602431          0.613892
6         FGR   0.546662     0.890552         0.845494          0.598608
7         PNC   0.478758     0.756665         0.765625          0.415967
8          MH   0.595000     0.913333         0.753475          0.815625
9         CCR   0.440558     0.688331         0.630210          0.425000

Desviaciones estandar:
  institucion  g_mandato_dev  g_desempeno_dev  g_accesibilidad_dev  \
0         TEG            NaN              NaN                  NaN   
1      MINSAL            NaN              NaN                  NaN   
2  I.JUDICIAL            NaN              NaN                  NaN   
3    PROBIDAD            NaN              NaN                  NaN   
4        SPTA            NaN              NaN                  NaN   
5       MINED            NaN              NaN                  NaN   
6         FGR            NaN              NaN                  NaN   
7         PNC            NaN              NaN                  NaN   
8          MH            NaN              NaN                  NaN   
9         CCR            NaN              NaN                  NaN   

   g_empoderamiento_dev  
0                   NaN  
1                   NaN  
2                   NaN  
3                   NaN  
4                   NaN  
5                   NaN  
6                   NaN  
7                   NaN  
8                   NaN  
9                   NaN  

Medias por variable:
g_mandato           0.485221
g_desempeno         0.720138
g_accesibilidad     0.696007
g_empoderamiento    0.549237
dtype: float64

Desviaciones estándar por variable:
g_mandato           0.099330
g_desempeno         0.126048
g_accesibilidad     0.083645
g_empoderamiento    0.190265
dtype: float64

Media de global: 0.612651
Desviación estandar de global: 0.104147
In [15]:
data.to_csv('final.csv', index=False)
In [16]:
keys = []
labels = []
for k in gral.keys():
    for sk in gral[k]:
        keys.append(sk['var'])
        labels.append(sk['label'])
print(keys)
print(labels)
['s_disp_requisitos', 's_investigacion', 's_independencia', 's_proteccion', 's_coordinacion', 's_admision', 's_personal', 's_normas', 's_recursos', 's_plan_objetivos', 's_equidad', 's_gratuidad', 's_facil_acceso', 's_divulgacion_res', 's_atencion_usuario', 's_med_proteccion', 's_rec_derechos', 's_formacion_mot']
['Se tienen disposiciones para la atención de denuncias', 'Se realizan investigaciones a partir de denuncias', 'Se posee independencia para desarrollar el trabajo', 'Se tienen medidas para dar protección al usuario', 'Se mantiene coordinación con otras instituciones', 'Se tramitan denuncias en forma agil', 'Se cuenta con personal apropiado', 'Se dispone de normas de conducta y procedimientos', 'Se tienen recursos asignados para la oficina', 'Se trabaja con base en planes y objetivos', 'Se garantiza un trato equitativo', 'Se brinda servicio y atención gratuita', 'Se tienen instalaciones de fácil acceso', 'Se divulgan los servicios y el trabajo de la oficina', 'Se brinda una buena atención al usuario', 'Se brinda protección al denunciante', 'Se orienta al usuario sobre sus derechos', 'Se realizan actividades de formación']
In [17]:
sd = data[keys]
sd.columns = labels
sd.index = data['institucion']
In [18]:
sd.T
Out[18]:
institucion TEG MINSAL I.JUDICIAL PROBIDAD SPTA MINED FGR PNC MH CCR
Se tienen disposiciones para la atención de denuncias 0.829175 0.793750 0.593750 0.397900 0.608325 0.775000 0.891675 0.710425 0.775000 0.658325
Se realizan investigaciones a partir de denuncias 0.725000 0.650000 1.000000 0.575000 0.650000 0.400000 0.950000 0.925000 0.900000 0.650000
Se posee independencia para desarrollar el trabajo 0.850000 0.425000 0.450000 0.400000 0.450000 0.550000 0.725000 0.425000 0.800000 0.450000
Se tienen medidas para dar protección al usuario 0.500000 0.166633 0.500000 0.500000 0.166633 0.500000 0.166633 0.333367 0.500000 0.444467
Se mantiene coordinación con otras instituciones 0.500000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
Se tramitan denuncias en forma agil 0.691667 0.736100 0.608333 0.597233 0.791667 0.583333 0.894433 0.750000 0.791667 0.916667
Se cuenta con personal apropiado 0.900000 0.950000 0.850000 0.800000 0.650000 0.950000 0.800000 0.850000 0.950000 0.750000
Se dispone de normas de conducta y procedimientos 0.500000 1.000000 1.000000 0.500000 0.000000 0.500000 1.000000 1.000000 1.000000 0.500000
Se tienen recursos asignados para la oficina 0.925000 0.225000 0.200000 0.050000 0.675000 0.725000 0.775000 0.200000 0.825000 0.650000
Se trabaja con base en planes y objetivos 0.816650 0.879163 0.775000 0.691663 0.625000 0.566675 0.983325 0.983325 1.000000 0.624987
Se garantiza un trato equitativo 0.694433 0.736100 0.513867 0.430533 0.888900 0.888900 0.777800 0.625000 0.888900 0.666667
Se brinda servicio y atención gratuita 1.000000 0.750000 1.000000 0.750000 0.750000 0.750000 1.000000 1.000000 1.000000 0.500000
Se tienen instalaciones de fácil acceso 0.395825 0.541675 0.604175 0.666675 0.416675 0.458325 0.916675 0.812500 0.500000 0.791675
Se divulgan los servicios y el trabajo de la oficina 0.875000 0.750000 0.750000 0.625000 0.312500 0.312500 0.687500 0.625000 0.625000 0.562500
Se brinda una buena atención al usuario 0.500000 0.866667 0.544433 0.655567 0.766667 0.622233 0.644433 0.400000 0.866667 0.533333
Se brinda protección al denunciante 0.687500 0.687500 0.437500 0.437500 0.312500 0.625000 0.250000 0.625000 0.687500 0.625000
Se orienta al usuario sobre sus derechos 1.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.500000 0.500000 1.000000 0.000000
Se realizan actividades de formación 0.611133 0.791667 0.250000 0.541667 0.402800 0.208333 1.000000 0.138867 0.708333 0.541667
In [19]:
sd.T.to_excel('sumario.xlsx')
In [ ]: