Importation des librairies

library(readr)
library(tidyverse)
library(data.table)
library(knitr)
source("functions.R")

Importation et preparation des données

Nous utiliserons le fichier comprenant toutes les données sur les bilans alimentaires disponibles sur le site FAO, pour repérer les données qui concernent la viande de volaille (production, importation et exportation, disponibilité en kcal/jour par personne). Ensuite nous allons joindre des autre indicateurs toujours repérés sur le même site qui pourront fournir au final un cadre assez complet du profil économique des pays.

bilan_alim <- fread('FAO/BilansAlimentaires_F_Toutes_les_Données_(Normalisé).csv')

#growth rate pop
pop.growth <- bilan_alim[Produit == 'Population' & Élément == "Population totale", .(Produit, Année, Valeur, growth = (Valeur - shift(Valeur))/shift(Valeur)) ,by ="Zone"][Année == 2018]
#remove grouped rows
pop.growth <-pop.growth[1:174]
#wide format
pop.growth <-dcast(pop.growth, Zone ~ Produit, value.var = c("Valeur", "growth"))

bilan_alim <- bilan_alim[Année==2018 & 
             Produit %in% c("Viande", "Viande de Volailles", "Total General","Produits Vegetaux") &
           Élément %in% c("Disponibilité alimentaire (Kcal/personne/jour)","Production", "Importations - Quantité", "Exportations - Quantité")]

#remove grouped entities and columns
bilan_alim <- bilan_alim[Zone %in% unique(Zone)[1:174]][, .(Zone, Produit, Élément,Valeur)]

#wide format
dcast(bilan_alim, Zone ~ Produit + Élément) -> bilan_alim


#prix à la prod
prix_prod <- read_csv("FAO/FAOSTAT_prix_prod_2018.csv")

prix_prod %>% select(Zone, Élément, Produit,Valeur) %>% 
  filter(Élément == "Indice des prix à la production (2014-2016 = 100)") %>% 
  pivot_wider(names_from = c(Élément, Produit), values_from=Valeur) -> prix_prod

    
#sec alim

sec_alim <- read_csv("FAO/FAOSTAT_sec_alim_2018.csv")

sec_alim %>% 
  mutate(Valeur = as.numeric(if_else(Valeur == '<2.5', '0', Valeur))) %>% 
  select(Zone,Produit,Valeur) %>%  
  pivot_wider(names_from = Produit, values_from = Valeur) -> sec_alim
  
#groupement des pays
groupes <- read_csv("FAO/groupes_pays_7-19-2021.csv")
groupes %>% distinct(`Groupe de pays`)

#prix_conso
prix_conso <- read_csv('FAO/prix_conso_7-19-2021.csv')
distinct(prix_conso, Zone)
prix_conso %>% filter(Année == 2020) %>% 
  select(Zone, Produit, Mois, Valeur) %>% pivot_wider(names_from = Produit, values_from = Valeur) %>% 
  group_by(Zone) %>% 
  summarise(inflation_2020 = round(mean(`Food price inflation`),2), prix_conso_alim_2020 = round(mean(`Prix à la Consommation, Indices d'alimentation (2015 = 100)`),2)) %>% 
  ungroup() -> prix_conso_2020

#final joins

merge(bilan_alim, pop.growth, all.x = TRUE) %>% 
merge(., prix_prod, all.x = TRUE) %>% 
merge(., sec_alim, all.x = TRUE) %>%
merge(., prix_conso_2020, all.x = TRUE) %>% 
column_to_rownames('Zone') -> countries.data

#rename columns
colnames(countries.data) = c('produits_vegetaux_dispo_alim','total_dispo_alim', 'viande_dispo_alim','viande_export', 'viande_import',
                   'viande_prod','viande_volaille_dispo_alim', 'viande_volaille_export', 'viande_volaille_import',
                   'viande_volaille_prod', 'population', 'population_croissance', 'prix_prod_index', 'pib_habitant',
                   'taux_malnutrition', 'prop_import_export', 'stab_politique', 'inflation_2020', 'prix_conso_2020')

#replace specific values
pib.yemen <- 2300
pib.nordcoree <- 1700
pib.chine <- 15525.1
prix.prod.venezuela <- 5227972.94

#https://fr.wikipedia.org/wiki/CIA_World_Factbook  & FAO(donnée calculées)


countries.data['Yémen',]['pib_habitant'] <- pib.yemen
countries.data['République populaire démocratique de Corée',]['pib_habitant'] <- pib.nordcoree
countries.data['Chine, continentale', 'pib_habitant'] <- pib.chine
countries.data['Venezuela (République bolivarienne du)', 'prix_prod_index'] <- prix.prod.venezuela
#la Chine comme entité est redondante (Chine continentale)
countries.data <- countries.data[!row.names(countries.data) == 'Chine',]

Imputation des données manquantes

Présentation du dataframe ainsi obtenu:

