Proyecto de análisis de mercado | Continuidad en el programa jovenes en acción¶

Informe final de la investigación (pdf):

Link al documento.

Descripción general de las fases del análisis.¶

Para la realización de este análisis de mercado se establen las siguientes 5 grandes etapas:

  1. FaseADM-1 Business Question.
    • ADM-1.1 Definición del tema central.
    • ADM-1.2 Establecer la pregunta sistémica por resolver.
    • ADM-1.3 Proyectar los objetivos a lograr con la investigación.
    • ADM-1.4 Crear el plan de trabajo.
    • ADM-1.5 Investigar los recursos técnicos disponibles para trabajar.
    • ADM-1.6 Asignar los roles de los participantes de la investigación.
  2. Fase ADM-2 Data collection.
    • ADM-2.1 Definir los medios y fuentes para la recolección y obtención de los datos.
    • ADM-2.2 Iniciar la recolección de los datos.
    • ADM-2.3 Realizar la elección de los datos a utilizar.
    • ADM-2.4 Analizar la calidad de los datos.
  3. Fase ADM-3 Prepare and explore data.
    • ADM-3.1 Eliminación de los datos duplicados.
    • ADM-3.2 Imputación o eliminación de los datos nulos o vacíos.
    • ADM-3.3 Tratamiento de los datos atípicos.
    • ADM-3.4 Normalización y estandarización del conjunto de datos.
    • ADM-3.5 Codificación de variables categóricas a cuantitativas.
    • ADM-3.6 Selección de categorías de mayor importancia para el análisis.
  4. Fase ADM-4 Data analysis.
    • ADM-4.1 Determinar el nivel de correlación entre variables.
    • ADM-4.2 Explorar las variables estadísticas descriptivas.
    • ADM-4.3 Realizar visualizaciones de los datos.
    • ADM-4.4 Evolución de las variables en series de tiempo.
  5. Fase ADM-5 Present Findings.
    • ADM-5.1 Creación del contexto para el lector de la información.
    • ADM-5.2 Enseñar los hallazgos claves.
    • ADM-5.2 Enseñar los hallazgos incidentales

Configuraciones previas del notebook.¶

  • Se usara python y las librerias de numpy y pandas para realizar la limpieza y tratamiento de los datos.
  • Para la visualización de las variables en graficos se usara las librerias de matplotlib y seaborn.
  • Para el tratamiento de fechas se usara datetime para el tratamiento de fechas.
In [2]:
import numpy as np
import pandas as pd
import datetime as dt
import matplotlib.pyplot as plt
import seaborn as sns
In [3]:
sns.set_theme(
    style="ticks",
    palette= "Set2",
    rc={"axes.spines.right": False,
        "axes.spines.top": False,
        "axes.edgecolor": "gray",
        "axes.linewidth": 1.75,
        "xtick.color": "gray",
        "ytick.color": "gray",
        "text.color": "dimgray",
        "axes.labelcolor": "dimgray",
        "axes.labelweight": "semibold",
        "axes.titlecolor": "dimgray",
        "axes.titleweight": "semibold",
        "axes.titlepad": 20
       }
)

ADM-1 Business Question.¶

ADM-1.0 Descripción de la etapa de business question.¶

Descripción:

Primera etapa del análisis de mercado, que se estructura y se definirá los siguientes objetivos:

  • ADM-1.1 Definición del tema central.
  • ADM-1.2 Establecer la pregunta sistémica por resolver.
  • ADM-1.3 Proyectar los objetivos a lograr con la investigación.
  • ADM-1.4 Crear el plan de trabajo.
  • ADM-1.5 Investigar los recursos técnicos disponibles para trabajar:
    • Selección de las tecnologías a usar.
    • Fuentes de datos previas para utilizar.
    • Qué nivel de acceso a la información se puede obtener.
    • El volumen de datos a manejar.
  • ADM-1.6 Asignar los roles de los participantes de la investigación.
    • Stakeholder (Cliente).
    • Data analyst (Administrador 1)
    • Product owner (Administrador 2).

ADM-1.1 Definición del tema central.¶

Descripción:

Establecer una temática principal, permite crear de forma practica la pregunta causal de la investigación, por ende, se realiza la preselección de los siguientes temas como posibles opciones para elegir:

  • Inclusión social y reconciliación.
  • Tecnología e información.
  • Ambiente y desarrollo sostenible
  • Finanzas y economía.

Para realizar la elección se tiene en cuenta los parámetros, requerimientos, obligaciones y restricciones que se deben cumplir en la realización de esta actividad académica por lo cual se define como el tema central:

Inclusión social y reconciliación.

ADM-1.2 Establecer la pregunta sistémica por resolver.¶

Teniendo la inclusión social y reconciliación como tema central se puede empezar a definir las bases de la pregunta sistémica, entendiendo que el tema elegido tiene gran amplitud de frentes, se decide generar la siguiente lista de subcategorías a elegir:

  • Víctimas del conflicto armado.
  • Adultos mayores.
  • Niños.
  • Adolescentes.
  • Equidad de género.

Se decide escoger Adolescentes.

El principal programa de intervención que realiza prosperidad social en los últimos años es jóvenes en acción. En base a es enunciado se genera la siguiente pregunta:

¿Cuantos de los jovenes en acción decidieron continuar con su proceso formativo (Tecnico > Tecnologico > Pregrado)?

ADM-1.3 Proyectar los objetivos a lograr con la investigación.¶

Ficha tecnica:

  1. Título de la Investigación:

¿Cuántos de los beneficiarios decidieron continuar con su proceso formativo (técnico > tecnológico > Pregrado)?

2. Objetivos de la Investigación: * Evaluar el impacto de jóvenes en acción en la continuidad académica de sus beneficiarios. * Identificar los factores que influyen en la decisión de continuar sus estudios. * Determinar las percepciones y experiencias de los beneficiarios con respecto al subsidio. * Que tanto conocimiento tienen los beneficiarios sobre los alcances del programa.

3. Metodología: * Diseño de la investigación: Estudio descriptivo y correlacional. * Población objetivo: Beneficiarios de jóvenes en acción. * Muestra: Selección aleatoria de beneficiarios. * Técnicas de recolección de datos: Encuestas y entrevistas. * Variables para medir: Continuidad académica, percepciones y experiencias del subsidio, factores de influencia. * Análisis de datos: Estadístico descriptivo, correlacional y cualitativo de las bases de datos públicos de prosperidad social y de las obtenidas en las encuestas y entrevistas.

4. Procedimiento: * Obtención de permisos y aprobaciones éticas necesarias. * Diseño de los instrumentos de recolección de datos (cuestionario y guía de entrevistas). * Selección y reclutamiento de la muestra de beneficiarios. * Aplicación de los cuestionarios y realización de las entrevistas. * Registro y codificación de los datos recolectados. * Análisis de los datos utilizando técnicas estadísticas y cualitativas. * Interpretación de los resultados y formulación de conclusiones. * Elaboración del informe final de la investigación.

5. Cronograma: * Fase 1 - Business Question (2 semanas). * Fase 2 - Data collection (2 semanas). * Fase 3 - Prepare and explore data (2 semanas). * Fase 4 - Data análisis (2 semanas). * Fase 5 - Present Findings (2 semanas).

6. Recursos: * Personal: Analista de datos, encuestador. * Materiales: Encuesta digital, bases de datos públicas. * Tecnología: Software de análisis de datos (Python y Power BI), herramientas de presentación (Power Point).

