Chicas en Tecnología / Sep 09 2019
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)
carrera | carrera_grupo | Carrera_normalizada | |
---|---|---|---|
0 | Abogado | Derecho | Abogacia |
1 | Abogado - Ciclo de Complementacion Curricular | Derecho | Abogacia |
2 | Abogado - MD | Derecho | Abogacia |
3 | Abogado Especialista en Administracion de Justicia | Derecho | Abogacia |
4 | Abogado especialista en Asesoramiento de Empresas | Derecho | Abogacia |
5 | Abogado Especialista en Asesoria Juridica de Empresas | Derecho | Abogacia |
6 | Abogado especialista en Derecho Administrativo Economico | Derecho | Abogacia |
7 | Abogado especialista en Derecho Ambiental | Derecho | Abogacia |
8 | Abogado especialista en Derecho de Alta Tecnologia | Derecho | Abogacia |
9 | Abogado especialista en Derecho Penal | Derecho | Abogacia |
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()
anio | provincia_id | carrera_grupo | estudiantes_total | estudiantes_varones | estudiantes_mujeres | nuevos_inscriptos_total | nuevos_inscriptos_varones | nuevos_inscriptos_mujeres | egresados_total | egresados_varones | egresados_mujeres | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2010 | 02 | Arquitectura | 24855.0 | 3388.0 | 3364.0 | 5310.0 | 1065.0 | 1096.0 | 1009.0 | 131.0 | 142.0 |
1 | 2010 | 02 | Arte | 49974.0 | 8199.0 | 17419.0 | 13002.0 | 2381.0 | 5101.0 | 1711.0 | 281.0 | 642.0 |
2 | 2010 | 02 | Deporte | 1249.0 | 632.0 | 617.0 | 354.0 | 162.0 | 192.0 | 79.0 | 41.0 | 38.0 |
3 | 2010 | 02 | Derecho | 68226.0 | 15672.0 | 17062.0 | 15716.0 | 4758.0 | 5347.0 | 6429.0 | 1262.0 | 1360.0 |
4 | 2010 | 02 | Economicas | 154088.0 | 50462.0 | 45495.0 | 37910.0 | 15289.0 | 13127.0 | 12229.0 | 4514.0 | 4278.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()
anio | provincia_id | carrera_grupo | estudiantes_total | estudiantes_varones | estudiantes_mujeres | nuevos_inscriptos_total | nuevos_inscriptos_varones | nuevos_inscriptos_mujeres | egresados_total | egresados_varones | egresados_mujeres | estudiantes_mujeres_pct | estudiantes_grupo_pct | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2010 | 02 | Arquitectura | 24855.0 | 3388.0 | 3364.0 | 5310.0 | 1065.0 | 1096.0 | 1009.0 | 131.0 | 142.0 | 0.13534500100583383 | 0.034287062238156786 |
1 | 2010 | 02 | Arte | 49974.0 | 8199.0 | 17419.0 | 13002.0 | 2381.0 | 5101.0 | 1711.0 | 281.0 | 642.0 | 0.3485612518509625 | 0.0689383081186742 |
2 | 2010 | 02 | Deporte | 1249.0 | 632.0 | 617.0 | 354.0 | 162.0 | 192.0 | 79.0 | 41.0 | 38.0 | 0.49399519615692555 | 0.0017229748837440286 |
3 | 2010 | 02 | Derecho | 68226.0 | 15672.0 | 17062.0 | 15716.0 | 4758.0 | 5347.0 | 6429.0 | 1262.0 | 1360.0 | 0.250080614428517 | 0.09411664084733394 |
4 | 2010 | 02 | Economicas | 154088.0 | 50462.0 | 45495.0 | 37910.0 | 15289.0 | 13127.0 | 12229.0 | 4514.0 | 4278.0 | 0.2952533617153834 | 0.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.