head(countries.data)
##                produits_vegetaux_dispo_alim total_dispo_alim viande_dispo_alim viande_export viande_import
## Afghanistan                            1849             2040                55             0            30
## Afrique du Sud                         2420             2899               331           121           576
## Albanie                                2357             3360               215            NA            17
## Algérie                                2932             3322                93             1            52
## Allemagne                              2468             3554               321          3563          2700
## Angola                                 2177             2385               128             0           467
##                viande_prod viande_volaille_dispo_alim viande_volaille_export viande_volaille_import
## Afghanistan            331                          5                      0                     25
## Afrique du Sud        3241                        155                     48                    515
## Albanie                 96                         50                     NA                     12
## Algérie                806                         24                     NA                      0
## Allemagne             8189                         67                    640                    871
## Angola                 262                         39                      0                    335
##                viande_volaille_prod population population_croissance prix_prod_index pib_habitant
## Afghanistan                      29      37172          0.0241348909           85.02       2033.8
## Afrique du Sud                 1762      57793          0.0137344326          128.90      12627.9
## Albanie                          16       2883         -0.0003467406           83.46      13323.8
## Algérie                         295      42228          0.0202710865          111.28      11642.2
## Allemagne                      1571      83124          0.0056376878           79.81      53463.4
## Angola                           27      30810          0.0333031492              NA       6933.5
##                taux_malnutrition prop_import_export stab_politique inflation_2020 prix_conso_2020
## Afghanistan                 23.4                305          -2.75           8.06          125.32
## Afrique du Sud               5.5                  6          -0.22           4.39          132.99
## Albanie                      4.0                 22           0.38           3.61          117.50
## Algérie                      0.0                 22          -0.83           0.21          111.86
## Allemagne                    0.0                  5           0.60           2.26          109.65
## Angola                      15.5                  7          -0.32          26.63          292.44

Le dataframe contient 173 et les 19 variables suivantes, comprenant les données 2018:

  1. produits_vegetaux_dispo_alim : total en kcal/personne/jour.
  2. total_dispo_alim: total de la disponibilité alimentaire en kcal/personne/jour.
  3. viande_dispo_alim : total de la disponibilité alimentaire de viande en kcal/personne/jour.
  4. viande_export: total des exportation de viande en milliers de tonnes.
  5. viande_import : total des importation de viande en milliers de tonnes.
  6. viande_prod : total de la production de viande en milliers de tonnes.
  7. viande_volaille_dispo_alim: total de la disponibilité alimentaire en kcal/personne/jour.
  8. viande_volaille_export: total exports de viande de volaille
  9. viande_volaille_import: total des importations de viande de volaille 10.viande_volaille_prod: total de la productions de viande de volaille
  10. population : en milliers de personnes.
  11. population_croissance : taux de croissance 2017-2018
  12. prix_prod_index: index du prix à la production(viande de volaille)
  13. pib_habitant: pib habitant en $ 15 taux_malnutrition: prévalence de la sous alimentation
  14. prop_import_export: rapport entre importations et exportations totales
  15. stab_politique: indice de stabilité politique
  16. inflation_2020: indice d’inflation des prix des produits alimentaires (données 2020)
  17. prix_conso_2020: indice des prix à la consommation (données 2020)
library(DataExplorer)
introduce(countries.data)
##   rows columns discrete_columns continuous_columns all_missing_columns total_missing_values complete_rows
## 1  173      19                0                 19                   0                  147            99
##   total_observations memory_usage
## 1               3287        31384
plot_str(countries.data)
plot_intro(countries.data)

plot_missing(countries.data)

Avant d’effectuer notre analyse on ira imputer les données manquantes avec une méthode basé sur l’analyse des composantes principales:

library(missMDA)

#imputation des valeurs manquantes
#estimation du nombre de composantes nécessaires à l'imputation
estim_ncpPCA(countries.data,scale = FALSE)
#on retient 5 composantes et on ne réduit pas les variables
res.comp <- imputePCA(countries.data, ncp=5, nb.init = 10, scale = FALSE)
data <- as.data.frame(res.comp$completeObs)

#on va attribuer 0 aux valeurs imputées négatives dans des colonnes spécifiques
data<- data %>% 
  mutate(across(viande_export:viande_volaille_prod, ~ replace(., .<0, 0))) %>% 
  mutate(viande_export = if_else(viande_export > viande_import + viande_prod, 0, viande_export)) %>% 
  mutate(viande_volaille_export = if_else(viande_volaille_export > viande_volaille_import + viande_volaille_prod, 0, viande_volaille_export))

#quick check
which(data<0, arr.ind = TRUE)

Premiere analyse des variables

On peut maintenant analyser les distributions de variables ainsi que la matrice des corrélations.

plot_histogram(data)

On remarque on particulier la skewness très accentué des distributions des variables qui concernent la viande (les distributions sont toutes aplaties à droite ), en particulier pour la production, l’importation et l’exportation. On est en effet en présence de plusieurs outliers qui présentent des valeurs beaucoup plus elevé de la moyenne.

summary(data$viande_prod)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       0      75     292    1956    1051   85957

