Utilisation des stats produites par decp_processing

This commit is contained in:
Colin Maudry
2026-01-14 18:16:50 +01:00
parent d8dcb04fbf
commit 3c68317f9d
3 changed files with 56 additions and 2 deletions
+21
View File
@@ -5,6 +5,8 @@ import plotly.express as px
import polars as pl
from dash import dash_table, dcc, html
from src.utils import format_number
def get_map_count_marches(df: pl.DataFrame):
lf = df.lazy()
@@ -56,6 +58,25 @@ def get_map_count_marches(df: pl.DataFrame):
return fig
def get_yearly_statistics(statistics, today_str) -> html.Div:
children = []
for year in reversed(range(2018, int(today_str.split("/")[-1]) + 1)):
year = str(year)
stat_year = statistics[year]
md = dcc.Markdown(f"""
#### {year}
- Nombre de marchés publics et accords-cadres : {format_number(stat_year["nb_notifications_marches"])}
- Nombre d'acheteurs publics : {format_number(stat_year["nb_acheteurs_uniques"])}
- Nombre de titulaires : {format_number(stat_year["nb_titulaires_uniques"])}
""")
children.append(md)
return html.Div(children=children)
def get_barchart_sources(df: pl.DataFrame, type_date: str):
lf = df.lazy()
labels = {
+24 -2
View File
@@ -1,7 +1,13 @@
from datetime import datetime
from dash import dcc, html, register_page
from src.figures import get_barchart_sources, get_map_count_marches
from src.utils import df, meta_content
from src.figures import (
get_barchart_sources,
get_map_count_marches,
get_yearly_statistics,
)
from src.utils import df, format_number, get_statistics, meta_content
name = "Statistiques"
@@ -15,6 +21,8 @@ register_page(
order=3,
)
statistics: dict = get_statistics()
today_str = datetime.fromisoformat(statistics["datetime"]).strftime("%d/%m/%Y")
layout = [
html.Div(
@@ -38,6 +46,20 @@ layout = [
toutes les [contributions](/a-propos#contribuer) sont les bienvenues pour atteindre l'exhaustivité.
"""),
dcc.Graph(figure=get_map_count_marches(df)),
html.H2(
f"Statistiques générales sur les marchés (au {today_str})",
id="marches",
),
html.P(
"À noter qu'une fois un marché attribué ses données essentielles peuvent malheureusement mettre plusieurs mois à être publiées par l'acheteur."
),
html.H4("Statistiques cumulées"),
dcc.Markdown(f"""
- Nombre de marchés publics et accords-cadres : {format_number(statistics["nb_marches"])}
- Nombre d'acheteurs publics : {format_number(statistics["nb_acheteurs_uniques"])}
- Nombre de titulaires uniques : {format_number(statistics["nb_titulaires_uniques"])}
"""),
get_yearly_statistics(statistics, today_str),
dcc.Graph(
figure=get_barchart_sources(df, "dateNotification")
),
+11
View File
@@ -240,6 +240,17 @@ def get_org_data(dff: pl.DataFrame, org_type: str) -> pl.DataFrame:
return lff.collect()
def get_statistics() -> dict:
return (
get(
"https://www.data.gouv.fr/api/1/datasets/r/0ccf4a75-f3aa-4b46-8b6a-18aeb63e36df",
follow_redirects=True,
)
.raise_for_status()
.json()
)
def get_departements() -> dict:
with open("data/departements.json", "rb") as f:
data = json.load(f)