def universo1(df, poblacionColumna, ruta, archivoResultado, hojaResultado):
    """
    primer analisis del universo: beneficiarios alcanzados por el programa degún población
    :param df: dataframe a analizar
    :param poblacionColumna: columna del dataframe que se utilizara para hacer los agrupamientos
    :param ruta: ruta donde se guardaran los resultados
    :param archivoResultado: archivo donde se guarda el resultado del analisis
    :param hojaResultado: nombre de la hoja donde se guarda el resultado del analisis
    :return: void
    """
    df1 = df.groupby(poblacionColumna).CLAVE_BENEFICIARIO.nunique()
    excel.salvarDataframe(ruta, archivoResultado, hojaResultado, df1)
def universo2(df, poblacionColumna, ruta, archivoResultado, hojaResultado):
    """
    segundo analisis del universo: cantidad promedio de prestaciones por beneficiario según población
    :param df: dataframe a analizar
    :param poblacionColumna: columna del dataframe que se utilizara para hacer agrupamientos
    :param ruta: ruta donde se guardaran los resultados
    :param archivoResultado: archivo donde se guarda el resultado del analisis
    :param hojaResultado: nombre de la hoja donde se guarda el resultado del analisis
    :return: void
    """
    df1 = df.groupby(poblacionColumna).CLAVE_BENEFICIARIO.nunique()
    df2 = df.groupby(poblacionColumna).CODIGO_PRESTACION.count()
    df3 = pd.concat([df1, df2], axis=1)
    df3["PROMEDIO"] = df3["CODIGO_PRESTACION"] / df3["CLAVE_BENEFICIARIO"]
    excel.salvarDataframe(ruta, archivoResultado, hojaResultado, df3)
def interes2(df, poblacionColumna, ruta, archivoResultado, hojaResultado):
    """
    segundo analisis por prestación de interes: tasa de uso según población por prestación de interés
    :param df: dataframe a analizar
    :param poblacionColumna: columna del dataframe que se utilizara para hacer agrupamientos
    :param ruta: ruta donde se guardan los resultados
    :param archivoResultado: archivo donde se guarda el resultado del analisis
    :param hojaResultado: nombre de la hoja donde se guarda el resultado del analisis
    :return: void
    """
    df1 = df.groupby(["CODIGO_PRESTACION", poblacionColumna]).CLAVE_BENEFICIARIO.count()
    df2 = df.groupby(["CODIGO_PRESTACION", poblacionColumna]).CODIGO_PRESTACION.count()
    df3 = pd.concat([df1, df2], axis=1)
    df3["PROMEDIO"] = df3["CODIGO_PRESTACION"] / df3["CLAVE_BENEFICIARIO"]
    df3.to_csv(ruta + "auxiliar1" + ".csv")
    df3 = pd.read_csv(ruta + "auxiliar1" + ".csv", encoding="ISO-8859-1",
                      dtype={"CLAVE_BENEFICIARIO": str})
    excel.salvarDataframe(ruta, archivoResultado, hojaResultado, df3)
def universo4(df, poblacionColumna, ruta, archivoResultado, hojaResultado):
    """
    cuarto analisis del universo: distribucion de beneficiarios que consumieron prestaciones pro código de prestación y
    distribucion de veces que se consumió cada código de prestación
    :param df: dataframe a analizar
    :param poblacionColumna: columna del dataframe que se utilizara para hacer agrupamientos
    :param ruta: ruta donse se guardan los resultados
    :param archivoResultado: archivo donde se guarda el resultado del analisis
    :param hojaResultado: nombre de la hoja donde se guarda el resultado del analisis
    :return: void
    """
    df1 = df.groupby(poblacionColumna).CODIGO_PRESTACION.value_counts()
    df2 = df.groupby([poblacionColumna, "CODIGO_PRESTACION"]).CLAVE_BENEFICIARIO.nunique()
    df3 = pd.concat([df1, df2], axis=1)
    df3.to_csv(ruta + "auxiliar1" + ".csv")
    df3 = pd.read_csv(ruta + "auxiliar1" + ".csv", encoding="ISO-8859-1",
                      dtype={"CLAVE_BENEFICIARIO": str})
    excel.salvarDataframe(ruta, archivoResultado, hojaResultado, df3)