Si on prend par exemple la production de viande, on remarque que la plupart de pays produisent moins de 1051 milliers de tonnes, mais qu’il existe un petit nombre de pays qu’il produit beaucoup plus.

arrange(data, desc(viande_volaille_prod)) %>% select(viande_volaille_prod) %>% slice_head(n=10) 
##                       viande_volaille_prod
## États-Unis d'Amérique                22298
## Chine, continentale                  19395
## Brésil                               13938
## Fédération de Russie                  4543
## Inde                                  3616
## Mexique                               3377
## Indonésie                             2588
## Pologne                               2509
## Japon                                 2250
## Turquie                               2229

Etats-Unis, Chine et Brésil ont chacun une production au moins trois fois supérieure que le pays classé en quatrième place, la Russie.

plot_correlation(data, theme_config = list(legend.position = "bottom", axis.text.x = element_text(angle = 90),panel.background = element_blank()))

On retiendra les corrélations le plus intéressantes:

  • entre taux de malnutrition et le total de disponibilité alimentaire par jour (-0.81)
  • entre population et production de viande (0.73)
  • entre pib habitant et la disponibilité alimentaire de viande (0.67)

Clustering

CAH et Kmeans sur le dataset complet

CAH

#clustering
library(FactoMineR)
library(FactoInvestigate)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(cluster)
library(gridExtra)
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
#scale the data
data.matrix <- scale(as.matrix(data))

#determine clusterability of the dataset (Hopkins statistic)
get_clust_tendency(data.matrix, n= nrow(data.matrix) - 1)
## $hopkins_stat
## [1] 0.9077452
## 
## $plot

#CLUSTERING HIERARCHIQUE
#On peut observer les effets des choix de différents linkages.
#ward.D, ward.D2 et complete semblent fournir les groupes plus équilibres
#plot_dendrograms(data.matrix)

grid.arrange(
fviz_nbclust(data.matrix, FUNcluster = hcut, method = "wss"),
fviz_nbclust(data.matrix, FUNcluster = hcut, method = "silhouette"),
fviz_nbclust(data.matrix, FUNcluster = hcut, method = "gap_stat"),
ncol = 2)

## Clustering k = 1,2,..., K.max (= 10): .. done
## Bootstrapping, b = 1,2,..., B (= 100)  [one "." per sample]:
## .................................................. 50 
## .................................................. 100
#on choisi 4 groupes
data.hclust <- hcut(data.matrix, 4, method = "ward.D")

fviz_dend(data.hclust, cex = 0.5)

KMeans

##kMEANS
#nombre de centres optimal pour le kmeans

  grid.arrange(
fviz_nbclust(data.matrix, FUNcluster = kmeans, method = "wss"),
fviz_nbclust(data.matrix, FUNcluster = kmeans, method = "silhouette"),nrow=1 )

# le "coude" confirme que 4 groupe préservent l'information semblerait le nombre optimal
data.km <- kmeans(data.matrix, centers = 4, nstart=50)

#on visualise les clusters ainsi obtenus (projetés sur le 1er plan factoriel)

fviz_cluster(data.hclust, main = 'Hclust 4, all countries', repel = TRUE)

fviz_cluster(data.km, data = data, main = "Kmeans 4, all countries", repel = TRUE)

# on examine les centroids

