Projet_Python
February 8, 2025
1 Importation des library nécessaires
Description du projet : Nous allons utiliser une base de données contenant les indicateurs de bonne
gouvernance et l’IDH des pays d Afrique en 2022, en vue d’analyser les relations pouvant exister
entre la bonne gouvernance et le developpement des pays africains en 2022.
Suivant les instructions du prof, nous avons penser mettre une touche personnelle a notre travail,
pour assurer de la pertinence de notre travail.
[3]: import pandas as pd
import numpy as np
import pylab
import pandas as pd
import seaborn as sns
import statistics
import [Link] as sm
import [Link] as plt
import [Link] as stats
from [Link] import StandardScaler
from [Link] import PCA
from [Link] import shapiro
from [Link] import mannwhitneyu
from [Link] import chi2_contingency
from [Link] import pearsonr
import [Link] as plt
2 Importation des bases de données
[4]: WDG = pd.read_stata ("F:/donnees/Documents/[Link]") #la base contenant␣
↪les indicateurs de bonnes gouvernances des pays
IDH_2022_AF = pd.read_excel ("F:/donnees/Documents/IDH_2022.xlsx") #une base de␣
↪données contenant les IDH des pays d'Afrique en 2022.
# Renommer les colonnes
[Link](columns={
"code": "code_pays",
"countryname": "pays",
"year": "annee"
1
}, inplace=True)
# Modifions les valeurs de code_pays selon les conditions
WDG .loc[WDG ["code_pays"] == "ZAR", "code_pays"] = "COD" # RDC
WDG .loc[WDG ["code_pays"] == "BMU", "code_pays"] = "BWA" # Botwana
WDG .loc[(WDG ["code_pays"] == "BWA") & (WDG ["pays"] == "Bermuda"),␣
↪"code_pays"] = "BMU"
# Gardons uniquement les colonnes spécifiques
colonnes_a_conserver = ["code_pays", "pays", "annee", "vae", "pve", "gee",␣
↪"rqe", "rle", "cce"]
WDG = WDG [colonnes_a_conserver]
WDG_2022 = [Link][(WDG["annee"]==2022)] # on selectionne uniquement les␣
↪indicateurs pour 2022.
# Fusion des deux bases sur "code_pays"
Base = [Link](WDG_2022, IDH_2022_AF, on="code_pays", how="inner") #on réalise␣
↪une jointure interne entre les bases IDH_2022_AF et WDG_2022.
Base = [Link](["Pays", "annee"], axis=1)
#1. Affiche les 5 premières lignes pour vérification
[Link](5)
[4]: code_pays pays vae pve gee rqe rle \
0 AGO Angola -0.797131 -0.646241 -1.040429 -0.606699 -1.021905
1 BDI Burundi -1.387993 -1.188869 -1.262841 -0.947486 -1.277140
2 BEN Benin -0.348291 -0.349461 -0.164296 -0.348365 -0.602390
3 BFA Burkina Faso -0.633902 -1.782517 -0.825155 -0.468306 -0.607679
4 BWA Botswana 0.446498 1.077516 0.463997 0.621044 0.467351
cce IDH 2022 Niveau_dev
0 -0.601941 0.592 Moyen
1 -1.518142 0.426 Faible
2 -0.124256 0.545 Moyen
3 -0.083611 0.449 Faible
4 0.661455 0.693 Moyen
3 Presentation des variables
VA : Voice and Accountability (Voix et Responsabilité) - Mesure la liberté d’expression politique, la
liberté de la presse, la liberté d’association et de réunion, ainsi que la participation électorale. � PV
: Political Stability and Absence of Violence (Stabilité Politique et Absence de Violence) - Évalue
la probabilité de changements politiques violents ou de conflits. � GE : Government Effectiveness
(Efficacité du Gouvernement) - Mesure la qualité de la régulation, la compétence des fonctionnaires
2
publics, et l’efficacité de l’administration publique dans la mise en œuvre des politiques. � RQ :
Regulatory Quality (Qualité de la Régulation) - Évalue la transparence réglementaire, la complexité
administrative, et la qualité des normes et régulations. � RL : Rule of Law (État de Droit) - Mesure
l’indépendance du système judiciaire, l’application de la loi, et le respect des droits de propriété.
� CC : Control of Corruption (Contrôle de la Corruption) - Évalue la perception de la corruption
dans le secteur public et l’efficacité des institutions anti-corruption.
A terme, la base “Base” contient les indicateurs de gouvernance de la Banque Mondiale et les IDH
des pays d’Afrique, tous pour l’année 2022.
[5]: #2. Les types de données.
[Link]
[5]: code_pays object
pays object
vae float32
pve float32
gee float32
rqe float32
rle float32
cce float32
IDH 2022 float64
Niveau_dev object
dtype: object
[6]: #vérifier les valeurs manquantes.
[Link]().sum()
[6]: code_pays 0
pays 0
vae 0
pve 0
gee 0
rqe 0
rle 0
cce 0
IDH 2022 0
Niveau_dev 0
dtype: int64
Il n’y a aucune valeur manquante dans la base.
3
4 Résumer les statistiques descriptives pour chaque colonne
numérique
[7]: import pandas as pd
import numpy as np
# Sélection des colonnes numériques
col_num = Base.select_dtypes(include=[[Link]]).columns
# Fonction pour calculer les statistiques
def calcul_stats(col):
if round([Link](col), 3) == 0: # Éviter la division par zéro pour le CV
cv = [Link]
else:
cv = round([Link](col, ddof=1) / [Link](col), 3)
return [
round([Link](col), 3),
round([Link](col), 3),
round([Link](col), 3),
round([Link](col), 3),
round([Link](col, ddof=1), 3),
round([Link](col, ddof=1), 3),
round([Link](col, 25), 3),
round([Link](col, 75), 3),
round([Link](col, 75) - [Link](col, 25), 3),
cv
]
# Noms des statistiques pour les colonnes
stats_names = ["Max", "Min", "Moyenne", "Médiane", "Écart-type", "Variance",
"Q1 (1er quartile)", "Q3 (3e quartile)", "IQR", "CV (Coeff.␣
↪variation)"]
# Création du DataFrame des statistiques avec les variables en lignes
df_stats = [Link]({col: calcul_stats(Base[col]) for col in col_num},␣
↪index=stats_names).T
# Affichage du tableau
print(df_stats)
Max Min Moyenne Médiane Écart-type Variance \
vae 0.935 -1.699 -0.575 -0.659 0.687 0.472
pve 1.078 -2.479 -0.640 -0.508 0.887 0.787
gee 0.750 -2.390 -0.767 -0.745 0.654 0.428
rqe 1.166 -2.104 -0.725 -0.721 0.623 0.389
rle 0.800 -2.055 -0.694 -0.623 0.622 0.387
4
cce 1.698 -1.856 -0.627 -0.669 0.709 0.503
IDH 2022 0.802 0.385 0.561 0.543 0.104 0.011
Q1 (1er quartile) Q3 (3e quartile) IQR CV (Coeff. variation)
vae -1.125 -0.065 1.060 -1.196
pve -1.238 -0.082 1.157 -1.387
gee -1.226 -0.385 0.841 -0.853
rqe -1.063 -0.425 0.638 -0.860
rle -1.096 -0.353 0.743 -0.896
cce -1.114 -0.330 0.784 -1.131
IDH 2022 0.502 0.612 0.110 0.186
Avec une moyenne de 0.56, la majorité des pays semblent classés dans la tranche moyenne de
l’indice. L’écart-type relativement faible (0.104) montre une homogénéité dans les niveaux d’IDH.
Valeurs moyennes négatives (vae, pve, gee, rqe, rle, cce) : Cela reflète une performance globale
médiocre en matière de bonne gouvernance pour les pays étudiés.
Minima extrêmement faibles (-2.479 pour pve, -2.389 pour gee) : Ces pays montrent de défis
institutionnels et gouvernance déficiente importantes.
[63]: #On cree une fonction py qui prend en parametre une base,puis renvoie un␣
↪histogramme pour chaque variable quanti de la base.
def plot_histo(df):
# Sélection des colonnes numériques
col_num = df.select_dtypes(include=['number']).columns
nb_col = len(col_num) # Nombre total de variables numériques
# On définit la disposition des sous-graphiques
rows = (nb_col // 3) + (nb_col % 3 > 0) # On arrondit pour avoir assez de␣
↪lignes
cols = min(3, nb_col) # Maximum 3 colonnes pour une bonne lisibilité
fig, axes = [Link](rows, cols, figsize=(5 * cols, 4 * rows))
axes = [Link]()
# On trace chaque histogramme dans un sous-graphique
for i, col in enumerate(col_num):
df[col].dropna().hist(bins=20, color='skyblue', edgecolor='black',␣
↪ax=axes[i])
axes[i].set_title(f"Histogramme de {col}")
axes[i].set_xlabel(col)
axes[i].set_ylabel("Fréquence")
axes[i].grid(True)
# Supprimer les axes inutilisés s'il y en a
for j in range(i + 1, len(axes)):
[Link](axes[j])
5
plt.tight_layout() # Ajuste automatiquement les espacements
[Link]()
[64]: #Application de la fonction plot_histo() sur la Base.
plot_histo (Base)
La lecture de ces histogrammes permettent d’observer une certaine tendance à la loi normale,
pour les variables de bonnes gouvernances. Cependant, l’IDH semble ne pas suivre une tendance
normale.
On crée une fonction py qui prend en parametre une base,puis renvoie un boxplot pour chaque
variable quanti de la base.
[65]: def plot_boxplots(df):
# Sélection des colonnes numériques
col_num = df.select_dtypes(include=['number']).columns
nb_col = len(col_num) # Nombre total de variables numériques
# Définir la disposition des sous-graphiques
6
rows = (nb_col // 3) + (nb_col % 3 > 0) # Nombre de lignes nécessaires
cols = min(3, nb_col) # Maximum 3 colonnes pour une bonne lisibilité
fig, axes = [Link](rows, cols, figsize=(5 * cols, 4 * rows))
axes = [Link]()
# Trace chaque boxplot dans un sous-graphique
for i, col in enumerate(col_num):
df[col].dropna().plot(kind='box', vert=False, ax=axes[i], color='blue')
axes[i].set_title(f"Boxplot de {col}")
axes[i].set_xlabel(col)
axes[i].grid(True)
# Supprime les axes inutilisés s'il y en a
for j in range(i + 1, len(axes)):
[Link](axes[j])
plt.tight_layout() # Ajuste automatiquement les espacements
[Link]()
[66]: #Application sur la base.
plot_boxplots(Base)
7
L’analyse des boxplots montre que certaines variables ne présentent pas de outliers (vae,pve,gee).
D’autres par contre, en présentent. C’est le cas de: rqe: 3 outliers dont deux dépassant la moustache
droite, ainsi que IDH_2022 et cee. La variable rle présente une seule valeur extreme depassant la
moustache droite. Cela indique qu’il y a des pays qui se démarquent particulierement des autres
dans la qualité de leur gouvernance (Deux pays en particulier). Les boxplots plus allongés indiquent
une variance (ou dispersion) plus importante des données.
[67]: def scatter_plots(df):
# Vérifie que 'IDH 2022' existe bien dans la base
if 'IDH 2022' not in [Link]:
print("Erreur : La colonne 'IDH 2022' n'existe pas dans la base.")
return
# Sélectionne uniquement les colonnes quantitatives
col_num = df.select_dtypes(include=['number']).[Link]('IDH 2022',␣
↪errors='ignore')
# Création de scatter plots entre chaque variable quantitative et 'IDH 2022'
for col in col_num:
8
[Link](figsize=(12, 5))
[Link](df[col], df['IDH 2022'], color='green')
[Link](f"Scatter Plot entre IDH_2022 et {col}")
[Link](f"{col}")
[Link]("IDH 2022")
[Link](True)
[Link]()
# Calcul de la corrélation de Pearson et p-value
corr, p_value = pearsonr(df[col], df['IDH 2022'])
print(f"Test de corrélation entre 'IDH 2022' et '{col}':")
print(f"Coefficient de corrélation : {corr:.4f}")
print(f"p-value : {p_value:.4e}")
# Règles de décision
if p_value < 0.05:
if abs(corr) > 0.7:
print("Conclusion : Corrélation très forte et significative.")
elif abs(corr) > 0.5:
print("Conclusion : Corrélation modérée et significative.")
else:
print("Conclusion : Corrélation faible mais significative.")
else:
print("Conclusion : Pas de corrélation significative.")
print("-" * 50)
[68]: # Application a la base.
scatter_plots(Base)
Test de corrélation entre 'IDH 2022' et 'vae':
9
Coefficient de corrélation : 0.3636
p-value : 8.7300e-03
Conclusion : Corrélation faible mais significative.
--------------------------------------------------
Test de corrélation entre 'IDH 2022' et 'pve':
Coefficient de corrélation : 0.5294
p-value : 6.4857e-05
Conclusion : Corrélation modérée et significative.
--------------------------------------------------
Test de corrélation entre 'IDH 2022' et 'gee':
Coefficient de corrélation : 0.5732
10
p-value : 1.1014e-05
Conclusion : Corrélation modérée et significative.
--------------------------------------------------
Test de corrélation entre 'IDH 2022' et 'rqe':
Coefficient de corrélation : 0.4525
p-value : 8.5768e-04
Conclusion : Corrélation faible mais significative.
--------------------------------------------------
Test de corrélation entre 'IDH 2022' et 'rle':
Coefficient de corrélation : 0.5324
p-value : 5.7952e-05
11
Conclusion : Corrélation modérée et significative.
--------------------------------------------------
Test de corrélation entre 'IDH 2022' et 'cce':
Coefficient de corrélation : 0.4809
p-value : 3.5427e-04
Conclusion : Corrélation faible mais significative.
--------------------------------------------------
Test de corrélation entre 'IDH 2022' et 'IBG':
Coefficient de corrélation : 0.5415
p-value : 4.0772e-05
Conclusion : Corrélation modérée et significative.
12
--------------------------------------------------
Un heatmap (matrice de correlations) ou un cercle de correlations permettraient de visualiser toutes
les correlations lineaires entre les variables.
5 3. Statistiques descriptives avancées
Analyse des correlations entre les variables numeriques quantitatives.
Pour ce faire, nous allons realiser une ACP, puis commenter brievement ce cercle de correlations
des variables.
[69]: [Link]
[69]: Index(['code_pays', 'vae', 'pve', 'gee', 'rqe', 'rle', 'cce', 'IDH 2022',
'Niveau_dev', 'IBG', 'Niveau_gouv'],
dtype='object')
[70]: # On renomme les lignes selon le nom des pays correspondants
Base.set_index('pays', inplace=True)
# Séparation des variables actives et supplémentaires
var_actives = [Link](columns=['IDH 2022', 'Niveau_dev', 'code_pays'])
var_sup = Base[['IDH 2022']] # Variable supplémentaire.
# Normalisation des variables actives (centrage-réduction)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(var_actives)
# Conversion optionnelle en DataFrame pour meilleure lisibilité
X_scaled = [Link](X_scaled,
columns=var_actives.columns,
index=[Link])
# Ajout des variables supplémentaires pour l'analyse
acp_df = var_actives.join(var_sup)
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_1464\[Link] in ?()
1 # On renomme les lignes selon le nom des pays correspondants
----> 2 Base.set_index('pays', inplace=True)
3
4 # Séparation des variables actives et supplémentaires
5 var_actives = [Link](columns=['IDH 2022', 'Niveau_dev', 'code_pays'])
c:\ProgramData\anaconda3\Lib\site-packages\pandas\core\[Link] in ?(self, keys,␣
↪drop, append, inplace, verify_integrity)
6118 if not found:
13
6119 [Link](col)
6120
6121 if missing:
-> 6122 raise KeyError(f"None of {missing} are in the columns")
6123
6124 if inplace:
6125 frame = self
KeyError: "None of ['pays'] are in the columns"
[ ]: var_actives.head(5)
[ ]: vae pve gee rqe rle cce
pays
Angola -0.797131 -0.646241 -1.040429 -0.606699 -1.021905 -0.601941
Burundi -1.387993 -1.188869 -1.262841 -0.947486 -1.277140 -1.518142
Benin -0.348291 -0.349461 -0.164296 -0.348365 -0.602390 -0.124256
Burkina Faso -0.633902 -1.782517 -0.825155 -0.468306 -0.607679 -0.083611
Botswana 0.446498 1.077516 0.463997 0.621044 0.467351 0.661455
[ ]: #Scree-plot
# Appliquer PCA
pca = PCA()
X_pca= [Link](X_scaled)
# Tracer le scree plot
[Link](figsize=(12, 4))
[Link](range(1, len(pca.explained_variance_ratio_) + 1), pca.
↪explained_variance_ratio_, marker='o', linestyle='-')
[Link]('Diagramme des valeurs propres')
[Link]('Composante Principale')
[Link]('Variance expliquée')
[Link](range(1, len(pca.explained_variance_ratio_) + 1))
[Link](True)
[Link]()
14
On observe une cassure (ou changement de pente) a partir de la deuxieme dimension. Les deux
premieres dimensions permettent donc restituer l’essentiel de l’information contenue dans le jeu de
données de depart.
[ ]: # Variance cumulee
# Calculer la variance cumulée
cumulative_variance = [Link](pca.explained_variance_ratio_)
# Plot de la variance cumulée
[Link](1, 2, 2)
[Link](range(1, len(cumulative_variance) + 1), cumulative_variance,␣
↪marker='o', linestyle='-', color='red')
[Link]('Variance Cumulée')
[Link]('Composante Principale')
[Link]('Variance Cumulée (%)')
[Link](range(1, len(cumulative_variance) + 1))
[Link](True)
15
Les deux premieres dimensions cumulent 90% de la variance expliquée du jeu de données. La
premiere dimension a elle seule restitue plus de 80% de la variabilité des données, elle constitue
donc un indicateur de la qualité de gouvernance. (Asselin, 2005).
Nous allons recuperer les coordonnées des individus sur le premier facteur, puis les standardiser
par Min-Max, pour obtenir un indicateur de qualité de gouvernance au sens de Asselin, 2005.
[ ]: # Extraction des coordonnées sur le premier facteur
pca = PCA(n_components=2) # Choisir 2 composantes principales
X_pca = pca.fit_transform(X_scaled)
# Extraction des coordonnées sur le premier facteur
coordonnees_premier_facteur = X_pca[:, 0]
# Affichage des résultats
coordonnees_df = [Link](coordonnees_premier_facteur, columns=["IBG"])
# Min-Max normalisation
min_val = [Link](coordonnees_premier_facteur)
max_val = [Link](coordonnees_premier_facteur)
16
coordonnees_normalisees = (coordonnees_premier_facteur - min_val) / (max_val -␣
↪min_val)
coordonnees_normalisees_df = [Link](coordonnees_normalisees,␣
↪columns=["IBG"])
# Ajout des coordonnées normalisées comme nouvelle colonne
Base["IBG"] = coordonnees_normalisees
# On cree une variable categorielle Niveau_gouv, qui prend la modalité "Faible"␣
↪si IBG<0,5. Moyen si 0,5<=IBG<=0,7 et Elévé si IBG>0,7.
Base["Niveau_gouv"] = [Link](
Base["IBG"],
bins=[-[Link], 0.5, 0.7, [Link]],
labels=["Faible", "Moyen", "Élevé"]
)
Base_triee= Base.sort_values(by='IBG', ascending=False)
Base_triee.head(10) #pour afficher les 10 meilleurs pays d'Afrique en matiere␣
↪de bonne gouvernance en 2022, selon notre indicateur.
[ ]: code_pays vae pve gee rqe rle \
pays
Mauritius MUS 0.601032 0.835722 0.750285 1.166106 0.799989
Seychelles SYC 0.597845 0.756404 0.662167 0.327583 0.460203
Botswana BWA 0.446498 1.077516 0.463997 0.621044 0.467351
Cape Verde CPV 0.935108 0.929428 -0.026203 0.263682 0.365232
Namibia NAM 0.561278 0.556306 0.039500 -0.015001 0.404544
Rwanda RWA -0.930956 0.030514 0.232486 0.162930 0.146466
Ghana GHA 0.394974 -0.065913 -0.062546 -0.178819 -0.076320
South Africa ZAF 0.707014 -0.722118 -0.125318 -0.185126 0.019737
Senegal SEN 0.164924 -0.153299 -0.001249 -0.296521 -0.262500
Morocco MAR -0.560848 -0.319889 -0.131650 -0.086890 -0.197303
cce IDH 2022 Niveau_dev IBG Niveau_gouv
pays
Mauritius 0.412719 0.802 élévé 1.000000 Élevé
Seychelles 1.698149 0.796 élévé 0.986198 Élevé
Botswana 0.661455 0.693 Moyen 0.937324 Élevé
Cape Verde 0.983123 0.676 Moyen 0.914554 Élevé
Namibia 0.215328 0.617 Moyen 0.822373 Élevé
Rwanda 0.561203 0.536 Moyen 0.746399 Élevé
Ghana -0.045995 0.632 Moyen 0.722420 Élevé
South Africa -0.319765 0.713 élévé 0.699904 Moyen
Senegal -0.028728 0.505 Moyen 0.690398 Moyen
Morocco -0.357443 0.683 Moyen 0.634977 Moyen
Plot des individus.
17
[ ]: # Récupérer les scores des individus.
pca = PCA(n_components=2)
scores = pca.fit_transform(X_pca)
# Plot des individus (projections sur les 2 premières composantes principales)
[Link](figsize=(12, 8))
[Link](scores[:, 0], scores[:, 1], color='green', label='Individus')
# Ajouter des labels pour chaque point
for i, txt in enumerate([Link]):
[Link](scores[i, 0], scores[i, 1], str(txt), fontsize=12)
[Link]('Plot des Individus (PCA)')
[Link]('Composante Principale 1')
[Link]('Composante Principale 2')
[Link](True)
[Link]()
[ ]: # Récupération des coefficients (vecteurs propres)
coefficients = pca.components_.T
def plot_correlation_circle(coefficients, labels):
[Link](figsize=(8, 6))
18
[Link](0, color='grey', linestyle='--')
[Link](0, color='grey', linestyle='--')
# Trace le cercle
circle = [Link]((0, 0), 1, color='blue', fill=False, linestyle='-')
[Link]().add_artist(circle)
# Ajoute les flèches pour chaque variable
for i in range([Link][0]):
[Link](0, 0, coefficients[i, 0], coefficients[i, 1],
head_width=0.03, head_length=0.05, color='blue')
[Link](coefficients[i, 0], coefficients[i, 1], labels[i],
fontsize=12, ha='center', va='center')
[Link](-1.1, 1.1)
[Link](-1.1, 1.1)
[Link]('Composante 1')
[Link]('Composante 2')
[Link]('Cercle de Corrélation')
[Link]()
# Trace le cercle de corrélation
plot_correlation_circle(coefficients, var_actives.columns)
19
Interprétation :
6 Matrice de correlation
[ ]: # Sélection des colonnes numériques
col_num = Base.select_dtypes(include=[[Link]])
# Calcul de la matrice de corrélation
matrice_correlation = col_num.corr()
# Visualisation avec une heatmap
[Link](figsize=(12, 6)) # Taille de la figure
[Link](matrice_correlation, annot=True, cmap='coolwarm', vmin=-1, vmax=1,␣
↪linewidths=0.5, fmt='.2f')
# Ajouter un titre à la heatmap
[Link]("Matrice de Corrélation")
[Link]()
20
Interprétation : La matrice de correlation confirme bien la forte correlation entre les variables de
bonne gouvernance, avec des coefficients de correlation de Pearson superieur a 0,7. Cependant, les
correlations entre l’IDH et les indicateurs de gouvernance sont assez faibles, voire faibles (inferieur
a 0,5 voire meme inferieur a 0,4).
7 4. Tests statistiques
[ ]: # Test de normalité : sur l'indicateur de bonne gouvernance (IBG)
# Test de Shapiro-Wilk
stat, p_value = shapiro(Base_triee['IBG'])
print("Statistique du test:", round(stat,3))
print("p-value:", round(p_value,3))
if p_value > 0.05:
print("La distribution est normale (on ne rejette pas H0)")
else:
print("La distribution n'est pas normale (on rejette H0)")
Statistique du test: 0.976
p-value: 0.381
La distribution est normale (on ne rejette pas H0)
[ ]: [Link](Base_triee['IBG'], bins=15, density=True, alpha=0.5, color='skyblue',␣
↪edgecolor='black')
21
# Titre et étiquettes
[Link]("Histogramme de l'indicateur IBG")
[Link]("IBG")
[Link]("Nombre de pays")
[Link]()
[ ]: [Link](figsize=(8, 6)) # Taille de la figure
[Link](data=Base['IBG'], palette="Set2")
# Ajoute un titre et personnaliser les axes
[Link]("Boxplot de l'indicateur de bonne gouvernance", fontsize=10)
[Link]("IBG", fontsize=10)
# Affiche le graphique
[Link]()
C:\Users\LENOVO T470S\AppData\Local\Temp\ipykernel_1464\[Link]:
FutureWarning:
Passing `palette` without assigning `hue` is deprecated and will be removed in
22
v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same
effect.
[Link](data=Base['IBG'], palette="Set2")
[ ]: #Test de comparaison de deux groupes.
# Constitution des groupes
groupe_1 = [Link][Base["Niveau_dev"] == "élévé", "IBG"] # Les valeurs de␣
↪l'indicateur IBG pour tous les pays ayant un niveau de developpement élévé.
groupe_2 = [Link][Base["Niveau_dev"] != "élévé", "IBG"] # Les valeurs de␣
↪l'indicateur IBG pour tous les pays n'ayant pas un niveau de developpement␣
↪élévé.
# Test de Mann-Whitney
stat, p_value = mannwhitneyu(groupe_1, groupe_2, alternative="two-sided")
print("Statistique de test Mann-Whitney :", stat)
print("p-value :", round(p_value,3))
if p_value < 0.05:
23
print("Différence significative entre les deux groupes.")
else:
print("Pas de différence significative entre les deux groupes.")
Statistique de test Mann-Whitney : 191.0
p-value : 0.325
Pas de différence significative entre les deux groupes.
Le test de Mann-Whitney indique qu’il n’y a pas de difference significative de gouvernance entre
les pays ayant un niveau de developpement élévé et ceux n’ayant pas (moyen ou faible) un niveau
de developpement élévé, seuil de 5%.
Test d’indépendance entre les variables ‘Niveau_dev’ (Niveau de développement) et ‘Niveau_gouv’
(Niveau de gouvernance)
[ ]: # Création de la table de contingence
table_cont = [Link](Base["Niveau_dev"], Base["Niveau_gouv"])
print("Table de contingence :")
print(table_cont)
# Test du Chi-carré
chi2_stat, p_value, dof, expected = chi2_contingency(table_cont)
print("\nStatistique du Chi-carré :", round(chi2_stat,3))
print("p-value :", round(p_value,3))
print("Degrés de liberté :", dof)
print("Table attendue :\n", expected)
Table de contingence :
Niveau_gouv Faible Moyen Élevé
Niveau_dev
Faible 12 0 0
Moyen 15 12 5
élévé 4 1 2
Statistique du Chi-carré : 12.139
p-value : 0.016
Degrés de liberté : 4
Table attendue :
[[ 7.29411765 3.05882353 1.64705882]
[19.45098039 8.15686275 4.39215686]
[ 4.25490196 1.78431373 0.96078431]]
Le test statistique de Chi-carré permet de conclure que le niveau de développement est statistique-
ment associé au niveau de gouvernance, au seuil de 5%.
[ ]: # Création de la table de profilage (pourcentages ligne)
table_profil = [Link](Base["Niveau_gouv"], Base["Niveau_dev"],␣
↪normalize="index") * 100
24
# Arrondi des valeurs pour une meilleure lisibilité
table_profil = table_profil.round(2)
# Affichage du tableau de profilage
print("Tableau de profilage: Niveau (%) : Niveau de developpement par niveau de␣
↪gouvernance\n", table_profil)
Tableau de profilage: Niveau (%) : Niveau de developpement par niveau de
gouvernance
Niveau_dev Faible Moyen élévé
Niveau_gouv
Faible 38.71 48.39 12.90
Moyen 0.00 92.31 7.69
Élevé 0.00 71.43 28.57
[ ]: # Création du graphique en barres empilées
ax = table_profil.plot(kind="bar", stacked=True, figsize=(10, 6),␣
↪colormap="viridis")
# Personnalisation du graphique
[Link]('Profilage des niveaux de développement par niveaux de gouvernance',␣
↪fontsize=14)
[Link]('Niveau de Gouvernance', fontsize=12)
[Link]('Pourcentage', fontsize=12)
[Link](title="Niveau de Développement", bbox_to_anchor=(1.05, 1),␣
↪loc='upper left', title_fontsize=12)
[Link](rotation=0)
plt.tight_layout()
# Affichage du graphique
[Link]()
25
8 Calcul et interprétation d un intervalle de confiance pour une
moyenne: On prend l’indicateur de bonne gouvernance (IBG)
[ ]: data = Base['IBG']
# Calcul de la moyenne et de l'écart-type
moyenne = [Link]()
ecart_type = [Link]()
taille = len(data)
# Niveau de confiance
niveau_confiance = 0.95
alpha = 1 - niveau_confiance
t_score = [Link](1 - alpha / 2, df=taille - 1)
# Calcul de la marge d'erreur
marge_erreur_t = t_score * (ecart_type/ [Link](taille))
# Intervalle de confiance
ic_inf_t = moyenne - marge_erreur_t
ic_sup_t = moyenne + marge_erreur_t
# Affichage des résultats
26
print(f"Intervalle de confiance à 95% pour IBG : [{ic_inf_t:.2f}, {ic_sup_t:.
↪2f}]")
Intervalle de confiance à 95% pour IBG : [0.43, 0.55]
Interprétation: La valeur estimée de l’indice de bonne gouvernance (IBG) d’un pays africain quel-
conque en 2022 se situe entre 0.43 et 0.55, au seuil de 5%. Soit, 95% des valeurs de l’indicateur
se situe entre ces bornes. Cela indique donc que 95% des pays africains presentent un niveau de
gouvernance moyen ou faible.
[ ]: !jupyter nbconvert "C:/Users/ANSD/Documents/KEBJAM/Python/PROJET DE PYTHON.
↪ipynb" --to pdf
27