P9 2nd part¶

Clustering¶

                 * La poule qui chante * 

Sommaire

I.a Recuperation du dataframe traité

I.b Application de l'algorithme de clustering CAH

I.c Application de l'Algorithme K-means

I.d PCA et visualisation des centroïds k-means

II.a Conclusion - Visualisation des clusters

II.b Conclusion - Recommandation

Nos données traitées, notre fichier est prêt pour le clustering. Nous allons effectués deux types d'analyse en clusterings pour avoir différents choix de groupement.

  • CAH

  • K-mean

In [136]:
import pandas as pd
import numpy as np

import matplotlib.pyplot as plt

from sklearn import datasets
from sklearn.cluster import KMeans
pd.__version__
Out[136]:
'1.5.3'

I.a Recuperation du dataframe traité¶

In [2]:
df = pd.read_csv('df_P9.csv')
df
Out[2]:
Zone Poulet_dispo(kg/pers/an) Import_personne(kg) Export_personne(kg) Prod_personne(kg)
0 Afghanistan 1.53 0.798984 0 0.771432
1 Afrique du Sud 35.69 9.016001 1 29.240609
2 Albanie 16.36 13.175372 0 4.507364
3 Algérie 6.38 0.048322 0 6.644247
4 Allemagne 19.47 10.186501 7 18.316346
... ... ... ... ... ...
150 Venezuela (République bolivarienne du) 20.28 0.850268 0 20.406439
151 Viet Nam 12.33 3.076089 0 9.703950
152 Yémen 8.53 2.802246 0 6.035606
153 Zambie 3.42 0.712014 0 2.907391
154 Zimbabwe 4.68 0.421449 0 4.846665

155 rows × 5 columns

In [3]:
df = df.set_index('Zone')
names = df.index
#names = []
names
Out[3]:
Index(['Afghanistan', 'Afrique du Sud', 'Albanie', 'Algérie', 'Allemagne',
       'Angola', 'Arabie saoudite', 'Argentine', 'Arménie', 'Australie',
       ...
       'Tunisie', 'Turkménistan', 'Turquie', 'Ukraine', 'Uruguay',
       'Venezuela (République bolivarienne du)', 'Viet Nam', 'Yémen', 'Zambie',
       'Zimbabwe'],
      dtype='object', name='Zone', length=155)
In [4]:
names
Out[4]:
Index(['Afghanistan', 'Afrique du Sud', 'Albanie', 'Algérie', 'Allemagne',
       'Angola', 'Arabie saoudite', 'Argentine', 'Arménie', 'Australie',
       ...
       'Tunisie', 'Turkménistan', 'Turquie', 'Ukraine', 'Uruguay',
       'Venezuela (République bolivarienne du)', 'Viet Nam', 'Yémen', 'Zambie',
       'Zimbabwe'],
      dtype='object', name='Zone', length=155)
In [5]:
cols = ["Poulet_dispo(kg/pers/an)","Import_personne(kg)","Export_personne(kg)","Prod_personne(kg)"]
df = df[cols]
df.head()
Out[5]:
Poulet_dispo(kg/pers/an) Import_personne(kg) Export_personne(kg) Prod_personne(kg)
Zone
Afghanistan 1.53 0.798984 0 0.771432
Afrique du Sud 35.69 9.016001 1 29.240609
Albanie 16.36 13.175372 0 4.507364
Algérie 6.38 0.048322 0 6.644247
Allemagne 19.47 10.186501 7 18.316346

I.b Application de l'algorithme de clustering CAH¶

Classification ascendante hierarchique¶
In [6]:
#extraire les valeurs numériques du dataset
X = df.values
X[:5]
Out[6]:
array([[ 1.53      ,  0.79898363,  0.        ,  0.77143247],
       [35.69      ,  9.0160007 ,  1.        , 29.24060927],
       [16.36      , 13.17537218,  0.        ,  4.50736417],
       [ 6.38      ,  0.0483218 ,  0.        ,  6.64424712],
       [19.47      , 10.18650141,  7.        , 18.31634577]])
In [7]:
# + module pandas, matplotlib, sklearn,
#importer les packages de CAH
from scipy.cluster.hierarchy import dendrogram, linkage
import scipy.cluster.hierarchy as sch

Z = linkage(X, method="ward")
labels = df.index

fig, ax = plt.subplots’

_ = dendrogram(Z,) #p=5, truncate_mode="lastp", ax=ax)

plt.title("Classification ascendante hierarchique")
plt.xlabel("Groupement de pays.")
plt.ylabel("Distance.")
plt.show()

On peut observer 3-4 clusters dégagé par l'algorithme de classification hierarchique.

In [100]:
# autre commande avec les noms labels 
import scipy.cluster.hierarchy as sch

plt.figure(figsize = (25,16))#(- largeur,- hauteur) 


dendrogram = sch.dendrogram(sch.linkage(X, method='ward'), labels = df.index)
plt.axhline(y=500, color='r', linestyle='--')

ax = plt.gca()
labels = ax.get_xmajorticklabels()
for label in labels:
    label.set_fontsize(14) 




plt.show()
In [8]:
# lancer l'algorithme CAH 
from sklearn.cluster import AgglomerativeClustering
# utiliser  AgglomerativeClustering pour determiner le contenu des clusters.
agg_clustering = AgglomerativeClustering(n_clusters=4)
In [9]:
#appliquer l'algorithme 
agg_clustering.fit(df)
Out[9]:
AgglomerativeClustering(n_clusters=4)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
AgglomerativeClustering(n_clusters=4)
In [10]:
#creer une colonne pour mettre les clusters generés
df['CAH_label'] = agg_clustering.labels_
df.head(4)
Out[10]:
Poulet_dispo(kg/pers/an) Import_personne(kg) Export_personne(kg) Prod_personne(kg) CAH_label
Zone
Afghanistan 1.53 0.798984 0 0.771432 1
Afrique du Sud 35.69 9.016001 1 29.240609 0
Albanie 16.36 13.175372 0 4.507364 1
Algérie 6.38 0.048322 0 6.644247 1
In [ ]:
 
In [74]:
# comprendre la caracterisation des clusters
df.groupby(['CAH_label']).mean()
Out[74]:
Poulet_dispo(kg/pers/an) Import_personne(kg) Export_personne(kg) Prod_personne(kg) K_cluster
CAH_label
0 24.703636 9.915576 2.927273 20.574753 0.036364
1 7.585205 4.929699 0.452055 3.668607 0.000000
2 28.830000 63.152257 76.666667 36.151120 2.000000
3 37.175417 5.475376 8.083333 47.724288 1.000000
In [ ]:
#+petit heatmap
#+radar plot sns ou matplotlib 

