Skip to content

Commit c5b354f

Browse files
authored
Feat/presentation/elu (#196)
2 parents bb5eb85 + b494602 commit c5b354f

19 files changed

+616
-3
lines changed

datasources.yaml

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,11 +244,30 @@ domains:
244244
API: Opendatasoft
245245
description: Elections municipales 2020
246246
type: FileExtractor
247-
endpoint: /catalog/datasets/election-france-municipale-2020-deuxieme-tour/exports/csv?use_labels=true
247+
endpoint: /catalog/datasets/election-france-municipale-2020-premier-tour/exports/csv?use_labels=true
248248
format: csv
249249
load_params:
250250
separator: ;
251251

252+
elections_regionales:
253+
API: Opendatasoft
254+
description: Elus des différentes région
255+
type: FileExtractor
256+
endpoint: /catalog/datasets/elections-france-regionales-2021-1er-tour-par-bureau-de-vote/exports/csv
257+
format: csv
258+
load_params:
259+
separator: ;
260+
261+
elections_departementales:
262+
API: data.gouv.fr
263+
description: Elus des différentes départementales
264+
endpoint: /datasets/r/e9528553-a5d7-43f4-a7f5-cbc4ed1b91da
265+
type: FileExtractor
266+
format: xlsx
267+
preprocessor:
268+
name: excelfile_dfload
269+
type: notebook
270+
252271
geographical_references:
253272

254273
regions:
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{% macro split_last_and_first_name(column_name) %}
2+
{# This macro splits a full name in the format "LASTNAME Firstname" #}
3+
{# into two separate fields: `nom` (last name) and `prenom` (first name). #}
4+
{# It assumes the last name is written in uppercase letters, #}
5+
{# followed by the first name in mixed case. #}
6+
{# Example: "LEGRAND Jean" → nom = "LEGRAND", prenom = "Jean" #}
7+
8+
(
9+
(regexp_match(
10+
{{ column_name }},
11+
'^([[:upper:]\-\'']+(?:\s+[[:upper:]\-\'']+)*)\s+(.+)$'
12+
))[1]
13+
) AS nom,
14+
(
15+
(regexp_match(
16+
{{ column_name }},
17+
'^([[:upper:]\-\'']+(?:\s+[[:upper:]\-\'']+)*)\s+(.+)$'
18+
))[2]
19+
) AS prenom
20+
{% endmacro %}

dbt_odis/models/bronze/_odis_bronze__models.yml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3871,6 +3871,57 @@ models:
38713871
description: TBD
38723872
data_type: float
38733873

3874+
- name: presentation_elus_communes
3875+
description: "Vue Bronze contenant les résultats des élections municipales, régionales et départementales avec le détail des mandats des élus et les informations géographiques associées."
3876+
columns:
3877+
- name: libelle_de_la_fonction
3878+
description: "Intitulé du poste ou du rôle du mandat de l'élu (ex: Maire, Conseiller municipal)."
3879+
- name: type_de_la_fonction
3880+
description: "Type de mandat ou d'élection de l'élu (Municipal, Régional, Départemental). Correspond au nom du fichier source ('filename')."
3881+
- name: reg_code
3882+
description: "Code de la région administrative (normalisé en format texte sur 2 chiffres, ex: '01', '93')."
3883+
- name: dep_code
3884+
description: "Code du département (ex: '75')."
3885+
- name: com_code
3886+
description: "Code officiel de la commune."
3887+
3888+
- name: presentation_elections_municipales
3889+
description: "Informations sur la nuance politique des candidats aux élections municipales"
3890+
columns:
3891+
- name: id
3892+
- name: code_officiel_departement
3893+
description: "Code officiel du département."
3894+
- name: nom_officiel_departement
3895+
description: "Nom officiel du département."
3896+
- name: nom_officiel_commune
3897+
description: "Nom officiel de la commune."
3898+
- name: code_nuance
3899+
description: "Code de la nuance politique ou du parti."
3900+
- name: liste
3901+
description: "Liste ou groupement politique."
3902+
- name: nom_prenom
3903+
description: "Nom complet du candidat."
3904+
- name: code_officiel_commune
3905+
description: "Code officiel de la commune. **Normalisé** pour les codes à 6 chiffres (DOM/TOM) en conservant les 2 premiers caractères et en omettant le 3ème (par exemple, '97101' au lieu de '97101')."
3906+
- name: code_officiel_region
3907+
description: "Code officiel de la région."
3908+
- name: nom_officiel_region
3909+
description: "Nom officiel de la région."
3910+
- name: created_at
3911+
3912+
- name: presentation_elections_departementales
3913+
description: "Informations sur la nuance politique des candidats aux élections départementales"
3914+
3915+
- name: presentation_elections_regionales
3916+
description: "Informations sur la nuance politique des candidats aux élections régionales"
3917+
columns:
3918+
- name: reg_code
3919+
description: |
3920+
Code officiel de la région. **Normalisé** et retravaillé selon les règles suivantes :
3921+
* Le code est formaté sur 2 chiffres, complété par des zéros à gauche (ex: 53 devient '53').
3922+
* Gestion des codes spéciaux : les codes 'ZA', 'ZB', 'ZC', 'ZD' (anciens codes DOM/TOM) sont mappés sur '01', '02', '03', '04' respectivement.
3923+
* Le code départemental '27' est mappé sur le code régional '28'.
3924+
Cette logique assure la cohérence du code région malgré les évolutions territoriales ou les codes sources spécifiques.
38743925
- name: population_population_superficie
38753926
description: |-
38763927
Extraction de fichiers JSON avec données historiques population et superficie des territoires.

dbt_odis/models/bronze/_odis_bronze__sources.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,22 @@ sources:
104104
- name: presentation_page_elus_communes
105105
description: Source JSON loadée dans le champ data contenant
106106
loaded_at_field: created_at
107+
- name: presentation_elus_communes
108+
description: Listing de tous les élus des communes françaises, avec des élus régionaux et départementaux.
109+
loaded_at_field: created_at
110+
111+
- name: presentation_elections_municipales
112+
description: Informations sur la nuance politique des candidats aux élections municipales
113+
loaded_at_field: created_at
114+
115+
- name: presentation_elections_departementales
116+
description: Informations sur la nuance politique des candidats aux élections départementales
117+
loaded_at_field: created_at
118+
119+
- name: presentation_elections_regionales
120+
description: Informations sur la nuance politique des candidats aux élections régionales
121+
loaded_at_field: created_at
122+
107123

108124
- name: presentation_page_epci
109125
description: Source JSON loadée dans le champ data contenant
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{{ config(
2+
tags = ['bronze', 'presentation','elu'],
3+
alias = 'vw_presentation_elections_departementales'
4+
)
5+
}}
6+
7+
select
8+
{{ dbt_utils.star(from=source('bronze', 'presentation_elections_departementales')) }}
9+
from {{ source('bronze', 'presentation_elections_departementales') }}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{{ config(
2+
tags = ['bronze', 'presentation','elu'],
3+
alias = 'vw_presentation_elections_municipales'
4+
)
5+
}}
6+
7+
select
8+
{{ dbt_utils.star(from=source('bronze', 'presentation_elections_municipales'),
9+
except=["code_officiel_commune"]) }},
10+
case
11+
when length(code_officiel_commune) > 5
12+
then left(code_officiel_commune, 2) || substring(code_officiel_commune FROM 4)
13+
else code_officiel_commune
14+
end as code_officiel_commune
15+
from {{ source('bronze', 'presentation_elections_municipales') }}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{{ config(
2+
tags = ['bronze', 'presentation','elu'],
3+
alias = 'vw_presentation_elections_regionales'
4+
)
5+
}}
6+
7+
select
8+
{{ dbt_utils.star(from=source('bronze', 'presentation_elections_regionales'),
9+
except=["reg_code"]) }},
10+
case
11+
when dep_code = 'ZA' then '01'
12+
when dep_code = 'ZB' then '02'
13+
when dep_code = 'ZC' then '03'
14+
when dep_code = 'ZD' then '04'
15+
when dep_code = '27' then '28'
16+
else lpad(trunc(reg_code::numeric)::text, 2, '0')
17+
end as reg_code
18+
from {{ source('bronze', 'presentation_elections_regionales') }}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{{ config(
2+
tags = ['bronze', 'presentation','elu'],
3+
alias = 'vw_presentation_elus_communes'
4+
)
5+
}}
6+
7+
select
8+
{{ dbt_utils.star(from=source('bronze', 'presentation_elus_communes'),
9+
except=["reg_code"]) }},
10+
lpad(trunc(reg_code::numeric)::text, 2, '0') as reg_code
11+
from {{ source('bronze', 'presentation_elus_communes') }}

dbt_odis/models/gold/_odis_gold__models.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,28 @@ models:
558558
data_type: double precision
559559
quote: true
560560

561+
- name: gold_presentation_elus
562+
description: |
563+
Modèle Gold de présentation final regroupant les élus (Maires, Présidents départementaux et régionaux) avec leur nuance politique.
564+
Il normalise les colonnes et crée une clé géographique unique (`codgeo`)
565+
columns:
566+
- name: codgeo
567+
description: |
568+
Code géographique normalisé servant de clé unique :
569+
* Pour les **Maires** : Utilise le `com_code` (code Insee de la commune).
570+
* Pour les **Présidents du conseil départemental** : Utilise le `dep_code` (code du département).
571+
* Pour les **Présidents du conseil régional** : Utilise la concaténation de 'reg' et du `reg_code` (ex: 'reg84' pour l'Auvergne-Rhône-Alpes).
572+
- name: prenom
573+
description: "Prénom de l'élu."
574+
- name: nom
575+
description: "Nom de famille de l'élu."
576+
- name: fonction
577+
description: "Intitulé simplifié de la fonction exercée (renommé depuis `libelle_de_la_fonction`)."
578+
- name: libelle
579+
description: |
580+
Libellé de la nuance politique de l'élu.
581+
* Si la nuance est trouvée (via les jointures du modèle Silver), elle est affichée.
582+
* Si la nuance est **absente** (`NULL`), elle est remplacée par la valeur 'Non connu'.
561583
- name: vw_population_densite
562584
description: Densité de population associée aux codes géographiques (communes, départements, régions), par année.
563585
columns:
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{{ config(
2+
tags = ['gold', 'presentation','elu'],
3+
alias = 'gold_presentation_elus'
4+
)
5+
}}
6+
7+
with renommage as (
8+
select
9+
case
10+
when libelle_de_la_fonction = 'Maire'
11+
then com_code
12+
when libelle_de_la_fonction = 'Président du conseil départemental'
13+
then dep_code
14+
when libelle_de_la_fonction = 'Président du conseil régional'
15+
then concat('reg', reg_code)
16+
end as codgeo,
17+
prenom_de_l_elu as prenom,
18+
nom_de_l_elu as nom,
19+
libelle_de_la_fonction as fonction,
20+
case
21+
when libelle_nuance is null
22+
then 'Non connu'
23+
else libelle_nuance
24+
end as libelle
25+
from {{ ref ("silver_presentation_elus") }}
26+
)
27+
28+
select * from renommage

0 commit comments

Comments
 (0)