<jupyter_start><jupyter_text>MAT281 Aplicaciones de la Matemática en la Ingeniería  Módulo 02 Laboratorio Clase 06: Desarrollo de Algoritmos  Instrucciones* Completa tus datos personales (nombre y rol USM) en siguiente celda.* La escala es de 0 a 4 considerando solo valores enteros.* Debes _pushear_ tus cambios a tu repositorio personal del curso.* Como respaldo, debes enviar un archivo .zip con el siguiente formato `mXX_cYY_lab_apellido_nombre.zip` a <EMAIL>. * Se evaluará:    - Soluciones    - Código    - Que Binder esté bien configurado.    - Al presionar  `Kernel -> Restart Kernel and Run All Cells` deben ejecutarse todas las celdas sin error.* __La entrega es al final de esta clase.__ __Nombre__: <NAME>__Rol__: 20161006-7  Ejercicio 1 (2 ptos.): Utilizando los datos del Gasto Fiscal Neto de Chile, crea una nueva columna del tipo `datetime` llamada `dt_date` utilizando `anio`, `mes` y el día primero de cada mes.<jupyter_code>import os
import numpy as np
import pandas as pd<jupyter_output><empty_output><jupyter_text>Utilizaremos como ejemplo un dataset de gasto fiscal neto en Chile, obtenidos de una [datathon de DataCampfire](https://datacampfire.com/datathon/).<jupyter_code>gasto_raw = pd.read_csv(os.path.join("data", "gasto_fiscal.csv"), sep=";")
gasto_raw.head()<jupyter_output><empty_output><jupyter_text>Pasos a seguir:1. Renombra la columna `anio` por `year`.2. Crea la columna `month` utilizando el diccionario `es_month_dict` definido abajo. Hint: Usar un mapeo.3. Crea la columna `day` en que todos los registros sean igual a `1`.4. Crea la columna `dt_date` con la función `pd.to_datetime`. Lee la documentación!5. Finalmente, elimina las columnas `year`, `mes`, `month`, `day`.<jupyter_code>es_month_dict = {
    'enero': 1,
    'febrero': 2,
    'marzo': 3, 
    'abril': 4,
    'mayo': 5,
    'junio': 6,
    'julio': 7,
    'agosto': 8,
    'septiembre': 9,
    'octubre': 10,
    'noviembre': 11,
    'diciembre': 12
}
gasto = (
    gasto_raw.rename(columns={"anio": "year"})
    .assign(
        month=lambda x: x["mes"].str.lower().str.strip().map(es_month_dict).fillna(x["mes"]),
        day=1,
        dt_date=lambda x: pd.to_datetime(x.loc[:,["year","month","day"]]) 
    ).drop(["year","mes","month","day"],axis=1)
)
gasto.head()<jupyter_output><empty_output><jupyter_text>Ejercicio 2 (1 pto.)Pivotea el dataframe `gasto_raw` tal que:- Los índices sean los ministerios (partidas).- Las columnas sean los años.- Cada celda sea la suma de los montos.- Rellenar las celdas vacías con `""`.¿Cuáles son las combinaciones de Año-Ministerio que no tienen gasto?<jupyter_code>gasto_raw.pivot_table(
    index="partida",
    columns="anio",
    values="monto",
    aggfunc="sum",
    fill_value=""
)<jupyter_output><empty_output><jupyter_text>__Respuesta__: 2009 : {Ministerio De Energía, Ministerio De La Mujer Y La Equidad De Género,Ministerio Del Medio Ambiente,Servicio Electoral}2010 : {Ministerio De La Mujer Y La Equidad De Género,Ministerio Del Deporte,Servicio Electoral}2011 : {Ministerio De La Mujer Y La Equidad De Género,Ministerio Del Deporte,Servicio Electoral}2012 : {Ministerio De La Mujer Y La Equidad De Género,Ministerio Del Deporte,Servicio Electoral}2013 : {Ministerio De La Mujer Y La Equidad De Género,Ministerio Del Deporte,Servicio Electoral}2014 : {Ministerio De La Mujer Y La Equidad De Género,Servicio Electoral}2015 : {Ministerio De La Mujer Y La Equidad De Género,Servicio Electoral}2016 : {Servicio Electoral}2017 : {}  Ejercicio 3 (1 pto.)Realiza los benchmarks del archivo `benchmark_loop.py` que se encuentra en el directorio `fast_pandas`.¿Cuál forma dirías que es la más eficiente?Utiliza el comando mágico `%load` y edita de tal manera que el módulo `Benchmarker` se importe correctamente.<jupyter_code># %load  fast_pandas/benchmark_drop.py
from fast_pandas.Benchmarker import Benchmarker


def duplicated(df):
    return df[~df["A"].duplicated(keep="first")].reset_index(drop=True)


def drop_duplicates(df):
    return df.drop_duplicates(subset="A", keep="first").reset_index(drop=True)


def group_by_drop(df):
    return df.groupby(df["A"], as_index=False, sort=False).first()


params = {
    "df_generator": 'pd.DataFrame(np.random.randint(1, df_size, (df_size, 2)), columns=list("AB"))',
    "functions_to_evaluate": [duplicated, drop_duplicates, group_by_drop],
    "title": "Benchmark for dropping duplicate rows",
}

benchmark = Benchmarker(**params)
benchmark.benchmark_all()
benchmark.print_results()
benchmark.plot_results()<jupyter_output>Benchmarking function:  duplicated
	Testing with a dataframe of size:  100
	Result (seconds):  0.0006502310579002369
	Testing with a dataframe of size:  1000
	Result (seconds):  0.000665738670801511
	Testing with a dataframe of size:  10000
	Result (seconds):  0.000941910644993186
	Testing with a dataframe of size:  100000
	Result (seconds):  0.0033434475410031154
	Testing with a dataframe of size:  1000000
	Result (seconds):  0.10120202725986019
	Testing with a dataframe of size:  10000000
	Result (seconds):  1.927012071502395
	Testing with a dataframe of size:  100000000
StarcoderdataJupyterStructuredCleanDedup