def company_distribution(df: pd.DataFrame, ax: mp.axes.Axes) -> ResultValue: log = logging.getLogger('company_distribution') log.info(" >>") try: def autopct_format(values): def my_format(pct): total = sum(values) val = int(round(pct * total / 100.0)) str_val = f'{val:n}' return '{v:d}'.format(v=val) return my_format colors = [ "#9aff33", "#34ff33", "#33ff98", "#33fffe", "#339aff", "#3371ff", "#5b33ff", "#c133ff", "#ff33d7" ] by_company = df.groupby(["fornitore"]).sum() by_company.reset_index(level=0, inplace=True) values = by_company["numero_dosi"] labels = by_company["fornitore"] ax.pie(values, labels=labels, colors=colors, autopct=autopct_format(values)) ax.set_title("Vaccini consegnati", fontsize=18) except Exception as ex: log.error("Exception caught - {ex}".format(ex=ex)) return ResultKo(ex) log.info(" <<") return ResultOk(True)
def age_distribution(df: pd.DataFrame, ax: mp.axes.Axes, gender: str = "F") -> ResultValue: log = logging.getLogger('age_distribution') log.info(" >>") try: if gender.upper() not in ["M", "F", "B"]: msg = "Geneder {v} value not known".format(v=gender) log.error(msg) return ResultKo(Exception(msg)) by_age = df.groupby(["fascia_anagrafica"]).sum() by_age.reset_index(level=0, inplace=True) by_age["totals"] = by_age["sesso_femminile"] + by_age["sesso_maschile"] values = by_age["sesso_femminile" if gender == "F" else ("sesso_maschile" if gender == "M" else "totals")] labels = by_age["fascia_anagrafica"] ax.pie(values, labels=labels, autopct='%1.1f%%', colors=colors) ax.set_title("Distribuzione per eta'", fontsize=18) except Exception as ex: log.error("Exception caught - {ex}".format(ex=ex)) return ResultKo(ex) log.info(" <<") return ResultOk(True)
def chart_vaccinations_male_female(df: pd.DataFrame, ax: mp.axes.Axes) -> ResultValue: log = logging.getLogger('chart_vaccinations_male_female') log.info(" >>") try: num_male = df["sesso_maschile"].sum() num_female = df["sesso_femminile"].sum() parts = [num_female, num_male] labels = ["Donne", "Uomini"] female_color = "#f1a29b" male_color = "#9bd7f1" ax.pie(parts, labels=labels, colors=[female_color, male_color], autopct='%1.1f%%') ax.set_title("Distribuzione per genere", fontsize=18) except Exception as ex: log.error("Exception caught - {ex}".format(ex=ex)) return ResultKo(ex) log.info(" <<") return ResultOk(True)
def chart_vaccinations_fornitore(df: pd.DataFrame, ax: mp.axes.Axes) -> ResultValue: log = logging.getLogger('chart_vaccinations_fornitore') log.info(" >>") try: by_company = df.groupby(["fornitore"]).sum() by_company["totals"] = by_company["sesso_maschile"] + by_company[ "sesso_femminile"] by_company.reset_index(level=0, inplace=True) values = by_company["totals"] labels = by_company["fornitore"] ax.pie(values, labels=labels, colors=["#dfeef4", "#c2e7f6", "#7fd2f3"], autopct='%1.1f%%') ax.set_title("Distribuzione per fornitore", fontsize=18) except Exception as ex: log.error("Exception caught - {ex}".format(ex=ex)) return ResultKo(ex) log.info(" <<") return ResultOk(True)