#Import des librairies
%matplotlib inline
import matplotlib.pyplot as plt
import scipy.stats as st
import numpy as np
import pandas as pd
import seaborn as sns
from scipy.cluster.hierarchy import dendrogram
from scipy.cluster.hierarchy import linkage, fcluster
from sklearn import preprocessing
from sklearn.cluster import KMeans
from sklearn import decomposition
Visualisation des différentes tables
Nettoyage des différentes tables
#Import des fichiers CSV
data_dispo = pd.read_csv("./SOURCE/DisponibiliteAlimentaire_2017.csv")
data_pop = pd.read_csv("./SOURCE/Population_2000_2018.csv")
data_macro = pd.read_csv("./SOURCE/Valeur_Macro_2017.csv")
data_dispo.head()
Code Domaine | Domaine | Code zone | Zone | Code Élément | Élément | Code Produit | Produit | Code année | Année | Unité | Valeur | Symbole | Description du Symbole | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | FBS | Nouveaux Bilans Alimentaire | 2 | Afghanistan | 5511 | Production | 2511 | Blé et produits | 2017 | 2017 | Milliers de tonnes | 4281.0 | S | Données standardisées |
1 | FBS | Nouveaux Bilans Alimentaire | 2 | Afghanistan | 5611 | Importations - Quantité | 2511 | Blé et produits | 2017 | 2017 | Milliers de tonnes | 2302.0 | S | Données standardisées |
2 | FBS | Nouveaux Bilans Alimentaire | 2 | Afghanistan | 5072 | Variation de stock | 2511 | Blé et produits | 2017 | 2017 | Milliers de tonnes | -119.0 | S | Données standardisées |
3 | FBS | Nouveaux Bilans Alimentaire | 2 | Afghanistan | 5911 | Exportations - Quantité | 2511 | Blé et produits | 2017 | 2017 | Milliers de tonnes | 0.0 | S | Données standardisées |
4 | FBS | Nouveaux Bilans Alimentaire | 2 | Afghanistan | 5301 | Disponibilité intérieure | 2511 | Blé et produits | 2017 | 2017 | Milliers de tonnes | 6701.0 | S | Données standardisées |
data_dispo.describe(include='all')
Code Domaine | Domaine | Code zone | Zone | Code Élément | Élément | Code Produit | Produit | Code année | Année | Unité | Valeur | Symbole | Description du Symbole | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 176600 | 176600 | 176600.000000 | 176600 | 176600.000000 | 176600 | 176600.000000 | 176600 | 176600.0 | 176600.0 | 176600 | 176600.000000 | 176600 | 176600 |
unique | 1 | 1 | NaN | 174 | NaN | 17 | NaN | 98 | NaN | NaN | 4 | NaN | 2 | 2 |
top | FBS | Nouveaux Bilans Alimentaire | NaN | Tchad | NaN | Disponibilité intérieure | NaN | Maïs et produits | NaN | NaN | Milliers de tonnes | NaN | S | Données standardisées |
freq | 176600 | 176600 | NaN | 1416 | NaN | 15905 | NaN | 2593 | NaN | NaN | 118487 | NaN | 118487 | 118487 |
mean | NaN | NaN | 125.474740 | NaN | 3810.052894 | NaN | 2628.778545 | NaN | 2017.0 | 2017.0 | NaN | 210.554918 | NaN | NaN |
std | NaN | NaN | 72.941699 | NaN | 2211.790089 | NaN | 91.993247 | NaN | 0.0 | 0.0 | NaN | 4762.047787 | NaN | NaN |
min | NaN | NaN | 1.000000 | NaN | 645.000000 | NaN | 2511.000000 | NaN | 2017.0 | 2017.0 | NaN | -10388.000000 | NaN | NaN |
25% | NaN | NaN | 63.000000 | NaN | 684.000000 | NaN | 2556.000000 | NaN | 2017.0 | 2017.0 | NaN | 0.000000 | NaN | NaN |
50% | NaN | NaN | 120.000000 | NaN | 5142.000000 | NaN | 2612.000000 | NaN | 2017.0 | 2017.0 | NaN | 0.120000 | NaN | NaN |
75% | NaN | NaN | 188.000000 | NaN | 5301.000000 | NaN | 2732.000000 | NaN | 2017.0 | 2017.0 | NaN | 8.462500 | NaN | NaN |
max | NaN | NaN | 276.000000 | NaN | 5911.000000 | NaN | 2899.000000 | NaN | 2017.0 | 2017.0 | NaN | 758548.000000 | NaN | NaN |
data_dispo.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 176600 entries, 0 to 176599 Data columns (total 14 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Code Domaine 176600 non-null object 1 Domaine 176600 non-null object 2 Code zone 176600 non-null int64 3 Zone 176600 non-null object 4 Code Élément 176600 non-null int64 5 Élément 176600 non-null object 6 Code Produit 176600 non-null int64 7 Produit 176600 non-null object 8 Code année 176600 non-null int64 9 Année 176600 non-null int64 10 Unité 176600 non-null object 11 Valeur 176600 non-null float64 12 Symbole 176600 non-null object 13 Description du Symbole 176600 non-null object dtypes: float64(1), int64(5), object(8) memory usage: 18.9+ MB
data_pop.head(10)
Code Domaine | Domaine | Code zone | Zone | Code Élément | Élément | Code Produit | Produit | Code année | Année | Unité | Valeur | Symbole | Description du Symbole | Note | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | OA | Séries temporelles annuelles | 2 | Afghanistan | 511 | Population totale | 3010 | Population-Estimations | 2000 | 2000 | 1000 personnes | 20779.953 | X | Sources internationales sûres | NaN |
1 | OA | Séries temporelles annuelles | 2 | Afghanistan | 511 | Population totale | 3010 | Population-Estimations | 2001 | 2001 | 1000 personnes | 21606.988 | X | Sources internationales sûres | NaN |
2 | OA | Séries temporelles annuelles | 2 | Afghanistan | 511 | Population totale | 3010 | Population-Estimations | 2002 | 2002 | 1000 personnes | 22600.770 | X | Sources internationales sûres | NaN |
3 | OA | Séries temporelles annuelles | 2 | Afghanistan | 511 | Population totale | 3010 | Population-Estimations | 2003 | 2003 | 1000 personnes | 23680.871 | X | Sources internationales sûres | NaN |
4 | OA | Séries temporelles annuelles | 2 | Afghanistan | 511 | Population totale | 3010 | Population-Estimations | 2004 | 2004 | 1000 personnes | 24726.684 | X | Sources internationales sûres | NaN |
5 | OA | Séries temporelles annuelles | 2 | Afghanistan | 511 | Population totale | 3010 | Population-Estimations | 2005 | 2005 | 1000 personnes | 25654.277 | X | Sources internationales sûres | NaN |
6 | OA | Séries temporelles annuelles | 2 | Afghanistan | 511 | Population totale | 3010 | Population-Estimations | 2006 | 2006 | 1000 personnes | 26433.049 | X | Sources internationales sûres | NaN |
7 | OA | Séries temporelles annuelles | 2 | Afghanistan | 511 | Population totale | 3010 | Population-Estimations | 2007 | 2007 | 1000 personnes | 27100.536 | X | Sources internationales sûres | NaN |
8 | OA | Séries temporelles annuelles | 2 | Afghanistan | 511 | Population totale | 3010 | Population-Estimations | 2008 | 2008 | 1000 personnes | 27722.276 | X | Sources internationales sûres | NaN |
9 | OA | Séries temporelles annuelles | 2 | Afghanistan | 511 | Population totale | 3010 | Population-Estimations | 2009 | 2009 | 1000 personnes | 28394.813 | X | Sources internationales sûres | NaN |
data_pop.describe(include='all')
Code Domaine | Domaine | Code zone | Zone | Code Élément | Élément | Code Produit | Produit | Code année | Année | Unité | Valeur | Symbole | Description du Symbole | Note | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 4411 | 4411 | 4411.000000 | 4411 | 4411.0 | 4411 | 4411.0 | 4411 | 4411.000000 | 4411.000000 | 4411 | 4.411000e+03 | 4411 | 4411 | 258 |
unique | 1 | 1 | NaN | 238 | NaN | 1 | NaN | 1 | NaN | NaN | 1 | NaN | 2 | 2 | 1 |
top | OA | Séries temporelles annuelles | NaN | Afghanistan | NaN | Population totale | NaN | Population-Estimations | NaN | NaN | 1000 personnes | NaN | X | Sources internationales sûres | UNDESA, Population Division – World Population... |
freq | 4411 | 4411 | NaN | 19 | NaN | 4411 | NaN | 4411 | NaN | NaN | 4411 | NaN | 4374 | 4374 | 258 |
mean | NaN | NaN | 132.202902 | NaN | 511.0 | NaN | 3010.0 | NaN | 2009.068238 | 2009.068238 | NaN | 2.963004e+04 | NaN | NaN | NaN |
std | NaN | NaN | 75.854840 | NaN | 0.0 | NaN | 0.0 | NaN | 5.481539 | 5.481539 | NaN | 1.238029e+05 | NaN | NaN | NaN |
min | NaN | NaN | 1.000000 | NaN | 511.0 | NaN | 3010.0 | NaN | 2000.000000 | 2000.000000 | NaN | 7.850000e-01 | NaN | NaN | NaN |
25% | NaN | NaN | 68.000000 | NaN | 511.0 | NaN | 3010.0 | NaN | 2004.000000 | 2004.000000 | NaN | 3.921890e+02 | NaN | NaN | NaN |
50% | NaN | NaN | 132.000000 | NaN | 511.0 | NaN | 3010.0 | NaN | 2009.000000 | 2009.000000 | NaN | 4.764741e+03 | NaN | NaN | NaN |
75% | NaN | NaN | 195.000000 | NaN | 511.0 | NaN | 3010.0 | NaN | 2014.000000 | 2014.000000 | NaN | 1.821548e+04 | NaN | NaN | NaN |
max | NaN | NaN | 299.000000 | NaN | 511.0 | NaN | 3010.0 | NaN | 2018.000000 | 2018.000000 | NaN | 1.427648e+06 | NaN | NaN | NaN |
data_pop.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 4411 entries, 0 to 4410 Data columns (total 15 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Code Domaine 4411 non-null object 1 Domaine 4411 non-null object 2 Code zone 4411 non-null int64 3 Zone 4411 non-null object 4 Code Élément 4411 non-null int64 5 Élément 4411 non-null object 6 Code Produit 4411 non-null int64 7 Produit 4411 non-null object 8 Code année 4411 non-null int64 9 Année 4411 non-null int64 10 Unité 4411 non-null object 11 Valeur 4411 non-null float64 12 Symbole 4411 non-null object 13 Description du Symbole 4411 non-null object 14 Note 258 non-null object dtypes: float64(1), int64(5), object(9) memory usage: 517.0+ KB
data_macro.head()
Domaine | Zone | Élément | Produit | Année | Valeur | |
---|---|---|---|---|---|---|
0 | Indicateurs macro | Afghanistan | Valeur US $ par habitant | Produit Intérieur Brut | 2017 | 520.616409 |
1 | Indicateurs macro | Afghanistan | Croissance annuelle US$ par habitant | Produit Intérieur Brut | 2017 | 2.227740 |
2 | Indicateurs macro | Afrique du Sud | Valeur US $ par habitant | Produit Intérieur Brut | 2017 | 6121.876572 |
3 | Indicateurs macro | Afrique du Sud | Croissance annuelle US$ par habitant | Produit Intérieur Brut | 2017 | 16.114973 |
4 | Indicateurs macro | Albanie | Valeur US $ par habitant | Produit Intérieur Brut | 2017 | 4514.204908 |
data_macro.describe(include='all')
Domaine | Zone | Élément | Produit | Année | Valeur | |
---|---|---|---|---|---|---|
count | 422 | 422 | 422 | 422 | 422.0 | 422.000000 |
unique | 1 | 211 | 2 | 1 | NaN | NaN |
top | Indicateurs macro | Afghanistan | Valeur US $ par habitant | Produit Intérieur Brut | NaN | NaN |
freq | 422 | 2 | 211 | 422 | NaN | NaN |
mean | NaN | NaN | NaN | NaN | 2017.0 | 8470.118239 |
std | NaN | NaN | NaN | NaN | 0.0 | 19900.732867 |
min | NaN | NaN | NaN | NaN | 2017.0 | -29.289470 |
25% | NaN | NaN | NaN | NaN | 2017.0 | 5.746177 |
50% | NaN | NaN | NaN | NaN | 2017.0 | 71.979765 |
75% | NaN | NaN | NaN | NaN | 2017.0 | 6351.329118 |
max | NaN | NaN | NaN | NaN | 2017.0 | 171278.066389 |
data_macro.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 422 entries, 0 to 421 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Domaine 422 non-null object 1 Zone 422 non-null object 2 Élément 422 non-null object 3 Produit 422 non-null object 4 Année 422 non-null int64 5 Valeur 422 non-null float64 dtypes: float64(1), int64(1), object(4) memory usage: 19.9+ KB
#on vérifie si il existe des valeurs null
data_dispo.isnull().sum()
Code Domaine 0 Domaine 0 Code zone 0 Zone 0 Code Élément 0 Élément 0 Code Produit 0 Produit 0 Code année 0 Année 0 Unité 0 Valeur 0 Symbole 0 Description du Symbole 0 dtype: int64
#on vérifie si il existe des erreurs
data_dispo.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 176600 entries, 0 to 176599 Data columns (total 14 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Code Domaine 176600 non-null object 1 Domaine 176600 non-null object 2 Code zone 176600 non-null int64 3 Zone 176600 non-null object 4 Code Élément 176600 non-null int64 5 Élément 176600 non-null object 6 Code Produit 176600 non-null int64 7 Produit 176600 non-null object 8 Code année 176600 non-null int64 9 Année 176600 non-null int64 10 Unité 176600 non-null object 11 Valeur 176600 non-null float64 12 Symbole 176600 non-null object 13 Description du Symbole 176600 non-null object dtypes: float64(1), int64(5), object(8) memory usage: 18.9+ MB
#on vérifie si il existe des valeurs dupliquées (index)
data_dispo.index.duplicated().sum()
0
data_dispo.nunique()
Code Domaine 1 Domaine 1 Code zone 174 Zone 174 Code Élément 17 Élément 17 Code Produit 98 Produit 98 Code année 1 Année 1 Unité 4 Valeur 7250 Symbole 2 Description du Symbole 2 dtype: int64
#on vérifie si il existe des valeurs null
data_pop.isnull().sum()
Code Domaine 0 Domaine 0 Code zone 0 Zone 0 Code Élément 0 Élément 0 Code Produit 0 Produit 0 Code année 0 Année 0 Unité 0 Valeur 0 Symbole 0 Description du Symbole 0 Note 4153 dtype: int64
#on vérifie si il existe des erreurs
data_pop.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 4411 entries, 0 to 4410 Data columns (total 15 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Code Domaine 4411 non-null object 1 Domaine 4411 non-null object 2 Code zone 4411 non-null int64 3 Zone 4411 non-null object 4 Code Élément 4411 non-null int64 5 Élément 4411 non-null object 6 Code Produit 4411 non-null int64 7 Produit 4411 non-null object 8 Code année 4411 non-null int64 9 Année 4411 non-null int64 10 Unité 4411 non-null object 11 Valeur 4411 non-null float64 12 Symbole 4411 non-null object 13 Description du Symbole 4411 non-null object 14 Note 258 non-null object dtypes: float64(1), int64(5), object(9) memory usage: 517.0+ KB
#on vérifie si il existe des valeurs dupliquées (index)
data_pop.index.duplicated().sum()
0
data_pop.nunique()
Code Domaine 1 Domaine 1 Code zone 238 Zone 238 Code Élément 1 Élément 1 Code Produit 1 Produit 1 Code année 19 Année 19 Unité 1 Valeur 4398 Symbole 2 Description du Symbole 2 Note 1 dtype: int64
#on vérifie si il existe des valeurs null
data_macro.isnull().sum()
Domaine 0 Zone 0 Élément 0 Produit 0 Année 0 Valeur 0 dtype: int64
#on vérifie si il existe des erreurs
data_macro.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 422 entries, 0 to 421 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Domaine 422 non-null object 1 Zone 422 non-null object 2 Élément 422 non-null object 3 Produit 422 non-null object 4 Année 422 non-null int64 5 Valeur 422 non-null float64 dtypes: float64(1), int64(1), object(4) memory usage: 19.9+ KB
#on vérifie si il existe des valeurs dupliquées (index)
data_macro.index.duplicated().sum()
0
data_macro.nunique()
Domaine 1 Zone 211 Élément 2 Produit 1 Année 1 Valeur 422 dtype: int64
#Filtre des columns
list_columns = ["Zone", "Année", "Élément", "Produit", "Unité", "Valeur"]
data_dispo_filtered = data_dispo[list_columns]
data_pop_filtered = data_pop[list_columns]
#regroupement des tables data_dispo et data_pop
df_merge = pd.merge(data_dispo_filtered, data_pop_filtered, left_on=["Zone", "Année"], right_on=["Zone", "Année"], how="outer", indicator=True)
# changement du nom des colonnes
df_merge.columns = ['Pays', 'Année', 'Type', 'Produit', 'Unité (miliers_tonnes)', 'Valeur', 'Désignation', 'Sous_désignation', 'Unité', 'Pop.', '_merge']
df_merge.head(200)
Pays | Année | Type | Produit | Unité (miliers_tonnes) | Valeur | Désignation | Sous_désignation | Unité | Pop. | _merge | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | Afghanistan | 2017 | Production | Blé et produits | Milliers de tonnes | 4281.0 | Population totale | Population-Estimations | 1000 personnes | 36296.113 | both |
1 | Afghanistan | 2017 | Importations - Quantité | Blé et produits | Milliers de tonnes | 2302.0 | Population totale | Population-Estimations | 1000 personnes | 36296.113 | both |
2 | Afghanistan | 2017 | Variation de stock | Blé et produits | Milliers de tonnes | -119.0 | Population totale | Population-Estimations | 1000 personnes | 36296.113 | both |
3 | Afghanistan | 2017 | Exportations - Quantité | Blé et produits | Milliers de tonnes | 0.0 | Population totale | Population-Estimations | 1000 personnes | 36296.113 | both |
4 | Afghanistan | 2017 | Disponibilité intérieure | Blé et produits | Milliers de tonnes | 6701.0 | Population totale | Population-Estimations | 1000 personnes | 36296.113 | both |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
195 | Afghanistan | 2017 | Variation de stock | Noix et produits | Milliers de tonnes | -2.0 | Population totale | Population-Estimations | 1000 personnes | 36296.113 | both |
196 | Afghanistan | 2017 | Exportations - Quantité | Noix et produits | Milliers de tonnes | 19.0 | Population totale | Population-Estimations | 1000 personnes | 36296.113 | both |
197 | Afghanistan | 2017 | Disponibilité intérieure | Noix et produits | Milliers de tonnes | 22.0 | Population totale | Population-Estimations | 1000 personnes | 36296.113 | both |
198 | Afghanistan | 2017 | Pertes | Noix et produits | Milliers de tonnes | 2.0 | Population totale | Population-Estimations | 1000 personnes | 36296.113 | both |
199 | Afghanistan | 2017 | Résidus | Noix et produits | Milliers de tonnes | -0.0 | Population totale | Population-Estimations | 1000 personnes | 36296.113 | both |
200 rows × 11 columns
#Récupération des valeur Produit pour afficher seulement les valeurs de "Volailles"
arr = list(df_merge["Produit"])
df_arr = pd.DataFrame(arr)
df_arr = df_arr.drop_duplicates()
df_arr = df_arr.dropna()
# print(df_arr.to_string())
#La désignation trouvée est: Viande de Volailles
#Construction du dataframe
data_volaille = df_merge[df_merge["Produit"] == "Viande de Volailles"]
#Etape 1: filtre des colonnes nécessaires au projet
data_volaille=data_volaille[["Pays","Type","Valeur", "Pop."]]
data_volaille.head(12)
Pays | Type | Valeur | Pop. | |
---|---|---|---|---|
651 | Afghanistan | Production | 28.00 | 36296.113 |
652 | Afghanistan | Importations - Quantité | 29.00 | 36296.113 |
653 | Afghanistan | Variation de stock | 0.00 | 36296.113 |
654 | Afghanistan | Disponibilité intérieure | 57.00 | 36296.113 |
655 | Afghanistan | Pertes | 2.00 | 36296.113 |
656 | Afghanistan | Résidus | 0.00 | 36296.113 |
657 | Afghanistan | Nourriture | 55.00 | 36296.113 |
658 | Afghanistan | Disponibilité alimentaire en quantité (kg/pers... | 1.53 | 36296.113 |
659 | Afghanistan | Disponibilité alimentaire (Kcal/personne/jour) | 5.00 | 36296.113 |
660 | Afghanistan | Disponibilité de protéines en quantité (g/pers... | 0.54 | 36296.113 |
661 | Afghanistan | Disponibilité de matière grasse en quantité (g... | 0.33 | 36296.113 |
1704 | Afrique du Sud | Production | 1667.00 | 57009.756 |
#Etape 2: Filtre des lignes nécessaires au projet
#Récupération des valeurs Type pour afficher les valeurs nécessaires
arr_type = list(data_volaille["Type"])
df_arr_type = pd.DataFrame(arr_type)
df_arr_type = df_arr_type.drop_duplicates()
df_arr_type = df_arr_type.dropna()
print(df_arr_type.to_string())
print("Il y a " + str(len(df_arr_type)) + " variables")
#choix des designations: Production, Importations - Quantité, Exportations - Quantité, Alimentation pour touristes
0 0 Production 1 Importations - Quantité 2 Variation de stock 3 Disponibilité intérieure 4 Pertes 5 Résidus 6 Nourriture 7 Disponibilité alimentaire en quantité (kg/personne/an) 8 Disponibilité alimentaire (Kcal/personne/jour) 9 Disponibilité de protéines en quantité (g/personne/jour) 10 Disponibilité de matière grasse en quantité (g/personne/jour) 14 Exportations - Quantité 17 Alimentation pour touristes 53 Traitement 79 Autres utilisations (non alimentaire) 1858 Aliments pour animaux 1859 Semences Il y a 17 variables
# data_volaille = data_volaille.loc[data_volaille['Type'].isin(["Production", "Importations - Quantité", "Exportations - Quantité", "Alimentation pour touristes"])]
data_volaille
Pays | Type | Valeur | Pop. | |
---|---|---|---|---|
651 | Afghanistan | Production | 28.00 | 36296.113 |
652 | Afghanistan | Importations - Quantité | 29.00 | 36296.113 |
653 | Afghanistan | Variation de stock | 0.00 | 36296.113 |
654 | Afghanistan | Disponibilité intérieure | 57.00 | 36296.113 |
655 | Afghanistan | Pertes | 2.00 | 36296.113 |
... | ... | ... | ... | ... |
176396 | Zimbabwe | Nourriture | 67.00 | 14236.595 |
176397 | Zimbabwe | Disponibilité alimentaire en quantité (kg/pers... | 4.68 | 14236.595 |
176398 | Zimbabwe | Disponibilité alimentaire (Kcal/personne/jour) | 16.00 | 14236.595 |
176399 | Zimbabwe | Disponibilité de protéines en quantité (g/pers... | 1.59 | 14236.595 |
176400 | Zimbabwe | Disponibilité de matière grasse en quantité (g... | 0.99 | 14236.595 |
2061 rows × 4 columns
#creation du dataframe en colonne
arr_pays = list(data_volaille["Pays"])
arr_pop = list(data_volaille["Pop."])
#production
df_prod = data_volaille[data_volaille['Type'].str.contains("Production")]
arr_prod = list(df_prod["Valeur"])
#importation
df_impor = data_volaille[data_volaille['Type'].str.contains("Importations - Quantité")]
arr_impor = list(df_impor["Valeur"])
# d = {'Pays': arr_pays, "Production": arr_val, "Importation": arr_impor, "Pop. total - 2017 (en 1000 personnes)": arr_pop}
# df = pd.DataFrame(data=d)
# df
#list des valeurs pour chaque Type
# list(data_volaille[data_volaille['Type'].str.contains(df_arr_type[0].iloc[0])]["Valeur"])
#Production
data_query_production = data_volaille[data_volaille["Type"] == "Production"]
data_production = data_query_production.copy()
data_production.rename(columns = {'Valeur':'Production'}, inplace = True)
data_production = data_production.drop(columns="Type")
data_production
Pays | Production | Pop. | |
---|---|---|---|
651 | Afghanistan | 28.0 | 36296.113 |
1704 | Afrique du Sud | 1667.0 | 57009.756 |
2713 | Albanie | 13.0 | 2884.169 |
3772 | Algérie | 275.0 | 41389.189 |
4873 | Allemagne | 1514.0 | 82658.409 |
... | ... | ... | ... |
172328 | Venezuela (République bolivarienne du) | 600.0 | 29402.484 |
173387 | Viet Nam | 918.0 | 94600.648 |
174318 | Yémen | 168.0 | 27834.819 |
175361 | Zambie | 49.0 | 16853.599 |
176388 | Zimbabwe | 69.0 | 14236.595 |
168 rows × 3 columns
#Importation
data_query_importation = data_volaille[data_volaille["Type"] == "Importations - Quantité"]
data_importation = data_query_importation.copy()
data_importation.rename(columns = {'Valeur':'Importation'}, inplace = True)
data_importation = data_importation.drop(columns="Type")
data_importation
Pays | Importation | Pop. | |
---|---|---|---|
652 | Afghanistan | 29.0 | 36296.113 |
1705 | Afrique du Sud | 514.0 | 57009.756 |
2714 | Albanie | 38.0 | 2884.169 |
3773 | Algérie | 2.0 | 41389.189 |
4874 | Allemagne | 842.0 | 82658.409 |
... | ... | ... | ... |
172329 | Venezuela (République bolivarienne du) | 25.0 | 29402.484 |
173388 | Viet Nam | 291.0 | 94600.648 |
174319 | Yémen | 78.0 | 27834.819 |
175362 | Zambie | 12.0 | 16853.599 |
176389 | Zimbabwe | 6.0 | 14236.595 |
170 rows × 3 columns
#Exportation
data_query_exportation = data_volaille[data_volaille["Type"] == "Exportations - Quantité"]
data_exportation = data_query_exportation.copy()
data_exportation.rename(columns = {'Valeur':'Exportation'}, inplace = True)
data_exportation = data_exportation.drop(columns="Type")
#Alimentation pour touristes
data_query_alim_touriste = data_volaille[data_volaille["Type"] == "Alimentation pour touristes"]
data_alim_touriste = data_query_alim_touriste.copy()
data_alim_touriste.rename(columns = {'Valeur':'Alimentation pour touristes'}, inplace = True)
data_alim_touriste = data_alim_touriste.drop(columns="Type")
data_merge1 = pd.merge(data_production, data_importation, left_on="Pays", right_on="Pays", how="outer", indicator=False)
# data_merge1 = data_merge1.drop(columns="Pop.")
data_merge1
Pays | Production | Pop._x | Importation | Pop._y | |
---|---|---|---|---|---|
0 | Afghanistan | 28.0 | 36296.113 | 29.0 | 36296.113 |
1 | Afrique du Sud | 1667.0 | 57009.756 | 514.0 | 57009.756 |
2 | Albanie | 13.0 | 2884.169 | 38.0 | 2884.169 |
3 | Algérie | 275.0 | 41389.189 | 2.0 | 41389.189 |
4 | Allemagne | 1514.0 | 82658.409 | 842.0 | 82658.409 |
... | ... | ... | ... | ... | ... |
165 | Yémen | 168.0 | 27834.819 | 78.0 | 27834.819 |
166 | Zambie | 49.0 | 16853.599 | 12.0 | 16853.599 |
167 | Zimbabwe | 69.0 | 14236.595 | 6.0 | 14236.595 |
168 | Djibouti | NaN | NaN | 3.0 | 944.099 |
169 | Maldives | NaN | NaN | 12.0 | 496.402 |
170 rows × 5 columns
data_merge2 = pd.merge(data_merge1, data_exportation, left_on="Pays", right_on="Pays", how="outer", indicator=False)
data_merge2 = data_merge2.drop(columns="Pop.")
data_merge2
Pays | Production | Pop._x | Importation | Pop._y | Exportation | |
---|---|---|---|---|---|---|
0 | Afghanistan | 28.0 | 36296.113 | 29.0 | 36296.113 | NaN |
1 | Afrique du Sud | 1667.0 | 57009.756 | 514.0 | 57009.756 | 63.0 |
2 | Albanie | 13.0 | 2884.169 | 38.0 | 2884.169 | 0.0 |
3 | Algérie | 275.0 | 41389.189 | 2.0 | 41389.189 | 0.0 |
4 | Allemagne | 1514.0 | 82658.409 | 842.0 | 82658.409 | 646.0 |
... | ... | ... | ... | ... | ... | ... |
165 | Yémen | 168.0 | 27834.819 | 78.0 | 27834.819 | 0.0 |
166 | Zambie | 49.0 | 16853.599 | 12.0 | 16853.599 | 1.0 |
167 | Zimbabwe | 69.0 | 14236.595 | 6.0 | 14236.595 | NaN |
168 | Djibouti | NaN | NaN | 3.0 | 944.099 | NaN |
169 | Maldives | NaN | NaN | 12.0 | 496.402 | NaN |
170 rows × 6 columns
data_merge_final = pd.merge(data_merge2, data_alim_touriste, left_on="Pays", right_on="Pays", how="outer", indicator=False)
df_v = data_merge_final
df_v = df_v.drop(columns="Pop.")
df_v
Pays | Production | Pop._x | Importation | Pop._y | Exportation | Alimentation pour touristes | |
---|---|---|---|---|---|---|---|
0 | Afghanistan | 28.0 | 36296.113 | 29.0 | 36296.113 | NaN | NaN |
1 | Afrique du Sud | 1667.0 | 57009.756 | 514.0 | 57009.756 | 63.0 | 0.0 |
2 | Albanie | 13.0 | 2884.169 | 38.0 | 2884.169 | 0.0 | NaN |
3 | Algérie | 275.0 | 41389.189 | 2.0 | 41389.189 | 0.0 | 0.0 |
4 | Allemagne | 1514.0 | 82658.409 | 842.0 | 82658.409 | 646.0 | NaN |
... | ... | ... | ... | ... | ... | ... | ... |
165 | Yémen | 168.0 | 27834.819 | 78.0 | 27834.819 | 0.0 | NaN |
166 | Zambie | 49.0 | 16853.599 | 12.0 | 16853.599 | 1.0 | 0.0 |
167 | Zimbabwe | 69.0 | 14236.595 | 6.0 | 14236.595 | NaN | 0.0 |
168 | Djibouti | NaN | NaN | 3.0 | 944.099 | NaN | NaN |
169 | Maldives | NaN | NaN | 12.0 | 496.402 | NaN | 5.0 |
170 rows × 7 columns
#Filtre des columns
list_col_macro = ["Zone", "Année", "Élément", "Produit", "Valeur"]
data_macro_filtered = data_macro[list_col_macro]
# changement du nom des colonnes
data_macro_filtered.columns = ['Pays', 'Année', 'Type', 'PIB', 'Valeur']
#Valeur US $ par habitant
data_query_valeur = data_macro_filtered[data_macro_filtered["Type"] == "Valeur US $ par habitant"]
data_valeur = data_query_valeur.copy()
data_valeur.rename(columns = {'Valeur':'Valeur PIB ($ par hab.)'}, inplace = True)
data_valeur = data_valeur.drop(columns="Type")
data_valeur
Pays | Année | PIB | Valeur PIB ($ par hab.) | |
---|---|---|---|---|
0 | Afghanistan | 2017 | Produit Intérieur Brut | 520.616409 |
2 | Afrique du Sud | 2017 | Produit Intérieur Brut | 6121.876572 |
4 | Albanie | 2017 | Produit Intérieur Brut | 4514.204908 |
6 | Algérie | 2017 | Produit Intérieur Brut | 4109.696001 |
8 | Allemagne | 2017 | Produit Intérieur Brut | 44651.829102 |
... | ... | ... | ... | ... |
412 | Venezuela (République bolivarienne du) | 2017 | Produit Intérieur Brut | 8432.288335 |
414 | Viet Nam | 2017 | Produit Intérieur Brut | 2365.521494 |
416 | Yémen | 2017 | Produit Intérieur Brut | 745.087677 |
418 | Zambie | 2017 | Produit Intérieur Brut | 1534.874627 |
420 | Zimbabwe | 2017 | Produit Intérieur Brut | 1548.186368 |
211 rows × 4 columns
list_new_col = ["Pays", "Valeur PIB ($ par hab.)"]
data_valeur = data_valeur[list_new_col]
data_valeur.sort_values("Valeur PIB ($ par hab.)")
Pays | Valeur PIB ($ par hab.) | |
---|---|---|
368 | Somalie | 111.048078 |
66 | Burundi | 304.592321 |
372 | Soudan du Sud | 327.324953 |
318 | République centrafricaine | 450.900697 |
260 | Mozambique | 461.414754 |
... | ... | ... |
378 | Suisse | 83313.013992 |
226 | Luxembourg | 111017.182246 |
48 | Bermudes | 113281.987026 |
252 | Monaco | 167516.046763 |
222 | Liechtenstein | 171278.066389 |
211 rows × 2 columns
#Croissance annuelle US$ par habitant
data_query_croissance = data_macro_filtered[data_macro_filtered["Type"] == "Croissance annuelle US$ par habitant"]
data_croissance = data_query_croissance.copy()
data_croissance.rename(columns = {'Valeur':'Croissance annuelle US$ PIB (%)'}, inplace = True)
data_croissance = data_croissance.drop(columns="Type")
data_croissance
Pays | Année | PIB | Croissance annuelle US$ PIB (%) | |
---|---|---|---|---|
1 | Afghanistan | 2017 | Produit Intérieur Brut | 2.227740 |
3 | Afrique du Sud | 2017 | Produit Intérieur Brut | 16.114973 |
5 | Albanie | 2017 | Produit Intérieur Brut | 9.852298 |
7 | Algérie | 2017 | Produit Intérieur Brut | 4.136417 |
9 | Allemagne | 2017 | Produit Intérieur Brut | 5.842947 |
... | ... | ... | ... | ... |
413 | Venezuela (République bolivarienne du) | 2017 | Produit Intérieur Brut | -12.759351 |
415 | Viet Nam | 2017 | Produit Intérieur Brut | 7.907523 |
417 | Yémen | 2017 | Produit Intérieur Brut | -8.143611 |
419 | Zambie | 2017 | Produit Intérieur Brut | 17.075699 |
421 | Zimbabwe | 2017 | Produit Intérieur Brut | 5.707857 |
211 rows × 4 columns
list_new_col2 = ["Pays", "Croissance annuelle US$ PIB (%)"]
data_croissance = data_croissance[list_new_col2]
data_croissance
Pays | Croissance annuelle US$ PIB (%) | |
---|---|---|
1 | Afghanistan | 2.227740 |
3 | Afrique du Sud | 16.114973 |
5 | Albanie | 9.852298 |
7 | Algérie | 4.136417 |
9 | Allemagne | 5.842947 |
... | ... | ... |
413 | Venezuela (République bolivarienne du) | -12.759351 |
415 | Viet Nam | 7.907523 |
417 | Yémen | -8.143611 |
419 | Zambie | 17.075699 |
421 | Zimbabwe | 5.707857 |
211 rows × 2 columns
#MERGE DES 2 TABLES (valeur et croissance)
df_m = pd.merge(data_valeur, data_croissance, left_on=["Pays"], right_on=["Pays"], how="outer", indicator=False)
df_m
Pays | Valeur PIB ($ par hab.) | Croissance annuelle US$ PIB (%) | |
---|---|---|---|
0 | Afghanistan | 520.616409 | 2.227740 |
1 | Afrique du Sud | 6121.876572 | 16.114973 |
2 | Albanie | 4514.204908 | 9.852298 |
3 | Algérie | 4109.696001 | 4.136417 |
4 | Allemagne | 44651.829102 | 5.842947 |
... | ... | ... | ... |
206 | Venezuela (République bolivarienne du) | 8432.288335 | -12.759351 |
207 | Viet Nam | 2365.521494 | 7.907523 |
208 | Yémen | 745.087677 | -8.143611 |
209 | Zambie | 1534.874627 | 17.075699 |
210 | Zimbabwe | 1548.186368 | 5.707857 |
211 rows × 3 columns
#MERGE DE LA TABLE FINAL POUR ANALYSE
df_analyse = pd.merge(df_v, df_m, left_on=["Pays"], right_on=["Pays"], how="outer", indicator=False)
df_analyse
Pays | Production | Pop._x | Importation | Pop._y | Exportation | Alimentation pour touristes | Valeur PIB ($ par hab.) | Croissance annuelle US$ PIB (%) | |
---|---|---|---|---|---|---|---|---|---|
0 | Afghanistan | 28.0 | 36296.113 | 29.0 | 36296.113 | NaN | NaN | 520.616409 | 2.227740 |
1 | Afrique du Sud | 1667.0 | 57009.756 | 514.0 | 57009.756 | 63.0 | 0.0 | 6121.876572 | 16.114973 |
2 | Albanie | 13.0 | 2884.169 | 38.0 | 2884.169 | 0.0 | NaN | 4514.204908 | 9.852298 |
3 | Algérie | 275.0 | 41389.189 | 2.0 | 41389.189 | 0.0 | 0.0 | 4109.696001 | 4.136417 |
4 | Allemagne | 1514.0 | 82658.409 | 842.0 | 82658.409 | 646.0 | NaN | 44651.829102 | 5.842947 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
207 | Sint Maarten (partie néerlandaise) | NaN | NaN | NaN | NaN | NaN | NaN | 24466.750314 | -6.867844 |
208 | Somalie | NaN | NaN | NaN | NaN | NaN | NaN | 111.048078 | 4.424712 |
209 | Soudan du Sud | NaN | NaN | NaN | NaN | NaN | NaN | 327.324953 | 8.221476 |
210 | Tonga | NaN | NaN | NaN | NaN | NaN | NaN | 4522.873795 | 8.672544 |
211 | Tuvalu | NaN | NaN | NaN | NaN | NaN | NaN | 3982.111321 | 8.246060 |
212 rows × 9 columns
df_analyse.info()
<class 'pandas.core.frame.DataFrame'> Int64Index: 212 entries, 0 to 211 Data columns (total 9 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Pays 212 non-null object 1 Production 168 non-null float64 2 Pop._x 168 non-null float64 3 Importation 170 non-null float64 4 Pop._y 170 non-null float64 5 Exportation 135 non-null float64 6 Alimentation pour touristes 78 non-null float64 7 Valeur PIB ($ par hab.) 211 non-null float64 8 Croissance annuelle US$ PIB (%) 211 non-null float64 dtypes: float64(8), object(1) memory usage: 16.6+ KB
#Beaucoup de valeur null, on décide de supprimer
df_analyse=df_analyse.drop(columns=["Exportation", "Alimentation pour touristes", "Pop._y"])
df_analyse=df_analyse.rename(columns={"Pop._x": "Population"})
df_analyse=df_analyse.set_index('Pays')
df_analyse=df_analyse.dropna()
# df_analyse=df_analyse.fillna(0)
df_analyse
Production | Population | Importation | Valeur PIB ($ par hab.) | Croissance annuelle US$ PIB (%) | |
---|---|---|---|---|---|
Pays | |||||
Afghanistan | 28.0 | 36296.113 | 29.0 | 520.616409 | 2.227740 |
Afrique du Sud | 1667.0 | 57009.756 | 514.0 | 6121.876572 | 16.114973 |
Albanie | 13.0 | 2884.169 | 38.0 | 4514.204908 | 9.852298 |
Algérie | 275.0 | 41389.189 | 2.0 | 4109.696001 | 4.136417 |
Allemagne | 1514.0 | 82658.409 | 842.0 | 44651.829102 | 5.842947 |
... | ... | ... | ... | ... | ... |
Venezuela (République bolivarienne du) | 600.0 | 29402.484 | 25.0 | 8432.288335 | -12.759351 |
Viet Nam | 918.0 | 94600.648 | 291.0 | 2365.521494 | 7.907523 |
Yémen | 168.0 | 27834.819 | 78.0 | 745.087677 | -8.143611 |
Zambie | 49.0 | 16853.599 | 12.0 | 1534.874627 | 17.075699 |
Zimbabwe | 69.0 | 14236.595 | 6.0 | 1548.186368 | 5.707857 |
167 rows × 5 columns
df_analyse[df_analyse.index == "Chine, continentale"]
Production | Population | Importation | Valeur PIB ($ par hab.) | Croissance annuelle US$ PIB (%) | |
---|---|---|---|---|---|
Pays | |||||
Chine, continentale | 18236.0 | 1421021.791 | 452.0 | 8663.126784 | 9.051432 |
df_analyse[df_analyse.index == "France"]
Production | Population | Importation | Valeur PIB ($ par hab.) | Croissance annuelle US$ PIB (%) | |
---|---|---|---|---|---|
Pays | |||||
France | 1750.0 | 64842.509 | 506.0 | 38720.645922 | 4.707836 |
pd.set_option('display.max_rows', df_analyse.shape[0]+1)
df_analyse.sort_values("Croissance annuelle US$ PIB (%)")
Production | Population | Importation | Valeur PIB ($ par hab.) | Croissance annuelle US$ PIB (%) | |
---|---|---|---|---|---|
Pays | |||||
Égypte | 1118.0 | 96442.591 | 110.0 | 2023.331158 | -29.289470 |
Venezuela (République bolivarienne du) | 600.0 | 29402.484 | 25.0 | 8432.288335 | -12.759351 |
Dominique | 0.0 | 71.458 | 4.0 | 7286.797839 | -9.827668 |
Nigéria | 201.0 | 190873.244 | 0.0 | 1968.687237 | -9.527161 |
Yémen | 168.0 | 27834.819 | 78.0 | 745.087677 | -8.143611 |
Tunisie | 213.0 | 11433.443 | 0.0 | 3481.203612 | -5.859485 |
Sierra Leone | 17.0 | 7488.423 | 14.0 | 499.381240 | -5.251198 |
Timor-Leste | 1.0 | 1243.258 | 11.0 | 1299.496723 | -4.008057 |
Tchad | 6.0 | 15016.753 | 1.0 | 692.161630 | -3.015992 |
Turquie | 2192.0 | 81116.450 | 3.0 | 10589.573121 | -2.798707 |
Libéria | 15.0 | 4702.226 | 48.0 | 587.594046 | -2.242701 |
Royaume-Uni de Grande-Bretagne et d'Irlande du Nord | 1814.0 | 66727.461 | 779.0 | 40448.365256 | -1.513432 |
Japon | 2215.0 | 127502.725 | 1069.0 | 38672.407740 | -1.254368 |
Gambie | 2.0 | 2213.889 | 16.0 | 679.778473 | -0.430628 |
Ouganda | 65.0 | 41166.588 | 0.0 | 767.101705 | -0.335264 |
Samoa | 0.0 | 195.352 | 17.0 | 4223.478963 | -0.002802 |
Mongolie | 0.0 | 3113.786 | 10.0 | 3669.409235 | 0.253116 |
Suisse | 91.0 | 8455.804 | 51.0 | 83313.013992 | 0.367379 |
Belize | 20.0 | 375.769 | 0.0 | 4909.683057 | 0.656581 |
Myanmar | 1662.0 | 53382.523 | 3.0 | 1277.743698 | 1.205772 |
Antigua-et-Barbuda | 0.0 | 95.426 | 7.0 | 15383.415188 | 1.222545 |
Jordanie | 210.0 | 9785.843 | 64.0 | 4231.464852 | 1.343795 |
Philippines | 1272.0 | 105172.925 | 249.0 | 3123.244296 | 1.613303 |
Costa Rica | 133.0 | 4949.954 | 17.0 | 12225.577172 | 1.784799 |
Saint-Kitts-et-Nevis | 0.0 | 52.045 | 4.0 | 19155.431731 | 1.825508 |
Saint-Vincent-et-les Grenadines | 0.0 | 109.827 | 9.0 | 7212.960181 | 1.949019 |
Bahamas | 6.0 | 381.755 | 24.0 | 32376.129780 | 2.028962 |
Liban | 64.0 | 6819.373 | 13.0 | 7819.604670 | 2.167191 |
Afghanistan | 28.0 | 36296.113 | 29.0 | 520.616409 | 2.227740 |
Nicaragua | 143.0 | 6384.846 | 6.0 | 2159.158239 | 2.447553 |
Équateur | 340.0 | 16785.361 | 0.0 | 6213.501276 | 2.531452 |
Togo | 40.0 | 7698.474 | 16.0 | 829.700048 | 2.632757 |
El Salvador | 136.0 | 6388.126 | 16.0 | 3910.253179 | 2.739393 |
République populaire démocratique de Corée | 43.0 | 25429.825 | 0.0 | 686.340258 | 2.949586 |
Barbade | 15.0 | 286.232 | 2.0 | 17419.313704 | 3.086360 |
Trinité-et-Tobago | 61.0 | 1384.059 | 23.0 | 16747.918804 | 3.118395 |
Mauritanie | 5.0 | 4282.570 | 24.0 | 1587.863353 | 3.318992 |
Luxembourg | 0.0 | 591.910 | 11.0 | 111017.182246 | 3.431634 |
Oman | 7.0 | 4665.928 | 126.0 | 15130.543438 | 3.501058 |
Niger | 19.0 | 21602.382 | 3.0 | 517.771881 | 3.509916 |
Gabon | 4.0 | 2064.823 | 76.0 | 7230.472774 | 3.522873 |
États-Unis d'Amérique | 21914.0 | 325084.756 | 123.0 | 59921.674703 | 3.533296 |
Éthiopie | 14.0 | 106399.924 | 1.0 | 721.753494 | 3.628870 |
Rwanda | 19.0 | 11980.961 | 0.0 | 772.293170 | 3.690707 |
Kiribati | 1.0 | 114.158 | 1.0 | 1648.572671 | 3.919171 |
Grèce | 246.0 | 10569.450 | 79.0 | 18907.740558 | 3.985203 |
République-Unie de Tanzanie | 105.0 | 54660.339 | 2.0 | 1001.160919 | 4.065654 |
Nouvelle-Calédonie | 1.0 | 277.150 | 9.0 | 33101.384336 | 4.099894 |
Algérie | 275.0 | 41389.189 | 2.0 | 4109.696001 | 4.136417 |
Suède | 157.0 | 9904.896 | 84.0 | 54621.345824 | 4.189096 |
Cameroun | 81.0 | 24566.073 | 0.0 | 1425.106072 | 4.454693 |
Malaisie | 1724.0 | 31104.646 | 68.0 | 10259.210256 | 4.496181 |
Bénin | 18.0 | 11175.198 | 123.0 | 1136.593360 | 4.534691 |
République dominicaine | 339.0 | 10513.104 | 42.0 | 7609.365034 | 4.542400 |
Italie | 1315.0 | 60673.701 | 97.0 | 32333.550863 | 4.566307 |
Autriche | 148.0 | 8819.901 | 110.0 | 47309.051637 | 4.615601 |
Arabie saoudite | 616.0 | 33101.179 | 722.0 | 20802.464299 | 4.646660 |
Jamaïque | 128.0 | 2920.848 | 31.0 | 5070.097885 | 4.672826 |
France | 1750.0 | 64842.509 | 506.0 | 38720.645922 | 4.707836 |
Honduras | 193.0 | 9429.013 | 12.0 | 2453.729573 | 4.744606 |
Maroc | 762.0 | 35581.255 | 3.0 | 3082.599304 | 4.809082 |
Îles Salomon | 0.0 | 636.039 | 6.0 | 2332.873855 | 4.825663 |
Côte d'Ivoire | 58.0 | 24437.470 | 7.0 | 2111.026809 | 4.849769 |
Belgique | 463.0 | 11419.748 | 338.0 | 44025.903247 | 5.076098 |
Tadjikistan | 2.0 | 8880.268 | 38.0 | 848.668435 | 5.149721 |
Cabo Verde | 1.0 | 537.498 | 12.0 | 3292.638357 | 5.162958 |
Ghana | 60.0 | 29121.465 | 151.0 | 2074.175443 | 5.183600 |
Guyana | 31.0 | 775.222 | 0.0 | 6124.922066 | 5.395670 |
Chine - RAS de Hong-Kong | 24.0 | 7306.322 | 907.0 | 46705.027813 | 5.445126 |
Grenade | 1.0 | 110.874 | 7.0 | 10152.832812 | 5.446358 |
Sri Lanka | 192.0 | 21128.032 | 0.0 | 4138.015200 | 5.564091 |
Panama | 198.0 | 4106.769 | 20.0 | 15146.390071 | 5.594183 |
Polynésie française | 1.0 | 276.102 | 15.0 | 21127.527814 | 5.602930 |
Danemark | 173.0 | 5732.274 | 133.0 | 57938.797728 | 5.682485 |
Zimbabwe | 69.0 | 14236.595 | 6.0 | 1548.186368 | 5.707857 |
Turkménistan | 20.0 | 5757.667 | 9.0 | 6752.362494 | 5.709055 |
Congo | 7.0 | 5110.695 | 104.0 | 2154.629048 | 5.713921 |
Allemagne | 1514.0 | 82658.409 | 842.0 | 44651.829102 | 5.842947 |
Macédoine du Nord | 2.0 | 2081.996 | 40.0 | 5430.875559 | 5.882350 |
Cuba | 29.0 | 11339.254 | 312.0 | 8541.214440 | 5.959893 |
Finlande | 129.0 | 5511.371 | 16.0 | 46385.550876 | 5.987558 |
Pays-Bas | 1100.0 | 17021.347 | 608.0 | 48989.638816 | 6.174548 |
Mexique | 3249.0 | 124777.324 | 972.0 | 9287.841557 | 6.213095 |
Mali | 48.0 | 18512.430 | 1.0 | 830.021400 | 6.314350 |
Slovaquie | 71.0 | 5447.900 | 63.0 | 17510.144290 | 6.334056 |
Guatemala | 235.0 | 16914.970 | 129.0 | 4236.114906 | 6.350033 |
Sainte-Lucie | 1.0 | 180.954 | 10.0 | 11034.684894 | 6.485786 |
Espagne | 1515.0 | 46647.428 | 205.0 | 28137.441564 | 6.500360 |
Émirats arabes unis | 48.0 | 9487.203 | 433.0 | 40644.804043 | 6.562207 |
Iran (République islamique d') | 2174.0 | 80673.883 | 6.0 | 6243.780412 | 6.586155 |
Paraguay | 45.0 | 6867.061 | 1.0 | 5678.867540 | 6.652694 |
Vanuatu | 1.0 | 285.510 | 4.0 | 3082.368364 | 6.662380 |
Azerbaïdjan | 104.0 | 9845.320 | 27.0 | 4150.868844 | 6.723612 |
Australie | 1269.0 | 24584.620 | 16.0 | 57628.863849 | 6.726787 |
Burkina Faso | 46.0 | 19193.234 | 0.0 | 734.996282 | 6.791984 |
Pakistan | 1281.0 | 207906.209 | 2.0 | 1455.991742 | 6.833551 |
Sao Tomé-et-Principe | 1.0 | 207.089 | 2.0 | 1828.194018 | 6.902917 |
Canada | 1417.0 | 36732.095 | 182.0 | 44906.748920 | 6.909561 |
Suriname | 10.0 | 570.496 | 18.0 | 5947.369351 | 6.970271 |
Norvège | 101.0 | 5296.326 | 2.0 | 75220.814442 | 7.093090 |
Kenya | 35.0 | 50221.142 | 0.0 | 1634.068744 | 7.135500 |
Sénégal | 77.0 | 15419.355 | 0.0 | 1361.702214 | 7.228812 |
Lesotho | 2.0 | 2091.534 | 15.0 | 1101.803397 | 7.260175 |
Géorgie | 22.0 | 4008.716 | 51.0 | 4051.842804 | 7.452143 |
Mozambique | 92.0 | 28649.018 | 24.0 | 461.414754 | 7.574358 |
Koweït | 56.0 | 4056.099 | 137.0 | 29754.636332 | 7.612780 |
Portugal | 361.0 | 10288.527 | 82.0 | 21515.021025 | 7.692302 |
Indonésie | 2301.0 | 264650.963 | 1.0 | 3837.578117 | 7.711925 |
Viet Nam | 918.0 | 94600.648 | 291.0 | 2365.521494 | 7.907523 |
Fidji | 23.0 | 877.459 | 3.0 | 6101.130428 | 7.958537 |
Bosnie-Herzégovine | 61.0 | 3351.525 | 10.0 | 5394.741461 | 8.012034 |
République de Corée | 838.0 | 51096.415 | 137.0 | 31781.123320 | 8.012736 |
Pérou | 1465.0 | 31444.298 | 60.0 | 6710.531503 | 8.145981 |
Croatie | 61.0 | 4182.857 | 24.0 | 13439.243178 | 8.156152 |
Maurice | 48.0 | 1264.499 | 2.0 | 10485.851087 | 8.168907 |
Madagascar | 81.0 | 25570.512 | 0.0 | 515.293303 | 8.265003 |
Nouvelle-Zélande | 223.0 | 4702.034 | 1.0 | 43943.484628 | 8.423076 |
Slovénie | 72.0 | 2076.394 | 20.0 | 23400.712988 | 8.497923 |
Colombie | 1564.0 | 48909.839 | 78.0 | 6376.707362 | 8.617766 |
Chypre | 25.0 | 1179.678 | 14.0 | 26755.592900 | 8.818061 |
Serbie | 85.0 | 8829.628 | 12.0 | 6275.194384 | 8.846020 |
Bolivie (État plurinational de) | 533.0 | 11192.855 | 1.0 | 3351.127399 | 8.921000 |
Botswana | 5.0 | 2205.080 | 3.0 | 7893.362920 | 8.964811 |
Arménie | 11.0 | 2944.791 | 35.0 | 3914.525246 | 8.984045 |
Chine, continentale | 18236.0 | 1421021.791 | 452.0 | 8663.126784 | 9.051432 |
Chili | 712.0 | 18470.439 | 155.0 | 14998.813979 | 9.053775 |
Cambodge | 28.0 | 16009.409 | 10.0 | 1385.260419 | 9.110687 |
Israël | 629.0 | 8243.848 | 0.0 | 43096.069697 | 9.541818 |
Iraq | 96.0 | 37552.781 | 470.0 | 4985.453728 | 9.554553 |
Albanie | 13.0 | 2884.169 | 38.0 | 4514.204908 | 9.852298 |
Lettonie | 33.0 | 1951.097 | 43.0 | 15623.931572 | 9.910243 |
Thaïlande | 1676.0 | 69209.810 | 2.0 | 6593.816870 | 10.019642 |
Chine - RAS de Macao | 3.0 | 622.585 | 23.0 | 81043.968656 | 10.161502 |
Bangladesh | 249.0 | 159685.424 | 0.0 | 1538.233627 | 10.298823 |
Bulgarie | 107.0 | 7102.444 | 108.0 | 8335.277986 | 10.492325 |
Irlande | 110.0 | 4753.279 | 99.0 | 70568.302444 | 10.929081 |
Kirghizistan | 7.0 | 6189.733 | 25.0 | 1244.470221 | 10.952839 |
Monténégro | 4.0 | 627.563 | 8.0 | 7738.844301 | 10.982153 |
Tchéquie | 163.0 | 10641.034 | 116.0 | 20545.836143 | 11.158606 |
Pologne | 2351.0 | 37953.180 | 55.0 | 13872.466907 | 11.504044 |
Hongrie | 493.0 | 9729.823 | 58.0 | 14711.084220 | 11.536985 |
Guinée-Bissau | 3.0 | 1828.145 | 4.0 | 738.550286 | 11.655252 |
Estonie | 20.0 | 1319.390 | 21.0 | 20406.691807 | 11.677208 |
Uruguay | 33.0 | 3436.641 | 3.0 | 18690.915595 | 11.816648 |
République centrafricaine | 7.0 | 4596.023 | 4.0 | 450.900697 | 12.110939 |
Lituanie | 118.0 | 2845.414 | 44.0 | 16784.459812 | 12.742468 |
Haïti | 9.0 | 10982.366 | 89.0 | 1387.438826 | 12.798275 |
Roumanie | 392.0 | 19653.969 | 146.0 | 10771.150494 | 13.341428 |
Inde | 3545.0 | 1338676.785 | 0.0 | 1960.390340 | 13.358115 |
Brésil | 14201.0 | 207833.823 | 3.0 | 9928.675992 | 13.990858 |
Eswatini | 6.0 | 1124.805 | 2.0 | 3913.145927 | 14.235190 |
Argentine | 2161.0 | 43937.140 | 8.0 | 14648.845969 | 14.316015 |
Bélarus | 463.0 | 9450.231 | 21.0 | 5790.908054 | 14.616056 |
Malte | 4.0 | 437.933 | 9.0 | 30850.173570 | 15.105178 |
Afrique du Sud | 1667.0 | 57009.756 | 514.0 | 6121.876572 | 16.114973 |
Guinée | 13.0 | 12067.519 | 37.0 | 855.575057 | 16.728287 |
Angola | 42.0 | 29816.766 | 277.0 | 4095.811686 | 16.820539 |
Zambie | 49.0 | 16853.599 | 12.0 | 1534.874627 | 17.075699 |
Namibie | 11.0 | 2402.633 | 29.0 | 5363.907541 | 17.965938 |
Islande | 10.0 | 334.393 | 2.0 | 73949.769216 | 18.147254 |
Népal | 58.0 | 27632.681 | 0.0 | 1065.514207 | 19.602516 |
Kazakhstan | 171.0 | 18080.019 | 174.0 | 9225.974208 | 19.834969 |
République de Moldova | 54.0 | 4059.684 | 16.0 | 2381.895178 | 19.988156 |
Ukraine | 1211.0 | 44487.709 | 121.0 | 2521.827514 | 20.785383 |
Malawi | 130.0 | 17670.196 | 0.0 | 506.137215 | 22.241069 |
Fédération de Russie | 4444.0 | 145530.082 | 226.0 | 10817.003315 | 23.078092 |
Soudan | 67.0 | 40813.397 | 2.0 | 2990.994843 | 32.911453 |
Définition des Fonctions d'affichage:
def plot_dendrogram(Z, names):
plt.figure(figsize=(25,10))
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('distance')
dendrogram(
Z,
labels = names,
orientation = "top",
)
plt.show()
def display_circles(pcs, n_comp, pca, axis_ranks, labels=None, label_rotation=0, lims=None):
for d1, d2 in axis_ranks: # On affiche les 3 premiers plans factoriels, donc les 6 premières composantes
if d2 < n_comp:
# initialisation de la figure
fig, ax = plt.subplots(figsize=(10,10))
# détermination des limites du graphique
if lims is not None :
xmin, xmax, ymin, ymax = lims
elif pcs.shape[1] < 30 :
xmin, xmax, ymin, ymax = -1, 1, -1, 1
else :
xmin, xmax, ymin, ymax = min(pcs[d1,:]), max(pcs[d1,:]), min(pcs[d2,:]), max(pcs[d2,:])
# affichage des flèches
# s'il y a plus de 30 flèches, on n'affiche pas le triangle à leur extrémité
if pcs.shape[1] < 30 :
plt.quiver(np.zeros(pcs.shape[1]), np.zeros(pcs.shape[1]),
pcs[d1,:], pcs[d2,:],
angles='xy', scale_units='xy', scale=1, color="grey")
# (voir la doc : https://matplotlib.org/api/_as_gen/matplotlib.pyplot.quiver.html)
else:
lines = [[[0,0],[x,y]] for x,y in pcs[[d1,d2]].T]
ax.add_collection(LineCollection(lines, axes=ax, alpha=.1, color='black'))
# affichage des noms des variables
if labels is not None:
for i,(x, y) in enumerate(pcs[[d1,d2]].T):
if x >= xmin and x <= xmax and y >= ymin and y <= ymax :
plt.text(x, y, labels[i], fontsize='14', ha='center', va='center', rotation=label_rotation, color="blue", alpha=0.5)
# affichage du cercle
circle = plt.Circle((0,0), 1, facecolor='none', edgecolor='b')
plt.gca().add_artist(circle)
# définition des limites du graphique
plt.xlim(xmin, xmax)
plt.ylim(ymin, ymax)
# affichage des lignes horizontales et verticales
plt.plot([-1, 1], [0, 0], color='grey', ls='--')
plt.plot([0, 0], [-1, 1], color='grey', ls='--')
# nom des axes, avec le pourcentage d'inertie expliqué
plt.xlabel('F{} ({}%)'.format(d1+1, round(100*pca.explained_variance_ratio_[d1],1)))
plt.ylabel('F{} ({}%)'.format(d2+1, round(100*pca.explained_variance_ratio_[d2],1)))
plt.title("Cercle des corrélations (F{} et F{})".format(d1+1, d2+1))
plt.show(block=False)
def display_factorial_planes(X_projected, n_comp, pca, axis_ranks, labels=None, alpha=1, illustrative_var=None):
for d1,d2 in axis_ranks:
if d2 < n_comp:
# initialisation de la figure
fig = plt.figure(figsize=(20,15))
# affichage des points
if illustrative_var is None:
plt.scatter(X_projected[:, d1], X_projected[:, d2], alpha=alpha)
else:
illustrative_var = np.array(illustrative_var)
for value in np.unique(illustrative_var):
selected = np.where(illustrative_var == value)
plt.scatter(X_projected[selected, d1], X_projected[selected, d2], alpha=alpha, label=value)
plt.legend()
# affichage des labels des points
if labels is not None:
for i,(x,y) in enumerate(X_projected[:,[d1,d2]]):
plt.text(x, y, labels[i],
fontsize='10', ha='center',va='center')
# détermination des limites du graphique
boundary = np.max(np.abs(X_projected[:, [d1,d2]])) * 1.1
plt.xlim([-boundary,boundary])
plt.ylim([-boundary,boundary])
# affichage des lignes horizontales et verticales
plt.plot([-100, 100], [0, 0], color='grey', ls='--')
plt.plot([0, 0], [-100, 100], color='grey', ls='--')
# nom des axes, avec le pourcentage d'inertie expliqué
plt.xlabel('F{} ({}%)'.format(d1+1, round(100*pca.explained_variance_ratio_[d1],1)))
plt.ylabel('F{} ({}%)'.format(d2+1, round(100*pca.explained_variance_ratio_[d2],1)))
plt.title("Projection des individus (sur F{} et F{})".format(d1+1, d2+1))
plt.show(block=False)
def display_scree_plot(pca):
scree = pca.explained_variance_ratio_*100
plt.bar(np.arange(len(scree))+1, scree)
plt.plot(np.arange(len(scree))+1, scree.cumsum(),c="red",marker='o')
plt.xlabel("rang de l'axe d'inertie")
plt.ylabel("pourcentage d'inertie")
plt.title("Eboulis des valeurs propres")
plt.show(block=False)
# préparation des données pour le clustering
X = df_analyse.values
index = df_analyse.index
# Centrage et Réduction
std_scale = preprocessing.StandardScaler().fit(X)
X_scaled = std_scale.transform(X)
# Clustering hiérarchique
#Méthode de Ward
Z = linkage(X_scaled, 'ward')
# Affichage du dendrogramme
plot_dendrogram(Z, index)
clusters = fcluster(Z, 3, criterion='maxclust')
df_cl = pd.DataFrame({"Pays": index, "cluster": clusters})
df_cl.pivot_table(index="Pays", columns="cluster", aggfunc=len, fill_value=0)
cluster | 1 | 2 | 3 |
---|---|---|---|
Pays | |||
Afghanistan | 0 | 1 | 0 |
Afrique du Sud | 0 | 0 | 1 |
Albanie | 0 | 1 | 0 |
Algérie | 0 | 1 | 0 |
Allemagne | 0 | 0 | 1 |
Angola | 0 | 1 | 0 |
Antigua-et-Barbuda | 0 | 1 | 0 |
Arabie saoudite | 0 | 0 | 1 |
Argentine | 0 | 1 | 0 |
Arménie | 0 | 1 | 0 |
Australie | 0 | 0 | 1 |
Autriche | 0 | 0 | 1 |
Azerbaïdjan | 0 | 1 | 0 |
Bahamas | 0 | 1 | 0 |
Bangladesh | 0 | 1 | 0 |
Barbade | 0 | 1 | 0 |
Belgique | 0 | 0 | 1 |
Belize | 0 | 1 | 0 |
Bolivie (État plurinational de) | 0 | 1 | 0 |
Bosnie-Herzégovine | 0 | 1 | 0 |
Botswana | 0 | 1 | 0 |
Brésil | 1 | 0 | 0 |
Bulgarie | 0 | 1 | 0 |
Burkina Faso | 0 | 1 | 0 |
Bélarus | 0 | 1 | 0 |
Bénin | 0 | 1 | 0 |
Cabo Verde | 0 | 1 | 0 |
Cambodge | 0 | 1 | 0 |
Cameroun | 0 | 1 | 0 |
Canada | 0 | 0 | 1 |
Chili | 0 | 1 | 0 |
Chine - RAS de Hong-Kong | 0 | 0 | 1 |
Chine - RAS de Macao | 0 | 0 | 1 |
Chine, continentale | 1 | 0 | 0 |
Chypre | 0 | 1 | 0 |
Colombie | 0 | 1 | 0 |
Congo | 0 | 1 | 0 |
Costa Rica | 0 | 1 | 0 |
Croatie | 0 | 1 | 0 |
Cuba | 0 | 0 | 1 |
Côte d'Ivoire | 0 | 1 | 0 |
Danemark | 0 | 0 | 1 |
Dominique | 0 | 1 | 0 |
El Salvador | 0 | 1 | 0 |
Espagne | 0 | 0 | 1 |
Estonie | 0 | 1 | 0 |
Eswatini | 0 | 1 | 0 |
Fidji | 0 | 1 | 0 |
Finlande | 0 | 0 | 1 |
France | 0 | 0 | 1 |
Fédération de Russie | 0 | 1 | 0 |
Gabon | 0 | 1 | 0 |
Gambie | 0 | 1 | 0 |
Ghana | 0 | 1 | 0 |
Grenade | 0 | 1 | 0 |
Grèce | 0 | 1 | 0 |
Guatemala | 0 | 1 | 0 |
Guinée | 0 | 1 | 0 |
Guinée-Bissau | 0 | 1 | 0 |
Guyana | 0 | 1 | 0 |
Géorgie | 0 | 1 | 0 |
Haïti | 0 | 1 | 0 |
Honduras | 0 | 1 | 0 |
Hongrie | 0 | 1 | 0 |
Inde | 1 | 0 | 0 |
Indonésie | 0 | 1 | 0 |
Iran (République islamique d') | 0 | 1 | 0 |
Iraq | 0 | 0 | 1 |
Irlande | 0 | 0 | 1 |
Islande | 0 | 0 | 1 |
Israël | 0 | 0 | 1 |
Italie | 0 | 0 | 1 |
Jamaïque | 0 | 1 | 0 |
Japon | 0 | 0 | 1 |
Jordanie | 0 | 1 | 0 |
Kazakhstan | 0 | 1 | 0 |
Kenya | 0 | 1 | 0 |
Kirghizistan | 0 | 1 | 0 |
Kiribati | 0 | 1 | 0 |
Koweït | 0 | 0 | 1 |
Lesotho | 0 | 1 | 0 |
Lettonie | 0 | 1 | 0 |
Liban | 0 | 1 | 0 |
Libéria | 0 | 1 | 0 |
Lituanie | 0 | 1 | 0 |
Luxembourg | 0 | 0 | 1 |
Macédoine du Nord | 0 | 1 | 0 |
Madagascar | 0 | 1 | 0 |
Malaisie | 0 | 1 | 0 |
Malawi | 0 | 1 | 0 |
Mali | 0 | 1 | 0 |
Malte | 0 | 1 | 0 |
Maroc | 0 | 1 | 0 |
Maurice | 0 | 1 | 0 |
Mauritanie | 0 | 1 | 0 |
Mexique | 0 | 0 | 1 |
Mongolie | 0 | 1 | 0 |
Monténégro | 0 | 1 | 0 |
Mozambique | 0 | 1 | 0 |
Myanmar | 0 | 1 | 0 |
Namibie | 0 | 1 | 0 |
Nicaragua | 0 | 1 | 0 |
Niger | 0 | 1 | 0 |
Nigéria | 0 | 1 | 0 |
Norvège | 0 | 0 | 1 |
Nouvelle-Calédonie | 0 | 1 | 0 |
Nouvelle-Zélande | 0 | 0 | 1 |
Népal | 0 | 1 | 0 |
Oman | 0 | 1 | 0 |
Ouganda | 0 | 1 | 0 |
Pakistan | 0 | 1 | 0 |
Panama | 0 | 1 | 0 |
Paraguay | 0 | 1 | 0 |
Pays-Bas | 0 | 0 | 1 |
Philippines | 0 | 0 | 1 |
Pologne | 0 | 1 | 0 |
Polynésie française | 0 | 1 | 0 |
Portugal | 0 | 1 | 0 |
Pérou | 0 | 1 | 0 |
Roumanie | 0 | 1 | 0 |
Royaume-Uni de Grande-Bretagne et d'Irlande du Nord | 0 | 0 | 1 |
Rwanda | 0 | 1 | 0 |
République centrafricaine | 0 | 1 | 0 |
République de Corée | 0 | 0 | 1 |
République de Moldova | 0 | 1 | 0 |
République dominicaine | 0 | 1 | 0 |
République populaire démocratique de Corée | 0 | 1 | 0 |
République-Unie de Tanzanie | 0 | 1 | 0 |
Saint-Kitts-et-Nevis | 0 | 1 | 0 |
Saint-Vincent-et-les Grenadines | 0 | 1 | 0 |
Sainte-Lucie | 0 | 1 | 0 |
Samoa | 0 | 1 | 0 |
Sao Tomé-et-Principe | 0 | 1 | 0 |
Serbie | 0 | 1 | 0 |
Sierra Leone | 0 | 1 | 0 |
Slovaquie | 0 | 1 | 0 |
Slovénie | 0 | 1 | 0 |
Soudan | 0 | 1 | 0 |
Sri Lanka | 0 | 1 | 0 |
Suisse | 0 | 0 | 1 |
Suriname | 0 | 1 | 0 |
Suède | 0 | 0 | 1 |
Sénégal | 0 | 1 | 0 |
Tadjikistan | 0 | 1 | 0 |
Tchad | 0 | 1 | 0 |
Tchéquie | 0 | 1 | 0 |
Thaïlande | 0 | 1 | 0 |
Timor-Leste | 0 | 1 | 0 |
Togo | 0 | 1 | 0 |
Trinité-et-Tobago | 0 | 1 | 0 |
Tunisie | 0 | 1 | 0 |
Turkménistan | 0 | 1 | 0 |
Turquie | 0 | 1 | 0 |
Ukraine | 0 | 1 | 0 |
Uruguay | 0 | 1 | 0 |
Vanuatu | 0 | 1 | 0 |
Venezuela (République bolivarienne du) | 0 | 1 | 0 |
Viet Nam | 0 | 0 | 1 |
Yémen | 0 | 1 | 0 |
Zambie | 0 | 1 | 0 |
Zimbabwe | 0 | 1 | 0 |
Égypte | 0 | 1 | 0 |
Émirats arabes unis | 0 | 0 | 1 |
Équateur | 0 | 1 | 0 |
États-Unis d'Amérique | 1 | 0 | 0 |
Éthiopie | 0 | 1 | 0 |
Îles Salomon | 0 | 1 | 0 |
list_pays = pd.DataFrame({"cluster": clusters, "pays": index})
Identifions le cluster de la France
list_pays[list_pays["pays"] == "France"]
cluster | pays | |
---|---|---|
55 | 3 | France |
Le Cluster est "3"
Vérifions les Pays appartenant à ce Cluster:
list_clust_france = list_pays[list_pays["cluster"] == 3]
list_clust_france
print(len(list_clust_france))
33
list_pays[list_pays["cluster"] == 3]
cluster | pays | |
---|---|---|
1 | 3 | Afrique du Sud |
4 | 3 | Allemagne |
7 | 3 | Arabie saoudite |
10 | 3 | Australie |
11 | 3 | Autriche |
17 | 3 | Belgique |
29 | 3 | Canada |
31 | 3 | Chine - RAS de Hong-Kong |
32 | 3 | Chine - RAS de Macao |
40 | 3 | Cuba |
41 | 3 | Danemark |
45 | 3 | Émirats arabes unis |
47 | 3 | Espagne |
54 | 3 | Finlande |
55 | 3 | France |
73 | 3 | Iraq |
74 | 3 | Irlande |
75 | 3 | Islande |
76 | 3 | Israël |
77 | 3 | Italie |
79 | 3 | Japon |
85 | 3 | Koweït |
91 | 3 | Luxembourg |
101 | 3 | Mexique |
111 | 3 | Norvège |
113 | 3 | Nouvelle-Zélande |
119 | 3 | Pays-Bas |
121 | 3 | Philippines |
126 | 3 | République de Corée |
132 | 3 | Royaume-Uni de Grande-Bretagne et d'Irlande du... |
146 | 3 | Suède |
147 | 3 | Suisse |
163 | 3 | Viet Nam |
list_pays.sort_values("cluster")
cluster | pays | |
---|---|---|
23 | 1 | Brésil |
33 | 1 | Chine, continentale |
70 | 1 | Inde |
50 | 1 | États-Unis d'Amérique |
0 | 2 | Afghanistan |
105 | 2 | Myanmar |
106 | 2 | Namibie |
107 | 2 | Népal |
108 | 2 | Nicaragua |
109 | 2 | Niger |
110 | 2 | Nigéria |
112 | 2 | Nouvelle-Calédonie |
114 | 2 | Oman |
115 | 2 | Ouganda |
116 | 2 | Pakistan |
117 | 2 | Panama |
118 | 2 | Paraguay |
104 | 2 | Mozambique |
103 | 2 | Monténégro |
102 | 2 | Mongolie |
100 | 2 | Mauritanie |
82 | 2 | Kenya |
165 | 2 | Zambie |
84 | 2 | Kiribati |
86 | 2 | Lesotho |
87 | 2 | Lettonie |
88 | 2 | Liban |
89 | 2 | Libéria |
120 | 2 | Pérou |
90 | 2 | Lituanie |
93 | 2 | Madagascar |
94 | 2 | Malaisie |
95 | 2 | Malawi |
96 | 2 | Mali |
97 | 2 | Malte |
98 | 2 | Maroc |
99 | 2 | Maurice |
92 | 2 | Macédoine du Nord |
122 | 2 | Pologne |
124 | 2 | Portugal |
81 | 2 | Kazakhstan |
149 | 2 | Tadjikistan |
150 | 2 | Tchad |
151 | 2 | Tchéquie |
152 | 2 | Thaïlande |
153 | 2 | Timor-Leste |
154 | 2 | Togo |
155 | 2 | Trinité-et-Tobago |
156 | 2 | Tunisie |
157 | 2 | Turkménistan |
158 | 2 | Turquie |
159 | 2 | Ukraine |
160 | 2 | Uruguay |
161 | 2 | Vanuatu |
162 | 2 | Venezuela (République bolivarienne du) |
164 | 2 | Yémen |
148 | 2 | Suriname |
145 | 2 | Sri Lanka |
144 | 2 | Soudan |
143 | 2 | Slovénie |
125 | 2 | République centrafricaine |
127 | 2 | République de Moldova |
128 | 2 | République dominicaine |
129 | 2 | République populaire démocratique de Corée |
130 | 2 | République-Unie de Tanzanie |
131 | 2 | Roumanie |
133 | 2 | Rwanda |
123 | 2 | Polynésie française |
134 | 2 | Sainte-Lucie |
136 | 2 | Saint-Vincent-et-les Grenadines |
137 | 2 | Samoa |
138 | 2 | Sao Tomé-et-Principe |
139 | 2 | Sénégal |
140 | 2 | Serbie |
141 | 2 | Sierra Leone |
142 | 2 | Slovaquie |
135 | 2 | Saint-Kitts-et-Nevis |
80 | 2 | Jordanie |
83 | 2 | Kirghizistan |
166 | 2 | Zimbabwe |
21 | 2 | Bosnie-Herzégovine |
12 | 2 | Azerbaïdjan |
46 | 2 | Équateur |
13 | 2 | Bahamas |
44 | 2 | El Salvador |
43 | 2 | Égypte |
42 | 2 | Dominique |
14 | 2 | Bangladesh |
15 | 2 | Barbade |
16 | 2 | Bélarus |
78 | 2 | Jamaïque |
39 | 2 | Croatie |
49 | 2 | Eswatini |
38 | 2 | Côte d'Ivoire |
36 | 2 | Congo |
35 | 2 | Colombie |
34 | 2 | Chypre |
18 | 2 | Belize |
30 | 2 | Chili |
19 | 2 | Bénin |
28 | 2 | Cameroun |
27 | 2 | Cambodge |
26 | 2 | Cabo Verde |
25 | 2 | Burkina Faso |
24 | 2 | Bulgarie |
22 | 2 | Botswana |
37 | 2 | Costa Rica |
51 | 2 | Éthiopie |
48 | 2 | Estonie |
53 | 2 | Fidji |
2 | 2 | Albanie |
3 | 2 | Algérie |
5 | 2 | Angola |
72 | 2 | Iran (République islamique d') |
71 | 2 | Indonésie |
69 | 2 | Îles Salomon |
68 | 2 | Hongrie |
67 | 2 | Honduras |
6 | 2 | Antigua-et-Barbuda |
52 | 2 | Fédération de Russie |
65 | 2 | Guyana |
64 | 2 | Guinée-Bissau |
66 | 2 | Haïti |
62 | 2 | Guatemala |
9 | 2 | Arménie |
8 | 2 | Argentine |
56 | 2 | Gabon |
63 | 2 | Guinée |
57 | 2 | Gambie |
59 | 2 | Ghana |
60 | 2 | Grèce |
61 | 2 | Grenade |
58 | 2 | Géorgie |
20 | 2 | Bolivie (État plurinational de) |
7 | 3 | Arabie saoudite |
146 | 3 | Suède |
17 | 3 | Belgique |
147 | 3 | Suisse |
11 | 3 | Autriche |
4 | 3 | Allemagne |
10 | 3 | Australie |
163 | 3 | Viet Nam |
1 | 3 | Afrique du Sud |
79 | 3 | Japon |
132 | 3 | Royaume-Uni de Grande-Bretagne et d'Irlande du... |
77 | 3 | Italie |
76 | 3 | Israël |
75 | 3 | Islande |
74 | 3 | Irlande |
73 | 3 | Iraq |
85 | 3 | Koweït |
91 | 3 | Luxembourg |
101 | 3 | Mexique |
55 | 3 | France |
29 | 3 | Canada |
54 | 3 | Finlande |
47 | 3 | Espagne |
113 | 3 | Nouvelle-Zélande |
45 | 3 | Émirats arabes unis |
119 | 3 | Pays-Bas |
41 | 3 | Danemark |
121 | 3 | Philippines |
126 | 3 | République de Corée |
32 | 3 | Chine - RAS de Macao |
31 | 3 | Chine - RAS de Hong-Kong |
111 | 3 | Norvège |
40 | 3 | Cuba |
Determinons le nombre de cluster par la méthode Elbow
inertias = []
K = range(1,10)
for k in K:
kmeanModel = KMeans(n_clusters=k)
kmeanModel.fit(df_analyse.values)
inertias.append(kmeanModel.inertia_)
C:\Users\yacin\anaconda3\lib\site-packages\sklearn\cluster\_kmeans.py:881: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1. warnings.warn(
plt.figure(figsize=(16,8))
plt.plot(K, inertias, 'bx-')
plt.xlabel('k')
plt.ylabel('Inertie')
plt.title('The Elbow Method showing the optimal k')
plt.show()
D'après la méthode du coude, on remarque que la valeur 3 est la valeur la plus optimale
# Nombre de clusters souhaités
n_clust = 3
# préparation des données pour le clustering
X = df_analyse.values
# Réduire les variables
X_scaled = preprocessing.StandardScaler().fit_transform(X)
# Clustering par K-means
km = KMeans(n_clusters=n_clust, init='k-means++')
km.fit(X_scaled)
# Récupération des clusters attribués à chaque individu
clusters = km.labels_
# Affichage du clustering par projection des individus sur le premier plan factoriel
pca_kmeans = decomposition.PCA(n_components=5).fit(X_scaled)
X_projected = pca_kmeans.transform(X_scaled)
plt.figure(figsize=(10, 10), dpi=80)
plt.scatter(X_projected[:, 0], X_projected[:, 1], c=clusters.astype(float), cmap = 'jet', alpha=1)
plt.title("Projection des {} individus sur le 1e plan factoriel".format(X_projected.shape[0]))
plt.show(block=False)
# Affichage des positions des centres de classes
plt.figure()
centroids = km.cluster_centers_
centroids_projected = pca_kmeans.transform(centroids)
plt.scatter(centroids_projected[:,0],centroids_projected[:,1])
plt.title("Projection des {} centres sur le 1e plan factoriel".format(len(centroids)))
plt.show()
# choix du nombre de composantes à calculer
n_comp = 5
# préparation des données pour l'ACP
df_analyse = df_analyse.fillna(df_analyse.mean()) # Il est fréquent de remplacer les valeurs inconnues par la moyenne de la variable
X = df_analyse.values
names = df_analyse.index # ou data.index pour avoir les intitulés
features = df_analyse.columns
# Centrage et Réduction
std_scale = preprocessing.StandardScaler().fit(X)
X_scaled = std_scale.transform(X)
# Calcul des composantes principales
pca = decomposition.PCA(n_components=n_comp)
pca.fit(X_scaled)
# Eboulis des valeurs propres
display_scree_plot(pca)
plt.show()
# Cercle des corrélations
choix_n_comp=4
pcs = pca.components_
display_circles(pcs, choix_n_comp, pca, [(0,1)], labels = np.array(features))
# Projection des individus
X_projected = pca.transform(X_scaled)
display_factorial_planes(X_projected, n_comp, pca, [(0,1)], labels = np.array(names))
# On met en évidence la France et les Pays faisant partis de son Cluster
list_c_france=[]
for name in names:
if name not in list(list_clust_france["pays"]):
name=''
list_c_france.append(name)
else:
name=name
list_c_france.append(name)
display_factorial_planes(X_projected, n_comp, pca, [(0,1)], labels = np.array(list_c_france))
display_factorial_planes(X_projected, n_comp, pca, [(0,1)], labels = np.array(clusters))
#Heatmap Clusters
data_clust=X_scaled.copy()
df_cluster = pd.DataFrame(data_clust)
df_cluster['pays']=df_analyse.index
df_cluster['cluster']=KMeans(n_clusters=n_clust, init='k-means++').fit(data_clust).labels_
df_cluster
0 | 1 | 2 | 3 | 4 | pays | cluster | |
---|---|---|---|---|---|---|---|
0 | -0.278890 | -0.048100 | -0.325803 | -0.705135 | -0.635910 | Afghanistan | 0 |
1 | 0.376330 | 0.085726 | 2.261046 | -0.418082 | 1.440404 | Afrique du Sud | 2 |
2 | -0.284886 | -0.263967 | -0.277800 | -0.500472 | 0.504056 | Albanie | 0 |
3 | -0.180147 | -0.015195 | -0.469814 | -0.521202 | -0.350539 | Algérie | 0 |
4 | 0.315166 | 0.251436 | 4.010503 | 1.556501 | -0.095391 | Allemagne | 2 |
5 | -0.273293 | -0.089961 | 0.996957 | -0.521913 | 1.545895 | Angola | 0 |
6 | -0.290083 | -0.281984 | -0.443145 | 0.056554 | -0.786199 | Antigua-et-Barbuda | 0 |
7 | -0.043826 | -0.068742 | 3.370458 | 0.334269 | -0.274251 | Arabie saoudite | 2 |
8 | 0.573816 | 0.001267 | -0.437811 | 0.018908 | 1.171438 | Argentine | 0 |
9 | -0.285686 | -0.263575 | -0.293801 | -0.531204 | 0.374242 | Arménie | 0 |
10 | 0.217222 | -0.123765 | -0.395142 | 2.221548 | 0.036754 | Australie | 2 |
11 | -0.230918 | -0.225617 | 0.106227 | 1.692679 | -0.278895 | Autriche | 2 |
12 | -0.248507 | -0.218992 | -0.336471 | -0.519092 | 0.036279 | Azerbaïdjan | 0 |
13 | -0.287685 | -0.280134 | -0.352472 | 0.927396 | -0.665630 | Bahamas | 0 |
14 | -0.190541 | 0.749089 | -0.480481 | -0.652984 | 0.570817 | Bangladesh | 0 |
15 | -0.284087 | -0.280751 | -0.469814 | 0.160889 | -0.507535 | Barbade | 0 |
16 | -0.104991 | -0.221545 | -0.368473 | -0.435043 | 1.216297 | Bélarus | 0 |
17 | -0.104991 | -0.208820 | 1.322313 | 1.524424 | -0.210045 | Belgique | 2 |
18 | -0.282088 | -0.280173 | -0.480481 | -0.480204 | -0.870818 | Belize | 0 |
19 | -0.282887 | -0.210400 | 0.175565 | -0.673567 | -0.290992 | Bénin | 0 |
20 | -0.077007 | -0.210286 | -0.475147 | -0.560077 | 0.364816 | Bolivie (État plurinational de) | 0 |
21 | -0.265697 | -0.260947 | -0.427144 | -0.455346 | 0.228914 | Bosnie-Herzégovine | 0 |
22 | -0.288084 | -0.268354 | -0.464480 | -0.327296 | 0.371366 | Botswana | 0 |
23 | 5.387023 | 1.060165 | -0.464480 | -0.222991 | 1.122822 | Brésil | 1 |
24 | -0.247308 | -0.236713 | 0.095560 | -0.304649 | 0.599748 | Bulgarie | 0 |
25 | -0.271694 | -0.158598 | -0.480481 | -0.694148 | 0.046501 | Burkina Faso | 0 |
26 | -0.289683 | -0.279128 | -0.416477 | -0.563074 | -0.197058 | Cabo Verde | 0 |
27 | -0.278890 | -0.179168 | -0.427144 | -0.660824 | 0.393176 | Cambodge | 0 |
28 | -0.257702 | -0.123885 | -0.480481 | -0.658782 | -0.302953 | Cameroun | 0 |
29 | 0.276388 | -0.045283 | 0.490254 | 1.569565 | 0.064081 | Canada | 2 |
30 | -0.005448 | -0.163267 | 0.346244 | 0.036844 | 0.384667 | Chili | 0 |
31 | -0.280489 | -0.235396 | 4.357195 | 1.661724 | -0.154871 | Chine - RAS de Hong-Kong | 2 |
32 | -0.288884 | -0.278578 | -0.357806 | 3.421526 | 0.550286 | Chine - RAS de Macao | 2 |
33 | 7.000087 | 8.898287 | 1.930356 | -0.287848 | 0.384317 | Chine, continentale | 1 |
34 | -0.280089 | -0.274979 | -0.405809 | 0.639355 | 0.349425 | Chypre | 0 |
35 | 0.335154 | 0.033394 | -0.064452 | -0.405022 | 0.319478 | Colombie | 0 |
36 | -0.287285 | -0.249582 | 0.074225 | -0.621395 | -0.114682 | Congo | 0 |
37 | -0.236914 | -0.250620 | -0.389808 | -0.105279 | -0.702135 | Costa Rica | 0 |
38 | -0.266897 | -0.124716 | -0.443145 | -0.623630 | -0.243884 | Côte d'Ivoire | 0 |
39 | -0.265697 | -0.255576 | -0.352472 | -0.043081 | 0.250461 | Croatie | 0 |
40 | -0.278490 | -0.209340 | 1.183637 | -0.294095 | -0.077907 | Cuba | 0 |
41 | -0.220923 | -0.245566 | 0.228902 | 2.237432 | -0.119383 | Danemark | 2 |
42 | -0.290083 | -0.282139 | -0.459146 | -0.358382 | -2.438343 | Dominique | 0 |
43 | 0.156857 | 0.340492 | 0.106227 | -0.628124 | -5.348124 | Égypte | 0 |
44 | -0.235715 | -0.241328 | -0.395142 | -0.531423 | -0.559411 | El Salvador | 0 |
45 | -0.270894 | -0.221306 | 1.829016 | 1.351149 | 0.012147 | Émirats arabes unis | 2 |
46 | -0.154162 | -0.174154 | -0.480481 | -0.413386 | -0.590501 | Équateur | 0 |
47 | 0.315565 | 0.018777 | 0.612930 | 0.710172 | 0.002900 | Espagne | 0 |
48 | -0.282088 | -0.274076 | -0.368473 | 0.313987 | 0.776903 | Estonie | 0 |
49 | -0.287685 | -0.275333 | -0.469814 | -0.531275 | 1.159353 | Eswatini | 0 |
50 | 8.470433 | 1.817696 | 0.175565 | 2.339050 | -0.440713 | États-Unis d'Amérique | 1 |
51 | -0.284486 | 0.404824 | -0.475147 | -0.694827 | -0.426423 | Éthiopie | 0 |
52 | 1.486486 | 0.657635 | 0.724938 | -0.177466 | 2.481477 | Fédération de Russie | 0 |
53 | -0.280889 | -0.276932 | -0.464480 | -0.419145 | 0.220916 | Fidji | 0 |
54 | -0.238513 | -0.246993 | -0.395142 | 1.645351 | -0.073770 | Finlande | 0 |
55 | 0.409511 | 0.136332 | 2.218377 | 1.252540 | -0.265105 | France | 2 |
56 | -0.288484 | -0.269260 | -0.075119 | -0.361268 | -0.442271 | Gabon | 0 |
57 | -0.289284 | -0.268297 | -0.395142 | -0.696978 | -1.033369 | Gambie | 0 |
58 | -0.281288 | -0.256701 | -0.208462 | -0.524167 | 0.145203 | Géorgie | 0 |
59 | -0.266097 | -0.094454 | 0.324909 | -0.625518 | -0.193972 | Ghana | 0 |
60 | -0.191740 | -0.214314 | -0.059118 | 0.237168 | -0.373147 | Grèce | 0 |
61 | -0.289683 | -0.281884 | -0.443145 | -0.211503 | -0.154686 | Grenade | 0 |
62 | -0.196138 | -0.173317 | 0.207568 | -0.514723 | -0.019576 | Guatemala | 0 |
63 | -0.284886 | -0.204635 | -0.283134 | -0.687969 | 1.532102 | Guinée | 0 |
64 | -0.288884 | -0.270789 | -0.459146 | -0.693966 | 0.773620 | Guinée-Bissau | 0 |
65 | -0.277690 | -0.277592 | -0.480481 | -0.417926 | -0.162265 | Guyana | 0 |
66 | -0.286485 | -0.211646 | -0.005781 | -0.660712 | 0.944517 | Haïti | 0 |
67 | -0.212928 | -0.221682 | -0.416477 | -0.606067 | -0.259607 | Honduras | 0 |
68 | -0.092998 | -0.219738 | -0.171126 | 0.022098 | 0.755938 | Hongrie | 0 |
69 | -0.290083 | -0.278491 | -0.448479 | -0.612260 | -0.247488 | Îles Salomon | 0 |
70 | 1.127094 | 8.366275 | -0.480481 | -0.631349 | 1.028220 | Inde | 1 |
71 | 0.629783 | 1.427247 | -0.475147 | -0.535147 | 0.184044 | Indonésie | 0 |
72 | 0.579013 | 0.238614 | -0.448479 | -0.411834 | 0.015727 | Iran (République islamique d') | 0 |
73 | -0.251705 | -0.039981 | 2.026363 | -0.476321 | 0.459540 | Iraq | 0 |
74 | -0.246109 | -0.251891 | 0.047556 | 2.884669 | 0.665049 | Irlande | 2 |
75 | -0.286085 | -0.280440 | -0.469814 | 3.057962 | 1.744255 | Islande | 2 |
76 | -0.038629 | -0.229339 | -0.480481 | 1.476772 | 0.457636 | Israël | 0 |
77 | 0.235612 | 0.109398 | 0.036889 | 0.925214 | -0.286265 | Italie | 0 |
78 | -0.238913 | -0.263730 | -0.315136 | -0.471983 | -0.270339 | Jamaïque | 0 |
79 | 0.595403 | 0.541165 | 5.221256 | 1.250068 | -1.156528 | Japon | 2 |
80 | -0.206132 | -0.219377 | -0.139124 | -0.514961 | -0.768071 | Jordanie | 0 |
81 | -0.221723 | -0.165790 | 0.447585 | -0.259003 | 1.996590 | Kazakhstan | 0 |
82 | -0.276091 | 0.041866 | -0.480481 | -0.648073 | 0.097861 | Kenya | 0 |
83 | -0.287285 | -0.242610 | -0.347138 | -0.668039 | 0.668601 | Kirghizistan | 0 |
84 | -0.289683 | -0.281863 | -0.475147 | -0.647329 | -0.383020 | Kiribati | 0 |
85 | -0.267696 | -0.256395 | 0.250237 | 0.793050 | 0.169221 | Koweït | 0 |
86 | -0.289284 | -0.269088 | -0.400475 | -0.675350 | 0.116502 | Lesotho | 0 |
87 | -0.276891 | -0.269995 | -0.251132 | 0.068880 | 0.512720 | Lettonie | 0 |
88 | -0.264498 | -0.238542 | -0.411143 | -0.331076 | -0.644963 | Liban | 0 |
89 | -0.284087 | -0.252221 | -0.224463 | -0.701703 | -1.304296 | Libéria | 0 |
90 | -0.242911 | -0.264217 | -0.245798 | 0.128354 | 0.936173 | Lituanie | 0 |
91 | -0.290083 | -0.278776 | -0.421810 | 4.957593 | -0.455913 | Luxembourg | 2 |
92 | -0.289284 | -0.269149 | -0.267133 | -0.453494 | -0.089500 | Macédoine du Nord | 0 |
93 | -0.257702 | -0.117396 | -0.480481 | -0.705408 | 0.266736 | Madagascar | 0 |
94 | 0.399117 | -0.081641 | -0.117789 | -0.206052 | -0.296750 | Malaisie | 0 |
95 | -0.238113 | -0.168438 | -0.480481 | -0.705877 | 2.356332 | Malawi | 0 |
96 | -0.270894 | -0.162996 | -0.475147 | -0.689279 | -0.024911 | Mali | 0 |
97 | -0.288484 | -0.279771 | -0.432478 | 0.849194 | 1.289427 | Malte | 0 |
98 | 0.014540 | -0.052718 | -0.464480 | -0.573838 | -0.249967 | Maroc | 0 |
99 | -0.270894 | -0.274431 | -0.469814 | -0.194437 | 0.252368 | Maurice | 0 |
100 | -0.288084 | -0.254932 | -0.352472 | -0.650441 | -0.472754 | Mauritanie | 0 |
101 | 1.008763 | 0.523556 | 4.703886 | -0.255832 | -0.040050 | Mexique | 2 |
102 | -0.290083 | -0.262483 | -0.427144 | -0.543766 | -0.931141 | Mongolie | 0 |
103 | -0.288484 | -0.278546 | -0.437811 | -0.335215 | 0.672984 | Monténégro | 0 |
104 | -0.253305 | -0.097506 | -0.352472 | -0.708169 | 0.163476 | Mozambique | 0 |
105 | 0.374331 | 0.062291 | -0.464480 | -0.666334 | -0.788707 | Myanmar | 0 |
106 | -0.285686 | -0.267078 | -0.325803 | -0.456926 | 1.717146 | Namibie | 0 |
107 | -0.266897 | -0.104072 | -0.480481 | -0.677210 | 1.961835 | Népal | 0 |
108 | -0.232916 | -0.241350 | -0.448479 | -0.621163 | -0.603045 | Nicaragua | 0 |
109 | -0.282488 | -0.143033 | -0.464480 | -0.705281 | -0.444209 | Niger | 0 |
110 | -0.209730 | 0.950587 | -0.480481 | -0.630924 | -2.393414 | Nigéria | 0 |
111 | -0.249707 | -0.248382 | -0.469814 | 3.123101 | 0.091520 | Norvège | 2 |
112 | -0.289683 | -0.280810 | -0.432478 | 0.964564 | -0.356000 | Nouvelle-Calédonie | 0 |
113 | -0.200935 | -0.252222 | -0.475147 | 1.520200 | 0.290370 | Nouvelle-Zélande | 0 |
114 | -0.287285 | -0.252455 | 0.191566 | 0.043595 | -0.445533 | Oman | 0 |
115 | -0.264098 | -0.016633 | -0.480481 | -0.692503 | -1.019111 | Ouganda | 0 |
116 | 0.222020 | 1.060633 | -0.469814 | -0.657199 | 0.052716 | Pakistan | 0 |
117 | -0.210929 | -0.256068 | -0.373807 | 0.044407 | -0.132585 | Panama | 0 |
118 | -0.272094 | -0.238234 | -0.475147 | -0.440785 | 0.025676 | Paraguay | 0 |
119 | 0.149662 | -0.172630 | 2.762415 | 1.778805 | -0.045813 | Pays-Bas | 2 |
120 | 0.295577 | -0.079446 | -0.160458 | -0.387914 | 0.248941 | Pérou | 0 |
121 | 0.218422 | 0.396897 | 0.847613 | -0.571756 | -0.727776 | Philippines | 0 |
122 | 0.649771 | -0.037394 | -0.187127 | -0.020879 | 0.751013 | Pologne | 0 |
123 | -0.289683 | -0.280817 | -0.400475 | 0.350928 | -0.131277 | Polynésie française | 0 |
124 | -0.145767 | -0.216129 | -0.043117 | 0.370786 | 0.181110 | Portugal | 0 |
125 | -0.287285 | -0.252907 | -0.459146 | -0.708708 | 0.841751 | République centrafricaine | 0 |
126 | 0.044922 | 0.047521 | 0.250237 | 0.896903 | 0.229019 | République de Corée | 0 |
127 | -0.268496 | -0.256372 | -0.395142 | -0.609748 | 2.019493 | République de Moldova | 0 |
128 | -0.154562 | -0.214678 | -0.256465 | -0.341851 | -0.289839 | République dominicaine | 0 |
129 | -0.272893 | -0.118304 | -0.480481 | -0.696642 | -0.527985 | République populaire démocratique de Corée | 0 |
130 | -0.248108 | 0.070547 | -0.469814 | -0.680508 | -0.361119 | République-Unie de Tanzanie | 0 |
131 | -0.133374 | -0.155621 | 0.298241 | -0.179816 | 1.025725 | Roumanie | 0 |
132 | 0.435096 | 0.148510 | 3.674480 | 1.341082 | -1.195262 | Royaume-Uni de Grande-Bretagne et d'Irlande du... | 2 |
133 | -0.282488 | -0.205194 | -0.480481 | -0.692237 | -0.417178 | Rwanda | 0 |
134 | -0.289683 | -0.281431 | -0.427144 | -0.166310 | 0.000721 | Sainte-Lucie | 0 |
135 | -0.290083 | -0.282264 | -0.459146 | 0.249862 | -0.696049 | Saint-Kitts-et-Nevis | 0 |
136 | -0.290083 | -0.281891 | -0.432478 | -0.362166 | -0.677582 | Saint-Vincent-et-les Grenadines | 0 |
137 | -0.290083 | -0.281338 | -0.389808 | -0.515371 | -0.969404 | Samoa | 0 |
138 | -0.289683 | -0.281263 | -0.469814 | -0.638124 | 0.063087 | Sao Tomé-et-Principe | 0 |
139 | -0.259301 | -0.182980 | -0.480481 | -0.662031 | 0.111813 | Sénégal | 0 |
140 | -0.256103 | -0.225554 | -0.416477 | -0.410224 | 0.353605 | Serbie | 0 |
141 | -0.283287 | -0.234220 | -0.405809 | -0.706223 | -1.754104 | Sierra Leone | 0 |
142 | -0.261700 | -0.247403 | -0.144457 | 0.165544 | -0.021965 | Slovaquie | 0 |
143 | -0.261300 | -0.269185 | -0.373807 | 0.467424 | 0.301560 | Slovénie | 0 |
144 | -0.263299 | -0.018915 | -0.469814 | -0.578533 | 3.951687 | Soudan | 0 |
145 | -0.213328 | -0.146097 | -0.480481 | -0.519751 | -0.137084 | Sri Lanka | 0 |
146 | -0.227320 | -0.218607 | -0.032449 | 2.067419 | -0.342663 | Suède | 2 |
147 | -0.253704 | -0.227970 | -0.208462 | 3.537810 | -0.914057 | Suisse | 2 |
148 | -0.286085 | -0.278915 | -0.384474 | -0.427025 | 0.073157 | Suriname | 0 |
149 | -0.289284 | -0.225227 | -0.277800 | -0.688323 | -0.199037 | Tadjikistan | 0 |
150 | -0.287685 | -0.185581 | -0.475147 | -0.696344 | -1.419913 | Tchad | 0 |
151 | -0.224921 | -0.213851 | 0.138229 | 0.321117 | 0.699366 | Tchéquie | 0 |
152 | 0.379928 | 0.164548 | -0.469814 | -0.393896 | 0.529076 | Thaïlande | 0 |
153 | -0.289683 | -0.274568 | -0.421810 | -0.665219 | -1.568239 | Timor-Leste | 0 |
154 | -0.274092 | -0.232863 | -0.395142 | -0.689295 | -0.575355 | Togo | 0 |
155 | -0.265697 | -0.273659 | -0.357806 | 0.126482 | -0.502746 | Trinité-et-Tobago | 0 |
156 | -0.204933 | -0.208732 | -0.480481 | -0.553411 | -1.845050 | Tunisie | 0 |
157 | -0.282088 | -0.245402 | -0.432478 | -0.385770 | -0.115410 | Turkménistan | 0 |
158 | 0.586208 | 0.241474 | -0.464480 | -0.189121 | -1.387426 | Turquie | 0 |
159 | 0.194036 | 0.004824 | 0.164898 | -0.602577 | 2.138688 | Ukraine | 0 |
160 | -0.276891 | -0.260397 | -0.464480 | 0.226056 | 0.797751 | Uruguay | 0 |
161 | -0.289683 | -0.280756 | -0.459146 | -0.573850 | 0.027124 | Vanuatu | 0 |
162 | -0.050222 | -0.092638 | -0.347138 | -0.299678 | -2.876666 | Venezuela (République bolivarienne du) | 0 |
163 | 0.076904 | 0.328592 | 1.071629 | -0.610587 | 0.213288 | Viet Nam | 0 |
164 | -0.222922 | -0.102766 | -0.064452 | -0.693631 | -2.186556 | Yémen | 0 |
165 | -0.270495 | -0.173713 | -0.416477 | -0.653156 | 1.584045 | Zambie | 0 |
166 | -0.262499 | -0.190621 | -0.448479 | -0.652474 | -0.115589 | Zimbabwe | 0 |
#On modifie le label des clusters
#Cluster Pays en développement
if 'Indonésie' in df_cluster["pays"].loc[ df_cluster["cluster"] == 0].tolist():
df_cluster["cluster"].loc[ df_cluster["cluster"] == 0] = "Cluster 0 (ex. Indonésie)"
elif 'Indonésie' in df_cluster["pays"].loc[ df_cluster["cluster"] == 1].tolist():
df_cluster["cluster"].loc[ df_cluster["cluster"] == 1] = "Cluster 0 (ex. Indonésie)"
else:
df_cluster["cluster"].loc[ df_cluster["cluster"] == 2] = "Cluster 0 (ex. Indonésie)"
#Cluster France
if 'France' in df_cluster["pays"].loc[ df_cluster["cluster"] == 0].tolist():
df_cluster["cluster"].loc[ df_cluster["cluster"] == 0] = "Cluster 1 (ex. France)"
elif 'France' in df_cluster["pays"].loc[ df_cluster["cluster"] == 1].tolist():
df_cluster["cluster"].loc[ df_cluster["cluster"] == 1] = "Cluster 1 (ex. France)"
else:
df_cluster["cluster"].loc[ df_cluster["cluster"] == 2] = "Cluster 1 (ex. France)"
#Cluster USA
if "États-Unis d'Amérique" in df_cluster["pays"].loc[ df_cluster["cluster"] == 0].tolist():
df_cluster["cluster"].loc[ df_cluster["cluster"] == 0] = "Cluster 2 (ex. USA)"
elif "États-Unis d'Amérique" in df_cluster["pays"].loc[ df_cluster["cluster"] == 1].tolist():
df_cluster["cluster"].loc[ df_cluster["cluster"] == 1] = "Cluster 2 (ex. USA)"
else:
df_cluster["cluster"].loc[ df_cluster["cluster"] == 2] = "Cluster 2 (ex. USA)"
C:\Users\yacin\anaconda3\lib\site-packages\pandas\core\indexing.py:1732: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy self._setitem_single_block(indexer, value, name)
df_cluster=df_cluster.set_index("cluster")
df_cluster = df_cluster.groupby(by='cluster').mean()
#On remplace les index par les labels des variables correspondantes
list_col=df_analyse.columns
list_col_df=df_cluster.columns
list_col_df_labels=[]
for col in list_col_df:
label=list_col[col]
list_col_df_labels.append(label)
df_cluster.columns = list_col_df_labels
# Affichage
sns.clustermap(df_cluster, cmap='Greens')
plt.title('Heatmap par Clusters')
plt.show()
A l'aide des différentes méthodes, on a pu déterminer les différents clusters et composantes de cette analyse.
Trois clusters se distinguent représentés par deux axes principales: la Richesse et la Démographie.
La France qui appartient au cluster n°3, présente certaines caractéristiques similaires à d'autres Pays de ce cluster.
Ces Pays pourraient être des candidats sérieux pour notre développement à l'International (Voir table ci-dessous).
En enrichissant nos données d'autres variables (modèle PESTEL), il serait possible d'affiner notre analyse.
def bg_colour_col (col):
colour = '#ffff00'
return ['background-color: %s' % colour
if i==14 # color row `14`
else ''
for i,x in col.iteritems()]
data_merge_interpret = pd.merge(list_clust_france, df_analyse, left_on="pays", right_on="Pays", how="left", indicator=False)
data_merge_interpret.describe()
cluster | Production | Population | Importation | Valeur PIB ($ par hab.) | Croissance annuelle US$ PIB (%) | |
---|---|---|---|---|---|---|
count | 33.0 | 33.000000 | 33.000000 | 33.000000 | 33.000000 | 33.000000 |
mean | 3.0 | 756.333333 | 34462.986970 | 312.666667 | 42758.665290 | 6.422699 |
std | 0.0 | 814.014307 | 37695.736433 | 323.566904 | 25409.945640 | 3.987501 |
min | 3.0 | 0.000000 | 334.393000 | 0.000000 | 2365.521494 | -1.513432 |
25% | 3.0 | 96.000000 | 5732.274000 | 51.000000 | 29754.636332 | 4.646660 |
50% | 3.0 | 463.000000 | 11419.748000 | 182.000000 | 43943.484628 | 6.174548 |
75% | 3.0 | 1315.000000 | 57009.756000 | 506.000000 | 54621.345824 | 7.907523 |
max | 3.0 | 3249.000000 | 127502.725000 | 1069.000000 | 111017.182246 | 18.147254 |
data_merge_interpret.style.apply(bg_colour_col)
cluster | pays | Production | Population | Importation | Valeur PIB ($ par hab.) | Croissance annuelle US$ PIB (%) | |
---|---|---|---|---|---|---|---|
0 | 3 | Afrique du Sud | 1667.000000 | 57009.756000 | 514.000000 | 6121.876572 | 16.114973 |
1 | 3 | Allemagne | 1514.000000 | 82658.409000 | 842.000000 | 44651.829102 | 5.842947 |
2 | 3 | Arabie saoudite | 616.000000 | 33101.179000 | 722.000000 | 20802.464299 | 4.646660 |
3 | 3 | Australie | 1269.000000 | 24584.620000 | 16.000000 | 57628.863849 | 6.726787 |
4 | 3 | Autriche | 148.000000 | 8819.901000 | 110.000000 | 47309.051637 | 4.615601 |
5 | 3 | Belgique | 463.000000 | 11419.748000 | 338.000000 | 44025.903247 | 5.076098 |
6 | 3 | Canada | 1417.000000 | 36732.095000 | 182.000000 | 44906.748920 | 6.909561 |
7 | 3 | Chine - RAS de Hong-Kong | 24.000000 | 7306.322000 | 907.000000 | 46705.027813 | 5.445126 |
8 | 3 | Chine - RAS de Macao | 3.000000 | 622.585000 | 23.000000 | 81043.968656 | 10.161502 |
9 | 3 | Cuba | 29.000000 | 11339.254000 | 312.000000 | 8541.214440 | 5.959893 |
10 | 3 | Danemark | 173.000000 | 5732.274000 | 133.000000 | 57938.797728 | 5.682485 |
11 | 3 | Émirats arabes unis | 48.000000 | 9487.203000 | 433.000000 | 40644.804043 | 6.562207 |
12 | 3 | Espagne | 1515.000000 | 46647.428000 | 205.000000 | 28137.441564 | 6.500360 |
13 | 3 | Finlande | 129.000000 | 5511.371000 | 16.000000 | 46385.550876 | 5.987558 |
14 | 3 | France | 1750.000000 | 64842.509000 | 506.000000 | 38720.645922 | 4.707836 |
15 | 3 | Iraq | 96.000000 | 37552.781000 | 470.000000 | 4985.453728 | 9.554553 |
16 | 3 | Irlande | 110.000000 | 4753.279000 | 99.000000 | 70568.302444 | 10.929081 |
17 | 3 | Islande | 10.000000 | 334.393000 | 2.000000 | 73949.769216 | 18.147254 |
18 | 3 | Israël | 629.000000 | 8243.848000 | 0.000000 | 43096.069697 | 9.541818 |
19 | 3 | Italie | 1315.000000 | 60673.701000 | 97.000000 | 32333.550863 | 4.566307 |
20 | 3 | Japon | 2215.000000 | 127502.725000 | 1069.000000 | 38672.407740 | -1.254368 |
21 | 3 | Koweït | 56.000000 | 4056.099000 | 137.000000 | 29754.636332 | 7.612780 |
22 | 3 | Luxembourg | 0.000000 | 591.910000 | 11.000000 | 111017.182246 | 3.431634 |
23 | 3 | Mexique | 3249.000000 | 124777.324000 | 972.000000 | 9287.841557 | 6.213095 |
24 | 3 | Norvège | 101.000000 | 5296.326000 | 2.000000 | 75220.814442 | 7.093090 |
25 | 3 | Nouvelle-Zélande | 223.000000 | 4702.034000 | 1.000000 | 43943.484628 | 8.423076 |
26 | 3 | Pays-Bas | 1100.000000 | 17021.347000 | 608.000000 | 48989.638816 | 6.174548 |
27 | 3 | Philippines | 1272.000000 | 105172.925000 | 249.000000 | 3123.244296 | 1.613303 |
28 | 3 | République de Corée | 838.000000 | 51096.415000 | 137.000000 | 31781.123320 | 8.012736 |
29 | 3 | Royaume-Uni de Grande-Bretagne et d'Irlande du Nord | 1814.000000 | 66727.461000 | 779.000000 | 40448.365256 | -1.513432 |
30 | 3 | Suède | 157.000000 | 9904.896000 | 84.000000 | 54621.345824 | 4.189096 |
31 | 3 | Suisse | 91.000000 | 8455.804000 | 51.000000 | 83313.013992 | 0.367379 |
32 | 3 | Viet Nam | 918.000000 | 94600.648000 | 291.000000 | 2365.521494 | 7.907523 |
Affinons notre cluster en sélectionnant:
#Importation inferieur à la médiane
data_merge_interpret = data_merge_interpret[data_merge_interpret["Importation"] < 182]
data_merge_interpret
cluster | pays | Production | Population | Importation | Valeur PIB ($ par hab.) | Croissance annuelle US$ PIB (%) | |
---|---|---|---|---|---|---|---|
3 | 3 | Australie | 1269.0 | 24584.620 | 16.0 | 57628.863849 | 6.726787 |
4 | 3 | Autriche | 148.0 | 8819.901 | 110.0 | 47309.051637 | 4.615601 |
8 | 3 | Chine - RAS de Macao | 3.0 | 622.585 | 23.0 | 81043.968656 | 10.161502 |
10 | 3 | Danemark | 173.0 | 5732.274 | 133.0 | 57938.797728 | 5.682485 |
13 | 3 | Finlande | 129.0 | 5511.371 | 16.0 | 46385.550876 | 5.987558 |
16 | 3 | Irlande | 110.0 | 4753.279 | 99.0 | 70568.302444 | 10.929081 |
17 | 3 | Islande | 10.0 | 334.393 | 2.0 | 73949.769216 | 18.147254 |
18 | 3 | Israël | 629.0 | 8243.848 | 0.0 | 43096.069697 | 9.541818 |
19 | 3 | Italie | 1315.0 | 60673.701 | 97.0 | 32333.550863 | 4.566307 |
21 | 3 | Koweït | 56.0 | 4056.099 | 137.0 | 29754.636332 | 7.612780 |
22 | 3 | Luxembourg | 0.0 | 591.910 | 11.0 | 111017.182246 | 3.431634 |
24 | 3 | Norvège | 101.0 | 5296.326 | 2.0 | 75220.814442 | 7.093090 |
25 | 3 | Nouvelle-Zélande | 223.0 | 4702.034 | 1.0 | 43943.484628 | 8.423076 |
28 | 3 | République de Corée | 838.0 | 51096.415 | 137.0 | 31781.123320 | 8.012736 |
30 | 3 | Suède | 157.0 | 9904.896 | 84.0 | 54621.345824 | 4.189096 |
31 | 3 | Suisse | 91.0 | 8455.804 | 51.0 | 83313.013992 | 0.367379 |
#Production inferieur à la médiane
data_merge_interpret = data_merge_interpret[data_merge_interpret["Production"] < 463]
data_merge_interpret
cluster | pays | Production | Population | Importation | Valeur PIB ($ par hab.) | Croissance annuelle US$ PIB (%) | |
---|---|---|---|---|---|---|---|
4 | 3 | Autriche | 148.0 | 8819.901 | 110.0 | 47309.051637 | 4.615601 |
8 | 3 | Chine - RAS de Macao | 3.0 | 622.585 | 23.0 | 81043.968656 | 10.161502 |
10 | 3 | Danemark | 173.0 | 5732.274 | 133.0 | 57938.797728 | 5.682485 |
13 | 3 | Finlande | 129.0 | 5511.371 | 16.0 | 46385.550876 | 5.987558 |
16 | 3 | Irlande | 110.0 | 4753.279 | 99.0 | 70568.302444 | 10.929081 |
17 | 3 | Islande | 10.0 | 334.393 | 2.0 | 73949.769216 | 18.147254 |
21 | 3 | Koweït | 56.0 | 4056.099 | 137.0 | 29754.636332 | 7.612780 |
22 | 3 | Luxembourg | 0.0 | 591.910 | 11.0 | 111017.182246 | 3.431634 |
24 | 3 | Norvège | 101.0 | 5296.326 | 2.0 | 75220.814442 | 7.093090 |
25 | 3 | Nouvelle-Zélande | 223.0 | 4702.034 | 1.0 | 43943.484628 | 8.423076 |
30 | 3 | Suède | 157.0 | 9904.896 | 84.0 | 54621.345824 | 4.189096 |
31 | 3 | Suisse | 91.0 | 8455.804 | 51.0 | 83313.013992 | 0.367379 |
#Pays d'Europe
data_merge_interpret = data_merge_interpret[~data_merge_interpret["pays"].isin(["Koweït", "Nouvelle-Zélande", "Chine - RAS de Macao"])]
data_merge_interpret
cluster | pays | Production | Population | Importation | Valeur PIB ($ par hab.) | Croissance annuelle US$ PIB (%) | |
---|---|---|---|---|---|---|---|
4 | 3 | Autriche | 148.0 | 8819.901 | 110.0 | 47309.051637 | 4.615601 |
10 | 3 | Danemark | 173.0 | 5732.274 | 133.0 | 57938.797728 | 5.682485 |
13 | 3 | Finlande | 129.0 | 5511.371 | 16.0 | 46385.550876 | 5.987558 |
16 | 3 | Irlande | 110.0 | 4753.279 | 99.0 | 70568.302444 | 10.929081 |
17 | 3 | Islande | 10.0 | 334.393 | 2.0 | 73949.769216 | 18.147254 |
22 | 3 | Luxembourg | 0.0 | 591.910 | 11.0 | 111017.182246 | 3.431634 |
24 | 3 | Norvège | 101.0 | 5296.326 | 2.0 | 75220.814442 | 7.093090 |
30 | 3 | Suède | 157.0 | 9904.896 | 84.0 | 54621.345824 | 4.189096 |
31 | 3 | Suisse | 91.0 | 8455.804 | 51.0 | 83313.013992 | 0.367379 |
#PIB superieur à la médiane
data_merge_interpret = data_merge_interpret[data_merge_interpret["Valeur PIB ($ par hab.)"] > 43943.484628]
data_merge_interpret
cluster | pays | Production | Population | Importation | Valeur PIB ($ par hab.) | Croissance annuelle US$ PIB (%) | |
---|---|---|---|---|---|---|---|
4 | 3 | Autriche | 148.0 | 8819.901 | 110.0 | 47309.051637 | 4.615601 |
10 | 3 | Danemark | 173.0 | 5732.274 | 133.0 | 57938.797728 | 5.682485 |
13 | 3 | Finlande | 129.0 | 5511.371 | 16.0 | 46385.550876 | 5.987558 |
16 | 3 | Irlande | 110.0 | 4753.279 | 99.0 | 70568.302444 | 10.929081 |
17 | 3 | Islande | 10.0 | 334.393 | 2.0 | 73949.769216 | 18.147254 |
22 | 3 | Luxembourg | 0.0 | 591.910 | 11.0 | 111017.182246 | 3.431634 |
24 | 3 | Norvège | 101.0 | 5296.326 | 2.0 | 75220.814442 | 7.093090 |
30 | 3 | Suède | 157.0 | 9904.896 | 84.0 | 54621.345824 | 4.189096 |
31 | 3 | Suisse | 91.0 | 8455.804 | 51.0 | 83313.013992 | 0.367379 |
data_merge_interpret = data_merge_interpret.sort_values("Valeur PIB ($ par hab.)")
data_merge_interpret
cluster | pays | Production | Population | Importation | Valeur PIB ($ par hab.) | Croissance annuelle US$ PIB (%) | |
---|---|---|---|---|---|---|---|
13 | 3 | Finlande | 129.0 | 5511.371 | 16.0 | 46385.550876 | 5.987558 |
4 | 3 | Autriche | 148.0 | 8819.901 | 110.0 | 47309.051637 | 4.615601 |
30 | 3 | Suède | 157.0 | 9904.896 | 84.0 | 54621.345824 | 4.189096 |
10 | 3 | Danemark | 173.0 | 5732.274 | 133.0 | 57938.797728 | 5.682485 |
16 | 3 | Irlande | 110.0 | 4753.279 | 99.0 | 70568.302444 | 10.929081 |
17 | 3 | Islande | 10.0 | 334.393 | 2.0 | 73949.769216 | 18.147254 |
24 | 3 | Norvège | 101.0 | 5296.326 | 2.0 | 75220.814442 | 7.093090 |
31 | 3 | Suisse | 91.0 | 8455.804 | 51.0 | 83313.013992 | 0.367379 |
22 | 3 | Luxembourg | 0.0 | 591.910 | 11.0 | 111017.182246 | 3.431634 |
La liste des 9 Pays ci-dessous présente la liste des Pays candidats à notre développement à l'International
data_merge_interpret["pays"]
13 Finlande 4 Autriche 30 Suède 10 Danemark 16 Irlande 17 Islande 24 Norvège 31 Suisse 22 Luxembourg Name: pays, dtype: object