From 89a419a8d2daf89e3d42b59a4a6af3525df12fa2 Mon Sep 17 00:00:00 2001 From: Colin Maudry Date: Sun, 21 Sep 2025 11:42:29 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20des=20d=C3=A9tails=20sur=20les=20source?= =?UTF-8?q?s=20de=20donn=C3=A9es=20#32?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .template.env | 1 + src/figures.py | 45 +++++++++++++++++++++++++++++++++++++++ src/pages/about.py | 14 ++++++++++++ src/pages/statistiques.py | 7 ------ 4 files changed, 60 insertions(+), 7 deletions(-) diff --git a/.template.env b/.template.env index 5cbcdfa..c47e456 100644 --- a/.template.env +++ b/.template.env @@ -1,3 +1,4 @@ DATA_FILE_PARQUET_PATH=https://www.data.gouv.fr/fr/datasets/r/11cea8e8-df3e-4ed1-932b-781e2635e432 PORT=8050 DEVELOPMENT=True +SOURCE_STATS_CSV_PATH="https://www.data.gouv.fr/api/1/datasets/r/8ded94de-3b80-4840-a5bb-7faad1c9c234" diff --git a/src/figures.py b/src/figures.py index 9d93c0c..8ca0c5d 100644 --- a/src/figures.py +++ b/src/figures.py @@ -2,6 +2,7 @@ import json import plotly.express as px import polars as pl +from dash import dash_table, html def get_map_count_marches(lf: pl.LazyFrame): @@ -112,3 +113,47 @@ def get_barchart_sources(lf: pl.LazyFrame, type_date: str): ) return fig + + +def get_sources_tables(source_path) -> html.Div: + df = pl.read_csv(source_path) + df = df.with_columns( + ( + pl.lit('') + + pl.col("nom") + + pl.lit("") + ).alias("nom") + ) + df = df.drop("url") + df = df.sort(by=["nb_marchés"], descending=True) + + datatable = dash_table.DataTable( + id="source_table", + columns=[ + { + "name": i, + "id": i, + "presentation": "markdown", + "type": "text", + "format": {"nully": "N/A"}, + } + for i in df.schema.names() + ], + style_cell_conditional=[ + { + "if": {"column_id": ["nom", "organisation"]}, + "minWidth": "350px", + "textAlign": "left", + "overflow": "hidden", + "lineHeight": "14px", + "whiteSpace": "normal", + }, + ], + sort_action="native", + markdown_options={"html": True}, + ) + datatable.data = df.to_dicts() + + return html.Div(children=datatable) diff --git a/src/pages/about.py b/src/pages/about.py index 1aeb1cb..db8065f 100644 --- a/src/pages/about.py +++ b/src/pages/about.py @@ -1,5 +1,9 @@ +import os + from dash import dcc, html, register_page +from src.figures import get_sources_tables + title = "À propos" register_page( @@ -43,6 +47,16 @@ les fonctionnalités actuelles de decp.info. Il est ainsi possible de rajouter - LinkedIn : [colinmaudry](https://www.linkedin.com/in/colinmaudry/) """ ), + html.H4("Sources de données", id="sources"), + get_sources_tables(os.getenv("SOURCE_STATS_CSV_PATH")), + html.H4("Mentions légales", id="mentions-legales"), + dcc.Markdown(""" + Site Web développé et édité par [SAS Colmo](https://annuaire-entreprises.data.gouv.fr/entreprise/colmo-989393350), 989 393 350 RCS Rennes au capital de 3 000 euros. + + Siège social : 1 carrefour Jouaust, 35000 Rennes + + Hébergement : serveur situé en France et administré par Scaleway, 8 rue de la Ville l’Evêque, 75008 Paris + """), ], ) ] diff --git a/src/pages/statistiques.py b/src/pages/statistiques.py index d692ad6..3196b0f 100644 --- a/src/pages/statistiques.py +++ b/src/pages/statistiques.py @@ -15,13 +15,6 @@ layout = [ className="container", children=[ html.H2(title), - dcc.Markdown(""" - À savoir, les données suivantes existent mais sont en cours d'intégration dans ce projet : - - - les données publiées dans le [format DECP 2019 (période 2018-2022)](https://www.data.gouv.fr/fr/datasets/donnees-essentielles-de-la-commande-publique-fichiers-consolides/#/resources/16962018-5c31-4296-9454-5998585496d2) - - les données [collectées par l'AIFE](https://github.com/ColinMaudry/decp-processing/issues/68) (API DUME, notamment achatpublic.info) - - les données [des plateformes Atexo](https://github.com/ColinMaudry/decp-processing/issues/57) - """), dcc.Loading( overlay_style={"visibility": "visible", "filter": "blur(2px)"}, id="loading-1",