-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path04-stats-parties.py
96 lines (71 loc) · 4.15 KB
/
04-stats-parties.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import pandas as pd
import matplotlib.pyplot as plt
import os
import json
import re
# Lire les données à partir du fichier CSV
df = pd.read_csv("./data/raw/candidats-eur-2024.csv", delimiter=";")
pattern = re.compile(r'\(\d+\) - ')
# Parcourir les parties et générer les camemberts
for partie, partie_data in df.groupby('Numéro de panneau'):
# Créer un dossier pour la partie
dossier_partie = f"./data/stats/{partie}"
os.makedirs(dossier_partie, exist_ok=True)
partie_data['Profession'] = partie_data['Profession'].str.replace(pattern, '')
# Générer le camembert pour les professions de cette partie
profession_counts = partie_data['Profession'].value_counts()
plt.figure(figsize=(12, 8))
profession_counts.plot(kind='pie', autopct=lambda p: f'{p:.1f}%', startangle=140)
plt.title(f'Répartition des professions')
plt.axis('equal') # Assurez-vous que le camembert est un cercle
# Enregistrer le graphique dans le dossier de la partie
# plt.savefig(os.path.join(dossier_partie, f'camembert_professions_partie.png'))
plt.savefig(os.path.join(dossier_partie, f'camembert_professions_partie.svg'), format='svg', dpi=300)
plt.close()
# Calculate percentages
profession_percentages = profession_counts / profession_counts.sum() * 100
# Prepare the age distribution with percentages for JSON
profession_distribution_dict = profession_percentages.round(1).to_dict()
with open(os.path.join(dossier_partie, f'repartition_professions_partie.json'), 'w') as json_file:
json.dump(profession_distribution_dict, json_file, indent=4, ensure_ascii=False)
parite_counts = partie_data['Sexe'].value_counts()
plt.figure(figsize=(12, 8))
parite_counts.plot(kind='pie', autopct=lambda p: f'{p:.1f}%', startangle=140)
plt.title(f'Parité')
plt.axis('equal') # Assurez-vous que le camembert est un cercle
# Enregistrer le graphique dans le dossier de la partie
# plt.savefig(os.path.join(dossier_partie, f'camembert_professions_partie.png'))
plt.savefig(os.path.join(dossier_partie, f'camembert_parite.svg'), format='svg', dpi=300)
plt.close()
# Calculate percentages
parite_percentages = parite_counts / parite_counts.sum() * 100
# Prepare the age distribution with percentages for JSON
parite_distribution_dict = parite_percentages.round(1).to_dict()
with open(os.path.join(dossier_partie, f'repartition_parite.json'), 'w') as json_file:
json.dump(parite_distribution_dict, json_file, indent=4, ensure_ascii=False)
# Convertir la colonne 'Date de naissance' en datetime
partie_data['Date de naissance'] = pd.to_datetime(partie_data['Date de naissance'], format='%d/%m/%Y')
# Calculer l'âge à partir de la date de naissance
partie_data['Age'] = pd.Timestamp.now().year - partie_data['Date de naissance'].dt.year
# Définir les tranches d'âges
bins = [18, 30, 40, 50, 60, 70, 120]
labels = ['18-29', '30-39', '40-49', '50-59', '60-69', '70+']
# Ajouter une colonne pour les tranches d'âges
partie_data['Tranche d\'âge'] = pd.cut(partie_data['Age'], bins=bins, labels=labels, right=False)
# Générer le camembert pour les tranches d'âge de cette partie
age_counts = partie_data['Tranche d\'âge'].value_counts()
plt.figure(figsize=(8, 6))
age_counts.plot(kind='pie', autopct=lambda p: f'{p:.1f}%', startangle=140)
plt.title(f'Répartition des tranches d\'âge')
plt.axis('equal') # Assurez-vous que le camembert est un cercle
# Enregistrer le graphique dans le dossier de la partie
# plt.savefig(os.path.join(dossier_partie, f'camembert_tranches_age_partie.png'))
plt.savefig(os.path.join(dossier_partie, f'camembert_tranches_age_partie.svg'), format='svg', dpi=300)
plt.close()
# Calculate percentages
age_percentages = age_counts / age_counts.sum() * 100
# Prepare the age distribution with percentages for JSON
age_distribution_dict = age_percentages.round(1).to_dict()
# Round to match the pie chart display
with open(os.path.join(dossier_partie, f'repartition_tranches_age.json'), 'w') as json_file:
json.dump(age_distribution_dict, json_file, indent=4, ensure_ascii=False)