#Pour représenter les clusters 
In [137]:
#créer les liste de clusters #fonctionne avec la bibliotheque 'scipy.cluster.hierarchy' 
for i in range(4):
    print(f'Cluster {i}')
    print(df[df.CAH_label == i].index.tolist())
    print()
Cluster 0
['Afrique du Sud', 'Allemagne', 'Arabie saoudite', 'Autriche', 'Bahamas', 'Bosnie-Herzégovine', 'Bulgarie', 'Chine - RAS de Macao', 'Chine, Taiwan Province de', 'Chypre', 'Colombie', 'Costa Rica', 'Croatie', 'El Salvador', 'Émirats arabes unis', 'Équateur', 'Espagne', 'Estonie', 'Fédération de Russie', 'Fidji', 'Finlande', 'France', 'Gabon', 'Grèce', 'Guatemala', 'Honduras', "Iran (République islamique d')", 'Islande', 'Italie', 'Japon', 'Jordanie', 'Kazakhstan', 'Koweït', 'Lettonie', 'Maroc', 'Mexique', 'Myanmar', 'Nicaragua', 'Norvège', 'Portugal', 'République de Corée', 'République de Moldova', 'République dominicaine', 'Roumanie', "Royaume-Uni de Grande-Bretagne et d'Irlande du Nord", 'Slovaquie', 'Suède', 'Suisse', 'Suriname', 'Tchéquie', 'Thaïlande', 'Tunisie', 'Turquie', 'Ukraine', 'Venezuela (République bolivarienne du)']

Cluster 1
['Afghanistan', 'Albanie', 'Algérie', 'Angola', 'Arménie', 'Azerbaïdjan', 'Bangladesh', 'Bénin', 'Botswana', 'Burkina Faso', 'Cabo Verde', 'Cambodge', 'Cameroun', 'Chine, continentale', 'Congo', "Côte d'Ivoire", 'Cuba', 'Égypte', 'Eswatini', 'Éthiopie', 'Gambie', 'Géorgie', 'Ghana', 'Guinée', 'Guinée-Bissau', 'Haïti', 'Îles Salomon', 'Inde', 'Indonésie', 'Iraq', 'Kenya', 'Kirghizistan', 'Lesotho', 'Liban', 'Libéria', 'Luxembourg', 'Macédoine du Nord', 'Madagascar', 'Malawi', 'Mali', 'Malte', 'Mauritanie', 'Mongolie', 'Monténégro', 'Mozambique', 'Namibie', 'Népal', 'Niger', 'Nigéria', 'Oman', 'Ouganda', 'Pakistan', 'Paraguay', 'Philippines', 'République centrafricaine', 'République populaire démocratique de Corée', 'République-Unie de Tanzanie', 'Rwanda', 'Sénégal', 'Serbie', 'Sierra Leone', 'Soudan', 'Sri Lanka', 'Tadjikistan', 'Tchad', 'Timor-Leste', 'Togo', 'Turkménistan', 'Uruguay', 'Viet Nam', 'Yémen', 'Zambie', 'Zimbabwe']

Cluster 2
['Belgique', 'Chine - RAS de Hong-Kong', 'Pays-Bas']

Cluster 3
['Argentine', 'Australie', 'Bélarus', 'Belize', 'Bolivie (État plurinational de)', 'Brésil', 'Canada', 'Chili', 'Danemark', "États-Unis d'Amérique", 'Guyana', 'Hongrie', 'Irlande', 'Israël', 'Jamaïque', 'Lituanie', 'Malaisie', 'Maurice', 'Nouvelle-Zélande', 'Panama', 'Pérou', 'Pologne', 'Slovénie', 'Trinité-et-Tobago']

I.c Application de l'Algorithme K-means¶

Bibliotheque necessaire deja importée.

import pandas as pd import numpy as np

import seaborn as sns import matplotlib.pyplot as plt

importer les packages de clustering

In [111]:
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import warnings
# Ignorer tous les avertissements
warnings.filterwarnings('ignore')
In [112]:
Xk = df.copy()
Xk
Out[112]:
Poulet_dispo(kg/pers/an) Import_personne(kg) Export_personne(kg) Prod_personne(kg) CAH_label K_cluster
Zone
Afghanistan 1.53 0.798984 0 0.771432 1 0
Afrique du Sud 35.69 9.016001 1 29.240609 0 0
Albanie 16.36 13.175372 0 4.507364 1 0
Algérie 6.38 0.048322 0 6.644247 1 0
Allemagne 19.47 10.186501 7 18.316346 0 0
In [ ]:
 
In [117]:
#extraction de X
#centrer-reduire
scaler = StandardScaler()
x_scaled = scaler.fit_transform(Xk)
print(f"{x_scaled[:3]}")
print(f"{type(x_scaled)}")
print(f"{len(x_scaled)}")
[[-1.21925861 -0.51861535 -0.33737585 -0.94417907  0.02589878 -0.44478778]
 [ 1.21322197  0.08064001 -0.25275893  0.70022494 -0.97767912 -0.44478778]
 [-0.16323733  0.38397705 -0.33737585 -0.72838846  0.02589878 -0.44478778]]