def interes1(df, poblacionColumna, ruta, archivoResultado, hojaResultado):
    """
    primer analisis por prestacion de interes: proporción de beneficiarios que hicieron uso de la prestación
    :param df: dataframe a analizar
    :param poblacionColumna: columna del dataframe que se utilizara para hacer agrupamientos
    :param ruta: ruta donde se guardan los resultados
    :param archivoResultado: archivo donde se guarda el resultado del analisis
    :param hojaResultado: nombre de la hoja donde se guarda el resultado del analisis
    :return: void
    """
    df2 = df.groupby(["CODIGO_PRESTACION", poblacionColumna]).CLAVE_BENEFICIARIO.nunique()
    df3 = df.groupby(["CODIGO_PRESTACION", poblacionColumna]).CODIGO_PRESTACION.count()
    df4 = pd.concat([df2, df3], axis=1)
    df4.columns = ["CANTIDAD_BENEFICIARIOS", "CANTIDAD_PRESTACIONES"]
    df4["POBLACION_TOTAL"] = df4["CANTIDAD_BENEFICIARIOS"] * df4["CANTIDAD_PRESTACIONES"]
    df4["PROPORCION"] = df4["CANTIDAD_PRESTACIONES"] / df4["CANTIDAD_BENEFICIARIOS"]
    df4["PROPORCION2"] = df4["CANTIDAD_PRESTACIONES"] / df4["POBLACION_TOTAL"]
    df4.to_csv(ruta + "auxiliar1" + ".csv")
    df4 = pd.read_csv(ruta + "auxiliar1" + ".csv", encoding="ISO-8859-1",
                      dtype={"CLAVE_BENEFICIARIO": str})
    excel.salvarDataframe(ruta, archivoResultado, hojaResultado, df4)
def interes3(df, poblacionColumna, ruta, archivoResultado, hojaResultado):
    """
    tercer analisis por prestación de interés: distribución del consumo de la prestación de interés
    :param df: dataframe a analizar
    :param ruta: ruta donde se guardan los resultados
    :param archivoResultado: archivo donde se guarda el resultado del analisis
    :param hojaResultado: nombre de la hoja donde se guarda el resultado del analisis
    :return: void
    """
    # agrupo por clave y cuento los codigos, guardo en un .csv y lo leo. Esto es para poder volver a agruparlo (puede que haya
    # una mejor manera de hacerlo)
    df1 = df.groupby([poblacionColumna, "CLAVE_BENEFICIARIO"]).CODIGO_PRESTACION.count()
    df1.to_csv(ruta + "auxiliar1" + ".csv")
    df1 = pd.read_csv(ruta + "auxiliar1" + ".csv", encoding="ISO-8859-1", names=["CATEGORIA_POBLACION", "CLAVE_BENEFICIARIO", "REPETICIONES"],
                      dtype={"CLAVE_BENEFICIARIO": str})

    # agrupo por cantidad de repeticiones y guardo el archivo
    df1 = df1.groupby([poblacionColumna, "REPETICIONES"]).CLAVE_BENEFICIARIO.count()
    df1.to_csv(ruta + "auxiliar1" + ".csv")
    df1 = pd.read_csv(ruta + "auxiliar1" + ".csv", encoding="ISO-8859-1", names=["REPETICIONES", "CUENTA_CLAVE"])
    df1["TOTAL_PRESTACIONES"] = df1["REPETICIONES"] * df1["CUENTA_CLAVE"]
    excel.salvarDataframe(ruta, archivoResultado, hojaResultado, df1)