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 analisis(ruta, archivoConcatenadoNombre, periodoColumna, periodo, lugarColumna, lugar, poblacionColumna, poblacion, codigoPrestacion, archivoResultado, lNombreHojas=[]): """ lee, prepara y analiza un archivo con los detalles :param ruta: ruta donde se trabaja :param archivoConcatenadoNombre: archivo a analizar :param periodoColumna: nombre de la columna de periodo para el metodo de resumen :param periodo: condicion para el resumen por periodo :param lugarColumna: nombre de la columna de lugar para el metodo de resumen :param lugar: condicion para el resumen por lugar :param poblacionColumna: nombre de la columna de poblacion para el metodo de resumen :param poblacion: condicion para el resumen por poblacion :param codigoPrestacion: condicion para el resumen por codigo :param archivoResultado: nombre del archivo con los resultados :param lNombreHojas: listados de hojas que tendra el archivo de resultados :return: void """ # leo el database df = metodos.leerDatabase(ruta, archivoConcatenadoNombre) # resumo el database # df = metodos.resumirDatabase(df, periodoColumna, periodo) # df = metodos.resumirDatabase(df, lugarColumna, lugar, "==") # df = metodos.resumirDatabase(df, poblacionColumna, poblacion, "==") # quito las claves de beneficiario incorrectas df = metodos.resumirDatabase(df, "CLAVE_BENEFICIARIO", "COMUNIDAD", "!=") df = metodos.resumirDatabase(df, "CLAVE_BENEFICIARIO", "0COMUNIDAD", "!=") df = metodos.resumirDatabase(df, "CLAVE_BENEFICIARIO", "10000000000000000", "!=") # creo el archivo que contendra los resultados excel.crearArchivo(ruta, archivoResultado, lNombreHojas) # # armo los analisis de universo universo1(df, poblacionColumna, ruta, archivoResultado, "Universo 1") universo2(df, poblacionColumna, ruta, archivoResultado, "Universo 2") universo3(df, poblacionColumna, ruta, archivoResultado, "Universo 3") universo4(df, poblacionColumna, ruta, archivoResultado, "Universo 4") # # # dejo solo el codigo de interes df = metodos.resumirDatabase(df, "CODIGO_PRESTACION", codigoPrestacion, "==") # # # armo los analisis por prestacion de interes interes1(df, poblacionColumna, ruta, archivoResultado, "Interes 1") # interes2(df, poblacionColumna, ruta, archivoResultado, "Interes 2") interes3(df, poblacionColumna, ruta, archivoResultado, "Interes 3")
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)