<class 'numpy.ndarray'>
155
In [119]:
x_scaled.shape
Out[119]:
(155, 6)
In [120]:
x_scaled
Out[120]:
array([[-1.21925861e+00, -5.18615353e-01, -3.37375853e-01,
        -9.44179069e-01,  2.58987846e-02, -4.44787777e-01],
       [ 1.21322197e+00,  8.06400080e-02, -2.52758932e-01,
         7.00224939e-01, -9.77679119e-01, -4.44787777e-01],
       [-1.63237327e-01,  3.83977050e-01, -3.37375853e-01,
        -7.28388458e-01,  2.58987846e-02, -4.44787777e-01],
       [-8.73897637e-01, -5.73360052e-01, -3.37375853e-01,
        -6.04960271e-01,  2.58987846e-02, -4.44787777e-01],
       [ 5.82209458e-02,  1.66002959e-01,  2.54942594e-01,
         6.92301328e-02, -9.77679119e-01, -4.44787777e-01],
       [-5.76246325e-01,  1.00627875e-01, -3.37375853e-01,
        -9.07375527e-01,  2.58987846e-02, -4.44787777e-01],
       [ 1.75939077e+00,  1.01382760e+00, -3.37375853e-01,
         8.61692703e-02, -9.77679119e-01, -4.44787777e-01],
       [ 1.67963730e+00, -5.63605380e-01,  1.09183124e-03,
         1.85216660e+00,  2.03305459e+00,  1.70965302e+00],
       [-1.84599861e-01,  2.89900746e-01, -3.37375853e-01,
        -7.72977226e-01,  2.58987846e-02, -4.44787777e-01],
       [ 2.06487501e+00, -5.29421197e-01, -2.52758932e-01,
         1.99274123e+00,  2.03305459e+00,  1.70965302e+00],
       [-3.22137830e-02,  3.32666191e-01,  3.39559515e-01,
        -1.94970145e-02, -9.77679119e-01, -4.44787777e-01],
       [-3.94664783e-01, -3.76883322e-01, -3.37375853e-01,
        -3.78586960e-01,  2.58987846e-02, -4.44787777e-01],
       [ 1.74586116e+00,  4.00795656e+00,  2.62421638e+00,
        -8.09168594e-02, -9.77679119e-01,  3.86409382e+00],
       [-1.22139486e+00, -5.76884091e-01, -3.37375853e-01,
        -8.98670256e-01,  2.58987846e-02, -4.44787777e-01],
       [ 6.64204837e-01, -4.14824549e-01,  1.01649488e+00,
         1.84116946e+00,  2.03305459e+00,  1.70965302e+00],
       [-4.27420669e-01,  1.58164506e+00,  4.48578864e+00,
         1.35310701e+00,  1.02947669e+00,  3.86409382e+00],
       [ 5.01137492e-01, -5.76884091e-01, -3.37375853e-01,
         2.08553698e+00,  2.03305459e+00,  1.70965302e+00],
       [-3.02805885e-01,  2.25805485e-01, -3.37375853e-01,
        -8.95701697e-01,  2.58987846e-02, -4.44787777e-01],
       [ 1.23529659e+00, -5.70368455e-01, -3.37375853e-01,
         1.76181489e+00,  2.03305459e+00,  1.70965302e+00],
       [-1.39026455e-01, -3.59285903e-01, -1.68142011e-01,
         6.25485924e-02, -9.77679119e-01, -4.44787777e-01],
       [-1.08681090e+00, -4.77665138e-01, -3.37375853e-01,
        -8.57765424e-01,  2.58987846e-02, -4.44787777e-01],
       [ 2.09193422e+00, -5.75831396e-01,  1.35496257e+00,
         2.95798235e+00,  2.03305459e+00,  1.70965302e+00],
       [ 2.42650826e-01,  5.32070276e-01,  1.70325673e-01,
        -1.18556708e-01, -9.77679119e-01, -4.44787777e-01],
       [-1.16656436e+00, -5.76884091e-01, -3.37375853e-01,
        -8.50303502e-01,  2.58987846e-02, -4.44787777e-01],
       [-7.35146828e-02,  1.05129484e+00,  1.70325673e-01,
        -8.81275212e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.16157977e+00, -5.31330519e-01, -3.37375853e-01,
        -8.87715579e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.10318884e+00, -5.76884091e-01, -3.37375853e-01,
        -7.98286826e-01,  2.58987846e-02, -4.44787777e-01],
       [ 1.45034610e+00, -2.15537945e-01,  1.09183124e-03,
         1.23948079e+00,  2.03305459e+00,  1.70965302e+00],
       [ 1.26093163e+00,  3.51170312e-02,  1.70325673e-01,
         1.23783253e+00,  2.03305459e+00,  1.70965302e+00],
       [ 2.48215651e+00,  8.47640143e+00,  7.27814704e+00,
        -7.99003281e-01,  1.02947669e+00,  3.86409382e+00],
       [ 1.12634766e+00,  2.11729785e+00, -3.37375853e-01,
        -7.10410104e-01, -9.77679119e-01, -4.44787777e-01],
       [-4.50207372e-01, -5.53686898e-01, -3.37375853e-01,
        -2.47491498e-01,  2.58987846e-02, -4.44787777e-01],
       [ 1.03377668e+00, -8.09294546e-02, -3.37375853e-01,
         6.02003619e-01, -9.77679119e-01, -4.44787777e-01],
       [ 4.57700338e-01,  2.88606386e-01, -3.37375853e-01,
         2.35343299e-01, -9.77679119e-01, -4.44787777e-01],
       [ 9.49750713e-01, -4.60579701e-01, -3.37375853e-01,
         8.58293110e-01, -9.77679119e-01, -4.44787777e-01],
       [ 2.04910348e-01,  9.07174728e-01, -3.37375853e-01,
        -9.09623969e-01,  2.58987846e-02, -4.44787777e-01],
       [ 5.60240503e-01, -3.26419985e-01, -3.37375853e-01,
         5.63235094e-01, -9.77679119e-01, -4.44787777e-01],
       [-1.14805016e+00, -5.55994039e-01, -3.37375853e-01,
        -8.51647797e-01,  2.58987846e-02, -4.44787777e-01],
       [-5.61292551e-01, -1.58441423e-01,  1.09183124e-03,
        -1.46391830e-01, -9.77679119e-01, -4.44787777e-01],
       [ 3.60856849e-01,  1.42974844e+00,  1.70325673e-01,
        -8.41015005e-01,  2.58987846e-02, -4.44787777e-01],
       [ 7.35413285e-01,  1.11520193e+00,  1.69343025e+00,
         7.54484655e-01,  2.03305459e+00,  1.70965302e+00],
       [-4.05346050e-01, -4.93703586e-01, -3.37375853e-01,
        -3.19151381e-01,  2.58987846e-02, -4.44787777e-01],
       [ 1.26581056e-01, -3.94223757e-01, -3.37375853e-01,
         2.40961988e-01, -9.77679119e-01, -4.44787777e-01],
       [ 1.76722370e+00,  2.75160733e+00,  4.24176436e-01,
        -6.96499686e-01, -9.77679119e-01, -4.44787777e-01],
       [ 4.68275942e-02, -5.76884091e-01, -3.37375853e-01,
         1.81251519e-01, -9.77679119e-01, -4.44787777e-01],
       [ 8.35817197e-01, -2.56387145e-01,  1.09183124e-03,
         8.87200617e-01, -9.77679119e-01, -4.44787777e-01],
       [ 1.85684068e-01,  5.83879680e-01,  3.39559515e-01,
        -1.13168572e-01, -9.77679119e-01, -4.44787777e-01],
       [-8.68200961e-01, -4.47210812e-01, -3.37375853e-01,
        -6.80626367e-01,  2.58987846e-02, -4.44787777e-01],
       [ 2.63667884e+00, -5.49290626e-01,  5.93410278e-01,
         2.90492810e+00,  2.03305459e+00,  1.70965302e+00],
       [-1.31895044e+00, -5.76198672e-01, -3.37375853e-01,
        -9.81137551e-01,  2.58987846e-02, -4.44787777e-01],
       [ 8.77830181e-01, -4.63630130e-01, -3.37375853e-01,
         7.75084892e-01, -9.77679119e-01, -4.44787777e-01],
       [ 6.67053175e-01, -3.27543974e-01, -3.37375853e-01,
         5.25292818e-01, -9.77679119e-01, -4.44787777e-01],
       [ 7.66294781e-03, -3.65165949e-01, -1.68142011e-01,
         3.63221828e-01, -9.77679119e-01, -4.44787777e-01],
       [ 3.02465922e-01, -7.78427667e-03,  2.54942594e-01,
         5.70139350e-01, -9.77679119e-01, -4.44787777e-01],
       [ 7.60336242e-01,  2.10740015e+00, -3.37375853e-01,
        -8.76842643e-01, -9.77679119e-01, -4.44787777e-01],
       [-1.07684171e+00, -4.98218815e-02,  1.09183124e-03,
        -9.36557225e-01,  2.58987846e-02, -4.44787777e-01],
       [-2.40854535e-01,  3.50933548e-01, -2.52758932e-01,
        -6.71743693e-01,  2.58987846e-02, -4.44787777e-01],
       [-8.12658372e-01, -1.98736388e-01, -3.37375853e-01,
        -8.69730904e-01,  2.58987846e-02, -4.44787777e-01],
       [-2.37294113e-01, -3.17887868e-02, -1.68142011e-01,
         3.55624664e-01, -9.77679119e-01, -4.44787777e-01],
       [ 1.37262323e-01, -2.07030041e-02, -3.37375853e-01,
        -1.86265004e-01, -9.77679119e-01, -4.44787777e-01],
       [-1.03767707e+00, -3.53279112e-01, -3.37375853e-01,
        -9.26513518e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.17439729e+00, -4.17315618e-01, -2.52758932e-01,
        -8.93951661e-01,  2.58987846e-02, -4.44787777e-01],
       [ 1.40192436e+00, -5.76884091e-01, -3.37375853e-01,
         1.32103491e+00,  2.03305459e+00,  1.70965302e+00],
       [-6.93740264e-01,  1.41218298e-02, -3.37375853e-01,
        -9.41402905e-01,  2.58987846e-02, -4.44787777e-01],
       [ 2.19152038e-01, -4.84070250e-01, -3.37375853e-01,
         1.93554170e-01, -9.77679119e-01, -4.44787777e-01],
       [ 4.71229944e-01, -1.42152909e-01,  1.43957949e+00,
         1.93794474e+00,  2.03305459e+00,  1.70965302e+00],
       [-1.01132994e+00,  1.11079164e-01, -3.37375853e-01,
        -9.88737669e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.17012478e+00, -5.76884091e-01, -3.37375853e-01,
        -8.35778990e-01,  2.58987846e-02, -4.44787777e-01],
       [-8.16218794e-01, -5.76608526e-01, -3.37375853e-01,
        -4.86537612e-01,  2.58987846e-02, -4.44787777e-01],
       [ 6.31448951e-01, -5.71460137e-01, -3.37375853e-01,
         5.67802009e-01, -9.77679119e-01, -4.44787777e-01],
       [-2.63641239e-01,  3.35869377e-01, -3.37375853e-01,
        -8.41077709e-01,  2.58987846e-02, -4.44787777e-01],
       [ 5.10394590e-01,  9.42052437e-01,  1.27034565e+00,
         3.47959400e-01,  2.03305459e+00,  1.70965302e+00],
       [ 8.04485480e-01, -1.40699262e-01, -3.37375853e-01,
         7.38596800e-01, -9.77679119e-01, -4.44787777e-01],
       [ 3.47052977e+00, -5.76884091e-01, -3.37375853e-01,
         3.41837635e+00,  2.03305459e+00,  1.70965302e+00],
       [ 1.62079616e-02, -4.60292029e-01, -8.35250897e-02,
         2.63131325e-01, -9.77679119e-01, -4.44787777e-01],
       [ 2.31054415e+00,  1.97132866e-01, -3.37375853e-01,
         1.54250994e+00,  2.03305459e+00,  1.70965302e+00],
       [-1.08512486e-02,  3.45589079e-02, -3.37375853e-01,
         1.46941792e-02, -9.77679119e-01, -4.44787777e-01],
       [ 6.70613598e-01, -9.99268262e-02, -2.52758932e-01,
         2.50785555e-01, -9.77679119e-01, -4.44787777e-01],
       [-2.72291917e-02,  1.24972049e-01, -3.37375853e-01,
        -4.42438116e-01, -9.77679119e-01, -4.44787777e-01],
       [-1.28049787e+00, -5.76884091e-01, -3.37375853e-01,
        -9.48483109e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.10746135e+00, -2.82329477e-01, -3.37375853e-01,
        -9.23415628e-01,  2.58987846e-02, -4.44787777e-01],
       [ 1.96518318e+00,  1.88637310e+00, -3.37375853e-01,
        -1.91269977e-01, -9.77679119e-01, -4.44787777e-01],
       [-7.63524543e-01, -5.38571399e-02, -3.37375853e-01,
        -9.33504662e-01,  2.58987846e-02, -4.44787777e-01],
       [ 1.59336942e-01,  1.03038034e+00,  5.08793357e-01,
        -1.17958601e-02, -9.77679119e-01, -4.44787777e-01],
       [-5.63428804e-01, -4.37857894e-01, -3.37375853e-01,
        -4.46650478e-01,  2.58987846e-02, -4.44787777e-01],
       [-5.68413396e-01,  1.67565811e-01, -3.37375853e-01,
        -8.04481779e-01,  2.58987846e-02, -4.44787777e-01],
       [ 6.79158611e-01,  5.50845434e-01,  1.60881333e+00,
         1.40661884e+00,  2.03305459e+00,  1.70965302e+00],
       [-2.29566848e-02,  7.78413749e-01, -2.52758932e-01,
        -9.88737669e-01,  2.58987846e-02, -4.44787777e-01],
       [ 7.67351423e-02,  8.24243995e-01, -3.37375853e-01,
        -9.33251630e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.12383929e+00, -5.76884091e-01, -3.37375853e-01,
        -8.05767954e-01,  2.58987846e-02, -4.44787777e-01],
       [ 1.46387571e+00, -4.17449928e-01, -2.52758932e-01,
         2.21270416e+00,  2.03305459e+00,  1.70965302e+00],
       [-9.60059859e-01, -5.76884091e-01, -2.52758932e-01,
        -5.63789852e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.12668763e+00, -5.72944653e-01, -3.37375853e-01,
        -8.38972291e-01,  2.58987846e-02, -4.44787777e-01],
       [ 6.06525995e-01,  9.21877571e-01, -3.37375853e-01,
        -4.61160569e-01,  2.58987846e-02, -4.44787777e-01],
       [ 1.64321533e-01, -5.70735187e-01, -3.37375853e-01,
         2.48255571e-01, -9.77679119e-01, -4.44787777e-01],
       [ 1.37272889e+00, -4.61536311e-01, -3.37375853e-01,
         1.20384696e+00,  2.03305459e+00,  1.70965302e+00],
       [-9.62196112e-01, -1.68184212e-01, -2.52758932e-01,
        -9.21300528e-01,  2.58987846e-02, -4.44787777e-01],
       [ 9.87491191e-01, -8.77945209e-03, -3.37375853e-01,
         5.15261724e-01, -9.77679119e-01, -4.44787777e-01],
       [-1.13096013e+00, -3.42672181e-01, -3.37375853e-01,
        -9.88737669e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.90296537e-01,  3.52789287e-01, -3.37375853e-01,
        -6.20577943e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.07256921e+00, -5.15789996e-01, -3.37375853e-01,
        -8.03251426e-01,  2.58987846e-02, -4.44787777e-01],
       [ 8.34393028e-01, -5.72785639e-01, -3.37375853e-01,
         8.09576395e-01, -9.77679119e-01, -4.44787777e-01],
       [-5.07174130e-01,  3.03370499e-01,  1.09183124e-03,
        -7.24290535e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.18650272e+00, -5.76884091e-01, -3.37375853e-01,
        -8.67499718e-01,  2.58987846e-02, -4.44787777e-01],
       [ 2.09182855e-01, -5.08351278e-01, -3.37375853e-01,
         3.04919584e-01, -9.77679119e-01, -4.44787777e-01],
       [-1.26127159e+00, -5.66756239e-01, -3.37375853e-01,
        -9.37935111e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.25628700e+00, -5.76884091e-01, -3.37375853e-01,
        -9.27912318e-01,  2.58987846e-02, -4.44787777e-01],
       [ 2.83133977e-02, -5.49344783e-01, -3.37375853e-01,
         1.12751629e-01, -9.77679119e-01, -4.44787777e-01],
       [ 1.14913437e+00, -5.61374085e-01,  1.09183124e-03,
         1.75064507e+00,  2.03305459e+00,  1.70965302e+00],
       [ 2.12031193e-01,  1.39249921e+00, -8.35250897e-02,
        -9.02082669e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.21997069e+00, -5.76884091e-01, -3.37375853e-01,
        -8.97536144e-01,  2.58987846e-02, -4.44787777e-01],
       [-9.10926030e-01, -5.76182539e-01, -3.37375853e-01,
        -6.32848077e-01,  2.58987846e-02, -4.44787777e-01],
       [ 1.08006217e+00, -2.21721301e-01, -3.37375853e-01,
         1.79609133e+00,  2.03305459e+00,  1.70965302e+00],
       [-9.01668932e-01, -5.66264035e-01, -3.37375853e-01,
        -6.10229527e-01,  2.58987846e-02, -4.44787777e-01],
       [ 1.19460211e-01,  2.02811390e+00,  6.68582859e+00,
         2.74404218e+00,  1.02947669e+00,  3.86409382e+00],
       [-3.69029742e-01, -4.37726442e-01, -3.37375853e-01,
         1.70235925e+00,  2.03305459e+00,  1.70965302e+00],
       [-3.40546362e-01, -4.04223536e-01, -3.37375853e-01,
        -2.90156658e-01,  2.58987846e-02, -4.44787777e-01],
       [ 8.29408436e-01, -4.71199358e-01,  1.94728101e+00,
         2.58924371e+00,  2.03305459e+00,  1.70965302e+00],
       [ 8.49346802e-01,  4.35978318e-03,  1.09183124e-03,
         1.03795370e+00, -9.77679119e-01, -4.44787777e-01],
       [-1.16514019e+00, -5.13413063e-01, -3.37375853e-01,
        -9.00764656e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.39026455e-01, -3.81347574e-01, -3.37375853e-01,
        -4.14383930e-02, -9.77679119e-01, -4.44787777e-01],
       [-1.78903186e-01, -2.89458462e-01, -3.37375853e-01,
        -2.20430037e-01, -9.77679119e-01, -4.44787777e-01],
       [ 1.18260234e+00, -2.85533390e-01, -3.37375853e-01,
         8.73788377e-01, -9.77679119e-01, -4.44787777e-01],
       [-1.21284985e+00, -5.76884091e-01, -3.37375853e-01,
        -8.91068228e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.19433565e+00, -5.74215664e-01, -3.37375853e-01,
        -8.77781719e-01,  2.58987846e-02, -4.44787777e-01],
       [ 5.11001010e-02, -3.51323357e-02, -8.35250897e-02,
         1.63307262e-01, -9.77679119e-01, -4.44787777e-01],
       [ 9.46190291e-01,  2.74509929e-01,  8.57087522e-02,
         5.81503283e-01, -9.77679119e-01, -4.44787777e-01],
       [-1.22210695e+00, -5.76884091e-01, -3.37375853e-01,
        -8.97137650e-01,  2.58987846e-02, -4.44787777e-01],
       [-9.89255323e-01, -5.76884091e-01, -3.37375853e-01,
        -7.00295910e-01,  2.58987846e-02, -4.44787777e-01],
       [-6.04729704e-01, -4.77769732e-01, -3.37375853e-01,
        -4.32692418e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.04551000e+00, -4.40540288e-01, -3.37375853e-01,
        -8.57610655e-01,  2.58987846e-02, -4.44787777e-01],
       [-3.38410109e-01,  2.66468455e-01,  1.70325673e-01,
        -2.35966740e-01, -9.77679119e-01, -4.44787777e-01],
       [ 4.09990678e-01,  1.25570036e-01,  7.62644120e-01,
         1.01414887e+00,  2.03305459e+00,  1.70965302e+00],
       [-1.21427402e+00, -5.73310335e-01, -3.37375853e-01,
        -8.93916419e-01,  2.58987846e-02, -4.44787777e-01],
       [-7.74205810e-01, -5.76884091e-01, -3.37375853e-01,
        -4.63838603e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.46147300e-01,  4.15979654e-02, -1.68142011e-01,
        -7.31849647e-02, -9.77679119e-01, -4.44787777e-01],
       [-2.08810734e-01, -1.37025573e-01, -3.37375853e-01,
        -3.67124650e-01, -9.77679119e-01, -4.44787777e-01],
       [ 8.83526857e-01,  1.72412132e+00,  3.39559515e-01,
         2.37296494e-02, -9.77679119e-01, -4.44787777e-01],
       [-1.01132994e+00, -2.64811762e-01, -3.37375853e-01,
        -9.75728860e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.29616373e+00, -5.72027610e-01, -3.37375853e-01,
        -9.65659102e-01,  2.58987846e-02, -4.44787777e-01],
       [ 2.35529981e-01,  2.18124637e-01, -1.68142011e-01,
        -1.03953404e-01, -9.77679119e-01, -4.44787777e-01],
       [-4.06058134e-01, -5.74776628e-01,  5.93410278e-01,
         4.10011928e-01, -9.77679119e-01, -4.44787777e-01],
       [-1.02628372e+00,  6.83676140e-02,  8.57087522e-02,
        -9.42278402e-01,  2.58987846e-02, -4.44787777e-01],
       [-8.25475893e-01, -4.25314153e-01, -3.37375853e-01,
        -6.88621799e-01,  2.58987846e-02, -4.44787777e-01],
       [ 2.55550121e+00,  6.35027587e-01, -3.37375853e-01,
         1.55697186e+00,  2.03305459e+00,  1.70965302e+00],
       [-1.15527667e-01, -5.76884091e-01, -3.37375853e-01,
         8.73215922e-02, -9.77679119e-01, -4.44787777e-01],
       [-1.00634535e+00, -4.62887017e-01, -3.37375853e-01,
        -7.88097876e-01,  2.58987846e-02, -4.44787777e-01],
       [ 1.41534830e-01, -5.74186911e-01,  8.57087522e-02,
         5.72126931e-01, -9.77679119e-01, -4.44787777e-01],
       [ 2.82527557e-01, -3.78529130e-01,  1.70325673e-01,
         5.83570674e-01, -9.77679119e-01, -4.44787777e-01],
       [-6.78786490e-01, -5.13221425e-01, -3.37375853e-01,
        -4.34094856e-01,  2.58987846e-02, -4.44787777e-01],
       [ 1.15899789e-01, -5.14875235e-01, -3.37375853e-01,
         1.89955713e-01, -9.77679119e-01, -4.44787777e-01],
       [-4.50207372e-01, -3.52549308e-01, -3.37375853e-01,
        -4.28229189e-01,  2.58987846e-02, -4.44787777e-01],
       [-7.20799474e-01, -3.72520306e-01, -3.37375853e-01,
        -6.40115904e-01,  2.58987846e-02, -4.44787777e-01],
       [-1.08467464e+00, -5.24957917e-01, -3.37375853e-01,
        -8.20804284e-01,  2.58987846e-02, -4.44787777e-01],
       [-9.94951999e-01, -5.46148409e-01, -3.37375853e-01,
        -7.08790179e-01,  2.58987846e-02, -4.44787777e-01]])