7. Conceptualización: Contextualizar a los encuestados de los que es jóvenes en acción, cual es el objetivo del programa y cuáles son los alcances ya sea en tiempo o en recursos económicos.

8. Limitaciones y Consideraciones éticas: * Posibles sesgos de respuesta por parte de los participantes. * Respetar la privacidad y confidencialidad de los participantes. * Garantizar el consentimiento informado de los participantes. * Mantener la confidencialidad de los datos recolectados.

ADM-8 Proyectar los objetivos a lograr con la investigación.¶

Ficha tecnica de la investigación:

Ficha tecnica.

ADM-9 Crear el plan de trabajo.¶

Enlace del plan de trabajo a realizar:

Cronograma de trabajo.

ADM-1.5 Investigar los recursos técnicos disponibles para trabajar.¶

Selección de las tecnologías a usar:

  • Python.
  • Power bi.

Fuentes de datos previas para utilizar:

  • Datos públicos de la página de datos.gov.co.

Qué nivel de acceso a los datos se puede obtener:

  • Fuentes abiertas (Directo).
  • Encuestas (Directo, Virtual).
  • Entrevistas (Directo, Virtual).

El volumen de datos a manejar.

  • Fuentes abiertas (Base de datos con 260.000 registros).
  • Encuestas (Por definir).
  • Entrevistas (Por definir).

ADM-1.6 Asignar los roles de los participantes de la investigación.¶

  • Stakeholders (Julio Loaiza).
  • Data analyst (Miguel Gutierrez).
  • Product owner (Mardubil Rojas).

ADM-2 Data collection.¶

Descripción de la etapa de data collection.¶

Se iniciará la obtención de los datos, tomando las siguientes 4 actividades:

  • ADM-2.1 Definir los medios y fuentes para la recolección y obtención de los datos.
  • ADM-2.2 Iniciar la recolección de los datos.
  • ADM-2.3 Realizar la elección de los datos a utilizar.
  • ADM-2.4 Analizar la calidad de los datos.

ADM-2.1 Definir los medios y fuentes para la recolección y obtención de los datos.¶

Fuentes cerradas (Directas):

  • Encuesta.

a b c d e f g h i j k l

Fuentes abiertas (Indirectas):

  • Base de datos, jovenes en acción.

ADM-2.2 Iniciar la recolección de los datos.¶

Descripción: Obtenemos la muestra objetivo a lograr en base al total de los datos obtenidos de la base de datos de jóvenes en acción.

Tamaño de la muestra

ADM-2.3 Realizar la elección de los datos a utilizar.¶

Descripción:

Para determinar que categorias debemos utilizar se realizara un analisis previo de que datos son los que se disponen de las fuentes abiertas, ya que los datos recolectados de manera manual se han definido de forma previa para que cada categoria sea util y asi optimizar el tiempo necesario para su obtención.

  • CantidadDeBeneficiarios
  • CantidadBeneficioConsolidado
  • CantidadUltimobeneficio
  • CodigoDepartamentoAtencion
  • CodigoMunicipioAtencion
  • CondicionSexual
  • Discapacidad
  • EstadoBeneficiario
  • EstadoCivil
  • Etnia
  • FechaInscripcionBeneficiario
  • FechaUltimoBeneficioAsignado
  • Genero
  • NivelEscolaridad
  • NombreDepartamentoAtencion
  • NombreMunicipioAtencion
  • País
  • RangoEdad
  • TipoAsignacionBeneficio
  • TipoBeneficio
  • TipoDocumento
  • TipoPoblacion
  • ValorBeneficioConsolidadoAsignado
  • ValorUltimoBeneficioAsignado

En la base de datos publica podemos encontrar que existe una gran cantidad de categorías, 24 en total, por ende, se decide analizar los estadísticos de cada columna para observar que tan útil seria la información que nos brindaría cada una de estas.

In [4]:
#Importamos el archivo .csv con el metodo .read_csv()
df = pd.read_csv('Data/Beneficiarios_Jovenes_en_Accion.csv')
df.head()
Out[4]:
CantidadDeBeneficiarios CantidadBeneficioConsolidado CantidadUltimobeneficio CodigoDepartamentoAtencion CodigoMunicipioAtencion CondicionSexual Discapacidad EstadoBeneficiario EstadoCivil Etnia ... NombreDepartamentoAtencion NombreMunicipioAtencion Pais RangoEdad TipoAsignacionBeneficio TipoBeneficio TipoDocumento TipoPoblacion ValorBeneficioConsolidadoAsignado ValorUltimoBeneficioAsignado
0 1 0 0 54 54518 ND NO NO ACTIVO Sin Información ND ... NORTE DE SANTANDER PAMPLONA Colombia 30-49 INCENTIVO MONETARIO CONDICIONADO A LA FORMACION MONETARIO CC SISBEN 0 - 1.500.000 0 - 1.300.000
1 1 0 0 18 18001 ND NO ACTIVO Sin Información ND ... CAQUETA FLORENCIA ND 18-29 INCENTIVO MONETARIO CONDICIONADO A LA FORMACION MONETARIO CC SISBEN 0 - 1.500.000 0 - 1.300.000
2 1 0 0 13 13001 ND NO NO ACTIVO Sin Información ND ... BOLIVAR CARTAGENA Colombia 30-49 INCENTIVO MONETARIO CONDICIONADO A LA FORMACION MONETARIO CC SISBEN 0 - 1.500.000 0 - 1.300.000
3 1 0 0 25 25754 ND NO ACTIVO Sin Información ND ... CUNDINAMARCA SOACHA ND 18-29 INCENTIVO MONETARIO CONDICIONADO A LA FORMACION MONETARIO TI SISBEN 1.500.001 - 3.000.000 0 - 1.300.000
4 31 0 0 47 47001 ND ND ACTIVO Sin Información ND ... MAGDALENA SANTA MARTA 57 18-29 INCENTIVO MONETARIO CONDICIONADO A LA FORMACION MONETARIO CC SISBEN 0 - 1.500.000 0 - 1.300.000

5 rows × 24 columns

In [5]:
#Obtenemos los encabezados de cada columna con el metodo .columns, 
#Se convierte en una lista con la función list() y se obtinene su longitud con la función len() para saber el # total de columnas
print(df.columns, '\n\n# Total de columnas:', len(list(df.columns)))
Index(['CantidadDeBeneficiarios', 'CantidadBeneficioConsolidado',
       'CantidadUltimobeneficio', 'CodigoDepartamentoAtencion',
       'CodigoMunicipioAtencion', 'CondicionSexual', 'Discapacidad',
       'EstadoBeneficiario', 'EstadoCivil', 'Etnia',
       'FechaInscripcionBeneficiario', 'FechaUltimoBeneficioAsignado',
       'Genero', 'NivelEscolaridad', 'NombreDepartamentoAtencion',
       'NombreMunicipioAtencion', 'Pais', 'RangoEdad',
       'TipoAsignacionBeneficio', 'TipoBeneficio', 'TipoDocumento',
       'TipoPoblacion', 'ValorBeneficioConsolidadoAsignado',
       'ValorUltimoBeneficioAsignado'],
      dtype='object') 

