ETL

import pandas as pd
import os

import sys
sys.path.insert(0, '/proyecto-next-journal/scripts')

# módulos propios
from georef import add_unidades_territoriales_to_df
ls /proyecto-next-journal/data/output

Carga de inputs

#file
df_alumnos = pd.read_csv('/proyecto-next-journal/data/input/alumnos.csv',delimiter=',')
df_carreras = pd.read_csv('/proyecto-next-journal/data/input/carreras.csv',delimiter=',')

if os.path.exists('/proyecto-next-journal/data/output/universidades.csv'):
    df_universidades = pd.read_csv('/proyecto-next-journal/data/output/universidades.csv',delimiter=',',dtype={"provincia_id":str})
else:
    df_universidades_raw = pd.read_csv('/proyecto-next-journal/data/input/universidades.csv',delimiter=',')
    df_universidades_raw["lat"] = df_universidades_raw['coordenadas'].str.split(",").str[0]
    df_universidades_raw["lon"] = df_universidades_raw['coordenadas'].str.split(",").str[1]
    df_universidades = add_unidades_territoriales_to_df(df_universidades_raw, lat_col="lat", lon_col="lon")
    df_universidades.to_csv('/proyecto-next-journal/data/output/universidades.csv', sep=',', encoding='utf8', index=False)

Exporacion

df_carreras.head(10)
carreracarrera_grupoCarrera_normalizada
0AbogadoDerechoAbogacia
1Abogado - Ciclo de Complementacion CurricularDerechoAbogacia
2Abogado - MDDerechoAbogacia
3Abogado Especialista en Administracion de JusticiaDerechoAbogacia
4Abogado especialista en Asesoramiento de EmpresasDerechoAbogacia
5Abogado Especialista en Asesoria Juridica de EmpresasDerechoAbogacia
6Abogado especialista en Derecho Administrativo EconomicoDerechoAbogacia
7Abogado especialista en Derecho AmbientalDerechoAbogacia
8Abogado especialista en Derecho de Alta TecnologiaDerechoAbogacia
9Abogado especialista en Derecho PenalDerechoAbogacia
10 items
df_alumnos.head(10)
df_universidades.head(10)

Calculo evolucion de genero en carreras

df_alumnos_merged = df_alumnos.merge(df_carreras, how="left", left_on="carrera_titulo", right_on="carrera")
col_nulls = df_alumnos_merged.isnull().any()
col_nulls
anio ...ue dtype: bool
df_alumnos_merged.carrera_grupo.isnull().value_counts()
False 6037..., dtype: int64
variables = [
    "estudiantes_total","estudiantes_varones","estudiantes_mujeres",
    "nuevos_inscriptos_total","nuevos_inscriptos_varones","nuevos_inscriptos_mujeres",
    "egresados_total","egresados_varones","egresados_mujeres",
]
df_evolucion_carrera = df_alumnos_merged.groupby(["anio","carrera_grupo"]).sum()
df_evolucion_carrera = df_evolucion_carrera[variables]
df_evolucion_carrera = df_evolucion_carrera.reset_index()
#df_evolucion_carrera = df_evolucion_carrera.drop("index",1)
df_evolucion_carrera.head(10)
df_evolucion_carrera["estudiantes_mujeres_pct"] = df_evolucion_carrera.estudiantes_mujeres/df_evolucion_carrera.estudiantes_total
#incriptas como predictor de composicion e interes.
df_evolucion_carrera["inscripciones_mujeres_pct"] = df_evolucion_carrera.nuevos_inscriptos_mujeres/df_evolucion_carrera.nuevos_inscriptos_total
#agregar ratio de hombres
df_evolucion_carrera["estudiantes_hombres_pct"] = df_evolucion_carrera.estudiantes_varones/df_evolucion_carrera.estudiantes_total
df_evolucion_carrera.to_csv("/proyecto-next-journal/data/output/grupos_evolucion_genero.csv", encoding = "UTF8", index = False)

Grafico exploratorio

carreras

df_evolucion_carrera_carreras = df_alumnos_merged.groupby(["anio","carrera_grupo","carrera_nombre"]).sum()
df_evolucion_carrera_carreras = df_evolucion_carrera_carreras[variables]
df_evolucion_carrera_carreras = df_evolucion_carrera_carreras.reset_index()
df_evolucion_carrera_carreras["estudiantes_mujeres_pct"] = df_evolucion_carrera_carreras.estudiantes_mujeres/df_evolucion_carrera_carreras.estudiantes_total
#incriptas como predictor de composicion e interes.
df_evolucion_carrera_carreras["inscripciones_mujeres_pct"] = df_evolucion_carrera_carreras.nuevos_inscriptos_mujeres/df_evolucion_carrera_carreras.nuevos_inscriptos_total
#agregar ratio de hombres
df_evolucion_carrera_carreras["estudiantes_hombres_pct"] = df_evolucion_carrera_carreras.estudiantes_varones/df_evolucion_carrera_carreras.estudiantes_total
df_evolucion_carrera_carreras.to_csv("/proyecto-next-journal/data/output/grupos_carreras_evolucion_genero.csv", encoding = "UTF8", index = False)
df_evolucion_carrera_universidad = df_alumnos_merged.groupby(["anio","carrera_grupo","institucion_nombre_new"]).sum()
df_evolucion_carrera_universidad = df_evolucion_carrera[variables]
df_evolucion_carrera_universidad = df_evolucion_carrera.reset_index()
df_evolucion_carrera_universidad["estudiantes_mujeres_pct"] = df_evolucion_carrera_universidad.estudiantes_mujeres/df_evolucion_carrera_universidad.estudiantes_total
#incriptas como predictor de composicion e interes.
df_evolucion_carrera_universidad["inscripciones_mujeres_pct"] = df_evolucion_carrera_universidad.nuevos_inscriptos_mujeres/df_evolucion_carrera_universidad.nuevos_inscriptos_total
#agregar ratio de hombres
df_evolucion_carrera_universidad["estudiantes_hombres_pct"] = df_evolucion_carrera_universidad.estudiantes_varones/df_evolucion_carrera_universidad.estudiantes_total
df_evolucion_carrera_universidad.to_csv("/proyecto-next-journal/data/output/carreras_universidad_evolucion_genero.csv", encoding = "UTF8", index = False)
df_universidades.head()
# chequea si hay instituciones faltantes para el merge
instituciones_en_alumnos = set(df_alumnos_merged.institucion_nombre.unique())
instituciones_en_universidades = set(df_universidades.institucion_nombre.unique())