In [122]:
inertie_list = []
for i in range(1, 9):
    kmeans = KMeans(n_clusters = i,init = 'k-means++')
    kmeans.fit(x_scaled)
    inertie_list.append(kmeans.inertia_)
In [123]:
print(f"{inertie_list[:6]}")
print(f"{type(inertie_list)}")
print(f"{len(inertie_list)}")
[930.0, 488.22184780078203, 317.39229829395583, 206.5433444848674, 166.85177405769645, 128.25764143555728]
<class 'list'>
8
In [124]:
plt.plot(range(1, 9), inertie_list)
plt.title('la méthode du coude : determiner le nombre des clusters')
plt.xlabel('nombre de clusters')
plt.ylabel('inertie_list')
plt.show()

L'algorithme propose entre 3 et 4 clusters.

In [125]:
kmeans_pays = KMeans(n_clusters=3, init = 'k-means++')
In [126]:
kmeans_pays.fit(x_scaled)
clusters = kmeans_pays.predict(x_scaled)
In [ ]:
 
In [127]:
df['K_cluster']=clusters
df
Out[127]:
Poulet_dispo(kg/pers/an) Import_personne(kg) Export_personne(kg) Prod_personne(kg) CAH_label K_cluster
Zone
Afghanistan 1.53 0.798984 0 0.771432 1 0
Afrique du Sud 35.69 9.016001 1 29.240609 0 0
Albanie 16.36 13.175372 0 4.507364 1 0
Algérie 6.38 0.048322 0 6.644247 1 0
Allemagne 19.47 10.186501 7 18.316346 0 0
... ... ... ... ... ... ...
Venezuela (République bolivarienne du) 20.28 0.850268 0 20.406439 0 0
Viet Nam 12.33 3.076089 0 9.703950 1 0
Yémen 8.53 2.802246 0 6.035606 1 0
Zambie 3.42 0.712014 0 2.907391 1 0
Zimbabwe 4.68 0.421449 0 4.846665 1 0

