Amélioration du layout dans titulaire et acheteur

This commit is contained in:
Colin Maudry
2026-03-18 23:54:41 +01:00
parent d8f1a884a3
commit dbfc20921a
3 changed files with 91 additions and 81 deletions
+42 -40
View File
@@ -117,44 +117,47 @@ layout = [
className="mb-2",
children=[
dbc.Col(
html.Div(
className="org_infos",
children=[
# TODO: ajouter le type d'acheteur : commune, CD, CR, etc.
html.P(["Commune : ", html.Strong(id="acheteur_commune")]),
html.P(
[
"Département : ",
html.Strong(id="acheteur_departement"),
]
),
html.P(["Région : ", html.Strong(id="acheteur_region")]),
html.A(
id="acheteur_lien_annuaire",
children="Plus de détails sur l'Annuaire des entreprises",
),
],
),
className="org_infos",
children=[
# TODO: ajouter le type d'acheteur : commune, CD, CR, etc.
html.P(
[
"Commune : ",
html.Strong(id="acheteur_commune"),
]
),
html.P(
[
"Département : ",
html.Strong(id="acheteur_departement"),
]
),
html.P(
["Région : ", html.Strong(id="acheteur_region")]
),
html.A(
id="acheteur_lien_annuaire",
children="Plus de détails sur l'Annuaire des entreprises",
),
],
width=4,
),
dbc.Col(
html.Div(
children=[
html.P(id="acheteur_titre_stats"),
html.P(id="acheteur_marches_attribues"),
html.P(id="acheteur_titulaires_differents"),
html.Button(
"Téléchargement au format Excel",
id="btn-download-data-acheteur",
className="btn btn-primary",
),
dcc.Download(id="download-data-acheteur"),
],
),
children=[
html.P(id="acheteur_titre_stats"),
html.P(id="acheteur_marches_attribues"),
html.P(id="acheteur_titulaires_differents"),
html.Button(
"Téléchargement au format Excel",
id="btn-download-data-acheteur",
className="btn btn-primary",
),
dcc.Download(id="download-data-acheteur"),
],
width=4,
),
dbc.Col(
html.Div(id="acheteur_map"),
id="acheteur_map",
width=4,
),
],
@@ -162,17 +165,13 @@ layout = [
dbc.Row(
children=[
dbc.Col(
html.Div(
children=[
html.H3("Top titulaires"),
html.Div(className="marches_table", id="top10_titulaires"),
],
),
className="marches_table",
id="top10_titulaires",
width=8,
),
dbc.Col(id="acheteur-distance-histogram", width=4),
],
),
html.Div(id="acheteur-distance-histogram"),
],
),
# récupérer les données de l'acheteur sur l'api annuaire
@@ -373,7 +372,8 @@ def get_last_marches_data(
Input(component_id="acheteur_data", component_property="data"),
)
def get_top_titulaires(data):
return get_top_org_table(data, "titulaire", ["titulaire_distance", "montant"])
table = get_top_org_table(data, "titulaire", ["titulaire_distance", "montant"])
return make_card(fig=table, title="Top titulaires", lg=12, xl=12)
@callback(
@@ -522,4 +522,6 @@ def update_acheteur_distance_histogram(data):
title="Distance acheteurtitulaire",
subtitle="en nombre de marchés, échelle logarithmique",
fig=fig,
lg=12,
xl=12,
)
+1 -1
View File
@@ -138,7 +138,7 @@ layout = [
[
dcc.Markdown(
"""
Les données saisies et publiées par les acheteurs comportent de nombreux montants farfelus qui sabotent les statistiques, au lieu de montants estimés avec rigueur. On parle de montant atteignant parfois les millions de milliards. Certains réutilisateurs mettent de côté ces marchés ou bien modifient les montants selon des règles fatalement arbitraires. J'ai fait le choix de ne quasiment pas modifier les données* afin de visibiliser le problème.
Les données saisies et publiées par les acheteurs comportent de nombreux montants farfelus qui sabotent les statistiques, au lieu de montants estimés avec rigueur. On parle de montants atteignant parfois les millions de milliards. Certains réutilisateurs des données mettent de côté ces marchés ou bien modifient les montants selon des règles fatalement arbitraires. J'ai fait le choix de ne quasiment pas modifier les données* afin de visibiliser le problème.
Alors, on fait comment ?
+48 -40
View File
@@ -19,7 +19,6 @@ from src.callbacks import get_top_org_table
from src.figures import (
DataTable,
get_distance_histogram,
make_card,
make_column_picker,
point_on_map,
)
@@ -117,44 +116,50 @@ layout = [
className="mb-2",
children=[
dbc.Col(
html.Div(
className="org_infos",
children=[
# TODO: ajouter le type d'acheteur : commune, CD, CR, etc.
html.P(["Commune : ", html.Strong(id="titulaire_commune")]),
html.P(
[
"Département : ",
html.Strong(id="titulaire_departement"),
]
),
html.P(["Région : ", html.Strong(id="titulaire_region")]),
html.A(
id="titulaire_lien_annuaire",
children="Plus de détails sur l'Annuaire des entreprises",
),
],
),
className="org_infos",
children=[
# TODO: ajouter le type d'acheteur : commune, CD, CR, etc.
html.P(
[
"Commune : ",
html.Strong(id="titulaire_commune"),
]
),
html.P(
[
"Département : ",
html.Strong(id="titulaire_departement"),
]
),
html.P(
[
"Région : ",
html.Strong(id="titulaire_region"),
]
),
html.A(
id="titulaire_lien_annuaire",
children="Plus de détails sur l'Annuaire des entreprises",
),
],
width=4,
),
dbc.Col(
html.Div(
children=[
html.P(id="titulaire_titre_stats"),
html.P(id="titulaire_marches_remportes"),
html.P(id="titulaire_acheteurs_differents"),
html.Button(
"Téléchargement au format Excel",
id="btn-download-data-titulaire",
className="btn btn-primary",
),
dcc.Download(id="download-data-titulaire"),
],
),
children=[
html.P(id="titulaire_titre_stats"),
html.P(id="titulaire_marches_remportes"),
html.P(id="titulaire_acheteurs_differents"),
html.Button(
"Téléchargement au format Excel",
id="btn-download-data-titulaire",
className="btn btn-primary",
),
dcc.Download(id="download-data-titulaire"),
],
width=4,
),
dbc.Col(
html.Div(id="titulaire_map"),
id="titulaire_map",
width=4,
),
],
@@ -165,14 +170,17 @@ layout = [
html.Div(
children=[
html.H3("Top acheteurs"),
html.Div(className="marches_table", id="top10_acheteurs"),
html.Div(
className="marches_table",
id="top10_acheteurs",
),
],
),
width=8,
),
dbc.Col(id="titulaire-distance-histogram", width=4),
],
),
html.Div(id="titulaire-distance-histogram"),
],
),
# récupérer les données de l'acheteur sur l'api annuaire
@@ -536,8 +544,8 @@ def update_titulaire_distance_histogram(data):
pl.col("titulaire_distance").cast(pl.Float64, strict=False)
)
fig = get_distance_histogram(lff)
return make_card(
title="Distance acheteurtitulaire",
subtitle="en nombre de marchés, échelle logarithmique",
fig=fig,
)
return [
html.H3("Distance acheteur-titulaire"),
html.H6("par nombre de marchés", className="card-subtitle mb-2 text-muted"),
fig,
]