-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmail.py
More file actions
106 lines (80 loc) · 4.66 KB
/
mail.py
File metadata and controls
106 lines (80 loc) · 4.66 KB
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
97
98
99
100
101
102
103
104
105
106
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import LabelEncoder
# 1. Lecture des données à partir d'un fichier CSV
df = pd.read_csv('Data/resultat_jointure.csv')
# 2. Préparation des données
# Encodage des variables catégorielles
label_encoder = LabelEncoder()
df['parti_politique_vainq2017'] = label_encoder.fit_transform(df['parti_politique_vainq2017'])
df['parti_politique_vainq2022'] = label_encoder.transform(df['parti_politique_vainq2022'])
# Sélectionner les fonctionnalités pertinentes
features = df[['2017', '2018', '2019', '2020', '2021', '2022',
'Hommes_0-19', 'Hommes_20-39', 'Hommes_40-59',
'Hommes_60-74', 'Hommes_75plus', 'Femmes_0-19',
'Femmes_20-39', 'Femmes_40-59', 'Femmes_60-74',
'Femmes_75plus', 'Population_Total',
'emploi_2007', 'emploi_2008', 'emploi_2009',
'emploi_2010', 'emploi_2011', 'emploi_2012',
'emploi_2013', 'emploi_2014', 'emploi_2015',
'emploi_2016', 'emploi_2017', 'emploi_2018',
'emploi_2019', 'emploi_2020', 'emploi_2021',
'emploi_2022']]
# Combiner les données de 2017 et 2022 pour créer une seule cible
df_2017 = features.copy()
df_2017['target'] = df['parti_politique_vainq2017']
df_2017['year'] = 2017
df_2022 = features.copy()
df_2022['target'] = df['parti_politique_vainq2022']
df_2022['year'] = 2022
# Combiner les deux DataFrames
combined_df = pd.concat([df_2017, df_2022], ignore_index=True)
# Définir les nouvelles caractéristiques (y compris l'année) et la cible
combined_features = combined_df.drop('target', axis=1)
combined_target = combined_df['target']
# Diviser les données en ensembles d'entraînement et de test
X_train, X_test, y_train, y_test = train_test_split(combined_features, combined_target, test_size=0.2, random_state=42)
# 3. Construction et entraînement du modèle Random Forest
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 4. Prédiction des probabilités pour 2024, 2025, 2026 et 2027
def make_predictions_for_year(year, adjustment_factor):
features_year = df[features.columns].copy()
features_year['year'] = year # Ajouter la colonne année
# Simuler des changements dans les taux de chômage (par exemple, ajustement de +/- adjustment_factor)
for col in ['2017', '2018', '2019', '2020', '2021', '2022']:
features_year[col] = features_year[col] * (1 + adjustment_factor)
predictions_proba = model.predict_proba(features_year)
# Obtenir les noms des partis politiques prédits
predicted_party_indices = model.predict(features_year)
predicted_parties = label_encoder.inverse_transform(predicted_party_indices)
# Préparer un DataFrame avec les résultats
results = df[['Libelle_departement']].copy()
results[f'predicted_party{year}'] = predicted_parties
# Créer un DataFrame pour les probabilités avec les noms des partis comme colonnes
classes = label_encoder.classes_
proba_df = pd.DataFrame(predictions_proba, columns=classes)
# Combiner les résultats et les probabilités
results = pd.concat([results, proba_df], axis=1)
# Enregistrement des résultats dans un fichier CSV
results.to_csv(f'Data/proba_{year}.csv', index=False)
return results
# Faire des prédictions pour 2024, 2025, 2026 et 2027
pred2024_df = make_predictions_for_year(2024, adjustment_factor=0.00)
pred2025_df = make_predictions_for_year(2025, adjustment_factor=0.01)
pred2026_df = make_predictions_for_year(2026, adjustment_factor=0.02)
pred2027_df = make_predictions_for_year(2027, adjustment_factor=0.03)
# Renommer les colonnes des DataFrames sources en ajoutant le préfixe correspondant à l'année
pred2024_df.columns = [col + "_pred2024" if col != "Libelle_departement" else col for col in pred2024_df.columns]
pred2025_df.columns = [col + "_pred2025" if col != "Libelle_departement" else col for col in pred2025_df.columns]
pred2026_df.columns = [col + "_pred2026" if col != "Libelle_departement" else col for col in pred2026_df.columns]
pred2027_df.columns = [col + "_pred2027" if col != "Libelle_departement" else col for col in pred2027_df.columns]
# Effectuer la jointure entre les DataFrames
result = pred2027_df.merge(pred2024_df, on=["Libelle_departement"], how="inner") \
.merge(pred2025_df, on=["Libelle_departement"], how="inner") \
.merge(pred2026_df, on=["Libelle_departement"], how="inner")
# Afficher un aperçu du résultat
print(result.head())
# Enregistrer le résultat dans un nouveau fichier CSV
result.to_csv("Data/jointure_prediction.csv", index=False)