155 rows × 6 columns

In [128]:
df_clusters = df.groupby(['K_cluster']).median().round(0)
df_clusters
Out[128]:
Poulet_dispo(kg/pers/an) Import_personne(kg) Export_personne(kg) Prod_personne(kg) CAH_label
K_cluster
0 14.0 3.0 0.0 7.0 1.0
1 36.0 2.0 4.0 48.0 3.0
2 32.0 49.0 70.0 28.0 2.0
In [129]:
for i in range(3):
    print(f'Cluster {i}')
    print(df[df.K_cluster == i].index.tolist())
    print()
Cluster 0
['Afghanistan', 'Afrique du Sud', 'Albanie', 'Algérie', 'Allemagne', 'Angola', 'Arabie saoudite', 'Arménie', 'Autriche', 'Azerbaïdjan', 'Bangladesh', 'Bénin', 'Bosnie-Herzégovine', 'Botswana', 'Bulgarie', 'Burkina Faso', 'Cabo Verde', 'Cambodge', 'Cameroun', 'Chine - RAS de Macao', 'Chine, continentale', 'Chine, Taiwan Province de', 'Chypre', 'Colombie', 'Congo', 'Costa Rica', "Côte d'Ivoire", 'Croatie', 'Cuba', 'Égypte', 'El Salvador', 'Émirats arabes unis', 'Équateur', 'Espagne', 'Estonie', 'Eswatini', 'Éthiopie', 'Fédération de Russie', 'Fidji', 'Finlande', 'France', 'Gabon', 'Gambie', 'Géorgie', 'Ghana', 'Grèce', 'Guatemala', 'Guinée', 'Guinée-Bissau', 'Haïti', 'Honduras', 'Îles Salomon', 'Inde', 'Indonésie', "Iran (République islamique d')", 'Iraq', 'Islande', 'Italie', 'Japon', 'Jordanie', 'Kazakhstan', 'Kenya', 'Kirghizistan', 'Koweït', 'Lesotho', 'Lettonie', 'Liban', 'Libéria', 'Luxembourg', 'Macédoine du Nord', 'Madagascar', 'Malawi', 'Mali', 'Malte', 'Maroc', 'Mauritanie', 'Mexique', 'Mongolie', 'Monténégro', 'Mozambique', 'Myanmar', 'Namibie', 'Népal', 'Nicaragua', 'Niger', 'Nigéria', 'Norvège', 'Oman', 'Ouganda', 'Pakistan', 'Paraguay', 'Philippines', 'Portugal', 'République centrafricaine', 'République de Corée', 'République de Moldova', 'République dominicaine', 'République populaire démocratique de Corée', 'République-Unie de Tanzanie', 'Roumanie', "Royaume-Uni de Grande-Bretagne et d'Irlande du Nord", 'Rwanda', 'Sénégal', 'Serbie', 'Sierra Leone', 'Slovaquie', 'Soudan', 'Sri Lanka', 'Suède', 'Suisse', 'Suriname', 'Tadjikistan', 'Tchad', 'Tchéquie', 'Thaïlande', 'Timor-Leste', 'Togo', 'Tunisie', 'Turkménistan', 'Turquie', 'Ukraine', 'Uruguay', 'Venezuela (République bolivarienne du)', 'Viet Nam', 'Yémen', 'Zambie', 'Zimbabwe']