# Total de columnas: 24
In [6]:
#Usamos el metodo .describe para obtener las estadisticas generales del conjunto de datos, en este caso de los datos cuantitativos.
round(df.describe(), 1)
Out[6]:
CantidadDeBeneficiarios CantidadBeneficioConsolidado CantidadUltimobeneficio CodigoDepartamentoAtencion CodigoMunicipioAtencion
count 260112.0 260112.0 260112.0 260112.0 260112.0
mean 1.6 0.0 0.0 37.1 37280.2
std 4.1 0.0 0.0 26.8 26805.3
min 1.0 0.0 0.0 5.0 5001.0
25% 1.0 0.0 0.0 13.0 13001.0
50% 1.0 0.0 0.0 25.0 25754.0
75% 1.0 0.0 0.0 66.0 66001.0
max 402.0 0.0 0.0 99.0 99773.0
In [7]:
#Usamos el metodo .describe para obtener las estadisticas generales del conjunto de datos, en este caso de los datos cualitativos.
df.describe(exclude=[np.number])
Out[7]:
CondicionSexual Discapacidad EstadoBeneficiario EstadoCivil Etnia FechaInscripcionBeneficiario FechaUltimoBeneficioAsignado Genero NivelEscolaridad NombreDepartamentoAtencion NombreMunicipioAtencion Pais RangoEdad TipoAsignacionBeneficio TipoBeneficio TipoDocumento TipoPoblacion ValorBeneficioConsolidadoAsignado ValorUltimoBeneficioAsignado
count 260112 260112 260112 260112 260112 260112 260112 260112 260112 260112 260112 260112 260112 260112 260112 260112 260112 260112 260112
unique 10 3 2 7 9 50 1 3 7 33 1018 5 5 1 1 5 5 5 4
top ND NO NO ACTIVO Sin Información ND 2014-07-01 1900-01-01 Mujer ND ANTIOQUIA BOGOTA D.C. ND 18-29 INCENTIVO MONETARIO CONDICIONADO A LA FORMACION MONETARIO CC SISBEN 1.500.001 - 3.000.000 0 - 1.300.000
freq 258915 174578 158945 249807 242782 29570 260112 144076 138197 25672 19476 135841 213376 260112 260112 169793 206694 77971 257220

Se puede observar que varias de las variables categoricas tienen como dato top o moda ND (no esta disponible) o que por su propia descripción no son relevantes para la investigación y datos cuantitativos que contiene valores como codigos de municipio y departamento cuando ya hay columnas con los nombres explicitos, por esto se realiza una nueva base de datos (df_1) con estas categorias eliminadas y ajustando los nombres de algunas columnas para hacerlo mucho mas legibles.

In [8]:
#Se usa el metodo .drop() para eliminar las columnas innecesarias y las restantes se asignan a la variable df_1
df_1 = df.drop(columns = ['CantidadDeBeneficiarios', 'CantidadBeneficioConsolidado', 'CantidadUltimobeneficio', 'CodigoDepartamentoAtencion',
 'CodigoMunicipioAtencion', 'CondicionSexual', 'Pais'])

#Se cambian los nombres de ciertas columnas para facilitar su legibilidad con el metodo .replace()
#T. = tipo, N. = nivel, V. = valor
df_1.columns = ['Discapacidad', 'Estado', 'Estado Civil', 'Etnia',
       'Fecha Inicial', 'Fecha Final', 'Genero', 'N. Escolaridad', 'Departamento',
       'Municipio', 'Rango Edad', 'T. Asignacion',
       'T. Beneficio', 'T. Documento', 'T. Poblacion', 'V. Total Asignado', 'V. Ult. Asignado']

#Volvemos hacer la misma impreción del antepenultimo paso para ver las columnas y su cantidad
print(df_1.columns, '\n\n# Total de columnas:', len(list(df_1.columns)))
Index(['Discapacidad', 'Estado', 'Estado Civil', 'Etnia', 'Fecha Inicial',
       'Fecha Final', 'Genero', 'N. Escolaridad', 'Departamento', 'Municipio',
       'Rango Edad', 'T. Asignacion', 'T. Beneficio', 'T. Documento',
       'T. Poblacion', 'V. Total Asignado', 'V. Ult. Asignado'],
      dtype='object') 

# Total de columnas: 17

ADM-2.4 Analizar la calidad de los datos.¶

Se encuentra que la base de datos no contiene registros vacios, todos las categorias de los tipos de datos son de tipo objeto, se debera realizar cambios de categorias como en las fechas y los datos cuantitativos.

In [9]:
#Se usa el metodo .info() para saber cual es el estado de los datos
df_1.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 260112 entries, 0 to 260111
Data columns (total 17 columns):
 #   Column             Non-Null Count   Dtype 
---  ------             --------------   ----- 
 0   Discapacidad       260112 non-null  object
 1   Estado             260112 non-null  object
 2   Estado Civil       260112 non-null  object
 3   Etnia              260112 non-null  object
 4   Fecha Inicial      260112 non-null  object
 5   Fecha Final        260112 non-null  object
 6   Genero             260112 non-null  object
 7   N. Escolaridad     260112 non-null  object
 8   Departamento       260112 non-null  object
 9   Municipio          260112 non-null  object
 10  Rango Edad         260112 non-null  object
 11  T. Asignacion      260112 non-null  object
 12  T. Beneficio       260112 non-null  object
 13  T. Documento       260112 non-null  object
 14  T. Poblacion       260112 non-null  object
 15  V. Total Asignado  260112 non-null  object
 16  V. Ult. Asignado   260112 non-null  object
dtypes: object(17)
memory usage: 33.7+ MB
In [10]:
#Se modifica el tipo de dato para las columnas de fecha inicial y fecha final con el metodo .to_datetime()
df_1['Fecha Inicial'] = pd.to_datetime(df_1['Fecha Inicial'], format = '%Y-%m-%d')
df_1['Fecha Final'] = pd.to_datetime(df_1['Fecha Final'], format = '%Y-%m-%d')

df_1.dtypes
Out[10]:
Discapacidad                 object
Estado                       object
Estado Civil                 object
Etnia                        object
Fecha Inicial        datetime64[ns]
Fecha Final          datetime64[ns]
Genero                       object
N. Escolaridad               object
Departamento                 object
Municipio                    object
Rango Edad                   object
T. Asignacion                object
T. Beneficio                 object
T. Documento                 object
T. Poblacion                 object
V. Total Asignado            object
V. Ult. Asignado             object
dtype: object
In [11]:
# Se crean 3 nuevas variables correspondientes al año, # de mes y el nombre del mes
df_1['Año'] = df_1['Fecha Inicial'].dt.year.astype('object')
df_1['# Mes'] = df_1['Fecha Inicial'].dt.month.astype('object')
df_1['Mes'] = df_1['Fecha Inicial'].dt.month_name()
In [12]:
#Se analizan los registros unicos de cada categoria para encontrar la distribución de los registros
columnas_df_1 = ['Discapacidad', 'Estado', 'Estado Civil', 'Etnia', 'Año', 'Genero', 'N. Escolaridad', 'Rango Edad', 'T. Asignacion', 'T. Beneficio', 'T. Documento', 'T. Poblacion', 'V. Total Asignado', 'V. Ult. Asignado']

for a in columnas_df_1:
    print(
        f"***{a}***\n",
        f"\n{df_1[a].value_counts()}\n",
        "\n-----------------------------------\n" )
***Discapacidad***
 
NO    174578
ND     85093
SI       441
Name: Discapacidad, dtype: int64
 
-----------------------------------

***Estado***
 
NO ACTIVO    158945
ACTIVO       101167
Name: Estado, dtype: int64
 
-----------------------------------

***Estado Civil***
 
Sin Información    249807
SO                   6024
ND                   3974
UL                    264
CA                     33
DI                      8
VI                      2
Name: Estado Civil, dtype: int64
 
