diff --git a/src/figures.py b/src/figures.py index 54e9140..9d93c0c 100644 --- a/src/figures.py +++ b/src/figures.py @@ -4,13 +4,13 @@ import plotly.express as px import polars as pl -def get_map_count_marches(lf): +def get_map_count_marches(lf: pl.LazyFrame): lf = lf.with_columns( pl.col("lieuExecution_code").str.head(2).str.zfill(2).alias("Département") ) lf = ( - lf.unique(subset="uid") - .select(["uid", "Département"]) + lf.select(["uid", "Département"]) + .drop_nulls() .unique(subset="uid") .group_by("Département") .len("uid") @@ -59,34 +59,56 @@ def get_barchart_sources(lf: pl.LazyFrame, type_date: str): "datePublicationDonnees": "publication des données", } - lf = lf.select("uid", type_date, "source") + lf = lf.select("uid", type_date, "sourceDataset") + lf = lf.unique("uid") + + # Rassemblement des datasets Atexo pour ne pas surcharger le graphique + lf = lf.with_columns( + pl.when(pl.col("sourceDataset").str.starts_with("atexo")) + .then(pl.lit("plateformes atexo")) + .otherwise(pl.col("sourceDataset")) + .alias("sourceDataset") + ) + + # Rassemblement des datasets AWS pour ne pas surcharger le graphique + lf = lf.with_columns( + pl.when(pl.col("sourceDataset").str.contains(r"aws|marches\-publics.info")) + .then(pl.lit("aws")) + .otherwise(pl.col("sourceDataset")) + .alias("sourceDataset") + ) + lf = lf.with_columns(pl.col(type_date).dt.year().alias("annee")) lf = lf.filter( - pl.col(type_date).is_not_null() & pl.col("annee").is_between(2018, 2025) + pl.col(type_date).is_not_null() & pl.col("annee").is_between(2019, 2025) ) - lf = lf.sort(by=[type_date, "source"], descending=False) lf = lf.with_columns(pl.col(type_date).cast(pl.String).str.head(7)) - - lf = lf.group_by([type_date, "source"]).len() - lf = lf.with_columns( - pl.when(pl.col("source").is_null()).then( - pl.lit("Source inconnue").alias("source") - ) + lf = ( + lf.group_by([type_date, "sourceDataset"]) + .len() + .sort(by=[type_date, "len"], descending=True) ) - lf = lf.sort(by=[type_date, "source"], descending=False) + + # lf = lf.with_columns( + # pl.when(pl.col("sourceDataset").is_null()).then( + # pl.lit("Source inconnue")).alias("sourceDataset") + # ) + + lf = lf.sort(by=["sourceDataset"], descending=False) df: pl.DataFrame = lf.collect() fig = px.bar( df, x=type_date, y="len", - color="source", + color="sourceDataset", title=f"Nombre de marchés attribués par date de {labels[type_date]} et source de données", labels={ "len": "Nombre de marchés", type_date: f"Mois de {labels[type_date]}", - "source": "Source de données", + "sourceDataset": "Source de données", }, ) + return fig