Skip to content
Snippets Groups Projects

Mise à jour de la parité des élus suite aux élections législatives

1 file
+ 30
0
Compare changes
  • Side-by-side
  • Inline
+ 30
0
%% Cell type:markdown id:00c0341b-be3d-4d8a-90b9-e4e1e6653a99 tags:
# Elus
%% Cell type:markdown id:6f438054 tags:
On affiche dans DataCirco-Web le nombre d'élus femmes et hommes pour chaque échelle de territoire : Assemblée Nationale, Sénat, Conseil régional, Conseil répartemental, EPCI, Conseil municipal, Maires.
Pour avoir ces données :
- on dispose des fichiers de data.gouv que l'on télécharge au format csv via downloads. Dans chaque csv, il y a la liste des élus pour chaque échelle de représentation ;
- on dispose d'un fichier zip fourni par l'Assemblée avec un geojson par député (soit 577 fichiers geojsons) dans AMO40_deputes_actifs_mandats_actifs_organes_divises.json.zip\acteur .
Ce dernier fichier permet de savoir quels sont les députés actifs et notamment, leurs adresses email. Il n'est donc pas utile pour l'affichage DataCirco.
%% Cell type:markdown id:9863c94b tags:
Idées à ajouter dans DataCirco Web :
* préciser ce que sont les EPCI;
* mettre un "al" à conseil département;
* mettre une petite phrase sous le tableau pour indiquer qu'il s'agit de quelle législature il s'agit (ici, la 17ème).
%% Cell type:markdown id:bbfde4e1 tags:
## Tentative de lecture de la base SQL
%% Cell type:markdown id:a94e11cc tags:
Le problème : https://metabase.leximpact.dev/public/question/1bf069c8-c63f-44d9-b7e6-22ae8cb0d149
%% Cell type:code id:e2eb9c1f-1ab8-45fb-80b7-403517eb3871 tags:
``` python
import pandas as pd
from datacirco import utilitaires
from sqlalchemy import create_engine
from sqlalchemy import text
from decouple import config
import psycopg2
```
%% Output
DB Connected with env variable
INFO : Connected to database infocirco on the host localhost:5432
%% Cell type:markdown id:7fb27b941602401d91542211134fc71a tags:
%% Cell type:code id:acae54e37e7d407bbb7b55eff062a284 tags:
``` python
circo = "075-01"
dept = 75
```
%% Cell type:code id:d84413c5 tags:
``` python
import glob
import json
for deputes in glob.iglob("../data/elus/acteur/*.json"):
with open(deputes) as fichier:
data = json.load(fichier)
depute = (
data["acteur"]["etatCivil"]["ident"]["prenom"]
+ " "
+ data["acteur"]["etatCivil"]["ident"]["nom"]
)
try:
adresse = (
data["acteur"]["adresses"]["adresse"][0]["numeroRue"]
+ ","
+ data["acteur"]["adresses"]["adresse"][0]["nomRue"]
+ " "
+ data["acteur"]["adresses"]["adresse"][0]["ville"]
)
if data["acteur"]["adresses"]["adresse"][0]["numeroRue"] != "126":
print(depute, " habite au " + adresse)
except Exception as e:
print(e)
print(" ")
# print(data['acteur']['adresses']['adresse'][0])
```
%% Cell type:code id:274aa681 tags:
``` python
from datacirco.connexion_db import db, engine
```
%% Cell type:code id:f6ab19ac-affb-4335-b1ba-023c36d22569 tags:
``` python
sql = "select * from rne where code_du_departement IS NULL;"
with engine.connect() as con:
df = pd.read_sql_query(text(sql), con)
df
```
%% Output
elu ordre \
0 Membres des assemblées des collectivités à sta... 5
1 Membres des assemblées des collectivités à sta... 5
2 Membres des assemblées des collectivités à sta... 5
3 Membres des assemblées des collectivités à sta... 5
4 Membres des assemblées des collectivités à sta... 5
.. ... ...
281 Membres des assemblées des collectivités à sta... 5
282 Membres des assemblées des collectivités à sta... 5
283 Membres des assemblées des collectivités à sta... 5
284 Membres des assemblées des collectivités à sta... 5
285 Membres des assemblées des collectivités à sta... 5
code_du_departement code_sexe date_de_naissance
0 None F 01/05/1964
1 None F 01/10/1993
2 None F 01/12/1977
3 None F 02/05/1979
4 None F 02/07/1964
.. ... ... ...
281 None M 30/04/1981
282 None M 30/08/1948
283 None M 31/03/1957
284 None M 31/08/1963
285 None M 31/12/1967
[286 rows x 5 columns]
%% Cell type:markdown id:ef878ec9 tags:
### Résolution du problème des départements vides avant 2023
%% Cell type:code id:66f6e9cb tags:
``` python
from datacirco.elections_pages import elections_pages
```
%% Cell type:code id:1d70341a tags:
``` python
db_name = "infocirco"
db_user = "datacirco"
db_pass = "datacirco"
# db_host = "192.168.0.134" accès depuis JupyterHub
# db_port = "5432"
db_host = "localhost" # base docker locale
db_port = "5491"
db_url = f"postgresql://{db_user}:{db_pass}@{db_host}:{db_port}/{db_name}"
engine = create_engine(db_url, client_encoding="utf8")
```
%% Cell type:code id:da34a018-6818-4ed0-b280-74a02dca87c8 tags:
``` python
!ls /mnt/data-out/
```
%% Output
ls: cannot access '/mnt/data-out/': No such file or directory
%% Cell type:code id:ef50f24e-3d05-4dfc-91e7-de9c4251b65b tags:
``` python
# df = pd.read_csv('https://github.com/sandcha/datatouille/raw/main/elus/rne-cm-20221216.csv')
df = pd.read_csv("/mnt/data-out/datacirco/data/rne/rne-cm.csv", sep="\t")
df.head(3)
```
%% Output
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
Cell In[8], line 2
1 # df = pd.read_csv('https://github.com/sandcha/datatouille/raw/main/elus/rne-cm-20221216.csv')
----> 2 df = pd.read_csv("/mnt/data-out/datacirco/data/rne/rne-cm.csv", sep="\t")
3 df.head(3)
File /datacirco/.venv/lib/python3.11/site-packages/pandas/io/parsers/readers.py:1026, in read_csv(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, date_format, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options, dtype_backend)
1013 kwds_defaults = _refine_defaults_read(
1014 dialect,
1015 delimiter,
(...)
1022 dtype_backend=dtype_backend,
1023 )
1024 kwds.update(kwds_defaults)
-> 1026 return _read(filepath_or_buffer, kwds)
File /datacirco/.venv/lib/python3.11/site-packages/pandas/io/parsers/readers.py:620, in _read(filepath_or_buffer, kwds)
617 _validate_names(kwds.get("names", None))
619 # Create the parser.
--> 620 parser = TextFileReader(filepath_or_buffer, **kwds)
622 if chunksize or iterator:
623 return parser
File /datacirco/.venv/lib/python3.11/site-packages/pandas/io/parsers/readers.py:1620, in TextFileReader.__init__(self, f, engine, **kwds)
1617 self.options["has_index_names"] = kwds["has_index_names"]
1619 self.handles: IOHandles | None = None
-> 1620 self._engine = self._make_engine(f, self.engine)
File /datacirco/.venv/lib/python3.11/site-packages/pandas/io/parsers/readers.py:1880, in TextFileReader._make_engine(self, f, engine)
1878 if "b" not in mode:
1879 mode += "b"
-> 1880 self.handles = get_handle(
1881 f,
1882 mode,
1883 encoding=self.options.get("encoding", None),
1884 compression=self.options.get("compression", None),
1885 memory_map=self.options.get("memory_map", False),
1886 is_text=is_text,
1887 errors=self.options.get("encoding_errors", "strict"),
1888 storage_options=self.options.get("storage_options", None),
1889 )
1890 assert self.handles is not None
1891 f = self.handles.handle
File /datacirco/.venv/lib/python3.11/site-packages/pandas/io/common.py:873, in get_handle(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)
868 elif isinstance(handle, str):
869 # Check whether the filename is to be opened in binary mode.
870 # Binary mode does not support 'encoding' and 'newline'.
871 if ioargs.encoding and "b" not in ioargs.mode:
872 # Encoding
--> 873 handle = open(
874 handle,
875 ioargs.mode,
876 encoding=ioargs.encoding,
877 errors=errors,
878 newline="",
879 )
880 else:
881 # Binary mode
882 handle = open(handle, ioargs.mode)
FileNotFoundError: [Errno 2] No such file or directory: '/mnt/data-out/datacirco/data/rne/rne-cm.csv'
%% Cell type:code id:6413e172-faf9-4c27-aca0-8761c88c0ab2 tags:
``` python
# 97302 = Cayenne
# df[df["Code de la commune"] == 91326]
df[df["Code du département"].isna()]
```
%% Output
Code du département Libellé du département \
495262 NaN NaN
495263 NaN NaN
495264 NaN NaN
495265 NaN NaN
495266 NaN NaN
... ... ...
498654 NaN NaN
498655 NaN NaN
498656 NaN NaN
498657 NaN NaN
498658 NaN NaN
Code de la collectivité à statut particulier \
495262 972.0
495263 972.0
495264 972.0
495265 972.0
495266 972.0
... ...
498654 NaN
498655 NaN
498656 NaN
498657 NaN
498658 NaN
Libellé de la collectivité à statut particulier Code de la commune \
495262 Martinique 97201
495263 Martinique 97201
495264 Martinique 97201
495265 Martinique 97201
495266 Martinique 97201
... ... ...
498654 NaN 24423
498655 NaN 24423
498656 NaN 24423
498657 NaN 24423
498658 NaN 68298
Libellé de la commune Nom de l'élu Prénom de l'élu Code sexe \
495262 L'Ajoupa-Bouillon ALBENY Jeanne F
495263 L'Ajoupa-Bouillon AÏNAMA Garry M
495264 L'Ajoupa-Bouillon BELLEAU Hubert M
495265 L'Ajoupa-Bouillon BELLEAU Olivier M
495266 L'Ajoupa-Bouillon BESUBE Lydia F
... ... ... ... ...
498654 Saint-Julien-Innocence-Eulalie NADAL Jean-Jacques M
498655 Saint-Julien-Innocence-Eulalie PIANEZZOLA Jérôme M
498656 Saint-Julien-Innocence-Eulalie SAMSON Marie-Hélène F
498657 Saint-Julien-Innocence-Eulalie VILLEMAGNE Jeremy M
498658 Sainte-Marie-Aux-Mines MERCIER Mickaël M
Date de naissance Code de la catégorie socio-professionnelle \
495262 27/12/1971 55.0
495263 30/11/1983 42.0
495264 24/07/1971 62.0
495265 24/06/1973 31.0
495266 01/11/1964 31.0
... ... ...
498654 09/06/1947 71.0
498655 20/08/1977 11.0
498656 05/07/1961 69.0
498657 23/10/1994 12.0
498658 15/07/1984 11.0
Libellé de la catégorie socio-professionnelle \
495262 Employé de commerce
495263 Professeur des écoles, instituteur et assimilé
495264 Ouvrier qualifié de type industriel
495265 Profession libérale
495266 Profession libérale
... ...
498654 Ancien agriculteur exploitant
498655 Agriculteur sur petite exploitation
498656 Ouvrier agricole
498657 Agriculteur sur moyenne exploitation
498658 Agriculteur sur petite exploitation
Date de début du mandat Libellé de la fonction \
495262 18/05/2020 NaN
495263 18/05/2020 NaN
495264 18/05/2020 NaN
495265 18/05/2020 1er adjoint au Maire
495266 18/05/2020 2ème adjoint au Maire
... ... ...
498654 18/05/2020 Maire délégué
498655 18/05/2020 NaN
498656 18/05/2020 NaN
498657 18/05/2020 NaN
498658 21/03/2021 NaN
Date de début de la fonction Code nationalité
495262 NaN FR
495263 NaN FR
495264 NaN FR
495265 18/05/2020 FR
495266 18/05/2020 FR
... ... ...
498654 23/05/2020 FR
498655 NaN FR
498656 NaN FR
498657 NaN FR
498658 NaN FR
[3397 rows x 16 columns]
%% Cell type:code id:7dcceb7b-d644-412d-8444-64a6d99d21da tags:
``` python
df[df["Code de la commune"] == 24423]
```
%% Output
Code du département Libellé du département \
498644 NaN NaN
498645 NaN NaN
498646 NaN NaN
498647 NaN NaN
498648 NaN NaN
498649 NaN NaN
498650 NaN NaN
498651 NaN NaN
498652 NaN NaN
498653 NaN NaN
498654 NaN NaN
498655 NaN NaN
498656 NaN NaN
498657 NaN NaN
Code de la collectivité à statut particulier \
498644 NaN
498645 NaN
498646 NaN
498647 NaN
498648 NaN
498649 NaN
498650 NaN
498651 NaN
498652 NaN
498653 NaN
498654 NaN
498655 NaN
498656 NaN
498657 NaN
Libellé de la collectivité à statut particulier Code de la commune \
498644 NaN 24423
498645 NaN 24423
498646 NaN 24423
498647 NaN 24423
498648 NaN 24423
498649 NaN 24423
498650 NaN 24423
498651 NaN 24423
498652 NaN 24423
498653 NaN 24423
498654 NaN 24423
498655 NaN 24423
498656 NaN 24423
498657 NaN 24423
Libellé de la commune Nom de l'élu Prénom de l'élu Code sexe \
498644 Saint-Julien-Innocence-Eulalie ALBA Sandrine F
498645 Saint-Julien-Innocence-Eulalie BOURDIL Jean-Maurice M
498646 Saint-Julien-Innocence-Eulalie BOURDIL Jean-Maurice M
498647 Saint-Julien-Innocence-Eulalie COMTE Annie F
498648 Saint-Julien-Innocence-Eulalie COMTE Gérard M
498649 Saint-Julien-Innocence-Eulalie DE CONTI Francis M
498650 Saint-Julien-Innocence-Eulalie GIRONDIER Nicolas M
498651 Saint-Julien-Innocence-Eulalie GOUX Olivier M
498652 Saint-Julien-Innocence-Eulalie KLEIBER Sébastien M
498653 Saint-Julien-Innocence-Eulalie LE NAOUR Christophe M
498654 Saint-Julien-Innocence-Eulalie NADAL Jean-Jacques M
498655 Saint-Julien-Innocence-Eulalie PIANEZZOLA Jérôme M
498656 Saint-Julien-Innocence-Eulalie SAMSON Marie-Hélène F
498657 Saint-Julien-Innocence-Eulalie VILLEMAGNE Jeremy M
Date de naissance Code de la catégorie socio-professionnelle \
498644 05/04/1986 43.0
498645 09/05/1952 71.0
498646 09/05/1952 71.0
498647 16/07/1957 77.0
498648 01/09/1950 72.0
498649 15/07/1958 13.0
498650 19/05/1980 31.0
498651 26/01/1970 48.0
498652 03/09/1984 11.0
498653 15/12/1966 12.0
498654 09/06/1947 71.0
498655 20/08/1977 11.0
498656 05/07/1961 69.0
498657 23/10/1994 12.0
Libellé de la catégorie socio-professionnelle \
498644 Profession intermédiaire de la santé et du tra...
498645 Ancien agriculteur exploitant
498646 Ancien agriculteur exploitant
498647 Ancien employé
498648 Ancien artisan, commerçant, chef d'entreprise
498649 Agriculteur sur grande exploitation
498650 Profession libérale
498651 Contremaître, agent de maîtrise
498652 Agriculteur sur petite exploitation
498653 Agriculteur sur moyenne exploitation
498654 Ancien agriculteur exploitant
498655 Agriculteur sur petite exploitation
498656 Ouvrier agricole
498657 Agriculteur sur moyenne exploitation
Date de début du mandat Libellé de la fonction \
498644 18/05/2020 NaN
498645 18/05/2020 Maire
498646 18/05/2020 Maire délégué
498647 18/05/2020 NaN
498648 18/05/2020 NaN
498649 18/05/2020 NaN
498650 18/05/2020 NaN
498651 18/05/2020 NaN
498652 18/05/2020 NaN
498653 18/05/2020 Maire délégué
498654 18/05/2020 Maire délégué
498655 18/05/2020 NaN
498656 18/05/2020 NaN
498657 18/05/2020 NaN
Date de début de la fonction Code nationalité
498644 NaN FR
498645 18/05/2020 FR
498646 23/05/2020 FR
498647 NaN FR
498648 NaN FR
498649 NaN FR
498650 NaN FR
498651 NaN FR
498652 NaN FR
498653 18/05/2020 FR
498654 23/05/2020 FR
498655 NaN FR
498656 NaN FR
498657 NaN FR
%% Cell type:code id:32542e44 tags:
``` python
db_host = config("DATABASE_HOST", default="postgres_datacirco")
db_name = config("DATABASE_NAME", default="infocirco")
db_pass = config("DATABASE_PASS", default="datacirco")
db_port = config("DATABASE_PORT", default="5432")
db_user = config("DATABASE_USER", default="datacirco")
# connexion à la base postgres
try:
pg = psycopg2.connect(
dbname=db_name,
)
db_url = f"postgresql://{db_name}"
engine = create_engine(db_url)
print("Connected with name")
except psycopg2.OperationalError:
try:
pg = psycopg2.connect(
dbname=db_name,
user=db_user,
password=db_pass,
host=db_host,
port=db_port,
)
db_url = f"postgresql://{db_user}:{db_pass}@{db_host}:{db_port}/{db_name}"
engine = create_engine(db_url)
print("Connected with env variable")
except psycopg2.OperationalError:
# Whe try the outside Docker config
db_name = "infocirco"
db_user = "datacirco"
db_pass = "datacirco"
db_host = "localhost"
db_port = "5491"
pg = psycopg2.connect(
dbname=db_name,
user=db_user,
password=db_pass,
host=db_host,
port=db_port,
)
db_url = f"postgresql://{db_user}:{db_pass}@{db_host}:{db_port}/{db_name}"
engine = create_engine(db_url)
print("Connected with docker parameters")
pg.set_client_encoding("UTF8")
# db = pg.cursor()
# utilitaires.db = db
content_elections = elections_pages(db, dept, circo)
```
%% Output
Connected with docker parameters
SELECT ST_AsGeojson(wkb_geometry)::json FROM zone_circo WHERE ref= '075-01'
select st_area(wkb_geometry::geography)/1000000 from zone_circo where ref = '075-01'
select sum(st_area(wkb_geometry::geography)::float)/1000000 from ign_region where insee_reg != '03';
select d.*, n.femmes_nat, n.total_nat from
(select elu,
sum(case when code_sexe='F' then 1 else 0 end) as femmes,
count(*) as total
from rne
where code_du_departement='75'
group by 1) as d
join
(select elu,
sum(case when code_sexe='F' then 1 else 0 end) as femmes_nat,
count(*) as total_nat
from rne
group by 1) as n ON (n.elu=d.elu)
order by 3
%% Cell type:code id:2bc590b2-8546-489f-9c7c-5efa04d4e424 tags:
``` python
utilitaires.out(r"\newpage")
# Les chiffres pour "Le corps électoral" donnent des statistiques abérentes, comme 103% d'inscrits !
# Car on compare des chiffres de population 2015 avec des données de vote de 2022.
# utilitaires.out(
# """
# \\section{Le corps électoral (Min. Int. décembre 2022)}
# \\index{elections@élections}
# Il y avait \\textbf{%s} inscrits sur les listes électorales aux dernières élections législatives
# soit \\textbf{%s} de la population majeure et \\textbf{%s} de la population totale.
# """
# % (
# circonscription["inscrits"],
# utilitaires.pct(
# int(circonscription["inscrits"]),
# pop2015[1] - pop2015[2] - pop2015[3] - pop2015[4] - pop2015[5],
# ),
# utilitaires.pct(int(circonscription["inscrits"]), pop2015[1]),
# )
# )
dept = 6
utilitaires.out(
"""
\\section{Parités des Élus dans le département}
"""
)
utilitaires.db_exec(
db.mogrify(
"""
select d.*, n.femmes_nat, n.total_nat from
(select elu,
sum(case when code_sexe='F' then 1 else 0 end) as femmes,
count(*) as total
from rne
where code_du_departement='%s'
group by 1) as d
join
(select elu,
sum(case when code_sexe='F' then 1 else 0 end) as femmes_nat,
count(*) as total_nat
from rne
group by 1) as n ON (n.elu=d.elu)
order by 3
"""
% (dept)
),
"parite_elus",
)
elus = db.fetchall()
if len(elus) < 3:
utilitaires.out("Pas de données pour cette circonscription.")
else:
utilitaires.out(
"""
\\par
\\begin{center}
\\begin{tabular}{|l|r|r|r|r|r|}
\\hline
\\multicolumn{6}{|c|}{\\textbf{Parités des Élus (sur le département)}} \\\\
\\hline
\\ Type & Femmes & Hommes & Total & \\% femmes & \\% National \\\\
\\hline
"""
)
for elu in elus:
utilitaires.out(
" \\ %s & %s & %s & %s & %s & %s \\\\"
% (
elu[0], # Type
elu[1], # Femmes
elu[2] - elu[1], # Hommes
elu[2] if elu[0] != "Assemblée nationale" else "577", # Total
utilitaires.pct(elu[1], elu[2]),
utilitaires.pct(elu[3], elu[4]),
)
)
utilitaires.out(
"""
\\hline
\\end{tabular}
\\par
Source: Répertoire National des Élus (Min. Intérieur) décembre 2022
\\end{center}
\\vfill
"""
)
```
%% Output
\newpage
\section{Parités des Élus dans le département}
select d.*, n.femmes_nat, n.total_nat from
(select elu,
sum(case when code_sexe='F' then 1 else 0 end) as femmes,
count(*) as total
from rne
where code_du_departement='6'
group by 1) as d
join
(select elu,
sum(case when code_sexe='F' then 1 else 0 end) as femmes_nat,
count(*) as total_nat
from rne
group by 1) as n ON (n.elu=d.elu)
order by 3
Pas de données pour cette circonscription.
%% Cell type:markdown id:79f2e542 tags:
Export de données
%% Cell type:code id:56f0282c tags:
``` python
from datacirco.modules_data.data import DataCirco, GetDataCirco
from datacirco.connexion_db import db
from datacirco.export_to_json.elections import export_elections
geo = GetDataCirco(db=db, data=DataCirco("17", "017-02")).data.geo
export_elus = export_elections(db=db, data=DataCirco("17", "017-02"))
```
%% Output
SELECT ST_AsGeojson(wkb_geometry)::json FROM zone_circo WHERE ref= '017-02'
SQL Execution time: 0.01600050926208496
select st_area(wkb_geometry::geography)/1000000 from zone_circo where ref = '017-02'
SQL Execution time: 0.027678489685058594
select sum(st_area(wkb_geometry::geography)::float)/1000000 from ign_region where insee_reg != '03';
SQL Execution time: 1.633636236190796
select d.*, n.femmes_nat, n.total_nat from
(select elu, ordre,
sum(case when code_sexe='F' then 1 else 0 end) as femmes,
count(*) as total
from rne
where rne.code_du_departement='17'
group by 1, 2) as d
join
(select elu, ordre,
sum(case when code_sexe='F' then 1 else 0 end) as femmes_nat,
count(*) as total_nat
from rne
group by 1, 2) as n ON (n.elu=d.elu)
order by d.ordre desc;
SQL Execution time: 7.225639820098877
%% Cell type:code id:d0d4a250 tags:
``` python
export_elus["elus"]
```
%% Output
[{'organisation': 'Assemblée nationale',
'ordre': 8,
'femmes_dep': 0,
'total_dep': 5,
'femmes_nat': 208,
'total_nat': 577},
{'organisation': 'Sénat',
'ordre': 7,
'femmes_dep': 1,
'total_dep': 3,
'femmes_nat': 128,
'total_nat': 348},
{'organisation': 'Conseil régional',
'ordre': 6,
'femmes_dep': 88,
'total_dep': 181,
'femmes_nat': 6800,
'total_nat': 14132},
{'organisation': 'Conseil départemental',
'ordre': 4,
'femmes_dep': 27,
'total_dep': 53,
'femmes_nat': 2024,
'total_nat': 4041},
{'organisation': 'EPCI',
'ordre': 3,
'femmes_dep': 261,
'total_dep': 756,
'femmes_nat': 22509,
'total_nat': 63880},
{'organisation': 'Conseil municipal',
'ordre': 2,
'femmes_dep': 2560,
'total_dep': 5844,
'femmes_nat': 174824,
'total_nat': 408971},
{'organisation': 'Maires',
'ordre': 1,
'femmes_dep': 103,
'total_dep': 453,
'femmes_nat': 6539,
'total_nat': 31257}]
Loading