-----------------------------------

***Etnia***
 
ND                        242782
AFROCOLOMBIANO – NEGRO     11291
INDIGENA                    5410
MESTIZO                      224
RAIZAL                       106
PALENQUERO                    98
ROM O GITANO                  94
ROM                           68
AFROCOLOMBIANO - NEGRO        39
Name: Etnia, dtype: int64
 
-----------------------------------

***Año***
 
2014    94089
2015    64148
2013    52023
2017    36033
2018    13368
2016      451
Name: Año, dtype: int64
 
-----------------------------------

***Genero***
 
Mujer     144076
Hombre    115969
ND            67
Name: Genero, dtype: int64
 
-----------------------------------

***N. Escolaridad***
 
ND                 138197
TECNOLOGO           54443
TECNICO             31243
PREGRADO            29639
SIN ESPECIFICAR      6420
SECUNDARIA            168
PRIMARIA                2
Name: N. Escolaridad, dtype: int64
 
-----------------------------------

***Rango Edad***
 
18-29    213376
30-49     46534
>65         115
06-17        68
50-65        19
Name: Rango Edad, dtype: int64
 
-----------------------------------

***T. Asignacion***
 
INCENTIVO MONETARIO CONDICIONADO A LA FORMACION    260112
Name: T. Asignacion, dtype: int64
 
-----------------------------------

***T. Beneficio***
 
MONETARIO    260112
Name: T. Beneficio, dtype: int64
 
-----------------------------------

***T. Documento***
 
CC             169793
TI              89699
RC                478
No Definido       111
CE                 31
Name: T. Documento, dtype: int64
 
-----------------------------------

***T. Poblacion***
 
SISBEN         206694
DESPLAZADOS     33321
UNIDOS          15626
INDIGENAS        4117
ICBF              354
Name: T. Poblacion, dtype: int64
 
-----------------------------------

***V. Total Asignado***
 
1.500.001 - 3.000.000    77971
0 - 1.500.000            58016
3.000.001 - 4.500.000    51394
4.500.001 - 6.000.000    42000
> 6.000.001              30731
Name: V. Total Asignado, dtype: int64
 
-----------------------------------

***V. Ult. Asignado***
 
0 - 1.300.000            257220
1.300.001 - 2.600.000      2729
2.600.001 - 3.900.000       161
> 3.900.001                   2
Name: V. Ult. Asignado, dtype: int64
 
-----------------------------------

Se puede la distribución de los datos del nivel de escolaridad y el rango de edad, resaltando la gran cantidad de datos ND encontrados en el nivel de escolaridad.

In [13]:
data_1 = pd.pivot_table(data=df_1[['N. Escolaridad', 'T. Documento']], index='N. Escolaridad', values='T. Documento', aggfunc='count', sort=False).sort_values(by='T. Documento', ascending=False)
data_2 = pd.pivot_table(data=df_1[['Rango Edad', 'T. Documento']], index='Rango Edad', values='T. Documento', aggfunc='count', sort=False).sort_values(by='Rango Edad', ascending=False)

fig, ax = plt.subplots(nrows=2, ncols=1, figsize=(9,8))

graf_1 = sns.barplot(ax=ax[0], data=data_1, y=data_1.index, x='T. Documento')
graf_1.bar_label(graf_1.containers[0], fontsize=10)
ax[0].set_title('Distribución de la categoria "Nivel de escolaridad"')
ax[0].set_xlabel('')
ax[0].set_ylabel('')
ax[0].set_xlim(0, 160000)
ax[0].set_xticks(ticks=range(0, 160001, 20000))
ax[0].set_xticklabels(labels=[(str(x) + " mil") for x in range(0, 161, 20)])
ax[0].set_yticklabels(labels=data_1.index.str.capitalize())

graf_2 = sns.barplot(ax=ax[1], data=data_2, y=data_2.index, x='T. Documento')
graf_2.bar_label(graf_2.containers[0], fontsize=10)
ax[1].set_title('Distribución de la categoria "Rango de edad"')
ax[1].set_xlabel('')
ax[1].set_ylabel('')
ax[1].set_xlim(0, 250000)
ax[1].set_xticks(ticks=range(0, 250001, 50000))
ax[1].set_xticklabels(labels=[(str(x) + " mil") for x in range(0, 251, 50)])

plt.subplots_adjust(hspace=0.4)
plt.show()
No description has been provided for this image

Nuevamente el tipo de registros ND toma una parte significativa en algunas de las categorías como lo es el caso de “Discapacidad”, esto probablemente producto de una mala recolección.

In [14]:
data_3 = pd.pivot_table(data=df_1[['Discapacidad', 'T. Documento']], index='Discapacidad', values='T. Documento', aggfunc='count', sort=False).sort_values(by='T. Documento', ascending=False)
data_4 = pd.pivot_table(data=df_1[['Genero', 'T. Documento']], index='Genero', values='T. Documento', aggfunc='count', sort=False).sort_values(by='T. Documento', ascending=False)

fig, ax = plt.subplots(nrows=2, ncols=1, figsize=(9,7))

graf_3 = sns.barplot(ax=ax[0], data=data_3, y=data_3.index, x='T. Documento')
graf_3.bar_label(graf_3.containers[0], fontsize=10)
ax[0].set_title('Distribución de la categoria "Discapacidad"')
ax[0].set_xlabel('')
ax[0].set_ylabel('')
ax[0].set_xlim(0, 180000)
ax[0].set_xticks(ticks=range(0, 180001, 30000))
ax[0].set_xticklabels(labels=[(str(x) + " mil") for x in range(0, 181, 30)])
ax[0].set_yticklabels(labels=data_3.index.str.capitalize())

graf_4 = sns.barplot(ax=ax[1], data=data_4, y=data_4.index, x='T. Documento')
graf_4.bar_label(graf_4.containers[0], fontsize=10)
ax[1].set_title('Distribución de la categoria "Genero"')
ax[1].set_xlabel('')
ax[1].set_ylabel('')
ax[1].set_xlim(0, 150000)
ax[1].set_xticks(ticks=range(0, 150001, 30000))
ax[1].set_xticklabels(labels=[(str(x) + " mil") for x in range(0, 151, 30)])

plt.subplots_adjust(hspace=0.5)
plt.show()
No description has been provided for this image

Parece un patrón recurrente que en cierto tipo de categorías el dato ND se hace presente, se puede partir del supuesto que la recolección de datos en años anteriores no fue muy buena.

In [15]:
data_5 = pd.pivot_table(data=df_1[['Etnia', 'T. Documento']], index='Etnia', values='T. Documento', aggfunc='count', sort=False).sort_values(by='T. Documento', ascending=False)
data_6 = pd.pivot_table(data=df_1[['Estado', 'T. Documento']], index='Estado', values='T. Documento', aggfunc='count', sort=False).sort_values(by='T. Documento', ascending=False)

fig, ax = plt.subplots(nrows=2, ncols=1, figsize=(9,10))

graf_5 = sns.barplot(ax=ax[0], data=data_5, y=data_5.index, x='T. Documento')
graf_5.bar_label(graf_5.containers[0], fontsize=10)
ax[0].set_title('Distribución de la categoria "Etnia"')
ax[0].set_xlabel('')
ax[0].set_ylabel('')
ax[0].set_xlim(0, 260000)
ax[0].set_xticks(ticks=range(0, 300001, 50000))
ax[0].set_xticklabels(labels=[(str(x) + " mil") for x in range(0, 301, 50)])
ax[0].set_yticklabels(labels=data_5.index.str.capitalize())

