Adaptation du graphique aux nouvelles sources #32

This commit is contained in:
Colin Maudry
2025-09-19 09:30:00 +02:00
parent b93b290f97
commit 5ca5fc300f
+37 -15
View File
@@ -4,13 +4,13 @@ import plotly.express as px
import polars as pl import polars as pl
def get_map_count_marches(lf): def get_map_count_marches(lf: pl.LazyFrame):
lf = lf.with_columns( lf = lf.with_columns(
pl.col("lieuExecution_code").str.head(2).str.zfill(2).alias("Département") pl.col("lieuExecution_code").str.head(2).str.zfill(2).alias("Département")
) )
lf = ( lf = (
lf.unique(subset="uid") lf.select(["uid", "Département"])
.select(["uid", "Département"]) .drop_nulls()
.unique(subset="uid") .unique(subset="uid")
.group_by("Département") .group_by("Département")
.len("uid") .len("uid")
@@ -59,34 +59,56 @@ def get_barchart_sources(lf: pl.LazyFrame, type_date: str):
"datePublicationDonnees": "publication des données", "datePublicationDonnees": "publication des données",
} }
lf = lf.select("uid", type_date, "source") lf = lf.select("uid", type_date, "sourceDataset")
lf = lf.unique("uid") 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.with_columns(pl.col(type_date).dt.year().alias("annee"))
lf = lf.filter( 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.with_columns(pl.col(type_date).cast(pl.String).str.head(7))
lf = (
lf.group_by([type_date, "sourceDataset"])
.len()
.sort(by=[type_date, "len"], descending=True)
)
lf = lf.group_by([type_date, "source"]).len() # lf = lf.with_columns(
lf = lf.with_columns( # pl.when(pl.col("sourceDataset").is_null()).then(
pl.when(pl.col("source").is_null()).then( # pl.lit("Source inconnue")).alias("sourceDataset")
pl.lit("Source inconnue").alias("source") # )
)
) lf = lf.sort(by=["sourceDataset"], descending=False)
lf = lf.sort(by=[type_date, "source"], descending=False)
df: pl.DataFrame = lf.collect() df: pl.DataFrame = lf.collect()
fig = px.bar( fig = px.bar(
df, df,
x=type_date, x=type_date,
y="len", 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", title=f"Nombre de marchés attribués par date de {labels[type_date]} et source de données",
labels={ labels={
"len": "Nombre de marchés", "len": "Nombre de marchés",
type_date: f"Mois de {labels[type_date]}", type_date: f"Mois de {labels[type_date]}",
"source": "Source de données", "sourceDataset": "Source de données",
}, },
) )
return fig return fig