as.data.frame(aggregate(data, by=list(cluster=data.hclust$cluster), mean))
##   cluster produits_vegetaux_dispo_alim total_dispo_alim viande_dispo_alim viande_export viande_import
## 1       1                     2279.628         2598.766          123.9066       50.3426       64.9200
## 2       2                     2322.988         3122.163          337.1860      358.8488      405.7093
## 3       3                     2554.333         3429.667          469.6667     5323.6667     2016.0000
## 4       4                     1773.000         2120.000          123.0000        0.0000       59.0000
##   viande_prod viande_volaille_dispo_alim viande_volaille_export viande_volaille_import viande_volaille_prod
## 1    778.2612                   34.98795               26.43456               37.26506             345.8433
## 2   1302.9884                  110.68605               92.67878              140.22093             477.5698
## 3  53586.3333                  162.66667             2794.00000              211.66667           18543.6667
## 4   1020.0000                   54.00000                0.00000                3.00000             448.0000
##   population population_croissance prix_prod_index pib_habitant taux_malnutrition prop_import_export
## 1   47757.28           0.019262807    8.007446e+03     7622.108         14.743167          31.457831
## 2   17397.43           0.006353217    6.071131e+03    32262.324          3.344874          47.744186
## 3  654737.67           0.006238590    8.928333e+01    30593.067          0.000000           5.333333
## 4   28887.00          -0.017515815    5.227973e+06    20353.949         23.400000          11.000000
##   stab_politique inflation_2020 prix_conso_2020
## 1     -0.6778313      21.290877    3.412774e+06
## 2      0.5340004       5.100082    3.293657e+06
## 3     -0.8236108       6.990000    1.188567e+02
## 4     -1.3200000    4026.670000    1.576726e+10
as.data.frame(aggregate(data, by=list(cluster=data.km$cluster), mean))
##   cluster produits_vegetaux_dispo_alim total_dispo_alim viande_dispo_alim viande_export viande_import
## 1       1                     2554.333         3429.667          469.6667    5323.66667    2016.00000
## 2       2                     2241.158         2534.562          119.8463      38.92091      55.38988
## 3       3                     1773.000         2120.000          123.0000       0.00000      59.00000
## 4       4                     2360.116         3184.128          341.1047     369.87209     414.90698
##   viande_prod viande_volaille_dispo_alim viande_volaille_export viande_volaille_import viande_volaille_prod
## 1  53586.3333                  162.66667             2794.00000              211.66667           18543.6667
## 2    649.3094                   33.10843               16.72679               31.89157             274.9276
## 3   1020.0000                   54.00000                0.00000                3.00000             448.0000
## 4   1427.4419                  112.50000              102.04791              145.40698             546.0116
##   population population_croissance prix_prod_index pib_habitant taux_malnutrition prop_import_export
## 1  654737.67           0.006238590    8.928333e+01    30593.067          0.000000           5.333333
## 2   45216.29           0.020225382    9.149899e+03     6516.071         15.635938          48.939759
## 3   28887.00          -0.017515815    5.227973e+06    20353.949         23.400000          11.000000
## 4   19849.78           0.005424221    4.968531e+03    33329.779          2.483246          30.872093
##   stab_politique inflation_2020 prix_conso_2020
## 1     -0.8236108       6.990000    1.188567e+02
## 2     -0.5710843      21.271479    3.412772e+06
## 3     -1.3200000    4026.670000    1.576726e+10
## 4      0.4309772       5.118803    3.293658e+06
table(data.hclust$cluster, data.km$cluster)
##    
##      1  2  3  4
##   1  0 75  0  8
##   2  0  8  0 78
##   3  3  0  0  0
##   4  0  0  1  0

4 groupes ont été identifiés :

  1. Groupe de plus forts producteurs mondiaux, populations massives.

  2. Pays “pauvres” (pib_habitant moyen le plus bas), prix à la conso le plus élevé.

  3. Cluster constitué uniquement du Venezuela. En effet en 2020 ce pays a été confronté à une forte crise inflationnaire, ce qui le place “très loin” des autre pays.

  4. Pays riches, producteur et importateur de viande.

Les groupes de pays Brésil,USA & Chine a été isolé de façon identique par les deux algorithmes. Les deux autres groupes sont très similaires, le Kmeans faisant une distinction plus nette entre le deux.

Analyse des composantes principales

ACP sur le dataset complet

res.pca <- PCA(data, ncp=5, graph=FALSE)

#valeurs propres
#le premiers 5 dimensions sont suffisantes a retenir 77% de la variabilité.
get_eig(res.pca)
##          eigenvalue variance.percent cumulative.variance.percent
## Dim.1  5.5298389963     29.104415770                    29.10442
## Dim.2  3.2240056808     16.968450952                    46.07287
## Dim.3  3.0176326370     15.882277037                    61.95514
## Dim.4  1.5820064079      8.326349515                    70.28149
## Dim.5  1.3629297626      7.173314540                    77.45481
## Dim.6  1.0305509667      5.423952456                    82.87876
## Dim.7  0.8209913958      4.321007347                    87.19977
## Dim.8  0.5861802508      3.085159215                    90.28493
## Dim.9  0.5542824259      2.917275926                    93.20220
## Dim.10 0.3728675920      1.962461010                    95.16466
## Dim.11 0.3037680119      1.598779010                    96.76344
## Dim.12 0.2416567414      1.271877586                    98.03532
## Dim.13 0.1574077285      0.828461729                    98.86378
## Dim.14 0.0833806859      0.438845715                    99.30263
## Dim.15 0.0510155380      0.268502831                    99.57113
## Dim.16 0.0361389848      0.190205183                    99.76134
## Dim.17 0.0237811506      0.125163950                    99.88650
## Dim.18 0.0212619938      0.111905230                    99.99841
## Dim.19 0.0003030493      0.001594996                   100.00000
fviz_eig(res.pca)