graf_6 = sns.barplot(ax=ax[1], data=data_6, y=data_6.index, x='T. Documento')
graf_6.bar_label(graf_6.containers[0], fontsize=10)
ax[1].set_title('Distribución de la categoria "Estado"')
ax[1].set_xlabel('')
ax[1].set_ylabel('')
ax[1].set_xlim(0, 180000)
ax[1].set_xticks(ticks=range(0, 180001, 30000))
ax[1].set_xticklabels(labels=[(str(x) + " mil") for x in range(0, 181, 30)])
ax[1].set_yticklabels(labels=data_6.index.str.capitalize())

plt.subplots_adjust(hspace=0.3)
plt.show()
No description has been provided for this image

A nivel geográfico no se mantiene la misma proporción entre los departamentos con mayor número de beneficiarios y sus municipios.

In [16]:
data_7 = pd.pivot_table(data=df_1[['Departamento', 'T. Documento']], index='Departamento', values='T. Documento', aggfunc='count', sort=False).sort_values(by='T. Documento', ascending=False).head(10)
data_8 = pd.pivot_table(data=df_1[['Municipio', 'T. Documento']], index='Municipio', values='T. Documento', aggfunc='count', sort=False).sort_values(by='T. Documento', ascending=False).head(10)

fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(15,6))

graf_7 = sns.barplot(ax=ax[0], data=data_7, y=data_7.index, x='T. Documento')
graf_7.bar_label(graf_7.containers[0], fontsize=10)
ax[0].set_title('Distribución top 10 de la categoria "Departamento"')
ax[0].set_xlabel('')
ax[0].set_ylabel('')
ax[0].set_xlim(0, 30000)
ax[0].set_xticks(ticks=range(0, 30001, 5000))
ax[0].set_xticklabels(labels=[(str(x) + " mil") for x in range(0, 31, 5)])
ax[0].set_yticklabels(labels=data_7.index.str.capitalize())

graf_8 = sns.barplot(ax=ax[1], data=data_8, y=data_8.index, x='T. Documento')
graf_8.bar_label(graf_8.containers[0], fontsize=10)
ax[1].set_title('Distribución top 10 de la categoria "Municipio"')
ax[1].set_xlabel('')
ax[1].set_ylabel('')
ax[1].set_xlim(0, 21000)
ax[1].set_xticks(ticks=range(0, 21001, 3000))
ax[1].set_xticklabels(labels=[(str(x) + " mil") for x in range(0, 22, 3)])
ax[1].set_yticklabels(labels=data_8.index.str.capitalize())

plt.subplots_adjust(wspace=0.4)
plt.show()
No description has been provided for this image

Estas dos categorías resultan poco útiles para el análisis debido que solo tienen un tipo de registro por lo cual deberán ser eliminadas de la base de datos.

In [17]:
data_7 = pd.pivot_table(data=df_1[['T. Beneficio', 'T. Documento']], index='T. Beneficio', values='T. Documento', aggfunc='count', sort=False).sort_values(by='T. Documento', ascending=False)
data_8 = pd.pivot_table(data=df_1[['T. Asignacion', 'T. Documento']], index='T. Asignacion', values='T. Documento', aggfunc='count', sort=False).sort_values(by='T. Documento', ascending=False)

fig, ax = plt.subplots(nrows=2, ncols=1, figsize=(9,5), sharex=True)

graf_7 = sns.barplot(ax=ax[0], data=data_7, y=data_7.index, x='T. Documento')
graf_7.bar_label(graf_7.containers[0], fontsize=10)
ax[0].set_title('Distribución de la categoria "Tipo de beneficio"')
ax[0].set_xlabel('')
ax[0].set_ylabel('')
ax[0].set_yticklabels(labels=data_7.index.str.capitalize())

graf_8 = sns.barplot(ax=ax[1], data=data_8, y=data_8.index, x='T. Documento')
graf_8.bar_label(graf_8.containers[0], fontsize=10)
ax[1].set_title('Distribución de la categoria "Tipo de asignacion"')
ax[1].set_xlabel('')
ax[1].set_ylabel('')
ax[1].set_xlim(0, 270000)
ax[1].set_xticks(ticks=range(0, 270001, 30000))
ax[1].set_xticklabels(labels=[(str(x) + " mil") for x in range(0, 271, 30)])
ax[1].set_yticks(ticks=range(0,1))
ax[1].set_yticklabels(labels=['Incentivo\nmonetario\ncondicionado\na la formación'])

plt.subplots_adjust(hspace=0.5)
plt.show()
No description has been provided for this image

En la base de datos apenas si hay registros del año 2016, no se sabe cuál sea la justificación de esta ausencia, también se ve que julio es el mes donde más se inscriben beneficiarios.

In [18]:
data_9 = pd.pivot_table(data=df_1[['Año', 'T. Documento']], index='Año', values='T. Documento', aggfunc='count', sort=False).sort_values(by='Año')
data_10 = pd.pivot_table(data=df_1[['Mes', 'T. Documento']], index='Mes', values='T. Documento', aggfunc='count', sort=False).sort_values(by='T. Documento', ascending=False)

fig, ax = plt.subplots(nrows=2, ncols=1, figsize=(9,10))

graf_9 = data_9.plot(ax=ax[0], kind="barh", legend=False)
graf_9.bar_label(graf_9.containers[0], fontsize=10)
ax[0].set_title('Distribución de la categoria "Año"')
ax[0].set_xlabel('')
ax[0].set_ylabel('')
ax[0].set_xlim(0, 100000)
ax[0].set_xticks(ticks=range(0, 100001, 20000))
ax[0].set_xticklabels(labels=[(str(x) + " mil") for x in range(0, 101, 20)])

graf_10 = sns.barplot(ax=ax[1], data=data_10, y=data_10.index, x='T. Documento')
graf_10.bar_label(graf_10.containers[0], fontsize=10)
ax[1].set_title('Distribución de la categoria "Estado"')
ax[1].set_xlabel('')
ax[1].set_ylabel('')
ax[1].set_xlim(0, 80000)
ax[1].set_xticks(ticks=range(0, 80001, 10000))
ax[1].set_xticklabels(labels=[(str(x) + " mil") for x in range(0, 81, 10)])

plt.subplots_adjust(hspace=0.3)
plt.show()
No description has been provided for this image

Se interpreta que muchos de los beneficiarios al momento de terminar su bachillerato ingresas rápidamente a un nivel superior de formación debido al número de tarjetas de identidad.

In [19]:
data_11 = pd.pivot_table(data=df_1[['T. Documento', 'Año']], index='T. Documento', values='Año', aggfunc='count', sort=False).sort_values(by='Año', ascending=False)
data_12 = pd.pivot_table(data=df_1[['Estado Civil', 'T. Documento']], index='Estado Civil', values='T. Documento', aggfunc='count', sort=False).sort_values(by='T. Documento', ascending=False)

fig, ax = plt.subplots(nrows=2, ncols=1, figsize=(9,8))

graf_11 = sns.barplot(ax=ax[0], data=data_11, y=data_11.index, x='Año')
graf_11.bar_label(graf_11.containers[0], fontsize=10)
ax[0].set_title('Distribución de la categoria "T. Documento"')
ax[0].set_xlabel('')
ax[0].set_ylabel('')
ax[0].set_xlim(0, 180000)
ax[0].set_xticks(ticks=range(0, 180001, 30000))
ax[0].set_xticklabels(labels=[(str(x) + " mil") for x in range(0, 181, 30)])

