* 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
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.cluster import KMeans
pd.__version__
'1.5.3'
df = pd.read_csv('df_P9.csv')
df
| 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
df = df.set_index('Zone')
names = df.index
#names = []
names
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)
names
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)
cols = ["Poulet_dispo(kg/pers/an)","Import_personne(kg)","Export_personne(kg)","Prod_personne(kg)"]
df = df[cols]
df.head()
| 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 |
#extraire les valeurs numériques du dataset
X = df.values
X[:5]
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]])
# + 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.
# 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()
# lancer l'algorithme CAH
from sklearn.cluster import AgglomerativeClustering
# utiliser AgglomerativeClustering pour determiner le contenu des clusters.
agg_clustering = AgglomerativeClustering(n_clusters=4)
#appliquer l'algorithme
agg_clustering.fit(df)
AgglomerativeClustering(n_clusters=4)In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
AgglomerativeClustering(n_clusters=4)
#creer une colonne pour mettre les clusters generés
df['CAH_label'] = agg_clustering.labels_
df.head(4)
| 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 |
# comprendre la caracterisation des clusters
df.groupby(['CAH_label']).mean()
| 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 |
#+petit heatmap
#+radar plot sns ou matplotlib
#Pour représenter les clusters
#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']
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
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import warnings
# Ignorer tous les avertissements
warnings.filterwarnings('ignore')
Xk = df.copy()
Xk
| 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 |
#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
x_scaled.shape
(155, 6)
x_scaled
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]])
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_)
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
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.
kmeans_pays = KMeans(n_clusters=3, init = 'k-means++')
kmeans_pays.fit(x_scaled)
clusters = kmeans_pays.predict(x_scaled)
df['K_cluster']=clusters
df
| 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
df_clusters = df.groupby(['K_cluster']).median().round(0)
df_clusters
| 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 |
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']
# 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)
#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
df_viz = df
df_viz.head(2)
| 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.
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
#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]]
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'>
X_proj = pd.DataFrame(X_proj, columns = ["PC1", "PC2", "PC3"])#,"PC4"])
X_proj[:10]
| 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 |
# 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]]
X_proj
| 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
#df['K_cluster']=clusters
X_proj['K_clusters'] = clusters
X_proj
| 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
#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")
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.
import seaborn as sns
sns.pairplot(df, hue="K_cluster")
sns.set_theme(style="ticks")
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).
#affiche clusters atypique
df[df['K_cluster'] == 2]
| 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 |
>- 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.
df_mapP9 = df
#df.to_csv('df_P9.csv', index= True)
df_mapP9.to_csv('df_mapP9.csv', index= True)