Vous êtes sur la page 1sur 24

Etude des données EauxFM.

txt
Projet d’Analyse de Données

Par :
Dro Kieu DÉLI
Malo LE RESTE
Étudiants en Master 1 Data Science

Année académique : 2021-2022


Etude des données EauxFM.txt Analyse de données X1MS010

Table des matières

Table des matières ................................................................................................................................ 2

Liste des figures...................................................................................................................................... 3

Introduction ............................................................................................................................................. 4

1. Description univariée et bivariée .............................................................................................. 5

1.1. Présentation du fichier EauxFM.txt ................................................................................. 5

1.2. Description univariée ............................................................................................................. 5

1.3. Description bivariée ............................................................................................................... 7

2. Description multivariée ................................................................................................................. 9

2.1. Obtention des résultats de calculs de l’ACP ................................................................. 9

2.1.1. Approche par librairie R............................................................................................... 9

2.1.2. Approche par fonction personnelle ......................................................................10

2.1.3. Comparaison ....................................................................................................................11

2.2. Interprétation des résultats ..............................................................................................11

Conclusion ..............................................................................................................................................14

Bibliographie .........................................................................................................................................15

Annexes ....................................................................................................................................................16

Année académique 2021 – 2022 Page | 2


Etude des données EauxFM.txt Analyse de données X1MS010

Liste des figures

Figure 1 Analyse synthétique des variables .............................................................................. 6


Figure 2 Boites à moustache............................................................................................................. 6
Figure 3 Boîtes à moustache du pH ............................................................................................... 7
Figure 4 Visualisation des corrélations entre les variables ............................................... 8
Figure 5 Utilisation de FactoMineR ............................................................................................... 9
Figure 6 Valeurs propres FactoMineR ......................................................................................... 9
Figure 7 Coordonnées, qualité et contribution associées au 3 premiers axes.........10
Figure 8 Signature et retour de notre fonction ......................................................................10
Figure 9 Utilisation de notre fonction ........................................................................................11
Figure 10 Représentation des individus dans les axes factoriels ..................................12
Figure 11 Cercle de corrélation .....................................................................................................12

Année académique 2021 – 2022 Page | 3


Etude des données EauxFM.txt Analyse de données X1MS010

Introduction

Selon J-P. Fénelon : « L’analyse des données est un ensemble de techniques pour
découvrir la structure, éventuellement compliquée, d’un tableau de nombres à
plusieurs dimensions et de traduire par une structure plus simple et qui la résume
au mieux. Cette structure peut le plus souvent, être représentée graphiquement »
[1].

Les bases théoriques de l’analyse de données débutaient leur développement


autour du XXe siècle mais c’est l’arrivée de l’informatique qui a étendu son
utilisation. L’efficacité des machines à effectuer des opérations sur des matrices
multidimensionnelles permet d’explorer des tableaux contenant des milliers de
lignes et des centaines de colonnes.

Dans le cadre de notre cursus académique (Master Informatique parcours Data


Science), nous sommes amenés à effectuer une : étude des données du fichier
EauxFM.txt1.

L’objectif est de ce projet est de confronter les acquis théoriques à une application
industrielle de l’analyse de données. Une évaluation suivra la fourniture du présent
document.

Notre démarche s’inscrit dans le plan défini pour la tenue de cet exercice. Nous
effectuons dans un premier temps des descriptions univariées et bivariée du
tableau où nous retrouverons respectivement des résultats descriptifs individuels
et deux-à-deux des variables. Nous terminons notre travail par une analyse
multivariée selon la méthode dite « analyse en composantes principales » (ACP)
sous le langage R.

1 Fichier présent sur l’espace numérique des auditeurs du cours d’Analyse de Données (X1MS010)

Année académique 2021 – 2022 Page | 4


Etude des données EauxFM.txt Analyse de données X1MS010

1. Description univariée et bivariée

1.1. Présentation du fichier EauxFM.txt