graf_12 = sns.barplot(ax=ax[1], data=data_12, y=data_12.index, x='T. Documento')
graf_12.bar_label(graf_12.containers[0], fontsize=10)
ax[1].set_title('Distribución de la categoria "Estado Civil"')
ax[1].set_xlabel('')
ax[1].set_ylabel('')
ax[1].set_xlim(0, 280000)
ax[1].set_xticks(ticks=range(0, 280001, 40000))
ax[1].set_xticklabels(labels=[(str(x) + " mil") for x in range(0, 281, 40)])

plt.subplots_adjust(hspace=0.4)
plt.show()
No description has been provided for this image

La categoría “Ultimo valor asignado” deberá ser eliminada debido a que su información es poco relevante, sin embargo, el valor total asignado si podría ser útil para determinar cuánto tiempo se usó estudiando.

In [20]:
data_13 = pd.pivot_table(data=df_1[['V. Ult. Asignado','T. Documento']], index='V. Ult. Asignado', values='T. Documento', aggfunc='count', sort=False).sort_values(by='T. Documento', ascending=False)
data_14 = pd.pivot_table(data=df_1[['V. Total Asignado', 'T. Documento']], index='V. Total Asignado', values='T. Documento', aggfunc='count', sort=False).sort_values(by='T. Documento', ascending=False)

fig, ax = plt.subplots(nrows=2, ncols=1, figsize=(9,8))

graf_13 = sns.barplot(ax=ax[0], data=data_13, y=data_13.index, x='T. Documento')
graf_13.bar_label(graf_13.containers[0], fontsize=10)
ax[0].set_title('Distribución de la categoria "Ultimo valor asignado"')
ax[0].set_xlabel('')
ax[0].set_ylabel('')
ax[0].set_xlim(0, 280000)
ax[0].set_xticks(ticks=range(0, 280001, 40000))
ax[0].set_xticklabels(labels=[(str(x) + " mil") for x in range(0, 281, 40)])

graf_14 = sns.barplot(ax=ax[1], data=data_14, y=data_14.index, x='T. Documento')
graf_14.bar_label(graf_14.containers[0], fontsize=10)
ax[1].set_title('Distribución de la categoria "Valor total Asignado"')
ax[1].set_xlabel('')
ax[1].set_ylabel('')
ax[1].set_xlim(0, 90000)
ax[1].set_xticks(ticks=range(0, 90001, 15000))
ax[1].set_xticklabels(labels=[(str(x) + " mil") for x in range(0, 91, 15)])

plt.subplots_adjust(hspace=0.4)
plt.show()
No description has been provided for this image

Se encuentra que a mayoría de la población esa sisbenizada, además del gran número de personas desplazadas, este campo no contiene valores ND.

In [22]:
data_15 = pd.pivot_table(data=df_1[['T. Poblacion','T. Documento']], index='T. Poblacion', values='T. Documento', aggfunc='count', sort=False).sort_values(by='T. Documento', ascending=False)

fig, ax = plt.subplots(figsize=(9,4))

graf_15 = sns.barplot(data=data_15, y=data_15.index, x='T. Documento')
graf_15.bar_label(graf_15.containers[0], fontsize=10)
ax.set_title('Distribución de la categoria "Tipo de poblacion"')
ax.set_xlabel('')
ax.set_ylabel('')
ax.set_xlim(0, 210000)
ax.set_xticks(ticks=range(0, 210001, 30000))
ax.set_xticklabels(labels=[(str(x) + " mil") for x in range(0, 211, 30)])
ax.set_yticklabels(labels=data_15.index.str.capitalize())

plt.show()
No description has been provided for this image

ADM-3 Prepare and explore data.¶

Descripción de la etapa de Prepare and explore data.¶

Se realizarán los siguientes pasos con el fin de obtener los registros idóneos para la posterior exploración de los datos:

  • ADM-3.1 Eliminación de los datos duplicados.
  • ADM-3.2 Imputación o eliminación de los datos nulos o vacíos.
  • ADM-3.3 Tratamiento de los datos atípicos.
  • ADM-3.4 Normalización y estandarización del conjunto de datos.
  • ADM-3.5 Codificación de variables categóricas a cualitativas.
  • ADM-3.6 Selección de categorías de mayor importancia para el análisis.

ADM-3.1 Eliminación de los datos duplicados.¶

En este caso se encontró que la columna de "fecha final“, “T. Beneficio” y “T. Asignación” solo tienen un único registro que se repite en todos los registros, las columnas “Estado Civil” y “Discapacidad” tiene mayoritariamente registros ND por lo cual se procederá a eliminar completamente todas estas columnas. Con esta modificación se pasa de 16 a 14 columnas.

  • Estado
  • Etnia
  • Fecha Inicial
  • Genero
  • N. Escolaridad
  • Departamento
  • Municipio
  • Rango Edad
  • T. Población
  • V. Total Asignado
  • V. Ult. Asignado
  • Año
  • Mes¶

  • Mes
In [23]:
df_1 = df_1.drop(['Fecha Final', 'Discapacidad', 'T. Beneficio', 'T. Asignacion', 'Estado Civil', 'V. Ult. Asignado'], axis=1)
columnas_df_1 = list(df_1.columns)
df_1.columns
Out[23]:
Index(['Estado', 'Etnia', 'Fecha Inicial', 'Genero', 'N. Escolaridad',
       'Departamento', 'Municipio', 'Rango Edad', 'T. Documento',
       'T. Poblacion', 'V. Total Asignado', 'Año', '# Mes', 'Mes'],
      dtype='object')

ADM-3.2 Imputación o eliminación de los datos nulos o vacíos.¶

Descripción:

Con las categorías ya filtradas la mayor parte de los registros no tienen datos nulos exceptuando ciertas columnas como “Etnia” o “N. Educativo”, estas categorías tienen la característica de que sus registros son del tipo categórico por lo cual realizar una imputación de datos no asegura una distribución muy precisa de los datos por lo cual se opta por omitir estos registros ND al momento de analizar dichas categorías.

ADM-3.3 Tratamiento de los datos atípicos.¶

Descripción:

Debido al tipo a que los datos en su mayoría son del tipo categórico no se logran encontrar datos atípicos como seria usual en una categoría con registros numéricos.

ADM-3.4 Normalización y estandarización del conjunto de datos.¶

Descripción:

Para el caso de la base de datos publicas los datos ya fueron previamente normalizados por lo cual no es necesario realizar nuevamente el proceso y para los registros obtenidos de la encuesta no se es necesario debido.

ADM-3.5 Codificación de variables categóricas a cuantitativas.¶

Descripción:

No se requiere para el avance del análisis la cuantificación de ninguna de las categorías en la base de datos ni en la encuesta.

ADM-3.6 Selección de categorías de mayor importancia para el análisis.¶

Descripción:

Se seleccionaron ya las categorías con las cuales se piensa dar inicio al análisis, cabe destacar la reducción significativa del número de categorías inicial a lo que se tiene ahora, debido a lo irrelevante o la mala recolección de los datos para dicha categoría.

  • Estado
  • Etnia
  • Fecha Inicial
  • Genero
  • N. Escolaridad
  • Departamento
  • Municipio
  • Rango Edad
  • T. Población
  • V. Total Asignado
  • V. Ult. Asignado
  • Año
  • Mes¶

  • Mes

ADM-4 Data analysis.¶

Descripción de la etapa de data analysis.¶

