Chicas en Tecnología / Sep 28 2019
Género y tecnología: ¿qué eligen los estudiantes?
# módulos propios import sys sys.path.insert(0, '/viz-carreras-nexjournal/scripts') import mapas, pygal_helpers from pygal_helpers import df_to_pygal_line, get_pygal_html from helpers import format_pct, get_bins # dependencias externas import pandas as pd import folium from IPython.display import HTML, display
Evolución de género en carreras de tecnología
df_evolucion_carreras = pd.read_csv('/viz-carreras-nexjournal/data/output/grupos_evolucion_genero.csv') df_evolucion_grupos_carreras = pd.read_csv('/viz-carreras-nexjournal/data/output/grupos_carreras_evolucion_genero.csv')
¿Cómo evolucionó la proporción de estudiantes femeninos en carreras de tecnología?
def generate_chart_evolucion_grupos(carrera_grupo, indicador): """Genera gráfico % de est. femeninos por grupo.""" serie_grupo_carrera = df_evolucion_carreras[ df_evolucion_carreras.carrera_grupo.isin(carrera_grupo)][[ "anio", 'carrera_grupo', indicador]] serie_grupo_carrera[indicador]=serie_grupo_carrera[indicador].apply(format_pct) df_pivot_serie_grupo_carrera = serie_grupo_carrera.pivot_table( index='anio', columns='carrera_grupo', values=indicador) return HTML(get_pygal_html(df_to_pygal_line(df_pivot_serie_grupo_carrera)))
generate_chart_evolucion_grupos(["Tecnologia"], "estudiantes_mujeres_pct")
¿Hay algunos títulos en particular que expliquen mejor esta tendencia negativa?
def generate_chart_evolucion_titulos(carrera_grupo): """Evolucion % est. femeninos de titulos de uno o varios grupos.""" serie_grupo_carrera = df_evolucion_grupos_carreras[ df_evolucion_grupos_carreras.carrera_grupo.isin(carrera_grupo)][[ "anio", 'carrera_nombre', "estudiantes_mujeres_pct"]] df_pivot_serie_grupo_carrera = serie_grupo_carrera.pivot_table( index='anio', columns='carrera_nombre', values='estudiantes_mujeres_pct') return HTML(get_pygal_html(df_to_pygal_line(df_pivot_serie_grupo_carrera)))
generate_chart_evolucion_titulos(["Tecnologia"])
Comparación de género por provincias y universidades
df_universidades = pd.read_csv('viz-carreras-nexjournal/data/output/universidades_mapa.csv') df_evolucion_ubicacion = pd.read_csv('viz-carreras-nexjournal/data/output/ubicacion_evolucion_genero.csv', dtype={'provincia_id': str}) # corrige identificadores de provincias, que deben tener 2 digitos df_evolucion_ubicacion['provincia_id'] = df_evolucion_ubicacion.provincia_id.str.zfill(2)
# todos los mapas van a estar centrados ahí argentina_coords = [-35, -64] # usa la capa de OSM sin etiquetas osm_no_labels = "https://tiles.wmflabs.org/osm-no-labels/{z}/{x}/{y}.png" # usa las etiquetas oficiales del IGN para Argentina ign_labels = "http://wms.ign.gob.ar/geoserver/gwc/service/tms/1.0.0/capabaseargenmap@EPSG%3A3857@png/{z}/{x}/{y}.png"
Indicadores por provincia
¿Cuál es la provincia con mayor proporción de mujeres en tecnología?
0.2s
INDICADORES_HEATMAP = { "estudiantes_mujeres_pct" : "Ratio de estudiantes mujeres", "estudiantes_grupo_pct" : "Ratio de estudiantes", "estudiantes_varones" : "Total de estudiantes hombres" } def generate_heat_map(anio, carrera_grupo, indicador, scale_type=None): """Genera mapa de calor de indicadores de género o tecnología por provincia, para un año y grupo de carreras determinado. Permite elegir la metodología de la escala.""" mapa_heatmap = folium.Map(location=argentina_coords, zoom_start=4) folium.TileLayer(ign_labels, tms=True, attr="IGN").add_to(mapa_heatmap) df_filter = df_evolucion_ubicacion[(df_evolucion_ubicacion.anio == anio)& (df_evolucion_ubicacion.carrera_grupo == carrera_grupo)] if scale_type == 'Cuantiles': bins = list(df_filter[indicador].quantile([0, 0.2, 0.4, 0.6, 0.8, 1])) elif scale_type == 'Fija': bins = get_bins(df_evolucion_ubicacion[indicador].min(), df_evolucion_ubicacion[indicador].max()) else: bins = 5 indicador_desc = INDICADORES_HEATMAP[indicador] folium.Choropleth( geo_data="viz-carreras-nexjournal/data/input/provincias.geojson", # la capa de provincias en GeoJson data=df_filter, # DataFrame con los datos a graficar columns=['provincia_id', indicador], # columna con id de geometrías, columna con el dato key_on='feature.properties.id', # campo del geojson que tiene el id de las geometrías fill_color='YlGn', # escala de colores a usar #fill_opacity=0.7, # opacidad del color de relleno #line_opacity=0.2, # opacidad de las líneas que separan los polígonos legend_name='{} en {} (Año {})'.format(indicador_desc, carrera_grupo, anio), # título de la leyenda de la escala bins=bins ).add_to(mapa_heatmap) #mapas.add_labels_from_column(mapa_heatmap,df_evolucion_ubicacion,"nombre") return mapa_heatmap
heatmap1 = generate_heat_map(2016, "Tecnologia", "estudiantes_mujeres_pct", "Relativa") heatmap1.save("heatmap1.html") HTML("heatmap1.html")
¿Cuál es la provincia con mayor proporción de estudiantes en carreras de tecnología?
heatmap2 = generate_heat_map(2016, "Tecnologia", "estudiantes_grupo_pct", "Relativa") heatmap2.save("heatmap2.html") HTML("heatmap2.html")
¿Cuál es la provincia con mayor proporción de mujeres en tecnología (versión con universidades)?
def mapear_universidades(mapa, df, lat_col, lon_col, institucion_nombre_col, carreras_grupos_col): """ cargar informacion al marker de forma masiva. Args: lat (float): latitud lon (float): longuitud institucion_nombre (str): nombre de la universidad carreras_grupos (list): lista con las areas de estudios ofrecidas """ for row in df_universidades.iterrows(): mapas.crear_marker( mapa, row[1]["lat"], row[1]["lon"], row[1]["institucion_nombre"], str(row[1]["carrera_grupo"]).split(",") )
0.2s
def generate_heat_map_with_markers(anio, carrera_grupo, indicador, scale_type=None): mapa_heatmap = folium.Map(location=argentina_coords, zoom_start=4) folium.TileLayer(ign_labels, tms=True, attr="IGN").add_to(mapa_heatmap) df_filter = df_evolucion_ubicacion[(df_evolucion_ubicacion.anio == anio)& (df_evolucion_ubicacion.carrera_grupo == carrera_grupo)] if scale_type == 'Cuantiles': bins = list(df_filter[indicador].quantile([0, 0.2, 0.4, 0.6, 0.8, 1])) elif scale_type == 'Fija': bins = get_bins(df_evolucion_ubicacion[indicador].min(), df_evolucion_ubicacion[indicador].max()) else: bins = 5 indicador_desc = INDICADORES_HEATMAP[indicador] folium.Choropleth( geo_data="viz-carreras-nexjournal/data/input/provincias.geojson", # la capa de provincias en GeoJson data=df_filter, # DataFrame con los datos a graficar columns=['provincia_id', indicador], # columna con id de geometrías, columna con el dato key_on='feature.properties.id', # campo del geojson que tiene el id de las geometrías fill_color='YlGn', # escala de colores a usar #fill_opacity=0.7, # opacidad del color de relleno #line_opacity=0.2, # opacidad de las líneas que separan los polígonos legend_name='{} en {} (Año {})'.format(indicador_desc, carrera_grupo, anio), # título de la leyenda de la escala bins=bins ).add_to(mapa_heatmap) #mapas.add_labels_from_column(mapa_heatmap,df_evolucion_ubicacion,"nombre") # agrega markers de universidades al mapa mapear_universidades( mapa_heatmap, df_universidades, "lat","lon","institucion_nombre","carrera_grupo" ) return mapa_heatmap
heatmap3 = generate_heat_map_with_markers(2016, "Tecnologia", "estudiantes_mujeres_pct", "Relativa") heatmap3.save("heatmap3.html") HTML("heatmap3.html")
¿Cuál es la provincia con mayor proporción de estudiantes en carreras de tecnología? (versión con universidades)
heatmap4 = generate_heat_map_with_markers(2016, "Tecnologia", "estudiantes_grupo_pct", "Relativa") heatmap4.save("heatmap4.html") HTML("heatmap4.html")