dimdesc(res.pca, 1:5)[1:5]
## $Dim.1
## $quanti
##                              correlation      p.value
## total_dispo_alim               0.7925765 1.406036e-38
## viande_dispo_alim              0.7156815 1.872413e-28
## viande_export                  0.6896511 9.403581e-26
## viande_import                  0.6879125 1.391780e-25
## viande_volaille_prod           0.6711672 5.303210e-24
## pib_habitant                   0.6480053 5.605596e-22
## viande_volaille_export         0.6316462 1.190758e-20
## viande_prod                    0.6110670 4.336194e-19
## viande_volaille_dispo_alim     0.5369017 2.643716e-14
## viande_volaille_import         0.4930874 5.501177e-12
## produits_vegetaux_dispo_alim   0.3866192 1.487714e-07
## stab_politique                 0.3816315 2.211503e-07
## population                     0.3307782 8.791702e-06
## prop_import_export            -0.2848131 1.459042e-04
## population_croissance         -0.5109752 6.821221e-13
## taux_malnutrition             -0.6824635 4.673135e-25
## 
## attr(,"class")
## [1] "condes" "list"  
## 
## $Dim.2
## $quanti
##                            correlation      p.value
## viande_prod                  0.6000345 2.680805e-18
## viande_volaille_prod         0.5969222 4.425647e-18
## population                   0.5632873 7.176213e-16
## inflation_2020               0.5550543 2.288235e-15
## prix_conso_2020              0.5443858 9.813350e-15
## prix_prod_index              0.5440910 1.020867e-14
## viande_volaille_export       0.3915092 1.002143e-07
## taux_malnutrition            0.3753148 3.619616e-07
## viande_export                0.3338247 7.176637e-06
## viande_import                0.2782221 2.102574e-04
## viande_volaille_dispo_alim  -0.2742347 2.611266e-04
## viande_dispo_alim           -0.3298676 9.337701e-06
## pib_habitant                -0.3350733 6.599646e-06
## total_dispo_alim            -0.3552062 1.623073e-06
## stab_politique              -0.5859489 2.483750e-17
## 
## attr(,"class")
## [1] "condes" "list"  
## 
## $Dim.3
## $quanti
##                              correlation      p.value
## prix_conso_2020                0.8171193 9.202938e-43
## prix_prod_index                0.8164290 1.230477e-42
## inflation_2020                 0.8025112 3.352935e-40
## stab_politique                 0.3314701 8.397234e-06
## pib_habitant                   0.3195810 1.820037e-05
## viande_dispo_alim              0.2984625 6.649406e-05
## viande_volaille_dispo_alim     0.2589786 5.805844e-04
## total_dispo_alim               0.1499140 4.899260e-02
## produits_vegetaux_dispo_alim  -0.1536967 4.349548e-02
## viande_volaille_export        -0.1787720 1.860653e-02
## taux_malnutrition             -0.1818356 1.665075e-02
## viande_volaille_prod          -0.2990415 6.425731e-05
## viande_prod                   -0.3085708 3.620673e-05
## population                    -0.3282495 1.038797e-05
## population_croissance         -0.4836866 1.571183e-11
## 
## attr(,"class")
## [1] "condes" "list"  
## 
## $Dim.4
## $quanti
##                              correlation      p.value
## prop_import_export             0.5197564 2.339415e-13
## viande_volaille_dispo_alim     0.4103052 2.065258e-08
## viande_volaille_export         0.3568641 1.439701e-06
## viande_export                  0.3088619 3.556662e-05
## viande_dispo_alim              0.2858761 1.374381e-04
## stab_politique                 0.2721511 2.920480e-04
## taux_malnutrition              0.2518475 8.300757e-04
## viande_volaille_prod           0.1865205 1.400597e-02
## viande_import                 -0.2473556 1.034370e-03
## total_dispo_alim              -0.2955996 7.866789e-05
## viande_volaille_import        -0.3438661 3.619584e-06
## produits_vegetaux_dispo_alim  -0.6048330 1.224385e-18
## 
## attr(,"class")
## [1] "condes" "list"  
## 
## $Dim.5
## $quanti
##                              correlation      p.value
## viande_volaille_import         0.6726006 3.919720e-24
## viande_import                  0.5384073 2.170139e-14
## taux_malnutrition              0.2289998 2.440985e-03
## viande_dispo_alim              0.1818847 1.662088e-02
## viande_export                 -0.2368217 1.706448e-03
## total_dispo_alim              -0.2600751 5.490412e-04
## viande_volaille_export        -0.3031153 5.040491e-05
## produits_vegetaux_dispo_alim  -0.5012309 2.159004e-12
## 
## attr(,"class")
## [1] "condes" "list"
#contribution des variables aux axes
fviz_pca_contrib(res.pca, choice = "var", axes=1)

fviz_pca_contrib(res.pca, choice = "var", axes=2)

fviz_pca_biplot(res.pca, repel = TRUE,  select.var= list(cos2 = 0.5))

Les variables qui mieux nous permettent de mieux interpréter les axes sont total_dispo_alim pour la première dimension et viande_prod pour la deuxième. Le deuxième plan est caractérise principalement par prix_prod et produits_vegetaux_dispo_alim.

On peut maintenant appliquer un CAH sur les composantes principales.

#clustering de l'acp
res.clust <- classif(res.pca)
## ```{r, echo = FALSE}
## res.hcpc = HCPC(res, nb.clust = -1, graph = FALSE)
## ```