Se realizarán los siguientes pasos con el fin de obtener los registros idóneos para la posterior exploración de los datos:

  • ADM-4.1 Determinar el nivel de correlación entre variables.
  • ADM-4.2 Explorar las variables estadísticas descriptivas.
  • ADM-4.3 Realizar visualizaciones de los datos.
  • ADM-4.4 Evolución de las variables en series de tiempo.

ADM-4.1 Determinar el nivel de correlación entre variables.¶

Descripción:

Se aprecia en el mapa de correlación que la mayoría de las categorías tienen una correlación nula y tendiendo algo a negativa, las pocas variables que logran tener algo de correlación positiva son las de tipo fecha.

In [24]:
h = df_1.apply(lambda x: pd.factorize(x)[0]).corr()

plt.figure(figsize = (13,7.7))
sns.heatmap(data = h, annot = True, fmt='.1g')

plt.show()
/tmp/ipykernel_34/1569916088.py:1: FutureWarning: In a future version, the Index constructor will not infer numeric dtypes when passed object-dtype sequences (matching Series behavior)
  h = df_1.apply(lambda x: pd.factorize(x)[0]).corr()
/tmp/ipykernel_34/1569916088.py:1: FutureWarning: In a future version, the Index constructor will not infer numeric dtypes when passed object-dtype sequences (matching Series behavior)
  h = df_1.apply(lambda x: pd.factorize(x)[0]).corr()
No description has been provided for this image

ADM-4.1 Determinar el nivel de correlación entre variables.¶

Descripción:

Para el caso de la encuesta también se mantiene el mismo patrón de correlación donde las categorías de tipo fecha y las de datos personales son las únicas que tienen una correlación positiva.

In [5]:
df_e = pd.read_csv('Data/Analisis_ Evolucion del nivel academico.csv')
df_e.columns = ['Marca temporal', 'Correo', 'Nombre', 'Apellido',
       'Rango de edad', 'Departamento', '¿Es o fue benef. del JeA?',
       '# de años recibiendo JeA?', '¿Tenia conocimiento sobre la inf.?',
       'Uso JeA para continuar formandose?', '¿Trans. académico que realizado?',
       'N. académico cuando recibio JeA?', 'N. académicos culminados?',
       '¿Estudia, trabaja o ambas?', '¿Cómo realizo su 1 formación?', 'Trabaja,¿cont. su formación?']
df_e.head()
Out[5]:
Marca temporal Correo Nombre Apellido Rango de edad Departamento ¿Es o fue benef. del JeA? # de años recibiendo JeA? ¿Tenia conocimiento sobre la inf.? Uso JeA para continuar formandose? ¿Trans. académico que realizado? N. académico cuando recibio JeA? N. académicos culminados? ¿Estudia, trabaja o ambas? ¿Cómo realizo su 1 formación? Trabaja,¿cont. su formación?
0 2023/07/05 10:21:53 a. m. GMT-5 Exrabaguerrero@ut.edu.co Esith xiomara Raba guerrero 26 - 28 Bogota No. Nunca he sido beneficiario 1 No No No hice uso de este beneficio Pregrado Pregrado Ambas Presencial A distancia
1 2023/07/05 10:24:48 a. m. GMT-5 ktapiaf@ut.edu.co Kelly Yazmin Tapia Ferrer 16 - 18 Tolima Sí. Actualmente soy beneficiario 2 Sí No No hice uso de este beneficio Pregrado Técnico Estudiante Presencial Todavía no he tenido mi primer experiencia lab...
2 2023/07/05 10:31:09 a. m. GMT-5 dagonzalezpen@ut.edu.co Daniela González 22 - 25 Cundinamarca Sí. Actualmente soy beneficiario 2 No No No hice uso de este beneficio Pregrado Técnico Ambas A distancia A distancia
3 2023/07/05 10:31:23 a. m. GMT-5 Blardilag@ut.edu.co Betsy Liliana Ardila García 22 - 25 Tolima Sí. Actualmente soy beneficiario 4 No No No hice uso de este beneficio Pregrado Pregrado Ambas Presencial A distancia
4 2023/07/05 10:31:35 a. m. GMT-5 Mfsolanov@ut.edu.co Marfi Fernanda Solano Vargas 26 - 28 Tolima Sí. Actualmente soy beneficiario 4 No No No hice uso de este beneficio Pregrado Pregrado Estudiante A distancia Todavía no he tenido mi primer experiencia lab...
In [25]:
z = df_e.apply(lambda x: pd.factorize(x)[0]).corr()

plt.figure(figsize = (13,7.7))
sns.heatmap(data = z, annot=True, fmt='.1g')

plt.show()
No description has been provided for this image
In [26]:
df_e = pd.read_csv('/kaggle/input/enc-universitarios/Anlisis_ Evolucin del nivel acadmico.csv')
df_e.columns = ['Marca temporal', 'Correo', 'Nombre', 'Apellido',
       'Rango de edad', 'Departamento', 'Pregunta 1',
       'Pregunta 2', 'Pregunta 3', 'Pregunta 4', 'Pregunta 5',
       'Pregunta 6', 'Pregunta 7', 'Pregunta 8', 'Pregunta 9', 'Pregunta 10']

z = df_e.apply(lambda x: pd.factorize(x)[0]).corr()

plt.figure(figsize = (13,7.7))
sns.heatmap(data = z, annot=True, fmt='.1g')

plt.show()
No description has been provided for this image

ADM-4.2 Explorar las variables estadísticas descriptivas.¶

Descripción:

Estas serían las estadísticas descriptivas de las categorías escogida para realizar el análisis, en el siguiente paso se apreciarán de forma más grafica.

In [27]:
df_1.describe(exclude = int, datetime_is_numeric=False)
/tmp/ipykernel_34/1893674079.py:1: FutureWarning: Treating datetime data as categorical rather than numeric in `.describe` is deprecated and will be removed in a future version of pandas. Specify `datetime_is_numeric=True` to silence this warning and adopt the future behavior now.
  df_1.describe(exclude = int, datetime_is_numeric=False)
Out[27]:
Estado Etnia Fecha Inicial Genero N. Escolaridad Departamento Municipio Rango Edad T. Documento T. Poblacion V. Total Asignado Año # Mes Mes
count 260112 260112 260112 260112 260112 260112 260112 260112 260112 260112 260112 260112.0 260112.0 260112
unique 2 9 50 3 7 33 1018 5 5 5 5 6.0 12.0 12
top NO ACTIVO ND 2014-07-01 00:00:00 Mujer ND ANTIOQUIA BOGOTA D.C. 18-29 CC SISBEN 1.500.001 - 3.000.000 2014.0 7.0 July
freq 158945 242782 29570 144076 138197 25672 19476 213376 169793 206694 77971 94089.0 75408.0 75408
first NaN NaN 2013-01-01 00:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
last NaN NaN 2018-09-01 00:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

ADM-4.3 Realizar visualizaciones de los datos.¶

Exceptuando los registros ND, se encuentra que en el top 7 dptos. el nivel académico que predomina es el tecnólogo, la población desplazada destaca en todos los niveles académicos.

image.png
Grafica en power bi
image.png
Grafica en power bi

Ahora observando la evoluciónde la categoría género a través del tiempo, se aprecia la tendencia de que las mujeres tienen mayor número de beneficiarias.

image.png
Grafica en power bi
image.png
Grafica en power bi

La distribución de los beneficiarios en los mapas indica que una mayoría significativa de los beneficiarios se encuentra reunida alrededor de las grandes urbes del país.