Cluster 1
['Argentine', 'Australie', 'Bélarus', 'Belize', 'Bolivie (État plurinational de)', 'Brésil', 'Canada', 'Chili', 'Danemark', "États-Unis d'Amérique", 'Guyana', 'Hongrie', 'Irlande', 'Israël', 'Jamaïque', 'Lituanie', 'Malaisie', 'Maurice', 'Nouvelle-Zélande', 'Panama', 'Pérou', 'Pologne', 'Slovénie', 'Trinité-et-Tobago']

Cluster 2
['Bahamas', 'Belgique', 'Chine - RAS de Hong-Kong', 'Pays-Bas']

I.d PCA et visualisation des centroïds k-means¶

In [24]:
# Charger le modèle PCA à partir du fichier sauvegardé
from sklearn.decomposition import PCA

import pickle

with open('pca.pkl', 'rb') as file:
    pca = pickle.load(file)
In [25]:
#controleur de variable n°1
print(f'pca:{pca}') # ok 
print(f'X:{X[:2]}') # ok 
print(f'X_scaled:{X_scaled[:3]}') #ok
print(f'X_proj:{X_proj}') # ok
#print(f'X_projected : {X_projected}') #necessite ??
#print(f'X_:{X_[:3]}') # necessite X_projected
#print(f'':{})
#print(f'x_y : {x_y}')
#print(f'pcs:{pcs}')
pca:PCA(n_components=4)
X:[[ 1.53        0.79898363  0.          0.77143247]
 [35.69        9.0160007   1.         29.24060927]]
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[25], line 3
      1 print(f'pca:{pca}') # ok 
      2 print(f'X:{X[:2]}') # ok 