instituciones_en_universidades - instituciones_en_alumnos
{'Universidad Autónoma de Entre ríos', 'Universidad Favaloro', 'Universidad Nacional de Tierra del Fuego, Antártida e Islas del Atlántico Sur', 'Universidad de la Fraternidad de Agrupaciones Santo Tomás de Aquino'}
df_universidades_merged = df_alumnos_merged.merge(df_universidades, how="left", left_on="institucion_nombre_new", right_on="institucion_nombre")
df_universidades_merged.head()
df_evolucion_universidades = df_universidades_merged.groupby(["anio","provincia_id","carrera_grupo"]).sum()
df_evolucion_universidades = df_evolucion_universidades[variables]
df_evolucion_universidades = df_evolucion_universidades.reset_index()
df_evolucion_universidades.head()
anioprovincia_idcarrera_grupoestudiantes_totalestudiantes_varonesestudiantes_mujeresnuevos_inscriptos_totalnuevos_inscriptos_varonesnuevos_inscriptos_mujeresegresados_totalegresados_varonesegresados_mujeres
0201002Arquitectura24855.03388.03364.05310.01065.01096.01009.0131.0142.0
1201002Arte49974.08199.017419.013002.02381.05101.01711.0281.0642.0
2201002Deporte1249.0632.0617.0354.0162.0192.079.041.038.0
3201002Derecho68226.015672.017062.015716.04758.05347.06429.01262.01360.0
4201002Economicas154088.050462.045495.037910.015289.013127.012229.04514.04278.0
5 items
df_evolucion_universidades["estudiantes_mujeres_pct"] = df_evolucion_universidades.estudiantes_mujeres/df_evolucion_universidades.estudiantes_total
estudiantes_totales = df_evolucion_universidades.groupby(["anio", 'provincia_id']).sum()["estudiantes_total"]
df_evolucion_universidades['estudiantes_grupo_pct'] = df_evolucion_universidades.apply(
    lambda row: row["estudiantes_total"] / estudiantes_totales[row["anio"], row["provincia_id"]],
    axis=1
)
df_evolucion_universidades.head()
anioprovincia_idcarrera_grupoestudiantes_totalestudiantes_varonesestudiantes_mujeresnuevos_inscriptos_totalnuevos_inscriptos_varonesnuevos_inscriptos_mujeresegresados_totalegresados_varonesegresados_mujeresestudiantes_mujeres_pctestudiantes_grupo_pct
0201002Arquitectura24855.03388.03364.05310.01065.01096.01009.0131.0142.00.135345001005833830.034287062238156786
1201002Arte49974.08199.017419.013002.02381.05101.01711.0281.0642.00.34856125185096250.0689383081186742
2201002Deporte1249.0632.0617.0354.0162.0192.079.041.038.00.493995196156925550.0017229748837440286
3201002Derecho68226.015672.017062.015716.04758.05347.06429.01262.01360.00.2500806144285170.09411664084733394
4201002Economicas154088.050462.045495.037910.015289.013127.012229.04514.04278.00.29525336171538340.21256185259115282
5 items
df_evolucion_universidades.to_csv("/proyecto-next-journal/data/output/ubicacion_evolucion_genero.csv", encoding = "UTF8", index = False)
##ETL Markers de universidades
def crear_universidad(mapa,latitud, longitud, universidad_nombre, carreras_grupos):
    """ Pone una universidad en el mapa con información en el marker.

    Args:
        latitud (float):
        longitud (float):
        universidad_nombre (str):
        carreras_grupos (list):
    """
    
def concatenate_map(grupos_carreras):
    grupos_str = [str(grupo) for grupo in set(grupos_carreras) if pd.notnull(grupo)]
    return ",".join(grupos_str)

    
serie_lista_grupos = df_universidades_merged.groupby("institucion_nombre_new")["carrera_grupo"].apply(concatenate_map)
serie_lista_carrera = df_universidades_merged.groupby("institucion_nombre_new")["carrera_nombre"].apply(concatenate_map)
df_ubicacion_universidades_grupos = df_universidades.merge(
    serie_lista_grupos, how="left", left_on="institucion_nombre", right_index=True)
df_ubicacion_universidades_grupos = df_ubicacion_universidades_grupos.merge(
    serie_lista_carrera, how="left", left_on="institucion_nombre", right_index=True)
df_ubicacion_universidades_grupos.to_csv("/proyecto-next-journal/data/output/universidades_mapa.csv", encoding = "UTF8", index = False)
#tasas de egresos pero no lineamente, buscar la formula, estandariza el año de duracion.