image.png
Grafica en power bi
image.png
Grafica en power bi

Se puede suponer que el rango de 30-49 sea de los inicios del programa o errores de ingreso ya que la edad focal del beneficio no permite las edades contenidas en dicho rango.

image.png
Grafica en power bi
image.png
Grafica en power bi

El Sisbén y los afrocolombianos son el tipo de población y etnia más predominantes entre los beneficiaros.

image.png
Grafica en power bi
image.png
Grafica en power bi

El Sisbén y los afrocolombianos son el tipo de población y etnia más predominantes entre los beneficiaros.

image.png
Grafica en power bi
image.png
Grafica en power bi

ADM-4.4 Evolución de las variables en series de tiempo.¶

La disminución de beneficiarios a través del tiempo puede suponer que los registros estén incompletos o que los jóvenes desconozcan cada vez más el programa.

image.png
Grafica en power bi
image.png
Grafica en power bi

Es motivo de una posterior investigación el saber porque el número de nuevos beneficiarios disminuye en los años posteriores.

image.png
Grafica en power bi
image.png
Grafica en power bi

Es motivo de una posterior investigación el saber porque el número de nuevos beneficiarios disminuye en los años posteriores.

image.png
Grafica en power bi
image.png
Grafica en power bi

ADM-5 Present Findings.¶

Descripción de la etapa de Present Findings.¶

Descripción:

Se realizarán los siguientes pasos con el fin de obtener los registros idóneos para la posterior exploración de los datos:

  • ADM-5.1 Creación del contexto para el lector de la información.
  • ADM-5.2 Enseñar los hallazgos claves.
  • ADM-5.3 Establecer los resultados logrados.
  • ADM-5.4 Definir la conclusiones y recomendaciones.

ADM-5.1 Creación del contexto para el lector de la información.¶

Descripción:

Se parte de la premisa de el nivel de implicación que tiene el programa de jóvenes en acción del departamento de prosperidad social en la continuación de su proceso formativo a un nivel superior de educación, debido a que el programa cuenta con una continuidad en un periodo de tiempo más largo si el estudiante decide seguir estudiando, por ende se quiere identificar cuantos de los beneficiarios tenían conocimiento de este beneficio, si hicieron uso del mismo y que tanto influyo en la decisión de seguir formándose.

La investigación se encontró con múltiples altibajos, debido a que la base de datos públicas que es nuestro mayor volumen de datos se encontraba significativamente llena de registros “ND = No Data”, por lo cual no resultan muy útiles para el análisis, por otra parte, una de las categorías más importantes como lo era “Fecha de finalización”, resulto ser una categoría con un único registro, por lo cual resulto imposible calcular cuánto tiempo permaneció en el programa cada uno de los registros.

Con estas implicaciones el objetivo principal de la investigación era prácticamente imposible de conseguir, debido a esto nos vimos en la necesidad de basarnos en las proporciones obtenidas en la encuesta realizada, para de esta forma intentar extrapolar una información sobre la otra.

De esta forma se debe hacer claridad en el hecho de que el objetivo principal de la investigación se puede considerar parcialmente alcanzada o directamente no alcanzado. Sin embargo, se encontraron hallazgos importantes que serán compartidos en el siguiente punto.

ADM-5.2 Enseñar los hallazgos claves.¶

Descripción:

Los siguientes datos son los hallazgos obtenidos de las bases de datos públicas y de la encuesta realizada.

  1. El nivel académico con más beneficiarios es tecnólogo con un total de 54443.
  2. Los niveles académicos técnico y tecnólogo tienen un número de beneficiarios bastante próximo 31243 y 29639 respectivamente.
  3. La mayoría de los beneficiarios son mayores de edad con un total de 169793.
  4. Son pocos los beneficiarios identificados como discapacitados con un total de 441.
  5. Las mujeres son el género con mayor número de beneficiarias con un total de 144074.
  6. La mayoría de los beneficiarios no se identifican con ningún tipo de etnia con un total de 242782.
  7. La etnia con más beneficiarios es afrocolombiana con un total de 11291.
  8. El top 5 de departamentos con mayor número de beneficiarios es Antioquia con 25672, Bogotá con 19476, Valle del Cauca con 19372, Atlántico con 18589 y Bolívar con 15293, mostrando una concentración en el centro y en la costa atlántica del país.
  9. El top 5 municipios con mayor número de empresarios es Bogotá con 19476, Barranquilla con 13490, Medellín con 13362, Cartagena con 11775 y Cúcuta con 8539.
  10. El año con mayor número de ingreso de beneficiarios fue el 2014.
  11. El mes con mayor número de ingresos de beneficiarios es julio.
  12. La mayoría de los beneficiarios se clasifican como sisbenizados con un total de 206604, seguido por los desplazados con un total de 33321.
  13. El rango mayoritario de edad entre los beneficiarios encuestados es 22 a 25 años con 41,56%.
  14. De los beneficiarios encuestados el 48,05% han recibido por 2 años el subsidio de JeA.
  15. De los beneficiarios encuestados el 70,13% no tenían conocimiento del estado de tránsito dispuesto en JeA.
  16. De los beneficiarios encuestados el 63,64% no usaron el beneficio de en tránsito para su formación académica.
  17. De los beneficiarios encuestados el 15,58% realizo el tránsito de tecnólogo > pregrado, el 14,29% realizo el tránsito de técnico > pregrado y el 1,3% realizo el tránsito de técnico > tecnólogo.
  18. De los beneficiarios encuestados el 71,43 % inicio a recibir JeA en el nivel académico pregrado.
  19. De los beneficiarios encuestados el 61,04% se graduaron de una tecnología.
  20. De los beneficiarios encuestados el 55,84% estudia y trabajan al mismo tiempo.
  21. De los beneficiarios encuestados el 55,84% realizaron su primera formación en formato presencial.
  22. De los beneficiarios encuestados el 51,95% que trabaja continua su formación en formato a distancia.
  23. La tendencia del número de beneficiarios en base a los datos obtenidos tiende a ir a la baja.

ADM-5.3 Enseñar los hallazgos incidentales.¶

Descripción:

Los siguientes hallazgos se obtienen producto del análisis y el planteamiento de hipótesis para obtener una posible causa de origen de alguna irregularidad o anomalía en los datos.

  1. El número de registros ND tan significativamente alto en múltiples categorías de alta importancia como por ejemplo el N. de escolaridad, se supone un incorrecto diligenciamiento o perdida de los datos.
  2. Categorías que solo cuentan con un tipo de registro como por ejemplo fecha ultima beneficio asignado, se supone un incorrecto diligenciamiento o el no uso de la categoría.
  3. La ausencia casi total de registros en ciertos intervalos de tiempo como por ejemplo el año 2016, se supone una pérdida total de los datos.
  4. Un bajonivel de segmentación en la edad de los beneficiarios ya que solo le logra encontrar dos tipos de rangos etarios, de las cuales una de ellas no concuerda con los lineamientos establecidos por el programa de JeA.
  5. Poca o nula información pública de los formatos para el registro de información que alimentan la base de datos, se supone esta como una de las principales causales del alto número de registros de datos ND.
  6. Poca o nula información pública del ciclo del procesamiento y aseguramiento de la calidad del dato para el programa JeA, se supone esta otra razón para comprenderel porqué del estado actual en que se encuentra la base de datos.
  7. Poca o nula información pública de las aptitudes y requerimientos formativos de las personas encargadas de realizar los registros de los datos, se supone en otra posible causal del alto número de registros ND.