## 
## ```{r, echo = FALSE, fig.align = 'center', fig.height = 3.5, fig.width = 5.5}
## drawn <-
## c("Venezuela (République bolivarienne du)", "Chine, continentale", 
## "États-Unis d'Amérique", "Brésil", "Inde", "Allemagne", "Pays-Bas"
## )
## par(mar = c(4.1, 4.1, 1.1, 2.1))
## plot.HCPC(res.hcpc, choice = 'map', draw.tree = FALSE, select = drawn, title = '')
## ```
## 
## **Figure - Ascending Hierarchical Classification of the individuals.**
## *The classification made on individuals reveals 4 clusters.*
## 
## 
## The **cluster 1** is made of individuals such as *Venezuela (République bolivarienne du)*. This group is characterized by :
## 
## - high values for the variables *prix_conso_2020*, *prix_prod_index* and *inflation_2020* (variables are sorted from the strongest).
## - low values for the variable *population_croissance*.
## 
## The **cluster 2** is made of individuals such as *Inde*. This group is characterized by :
## 
## - high values for the variables *population_croissance* and *taux_malnutrition* (variables are sorted from the strongest).
## - low values for variables like *viande_dispo_alim*, *total_dispo_alim*, *pib_habitant*, *viande_volaille_dispo_alim*, *stab_politique*, *viande_import*, *viande_volaille_import*, *viande_export*, *viande_volaille_export* and *viande_volaille_prod* (variables are sorted from the weakest).
## 
## The **cluster 3** is made of individuals such as *Allemagne* and *Pays-Bas*. This group is characterized by :
## 
## - high values for the variables *viande_dispo_alim*, *total_dispo_alim*, *pib_habitant*, *viande_volaille_dispo_alim*, *stab_politique*, *viande_volaille_import* and *viande_import* (variables are sorted from the strongest).
## - low values for the variables *population_croissance* and *taux_malnutrition* (variables are sorted from the weakest).
## 
## The **cluster 4** is made of individuals such as *Brésil*, *Chine, continentale* and *États-Unis d'Amérique*. This group is characterized by :
## 
## - high values for the variables *viande_volaille_prod*, *viande_prod*, *viande_volaille_export*, *viande_export*, *population*, *viande_import*, *viande_dispo_alim*, *viande_volaille_dispo_alim* and *total_dispo_alim* (variables are sorted from the strongest).
table(res.clust$data.clust$clust, data.hclust$cluster)
##    
##      1  2  3  4
##   1  0  0  0  1
##   2 79  9  0  0
##   3  4 77  0  0
##   4  0  0  3  0

Les résultats sont très similaires au CAH appliqué précédemment:

  1. Venezuela(crise inflationnaire), (forts valeurs pour les variables prix_conso_2020, prix_prod_index and inflation_2020)
  2. Pays pauvres (forts valeurs pour les variables population_croissance and taux_malnutrition)
  3. Pays développés,
  4. Forts Producteurs

Le groupe 3 c’est ce qu’il nous intéresse car il contient des pays de profil similaires à la France, entre lesquels on pourra sélectionner des candidats potentiels.

source("map.r")
plot_map(data, res.clust$data.clust$clust)
## 
## Attaching package: 'maps'
## The following object is masked from 'package:cluster':
## 
##     votes.repub
## The following object is masked from 'package:purrr':
## 
##     map

ACP sur le groupe 3

On va maintenant se concentrer sur le cluster 3, qui contient les pays plus intéressants sous un profil économique.

g3 <- filter(res.clust$data.clust, clust == 3) %>% select(-clust)

#on va effectuer encore une PCA sur ce groupe
res.pca.g3 <- PCA(g3, ncp = 5)

#4 dimension retiennent 64.11% de l'inertie
fviz_eig(res.pca.g3)

fviz_pca_biplot(res.pca.g3, col.ind = g3$viande_volaille_import, gradient.cols ="OrRd", title = "PCA candidats, importations")

Clustering du groupe 3