----> 3 print(f'X_scaled:{X_scaled[:3]}') #ok
      4 print(f'X_proj:{X_proj}')

NameError: name 'X_scaled' is not defined
In [26]:
df_viz = df
df_viz.head(2)
Out[26]:
Poulet_dispo(kg/pers/an) Import_personne(kg) Export_personne(kg) Prod_personne(kg) CAH_label K_cluster
Zone
Afghanistan 1.53 0.798984 0 0.771432 1 0
Afrique du Sud 35.69 9.016001 1 29.240609 0 0

La pca précedente ayant été importé on peut reitérer les calculs avec 3 composantes puisque l'on a vu que la composante F4 etait inutile.

In [78]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D  # Importer la projection en 3D
from sklearn.cluster import KMeans
print('done')
done
In [37]:
#controleur de variable n°2
print(f'pca:{pca}') # ok 
print(f'X:{X[:2]}') # ok 
print(f'X_scaled:{X_scaled[:3]}') #ok
print(f'X_proj:{X_proj[:4]}') # ok

print(f'kmeans_pays:{kmeans_pays}')
print(f'centroids:{centroids}')
#print(f'X_projected : {X_projected}') #necessite ??
#print(f'X_:{X_[:3]}') # necessite X_projected
#print(f'':{})
#print(f'x_y : {x_y}')
#print(f'pcs:{pcs}')

#print(f'centroids_scaled:{centroids_scaled}')
#print(f"centroids :{centroids}")
#print(f" :{}")
pca:PCA(n_components=4)
X:[[ 1.53        0.79898363  0.          0.77143247]
 [35.69        9.0160007   1.         29.24060927]]
X_scaled:[[-1.21925861 -0.51861535 -0.33737585 -0.94417907]
 [ 1.21322197  0.08064001 -0.25275893  0.70022494]
 [-0.16323733  0.38397705 -0.33737585 -0.72838846]]
X_proj:[[-1.5306849   0.55872331  0.32413899 -0.02481816]
 [ 0.91219636 -0.9080056  -0.6043325  -0.10401094]
 [-0.42545802  0.58470071 -0.54351898  0.01243724]
 [-1.20505546  0.19970084  0.27954487 -0.04531882]]
kmeans_pays:KMeans(n_clusters=3)
centroids:[[-0.28012571 -0.09316828 -0.23143813 -0.35941592 -0.40081938]
 [ 1.31899619 -0.1775727   0.34661093  1.76785804  2.03305459]
 [ 0.9800143   4.02352924  5.26849516  0.80430726  0.52768774]]
In [49]:
from sklearn.decomposition import PCA

  # Par exemple, 3 composantes principales

n_components = 3
pca = PCA(n_components = n_components)
    
    
caler = StandardScaler()
X_scaled = scaler.fit_transform(X)


#pca = PCA(n_components=3)
pca.fit(X_scaled)

X_proj = pca.transform(X_scaled)


print(f'pca:{(pca)}')
print(f'X_scaled:{type(X_scaled)}')
print(f'X_proj:{type(X_proj)}')
pca:PCA(n_components=3)
X_scaled:<class 'numpy.ndarray'>
X_proj:<class 'numpy.ndarray'>
In [51]:
X_proj = pd.DataFrame(X_proj, columns = ["PC1", "PC2", "PC3"])#,"PC4"])
X_proj[:10]
Out[51]:
PC1 PC2 PC3
0 -1.530685 0.558723 0.324139
1 0.912196 -0.908006 -0.604332
2 -0.425458 0.584701 -0.543519
3 -1.205055 0.199701 0.279545
4 0.271132 0.139121 0.088538
5 -0.869567 0.672389 -0.265983
6 1.318453 -0.218378 -1.553603
7 1.541838 -2.042395 -0.021876
8 -0.501029 0.563658 -0.508136
9 1.708715 -2.347117 -0.358087
In [59]:
# Obtenir les centroïdes finaux
centroids = kmeans_pays.cluster_centers_
print(f" centroids : {centroids}")
 centroids : [[-0.28012571 -0.09316828 -0.23143813 -0.35941592 -0.40081938]
 [ 1.31899619 -0.1775727   0.34661093  1.76785804  2.03305459]
 [ 0.9800143   4.02352924  5.26849516  0.80430726  0.52768774]]