Le fichier étudié regroupe les données sur la composition d’eaux de marque en


France et au Maroc.

Ces eaux sont caractérisées par :

• 9 variables quantitatives : concentrations en minéraux (Ca, Mg, Na, K, Cl,


NO3, SO4, HCO3) données en mg/L et pH ;
• 3 variables qualitatives : nom, nature (plate ou gazeuse), pays (France ou
Maroc).

Nous nous intéresserons ici aux variables quantitatives, celles-ci concernent les
compositions minérales des eaux, précisément la concentration (en mg/L) des
minéraux que nous interpréterons avec une mise en relation des variables
qualitatives.

1.2. Description univariée

La statistique univariée l’étude les caractéristiques individuelles de chaque


variable du tableau de données.

Pour effectuer la description univariée :

i. On utilise le notebook Jupyter pour exécuter nos scripts ;


ii. Les lignes de code suivantes servent à charger les données du fichier.

iii. La fonction summary donne les valeurs extrêmes (minimales et


maximales) et les quartiles des variables.

Année académique 2021 – 2022 Page | 5


Etude des données EauxFM.txt Analyse de données X1MS010

Figure 1 Analyse synthétique des variables

iv. Ces résultats peuvent être mis en visualisation par des boites à
moustaches comme suit :

Figure 2 Boites à moustache

Année académique 2021 – 2022 Page | 6


Etude des données EauxFM.txt Analyse de données X1MS010

La représentation permet de visualiser la répartition des valeurs à l’aide des


quartiles pour une analyse plus aisée. On note que la différence d’ordre de
grandeur « aplatit » certaines figures, ce qui nous fait perdre des informations.

Nous nous proposons d’étudier les valeurs du pH et on obtient :

Figure 3 Boîtes à moustache du pH

Le pH moyen des eaux est de 7. Dans le détail, celui des eaux gazeuses est de 6,2
(légèrement acide) contre 7,3 (légèrement neutre) pour les eaux plates.

1.3. Description bivariée

La statistique bivariée l’étude des relations entre deux variables. Nous


déterminerons les coefficients de corrélation linéaire pour identifier les variables
dont l’évolution des concentrations est similaire ou contraire.

Pour effectuer la description bivariée :

v. On utilise le notebook Jupyter pour exécuter nos scripts ;


vi. Les lignes de code suivantes servent à charger les données du fichier.

Année académique 2021 – 2022 Page | 7


Etude des données EauxFM.txt Analyse de données X1MS010

vii. La fonction corrplot permet de visualiser les corrélations entre les


variables dans un tableau de corrélation

Figure 4 Visualisation des corrélations entre les variables

On peut noter :

• une forte corrélation positive (supérieure à 0.85) pour les couples K/Na,
K/HCO3, Na/HCO3 et Ca/SO4 ;
• une corrélation négative moyenne (entre -0.24 et -0.43) pour les couples
Cl/pH, K/pH et HCO3/pH.

Il faut signifier que la corrélation n’entraine pas une relation de causalité entre les
variables, il peut exister un facteur qui influe les concentrations de chaque couple.

Année académique 2021 – 2022 Page | 8


Etude des données EauxFM.txt Analyse de données X1MS010

2. Description multivariée

2.1. Obtention des résultats de calculs de l’ACP

2.1.1. Approche par librairie R


Nous utilisons la librairie FactoMineR.

Figure 5 Utilisation de FactoMineR

Les valeurs propres obtenues sont :

Figure 6 Valeurs propres FactoMineR

Année académique 2021 – 2022 Page | 9


Etude des données EauxFM.txt Analyse de données X1MS010

Figure 7 Coordonnées, qualité et contribution associées au 3 premiers axes

2.1.2. Approche par fonction personnelle


Implémentation

L’implémentations complète de notre fonction est fournie en annexe du présent


document. On retrouve ci-dessous un résumé :

Figure 8 Signature et retour de notre fonction

La fonction prend en paramètre un tableau de données X. Elle est personnalisable


avec le nombre d’axes à retenir (naxes), normée ou non (scaled) et une option de
choix de dimension automatique (choose.dim).

Année académique 2021 – 2022 Page | 10


Etude des données EauxFM.txt Analyse de données X1MS010

Elle retourne un tableau nommé de type resPCA (voir annexe) qui regroupe tous
les résultats de l’ACP.

Utilisation

Nous effectuons une ACP normée. Les données ont été prétraitées (suppression
des valeurs manquantes, et des variables textuelles).

Figure 9 Utilisation de notre fonction

Outre les graphiques, présentés dans l’interprétation, elle affiche des informations
dans l’interpréteur.

2.1.3. Comparaison
Les deux fonctions présentes des résultats similaires pour l’ACP.

Notre approche est cependant plus intéressante en ce sens qu’elle propose une
plus grande maniabilité d’édition pour rajouter des actions supplémentaires.

Toutefois, on peut penser à une optimisation des complexités de traitement pour


des volumes de données importants.

2.2. Interprétation des résultats

Nous obtenons la représentation des dans les deux premiers axes :

Année académique 2021 – 2022 Page | 11


Etude des données EauxFM.txt Analyse de données X1MS010

Figure 10 Représentation des individus dans les axes factoriels

Ainsi que le cercle de corrélation pour les variables :

Figure 11 Cercle de corrélation

Année académique 2021 – 2022 Page | 12


Etude des données EauxFM.txt Analyse de données X1MS010

L’interprétation des figures précédentes nous permet de dire :


• Les variables NO3 et PH sont mal représentées ; on remarque qu’il y a assez
de valeurs manquantes pour ces variables dans le tableau ce qui peut biaiser
la représentation obtenue.
• Les autres variables sont bien représentées et toutes anti-corrélées à la
première composante.
• Les variables les plus corrélées négativement à l’axe 1 sont : HCO3, K, Na et
Mg
• Les variables les plus corrélées (positivement) à l’axe 2 sont : Ca et SO4
• Les eaux Maroc (en rouge) ont une représentation similaire à celles présente
en France.

Année académique 2021 – 2022 Page | 13


Etude des données EauxFM.txt Analyse de données X1MS010

Conclusion

L’objectif de notre étude était d’effectuer une étude des données du fichier
EauxFM.txt à l’aide d’analyses univariée, bivariée et multivariée.
Nous avons utilisé l’ACP pour l’analyse multivariée en utilisant une fonction
disponible dans l’environnement du langage et une seconde que nous avons écrite.
Les résultats des deux ACP ont concordé.
Ce projet nous a permis d’allier théorie et pratique dans le cours d’analyse de
données. Une voie de développement serait de proposer une interface graphique
qui utilise notre programme pour effectuer des ACP ou encore déduire des
interprétations à partir des résultats obtenus.

Année académique 2021 – 2022 Page | 14


Etude des données EauxFM.txt Analyse de données X1MS010

Bibliographie
[1] Fenelon, J.P., (1981). Qu’est-ce que l’analyse des données ? Lefonen.

Année académique 2021 – 2022 Page | 15


Etude des données EauxFM.txt Analyse de données X1MS010

Annexes
Le décalage dans la numérotation est du au fait que les programmes ont été rajoutés après la génération du
PDF, c’était un moyen efficace de garder une bonne mise en forme (indentation et couleurs).
Une documentation détaillée des fonctions est fournie dans l’archive du projet.

FONCTION PERSONNELLE

Année académique 2021 – 2022 Page | 16


In [ ]: library(ggplot2)

# Homemade PCA functions

# PCA results class


resPCA = setRefClass("resPCA",
fields = list(
X="data.frame",
Z="matrix",
naxes="numeric",
l="numeric",
pctInertia="numeric",
a="matrix",
u="matrix",
F="function",
G="function",
individuals="list",
variables="list",
applyNew="function"
)
)

# PCA function
PCA = function(X, naxes=NULL, scaled=TRUE, choose.dim=TRUE) {
vnames = names(X)
# scaling the matrix X
Xmeans = colMeans(X)
Z = t(t(X) - Xmeans)
Zstd = sqrt(colMeans(Z**2))
if (scaled) Z = t(t(Z) / Zstd)
# computing cov or cor matrix
if (scaled) S = cor(Z)
else S = cov(Z)
# computing eigen values and vectors
eigenZ = eigen(S)
l = eigenZ$values
a = eigenZ$vectors
# computing u
Q = diag(dim(X)[2])
u = Q %*% a

# plotting barplot of lambda values and choosing the number of axes


if (is.null(naxes)) naxes = choose.naxes(l, choose.dim=choose.dim)

# principal components
F = function(k) as.matrix(Z) %*% u[,k]
# var coords
G = function(k) t(sqrt(l[k]) * t(u[,k]))
# applyNew function for new observations
applyNew = function(x, s=FALSE, k=NULL, v=NULL) {
if (!s) {
x = t(t(x) - Xmeans)
if (scaled) x = t(t(x) / Zstd)
}
if (is.null(k)) k = 1:naxes
if (is.null(v))
return(as.matrix(x) %*% u[,k])
else
return(as.matrix(x) %*% u[v,k])
}

# compute coords of individuals


coords = F(1:naxes)
# compute coords of variables
varCoords = G(1:naxes)

# computation of quality and contribution


# individuals
D = 1 / dim(X)[1]
xi = apply(Z**2, 1, sum) * D
iqlt = D * coords**2 / xi
ictr = D * t(t(coords**2) / l[1:naxes])
# variables
vqlt = t(t(varCoords**2) / apply(G(1:length(l))**2, 1, sum)[1:naxes])
vctr = t(t(u[, 1:naxes] * varCoords) / sqrt(l[1:naxes]))

# return results
return(resPCA(
X=X,
Z=Z,
naxes=naxes,
l=l,
pctInertia=l*100/length(l),
a=a,
u=u,
F=F,
G=G,
individuals=list(coords=coords, quality=iqlt, contribution=ictr),
variables=list(coords=varCoords, quality=vqlt, contribution=vctr, names=vnames),
applyNew=applyNew
))
}

# function to choose the number of axes for the PCA


choose.naxes = function(l, choose.dim=TRUE) {
# plotting barplot of lambda values
barplot(l, names.arg=1:length(l), xlab="component", ylab="lambda (eigen value)")
lines(c(0, 1.2 * length(l)), c(1, 1), col="red")
# choosing the number of axes
pctInertia = l*100/length(l)
if (choose.dim) {
choice = NULL
cat("Total inertia % by number of axes:\n")
cat(cumsum(pctInertia), "\n")
while (is.null(choice) || choice <= 0 || choice > length(l)) {
c = readline("Choose the number of axes to realize the PCA on: ")
if (!is.na(as.numeric(c))) {
choice = as.integer(c)
if (choice <= 0 || choice > length(l)) {
cat("Please choose a valid number of axes (between 1 and ", length(l), ")\n", sep="")
}
}
}
return(choice)
}
# Automatically choosing the number of axes
return(sum(cumsum(pctInertia) < 80) + 1)
}
# variables plot function on PCA results
pcaVarPlot = function(pca, axes=NULL) {
# plotting the circle of variables
# plot(pca$variables$coords, xlim=c(-1,1), ylim=c(-1, 1))
if (is.null(axes)) axes = c(1, pca$naxes)
for (a in seq(from=axes[1], to=axes[2], by=2)) {
b = a+1
if (b > pca$naxes) {
b = a
a = 1
}
coords = as.data.frame(pca$variables$coords[, c(a, b)])
varplot = ggplot(data=coords, aes(x=V1, y=V2, label=pca$variables$names)) +
xlab(paste("Axe", a)) +
ylab(paste("Axe", b)) +
xlim(-1, 1) +
ylim(-1, 1) +
geom_hline(yintercept=0, linetype=2) +
geom_vline(xintercept=0, linetype=2) +
geom_function(aes(), fun=function(x) sin(acos(x))) +
geom_function(aes(), fun=function(x) -sin(acos(x))) +
geom_segment(aes(x=0, y=0, xend=V1, yend=V2), arrow=arrow()) +
geom_label()
if (b < axes[2]) print(varplot)
}
return(varplot)
}

# individuals plot function on PCA results


pcaIndPlot = function(pca, axes=NULL, ind_labels=NULL) {
# plotting the observations after pca
# plot(pca$individuals$coords)
if (is.null(axes)) axes = c(1, pca$naxes)
for (a in seq(from=axes[1], to=axes[2], by=2)) {
b = a+1
if (b > pca$naxes) {
b = a
a = 1
}
coords = as.data.frame(pca$individuals$coords[, c(a, b)])
indplot = ggplot(data=coords, aes(x=V1, y=V2)) +
xlab(paste("Axe", a)) +
ylab(paste("Axe", b)) +
geom_hline(yintercept=0, linetype=2) +
geom_vline(xintercept=0, linetype=2) +
geom_point()
if (!is.null(ind_labels)) indplot = indplot + geom_text(aes(x=V1, y=V2, label=ind_labels))
if (b < axes[2]) print(indplot)
}
return(indplot)
}
Etude des données EauxFM.txt Analyse de données X1MS010

APPLICATION DE LA
FONCTION SUR EauxFM.txt

Année académique 2021 – 2022 Page | 17


In [ ]: library(ggplot2)

# Data import
eauxfm = read.table(file="EauxFM.txt", sep="\t", header=TRUE)

eauxfm$Nature = as.factor(eauxfm$Nature)
eauxfm$Pays = as.factor(eauxfm$Pays)
View(eauxfm)

# Data quick desc


dim(eauxfm)
head(eauxfm)
summary(eauxfm)

# Univariate description
boxplot(eauxfm$PH)

# Omit NA observations
na.count = function(x) {
return(sum(is.na(x)))
}

na_count = na.count(eauxfm)
cat("NA count:", na_count, "\n")
eauxfm_no_na = na.omit(eauxfm)
dim(eauxfm_no_na)
# Omit NA isn't a viable solutions, too many NA, losing too many observations if we simply discard them all

# Figuring out what to do with the NA's observations


sapply(eauxfm, na.count)
dim(eauxfm)[1]
round(sapply(eauxfm, na.count) * 100 / dim(eauxfm)[1], 2)
new_eauxfm = eauxfm[, names(eauxfm) != "NO3" & names(eauxfm) != "PH"]
na.count(new_eauxfm)
dim(new_eauxfm)[1]
new_eauxfm_no_na = na.omit(new_eauxfm)
dim(new_eauxfm_no_na)[1]
# Applying function PCA
source("pca_func.R")

# Seperating France and Maroc waters


data_eaux_f = new_eauxfm_no_na[new_eauxfm_no_na$Pays == "France", 3:9]
data_eaux_m = new_eauxfm_no_na[new_eauxfm_no_na$Pays == "Maroc", 3:9]

# Applying PCA on France waters


# pca = PCA(data_eaux_f) # 2 axes are enough because it covers more than 80 % of the total inertia and ther is a hu
pca = PCA(data_eaux_f, naxes=2)

# Plotting results
pcaVarPlot(pca)
pcaIndPlot(pca)
pcaIndPlot(pca, ind_labels=new_eauxfm_no_na[new_eauxfm_no_na$Pays == "France", "Nom"])

# Adding Maroc waters on the individuals plot


maroc_coords = pca$applyNew(data_eaux_m)
pcaIndPlot(pca) +
geom_point(aes(x=V1, y=V2), data=as.data.frame(maroc_coords), color="red")

Vous aimerez peut-être aussi