res.clust.g3 <- classif(res.pca.g3, graph = FALSE)
## ```{r, echo = FALSE}
## res.hcpc = HCPC(res, nb.clust = -1, graph = FALSE)
## ```
## 
## ```{r, echo = FALSE, fig.align = 'center', fig.height = 3.5, fig.width = 5.5}
## drawn <-
## c("Mexique", "Allemagne", "Fédération de Russie", "Guyana", "Japon", 
## "Luxembourg", "Pays-Bas", "Pologne", "Irlande", "France", "Saint-Kitts-et-Nevis", 
## "Royaume-Uni de Grande-Bretagne et d'Irlande du Nord", "Grenade", 
## "Antigua-et-Barbuda", "Afrique du Sud", "Sainte-Lucie", "Viet Nam", 
## "Chine, Taiwan Province de", "Bahamas")
## par(mar = c(4.1, 4.1, 1.1, 2.1))
## plot.HCPC(res.hcpc, choice = 'map', draw.tree = FALSE, select = drawn, title = '')
## ```
## 
## **Figure - Ascending Hierarchical Classification of the individuals.**
## *The classification made on individuals reveals 3 clusters.*
## 
## 
## The **cluster 1** is made of individuals such as *Antigua-et-Barbuda*, *Bahamas*, *Chine, Taiwan Province de*, *Grenade*, *Guyana*, *Saint-Kitts-et-Nevis* and *Sainte-Lucie*. This group is characterized by :
## 
## - high values for the variables *prop_import_export*, *viande_volaille_dispo_alim*, *taux_malnutrition*, *prix_prod_index* and *prix_conso_2020* (variables are sorted from the strongest).
## - low values for the variables *total_dispo_alim*, *produits_vegetaux_dispo_alim*, *viande_prod*, *viande_volaille_prod*, *population*, *viande_import*, *viande_volaille_import*, *viande_export* and *viande_volaille_export* (variables are sorted from the weakest).
## 
## The **cluster 2** is made of individuals such as *Irlande* and *Luxembourg*. This group is characterized by :
## 
## - high values for the variable *total_dispo_alim*.
## - low values for variables like *viande_volaille_dispo_alim*, *viande_prod*, *viande_volaille_prod*, *population*, *taux_malnutrition*, *prop_import_export*, *viande_import*, *prix_prod_index*, *viande_volaille_import* and *viande_export* (variables are sorted from the weakest).
## 
## The **cluster 3** is made of individuals such as *Afrique du Sud*, *Allemagne*, *France*, *Fédération de Russie*, *Japon*, *Mexique*, *Pays-Bas*, *Pologne*, *Royaume-Uni de Grande-Bretagne et d'Irlande du Nord* and *Viet Nam*. This group is characterized by :
## 
## - high values for the variables *viande_prod*, *viande_volaille_prod*, *population*, *viande_import*, *viande_volaille_import*, *viande_export*, *viande_volaille_export* and *total_dispo_alim* (variables are sorted from the strongest).
## - low values for the variable *prop_import_export*.
fviz_cluster(res.clust.g3)

Nous avons trois clusters résultants:

Cluster 1 Pays de petit taille, isles, pas très riches mais avec un bon niveau de vie, qui ont déjà une très bonne disponibilité alimentaire de viande de volaille (Trinité-et-Tobago, Barbade, Dominique, Jamaïque Saint-Kitts-et-Nevis, etc. ) - forts valeur pour les variables viande_volaille_dispo_alim, prop_import_export, taux_malnutrition, prix_prod_index et prix_conso_2020 (en ordre décroissant). - faibles valeurs pour les variables total_dispo_alim, produits_vegetaux_dispo_alim, pib_habitant, viande_prod, viande_import, population, viande_volaille_prod, viande_volaille_import and viande_export (en ordre croissant).

Cluster 2 Pays avec populations de petite taille, avec le mêmé taux import-export du groupe 3, prix de production relativement plus haut(pourront être considéré comme marché potentiel) (Chypre, Estonie,Tchéquie, Slovénie, Malte,etc. ) - forts valeurs pour les variables stab_politique, pib_habitant* and total_dispo_alim (ordre décroissant). - faible valeurs pour viande_prod, viande_volaille_prod, population, viande_volaille_dispo_alim, viande_import, taux_malnutrition, viande_volaille_import, viande_volaille_export, viande_export et prop_import_export (ordre croissant).

Cluster 3 Pays producteurs, qui importent aussi (France,Italie, Espagne, République de Corée(Sud),Canada ) - forts valeurs pour les variables viande_prod, population, viande_volaille_prod, viande_import, viande_volaille_import, viande_export, viande_volaille_export, produits_vegetaux_dispo_alim et total_dispo_alim (ordre décroissant). - faible valeurs pour stab_politique, prop_import_export and prix_prod_index (ordre croissant).

Visualisation des variables et des individus des trois groupes

variables <- aggregate(res.clust.g3$data.clust[-(ncol(res.clust.g3$data.clust))], list(cluster =res.clust.g3$data.clust$clust), FUN = mean)

#drop first row
var.heat <- scale(variables[-1]) %>% cbind(variables[1]) %>% melt()
## Using cluster as id variables
#heatmap des variables
ggplot(var.heat, aes(variable, cluster)) + 
         geom_tile(aes(fill=value)) + 
         coord_flip() + 
         scale_fill_gradient2() + 
         geom_text(data = melt(variables), aes(label = round(value,2)))+
         theme_classic()
## Using cluster as id variables

#heatmaps des variables et des individus en comparaison au clustering
heatmap(scale(g3), hclustfun=function(x) hclust(x,method="ward.D"), RowSideColors = as.character(res.clust.g3$data.clust$clus))
mytitle = "Heatmap des variables et des individus"
mysubtitle = "Comparaison du CAH avec le clustering effectueé sur l'ACP"
mtext(side=3, line=3, at=-0.07, adj=0, cex=1, mytitle)
mtext(side=3, line=2, at=-0.07, adj=0, cex=0.7, mysubtitle)

On peut aussi visualiser les clusters obtenus sur une carte:

plot_map(g3, res.clust.g3$data.clust$clust)


DBSCAN

library(reticulate)

####DBSCAN
#Candidats potentiels, nouveau marchés

#on va retenir les clusters 2 et 3 pour effecteur un dbscan sur le premieres deux
#composantes principales

candidates <- res.clust.g3$call$X

py_run_file("dbscan.py")

#mis à part Barbade, tous le pays retenus au final font partie du cluster 2
data %>% rownames_to_column('pays') %>% inner_join(py$filtered, by = c("pays"="index")) %>% mutate(pays=pays, indicateur = viande_volaille_import/viande_volaille_prod * pib_habitant / (prix_conso_2020 * prix_prod_index) * population, .keep="used") %>% arrange(desc(indicateur)) %>% head(10)
##                 pays viande_volaille_import viande_volaille_prod population prix_prod_index pib_habitant
## 1  Macédoine du Nord                     40                    1       2083          128.84      16093.3
## 2           Tchéquie                    121                  169      10666           86.48      39933.0
## 3             Suisse                     45                   97       8526           98.22      70663.5
## 4          Slovaquie                     87                   77       5453           95.99      31132.6
## 5           Bulgarie                    108                  118       7052           91.45      22208.5
## 6              Grèce                     82                  246      10522           86.69      29150.7
## 7           Portugal                     85                  353      10256           82.29      34040.7
## 8            Estonie                     30                   19       1323           84.31      35208.0
## 9           Lettonie                     47                   34       1928          100.04      30036.1
## 10           Croatie                     26                   64       4156           96.46      27799.8
##    prix_conso_2020 indicateur
## 1           103.82 100244.979
## 2           113.45  31082.218
## 3           102.29  27819.425
## 4           111.97  17846.446
## 5           117.52  13337.603
## 6           101.74  11592.185
## 7           105.26   9705.330
## 8           114.65   7608.792
## 9           113.11   7074.485
## 10          105.30   4620.989
#On peut aussi essayer sur le dataframe complet
full <- res.clust$call$X

py_run_file("dbscan_fulldf.py")

L’algorithme individue 23 clusters, dont celui qui comprend la France compte Angleterre et Pologne.

data %>% rownames_to_column('pays') %>% inner_join(py$df_db_full) %>% select(pays, label) %>%  arrange(desc(label)) %>% head(10)
## Joining, by = "pays"
##                                                   pays label
## 1                                États-Unis d'Amérique    22
## 2                                  Chine, continentale    21
## 3                                               Brésil    20
## 4                                            Allemagne    19
## 5                                             Pays-Bas    18
## 6                             Chine - RAS de Hong-Kong    17
## 7                                               France    16
## 8                                              Pologne    16
## 9  Royaume-Uni de Grande-Bretagne et d'Irlande du Nord    16
## 10                                               Japon    15

Recommendations

Sur la base des méthodes de clustering utilisées, on peut identifier deux groupes finales de clients :

  1. Pays à cibler en premier lieu pour l’exportation:
res.clust.g3$data.clust %>% rownames_to_column('Pays') %>% filter(clust == 3 & Pays != "France") %>% mutate(Pays = Pays, indicateur= viande_volaille_import/viande_volaille_prod * pib_habitant * population, .keep="used") %>% arrange(desc(indicateur)) %>% head(10) %>% kable(title="Candidats primaires")
Pays viande_volaille_import viande_volaille_prod population pib_habitant indicateur
Chine - RAS de Hong-Kong 821 25 7372 61062.9 14783113149
Japon 1089 2250 127202 41182.4 2535426084
Allemagne 871 1571 83124 53463.4 2463910781
Royaume-Uni de Grande-Bretagne et d’Irlande du Nord 802 1939 67142 46037.9 1278516503
Mexique 983 3377 126191 19928.4 732020546
Pays-Bas 585 1074 17060 56060.9 520943564
Viet Nam 593 947 95546 7585.9 453862539
Espagne 189 1622 46693 40312.5 219332235
Canada 177 1474 37075 48796.8 217244247
Afrique du Sud 515 1762 57793 12627.9 213308272
  1. Marchés émergents, potentiellement intéressants:
res.clust.g3$data.clust %>% filter(clust == 2) %>% rownames_to_column("Pays") %>% mutate(Pays = Pays, indicateur = viande_volaille_import/(viande_volaille_prod * prix_conso_2020) * population * pib_habitant, .keep="used") %>% arrange(desc(indicateur)) %>%  head(10) %>% kable(title="Candidats potentiels")
Pays viande_volaille_import viande_volaille_prod population pib_habitant prix_conso_2020 indicateur
Luxembourg 12 0 604 113590.0 111.14 Inf
Émirats arabes unis 609 48 9631 66968.2 108.24 75601129
Arabie saoudite 640 554 33703 47592.8 115.96 15979818
Macédoine du Nord 40 1 2083 16093.3 103.82 12915563
Koweït 147 61 4137 50478.6 107.09 4699281
République de Corée 170 885 51172 41948.3 113.58 3630367
Belgique 303 470 11482 51111.0 109.65 3450389
Kazakhstan 195 183 18320 25544.3 150.98 3302810
Irlande 105 150 4819 84303.3 92.70 3067749
Autriche 114 152 8891 55297.6 123.88 2976576

Le DBSCAN identifie aussi les pays le plus proches à la France en terme de profil général : Pologne et Royaume. Uni.