In [63]:
X_proj
Out[63]:
PC1 PC2 PC3
0 -1.530685 0.558723 0.324139
1 0.912196 -0.908006 -0.604332
2 -0.425458 0.584701 -0.543519
3 -1.205055 0.199701 0.279545
4 0.271132 0.139121 0.088538
... ... ... ...
150 -0.255265 -0.595880 0.000415
151 -0.784561 0.072713 0.021684
152 -1.043529 0.284604 0.101533
153 -1.401012 0.432943 0.297445
154 -1.308569 0.321220 0.297023

155 rows × 3 columns

In [140]:
#df['K_cluster']=clusters

X_proj['K_clusters'] = clusters
X_proj
Out[140]:
PC1 PC2 PC3 K_clusters
0 -1.530685 0.558723 0.324139 0
1 0.912196 -0.908006 -0.604332 0
2 -0.425458 0.584701 -0.543519 0
3 -1.205055 0.199701 0.279545 0
4 0.271132 0.139121 0.088538 0
... ... ... ... ...
150 -0.255265 -0.595880 0.000415 0
151 -0.784561 0.072713 0.021684 0
152 -1.043529 0.284604 0.101533 0
153 -1.401012 0.432943 0.297445 0
154 -1.308569 0.321220 0.297023 0

155 rows × 4 columns

In [146]:
#on peut faire des graphique à 3 dimensions
# On définit notre figure et notre axe différemment :
fig= plt.figure(1, figsize=(8, 6))
ax = fig.add_subplot(111, projection="3d", elev=-150, azim=110)
# On affiche nos points :
ax.scatter(X_proj['PC1'],X_proj['PC2'],X_proj['PC3'],c=X_proj['K_clusters'],edgecolor="b", s=40)
#, cmap="Set1", edgecolor="k", s=40)

# Centroïdes
ax.scatter(centroids[:, 0], centroids[:, 1], centroids[:, 2], c='red', marker='x', s=650, label='Centroïdes')

#3vecteurs reinteration pca
pca_components = pca.components_[:3]

# Origine des flèches (peut être n'importe quel point dans l'espace)
arrow_origin = np.zeros(3)

# Affichez les flèches pour les vecteurs propres
for component in pca_components:
    ax.quiver(arrow_origin[0], arrow_origin[1], arrow_origin[2],
              component[0], component[1], component[2],
              color='blue', length=0.1, label='Vecteur propre')

# On spécifie le nom des axes :
ax.set_xlabel("PC1")
ax.set_ylabel("PC2")
ax.set_zlabel("PC3")
Out[146]:
Text(0.5, 0, 'PC3')

Projection des pays et des centroïdes dans l'espace PCA (analyse en composante principale), organisé en 3 groupes définit par l'algorithme de clustering K-means.

In [ ]:
 
In [ ]:
 

II.a Conclusion - Visualisation des clusters¶

In [86]:
import seaborn as sns
sns.pairplot(df, hue="K_cluster")
sns.set_theme(style="ticks")
In [ ]:
 
In [132]:
 
In [ ]:
 

Scatterplot Matrix

l'algorithme des k-means nous permet d'observer 3 clusters relativement bien séparés.

-le cluster 0 demarre toujours a zero. les pays représentés sont caractérisés par une faiblesse de leur parametres. En revanche, pour la disponibilté du poulet et la production de poulet, on voit une augmentation substantielle qui aboutie au cluster 1. L'algorithme de Classification Ascendante hierarchique (CAH) les placent sur les 2 premiers clusters (0,1). [0,1,2,3]

-Le clusteur 1 est la continuité du cluster 0, systématiquement plus elevé dans toutes les dimensions, ils se distinguent par des valeurs clairement plus élevées sur la composante (synthétique) d'auto-sufficence alimentaire (prod+disponibilité). L'algorithme CAH les placent toujours au dernier cluster 3 ou (4/4).[0,1,2,3]

-Le cluster 2 est le cluster atypique constitué de 4 pays qui cumulent des scores élevés dans tous les domaines.Ils se démarquent par une exportation particulièrement forte. [Bahamas, Belgique, Hongkong, pays-bas]. Une etude approfondie les concernants peut être faites pour placer le produit (la poule qui chante).

In [83]:
#affiche clusters atypique
df[df['K_cluster'] == 2]
Out[83]:
Poulet_dispo(kg/pers/an) Import_personne(kg) Export_personne(kg) Prod_personne(kg) CAH_label K_cluster
Zone
Bahamas 43.17 62.867546 35 15.716886 0 2
Belgique 12.65 29.597851 57 40.543802 2 2
Chine - RAS de Hong-Kong 53.51 124.139068 90 3.284826 2 2
Pays-Bas 20.33 35.719852 83 64.624733 2 2

II.b Conclusion - Recommandation¶

>- Tout d'abord il serait bienvenue d'appronfondir les recherches avec les 4 pays du clusters 2 (atypiques). En effet ces derniers sont impliqués par le commerce du poulet. Il sera question de les convaincre, d'importer la poule qui chante. Il y a certainement, des marchandises pourlesquelles ils ne sont pas totalement satisfait, la poule qui chante peut faire la difference.

  • De manière generale, les pays du cluster 1, sont des cibles à explorer, puisqu'ils ont un debut de developpement. Cependant une approche orienté developpement sera a privilégié. On pourrait envisager de créer un plan commerciale d'envergure qui comprend toute la chaine de production en partenariat avec "la poule qui chante" afin d'augmenter leur autonomie alimentaire par extension leur flux commerciaux. Ce plan comprendra, des outils matériels et immatériels, avec notamment les denrées (trop chère/rare de leur pays), fournies par la poule qui chante. Avec une offre adapté, on leur apporte une solution win-win leur permettant de s'accordant avec leurs besoins et l'economie de leur pays.

  • concernant le cluster O, ce sont des pays avec des paramètres faibles, ils sera alors difficile de travailler avec eux. On peut supposer des routes commerciales innéfficientes, avec des problématiques sociales d'envergures qui nécéssitent d'être traitées avec une priorité pour les flux bénéfiques au developpement du pays. On pourrait envisage de créer une campagne uniquement virtuelle dans une perspective type marketing d'attraction afin que ceux-là viennent à nous. Cette campagne sera egalement valable au pays du cluster1.

  • Cet avis est basé sur des éléments statistiques rudimentaires, il ne peut etre considéré comme exhaustif.


In [134]:
df_mapP9 = df
In [135]:
#df.to_csv('df_P9.csv', index= True) 

df_mapP9.to_csv('df_mapP9.csv', index= True) 
In [ ]:
 
In [ ]: