library(readr)
library(tidyverse)
library(data.table)
library(knitr)
source("functions.R")
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',]
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:
produits_vegetaux_dispo_alim : total en kcal/personne/jour.total_dispo_alim: total de la disponibilité alimentaire en kcal/personne/jour.viande_dispo_alim : total de la disponibilité alimentaire de viande en kcal/personne/jour.viande_export: total des exportation de viande en milliers de tonnes.viande_import : total des importation de viande en milliers de tonnes.viande_prod : total de la production de viande en milliers de tonnes.viande_volaille_dispo_alim: total de la disponibilité alimentaire en kcal/personne/jour.viande_volaille_export: total exports de viande de volailleviande_volaille_import: total des importations de viande de volaille 10.viande_volaille_prod: total de la productions de viande de volaillepopulation : en milliers de personnes.population_croissance : taux de croissance 2017-2018prix_prod_index: index du prix à la production(viande de volaille)pib_habitant: pib habitant en $ 15 taux_malnutrition: prévalence de la sous alimentationprop_import_export: rapport entre importations et exportations totalesstab_politique: indice de stabilité politiqueinflation_2020: indice d’inflation des prix des produits alimentaires (données 2020)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)
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:
#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
#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 :
Groupe de plus forts producteurs mondiaux, populations massives.
Pays “pauvres” (pib_habitant moyen le plus bas), prix à la conso le plus élevé.
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.
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.
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:
prix_conso_2020, prix_prod_index and inflation_2020)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
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")
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).
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)
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
Sur la base des méthodes de clustering utilisées, on peut identifier deux groupes finales de clients :
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 |
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.