Variable Qualitative: Les variables qualitatives contiennent des valeurs qui expriment une qualité, un état, c’est-à-dire une condition, un statut unique et exclusif comme le sexe, la couleur ou bien encore la catégorie socioprofessionnelle.
Nominale : Une variable est dite qualitative nominale quand ses valeurs sont des éléments d’une catégorie type nom non hiérarchique. En d’autres termes, ses éléments ne peuvent pas se ranger dans une gradation logique, selon une hiérarchie naturelle. exemple : la variable « couleur » est de type qualitative nominale, les valeurs pouvant être prises par celle-ci étant bien de type nom (vert, jaune, noir, rouge, …) avec aucune hiérarchie entre elles.
Ordinale : Une variable qualitative ordinale possède toutes les propriétés de la variable qualitative nominale avec en plus la possibilité de positionner et de hiérarchiser les individus entre eux selon la valeur attachée à leur caractère. exemple: La variable « niveau de confort d’un logement » est de type qualitative ordinale, les valeurs pouvant être prises par celle-ci étant bien de type nom (médiocre, moyen, bon, très bon) et une hiérarchie existe entre les modalités définies.
Variable Quantitative: Les variables quantitatives contiennent des valeurs numériques faisant référence à une unité de mesure reconnue. Pour cette raison, elles sont quelques fois qualifiées de variables métriques. La taille, le poids, la surface, la distance, le revenu, l’âge, le chiffre d’affaire ou bien encore la population (dans le sens du nombre d’habitants) sont des variables quantitatives
Discrète : Une variable est dite discrète quand elle prendre un nombre fini ou dénombrable de valeurs. exemple : Le nombre d’arbres plantés sur les parcelles d’un lotissement a été compté. {0,1,2,…}
Continue : Une variable continue peut, à l’inverse de la variable discrète, prendre un nombre infini ou non dénombrable de valeurs. exemple: variable « température » est une variable quantitative d’intervalle continue. Celle-ci peut en effet prendre une infinité de valeurs quelles que soient les limites retenues.
Les filtres permettent de sélectionner seulement certaines données qui respectent une condition demandée. Les principaux filtre sont les connecteurs logique « et » et « ou ». Ils sont associés à un test qui peut être une égalité ou une inégalité, et dans le cas d’une variable quantitative il peut également être inférieur (ou égal) ou supérieur (ou égal).Il existe aussi le filtre différent.
X=read.delim(file ="https://pmbo.pagesperso-orange.fr/STID/Programmation_statistique_2/sports.txt",
header =T , sep = ";" , dec = "." , fileEncoding ="latin3")
L’opérateur == nous permet voir l’égalité entre deux variables, par exemple voir tous les sports pratiqués des femmes:
X$sport[X$sexe=='F']
## [1] natation badminton equitation basket gymnastique ski_alpin
## [7] ski_alpin gymnastique natation equitation tennis aucun
## [13] handball danse gymnastique snowboard snowboard rugby
## [19] badminton tennis aucun snowboard judo rugby
## [25] natation basket badminton aucun handball rugby
## [31] danse aucun danse handball handball ski_alpin
## [37] natation rugby badminton danse natation basket
## [43] danse equitation equitation ski_alpin badminton equitation
## [49] snowboard snowboard handball basket basket natation
## [55] gymnastique basket basket equitation badminton snowboard
## [61] natation rugby rugby equitation aucun natation
## [67] handball natation danse rugby aucun handball
## [73] rugby basket gymnastique ski_alpin aucun aucun
## [79] tennis snowboard snowboard gymnastique danse football
## [85] aucun ski_alpin rugby basket handball rugby
## [91] natation basket basket ski_alpin rugby ski_alpin
## [97] handball danse tennis handball tennis danse
## [103] snowboard badminton badminton aucun aucun tennis
## [109] natation rugby handball ski_alpin aucun badminton
## [115] equitation equitation natation rugby gymnastique tennis
## [121] handball basket gymnastique ski_alpin aucun snowboard
## [127] equitation
## 18 Levels: aucun badminton basket boules danse equitation ... VTT
L’opérateur & nous permet par exemple de connaitre l’âge moyen des hommes faisant du football (ET mathématique)
mean(X$age[X$sexe=='M' & X$sport=='football'])
## [1] 20.47059
L’opérateur > nous permet par exemple de calculer la moyenne des personnes faisant plus de 175cm (strictement supérieure)
mean(X$poids.kg[X$taille.cm>175])
## [1] 72.54286
De même l’opérateur <= nous permet par exemple de représenter les banques en fonction du nombre annuel de démissions par succursales inférieure où égale à 60.
Y=read.delim("http://pmbo.pagesperso-orange.fr/STID/Programmation_statistique_2/stock_attrition.txt",header=T, dec=".",sep="\t")
Y$banque[Y$dem<=60]
## [1] Alpes Alsace Alsace
## [4] Alsace Alsace Alsace
## [7] Alsace Alsace Alsace
## [10] Atlantique BDP BDP
## [13] BDP BDP BDP
## [16] BDP BDP BDP
## [19] Cote d Azur Cote d Azur Cote d Azur
## [22] Cote d Azur Cote d Azur Loire Lyonnais
## [25] Massif Central Massif Central Massif Central
## [28] Massif Central Massif Central Ouest
## [31] Provencale et Corse Provencale et Corse SGCB
## [34] SGCB SGCB SGCB
## [37] SGCB SGCB SGCB
## [40] SGCB Sud Sud
## [43] SUD OUEST SUD OUEST SUD OUEST
## 20 Levels: Alpes Alsace Atlantique BDP Bourgogne FC BRED ... Val de France
Ou encore cela nous permet de définir de nouvelles variables comme l’IMC par exemple qu’on calcule grâce a cette formule et grâce au filtre <
X$IMC=X$poids.kg/(X$taille.cm/100)^2
X$ID_IMC <- ifelse(X$IMC<18.5,"maigreur",
ifelse(X$IMC<25,"normale",
ifelse(X$IMC<30,"surpoids",
ifelse(X$IMC<35,"obésité modérée"))))
L’opérateur | nous permet par exemple de représenter l’âge des personnes en fonction du fait si elles font de la natation ou si elles font du handball. (OU mathématique)
table(X$age[X$sport=="natation" | X$sport=="handball" ])
##
## 17 18 19 20 21 22 23 24 25 26
## 5 9 3 2 1 4 6 3 5 2
L’ opérateur != (différent) nous permet de sélectionner toutes les lignes sauf celle définie par le != Par exemple le poids de toutes les personnes sauf celles qui font du basket.
table(X$poids.kg[X$sport!="basket"])
##
## 47 48 49 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
## 1 3 11 4 6 6 4 9 17 15 5 20 6 8 14 3 8 8 4 4 2 28 11 2 3 1
## 75 76 78 80 83 88 90
## 5 2 2 3 1 1 1
library(ggplot2)
Une commande utile pour inspecter la structure de données est la commande summary() qui fournit un résumé descriptif univarié pour chaque variable.
summary(Y$dem[Y$annee==1999 & Y$banque!="Alpes"])
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 41.00 54.00 67.37 81.00 199.00
De même la fonction table() nous renvoie les effectifs par modalités.
table(X$age)
##
## 17 18 19 20 21 22 23 24 25 26
## 24 25 23 37 22 26 26 11 19 27
Un histogramme est une représentation graphique permettant de représenter la répartition d’une variable quantitative en la représentant avec des colonnes verticales, représenter la densité nous permet de mieux visualiser la répartition.
ggplot(Y, aes(x=Y$dem)) +
geom_histogram(aes(y=..density..), alpha=1,
position="identity") +
geom_density(alpha=.2,fill="#96ff66") + ggtitle(label = "Histogramme du nombre annuel de démission et sa densité") + theme_gray()
Un boxplot permet d’afficher les distributions d’une variable quantitative, on y retrouve ses quartiles.
boxplot(X[c("poids.kg","taille.cm","rythmcard")],main="Boxplot du poids, de la taille et du rythme cardiaque")
Une fonction de répartition (du nombre de volume annuel de sociétaires ordonné avec la fonction sort) est aussi une façon d’analyser une variable quantitative.
ggplot(Y, aes(sort(Y$soc))) + stat_ecdf(geom = "point") + theme_gray() + labs(title = "Fonction de répartition du volume annuel de sociétaire (trié)")+ theme_gray()
Encore une fois la fonction table() renvoie les effectifs par modalités.
table(X$pballon)
##
## D G
## 213 27
Effectif seulement sur les footballeurs
table(X$pballon[X$sport=="football"])
##
## D G
## 15 3
La fréquence permet aussi une analyse d’une variable qualitative
freq=table(X$pballon)/sum(table(X$pballon));freq
##
## D G
## 0.8875 0.1125
Un barplot peut permettre de représenter des variables qualitatives
ggplot(X) + geom_bar(aes(x = X$sport), fill = "darkseagreen", width = .5)+ ggtitle(label = "Barplot du nombre de personnes en fonction du sport") + theme_gray()
De même on peut aussi faire un piechart afin de représenter une variable qualitative (utilisation de googleVis ici)
library(googleVis)
op <- options(gvis.plot.tag="chart")
Sport= X[(X$sport !="aucun"),]
table_pie <- data.frame(prop.table(table(Sport$sport)))
Pie <- gvisPieChart(table_pie,options=list(title="Proportion des différentes sports"))
plot(Pie)
La fonction FindInterval est très utile pour transformer une variable quantitative en qualitative (intervalle)
?findInterval
échelle = c(0,60,120,200)
qualité = c('faible','moyen','élevé')
f=findInterval(Y$dem,échelle)
table(qualité[f])
##
## élevé faible moyen
## 39 45 49
On peut aussi rendre une variable qualitative en utilisant la fonction as.factor
Cela est utile pour être sur de ne pas faire des calculs avec des variables qui n’ont pas de sens en tant que variable quantitatives.
qualitage <- as.factor(X$age)
summary(X$age)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 17.00 19.00 21.00 21.28 23.00 26.00
summary(qualitage)
## 17 18 19 20 21 22 23 24 25 26
## 24 25 23 37 22 26 26 11 19 27
En définissant la variable age à l’aide d’une table on peut ensuite facilement réaliser un plot.
t=table(X$age);t
##
## 17 18 19 20 21 22 23 24 25 26
## 24 25 23 37 22 26 26 11 19 27
En effet, en regroupeant les valeurs en nombre d’observation ou l’on a eu la valeur on peut représenter un barplot.
barplot(t,main = "Barplot de l'âge avec un nombre de modalités fini",col = "darkseagreen")
Quand on croise deux variables quantitatives, l’idéal est de faire une représentation graphique sous forme de nuage de points à l’aide de la fonction plot.
sp = ggplot(Y, aes(x=dem, y=soc)) + geom_point() + xlab("nombre annuel de démissions par succursales") + ylab("volume annuel de sociétaires par succursales") + labs(title = "Nombre annuel de démission en", subtitle = "fonction du volume annuel de sociétaires") + theme_gray()
sp
On remarque plus haut une dépendance linéaire positive entre les deux variables, on rajoute ici la densité afin d’en savoir plus sur le lien des deux variables
sp + geom_density_2d()
En plus d’une représentation graphique, on peut calculer certains indicateurs permettant de mesurer le degré d’association de deux variables quantitatives.
La corrélation est une mesure du lien d’association linéaire entre deux variables quantitatives. Sa valeur varie entre -1 et 1. Si la corrélation vaut -1, il s’agit d’une association linéaire négative parfaite. Si elle vaut 1, il s’agit d’une association linéaire positive parfaite. Si elle vaut 0, il n’y a aucune association linéaire entre les variables.
cor(Y$dem,Y$soc)
## [1] 0.8824886
Ici la corrélation est élévé, Il y a donc un lien linéaire et positif entre les deux variables (quand la valeur de l’une augmente, la valeur de l’autre augmente également).
Il existe un autre type de corrélation, la corrélation de spearman quand la corrélation n’est pas forte mais qu’on est en présence d’une association monotone, on peut l’utiliser.Plutôt que de se baser sur les valeurs des variables, cette corrélation va se baser sur leurs rangs, c’est-à-dire sur leur position parmi les différentes valeurs prises par les variables.
Quand on est en présence d’une association linéaire entre deux variables, on peut vouloir faire la régression linéaire d’une des variables sur l’autres.
#Intercept est l'ordonnée a l'origine et le coeff associé a poids.kg est de 0.738
#On voit la présence de " *** " cela signifie donc que c'est très significatif
m=lm(X$taille.cm~X$poids.kg);m
##
## Call:
## lm(formula = X$taille.cm ~ X$poids.kg)
##
## Coefficients:
## (Intercept) X$poids.kg
## 124.053 0.738
summary(m)
##
## Call:
## lm(formula = X$taille.cm ~ X$poids.kg)
##
## Residuals:
## Min 1Q Median 3Q Max
## -20.5499 -3.8597 -0.2174 3.5457 15.2838
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 124.05336 2.51798 49.27 <2e-16 ***
## X$poids.kg 0.73804 0.03906 18.89 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.668 on 238 degrees of freedom
## Multiple R-squared: 0.6, Adjusted R-squared: 0.5983
## F-statistic: 357 on 1 and 238 DF, p-value: < 2.2e-16
On peut répresenter cela à l’aide de la fonction “geom_smooth(method=lm)”
ggplot(X, aes(x=taille.cm, y=poids.kg)) +
geom_point()+
geom_smooth(method=lm) + labs(title = "Taille en fonction du poids avec l'ajout d'une régression linéaire")
De même, on peut aussi réaliser des heatmaps
library(plot.matrix)
m=lm(X$taille.cm~X$poids.kg)
mm=m$model
plot(t(mm)%*%as.matrix(mm))
plot(solve(t(mm)%*%as.matrix(mm)))
library(googleVis)
op <- options(gvis.plot.tag="chart")
X$IMC=X$poids.kg/(X$taille.cm/100)^2
IMC=X$IMC
RythmeCardiaque=X$rythmcard
AB=data.frame(IMC,RythmeCardiaque)
IMC_RythmeCard <- gvisTable(AB,options=list(width="300px", height="550px"))
plot(IMC_RythmeCard)
library(ggmosaic)
library(questionr)
library(RColorBrewer)
Afin de croiser deux variables qualitatives on peut réaliser un tableaux croisés, par exemple le sport en fonction du sexe
tab= table(X$sport,X$sexe)
A l’aide du package questionr on peut afficher les pourcentages par lignes avec lprop
lprop(tab)
##
## F M Total
## aucun 41.9 58.1 100.0
## badminton 90.0 10.0 100.0
## basket 54.5 45.5 100.0
## boules 0.0 100.0 100.0
## danse 100.0 0.0 100.0
## equitation 90.9 9.1 100.0
## football 5.6 94.4 100.0
## gymnastique 40.0 60.0 100.0
## handball 44.4 55.6 100.0
## judo 100.0 0.0 100.0
## natation 92.3 7.7 100.0
## rugby 61.9 38.1 100.0
## ski_alpin 90.9 9.1 100.0
## snowboard 100.0 0.0 100.0
## tennis 100.0 0.0 100.0
## tennis_de_table 0.0 100.0 100.0
## volleyball 0.0 100.0 100.0
## VTT 0.0 100.0 100.0
## Ensemble 52.9 47.1 100.0
Ou encore les pourcentages en colonne avec cprop
cprop(tab)
##
## F M Ensemble
## aucun 10.2 15.9 12.9
## badminton 7.1 0.9 4.2
## basket 9.4 8.8 9.2
## boules 0.0 0.9 0.4
## danse 7.1 0.0 3.8
## equitation 7.9 0.9 4.6
## football 0.8 15.0 7.5
## gymnastique 6.3 10.6 8.3
## handball 9.4 13.3 11.2
## judo 0.8 0.0 0.4
## natation 9.4 0.9 5.4
## rugby 10.2 7.1 8.8
## ski_alpin 7.9 0.9 4.6
## snowboard 7.9 0.0 4.2
## tennis 5.5 0.0 2.9
## tennis_de_table 0.0 6.2 2.9
## volleyball 0.0 10.6 5.0
## VTT 0.0 8.0 3.8
## Total 100.0 100.0 100.0
De même on peut effectuer un test de χ² avec la fonction chisq.test On y retrouve le X-squared le χ² c’est-à-dire une “distance” entre notre tableau observé et celui attendu si les deux variables étaient indépendantes. Le DF = Le nombre de degrés de liberté Et enfin la p-value indique la probabilité d’obtenir une valeur de la statistique du χ²
chisq.test(tab)
## Warning in chisq.test(tab): Chi-squared approximation may be incorrect
##
## Pearson's Chi-squared test
##
## data: tab
## X-squared = 103.5, df = 17, p-value = 1.986e-14
chisq.residuals(tab)
## Warning in stats::chisq.test(tab): Chi-squared approximation may be incorrect
##
## F M
## aucun -0.84 0.89
## badminton 1.61 -1.71
## basket 0.11 -0.11
## boules -0.73 0.77
## danse 1.94 -2.06
## equitation 1.73 -1.84
## football -2.76 2.93
## gymnastique -0.79 0.84
## handball -0.61 0.64
## judo 0.65 -0.69
## natation 1.95 -2.07
## rugby 0.57 -0.60
## ski_alpin 1.73 -1.84
## snowboard 2.05 -2.17
## tennis 1.71 -1.82
## tennis_de_table -1.92 2.04
## volleyball -2.52 2.67
## VTT -2.18 2.31
Afin d’analyser deux variables qualitative on peut réaliser un mosaicplot ou la largeur des rectangles correspond au pourcentage des modalités en colonnes.
ggplot(data = X) +
geom_mosaic(aes(x = product(sport), fill=sexe), na.rm=TRUE) +
labs(x="Sport ", title='Répartition des hommes et des femmes en fonction du sport') + scale_fill_manual(values = rev(brewer.pal(8, "Greens"))) +theme_gray()
Afin de croiser une variable quantitative et une variable qualitative, on doit essayer de voir si les valeurs de la variable quantitative se répartissent différemment selon la catégorie d’appartenance de la variable qualitative. Par exemple je veux comparer le rythme cardiaque des sportifs et des non-sportifs.
Aucun_sport= (X$sport=="aucun")
Aucun_sport=as.factor(Aucun_sport)
levels(Aucun_sport)=c("non sportif", "sportif")
Aucun_sport
## [1] non sportif non sportif non sportif non sportif non sportif non sportif
## [7] non sportif non sportif non sportif sportif non sportif non sportif
## [13] non sportif non sportif non sportif non sportif non sportif non sportif
## [19] non sportif non sportif non sportif non sportif non sportif sportif
## [25] non sportif non sportif non sportif non sportif non sportif non sportif
## [31] sportif non sportif non sportif sportif non sportif non sportif
## [37] non sportif non sportif non sportif non sportif non sportif non sportif
## [43] non sportif non sportif non sportif sportif non sportif non sportif
## [49] non sportif non sportif non sportif non sportif non sportif non sportif
## [55] non sportif non sportif non sportif non sportif non sportif sportif
## [61] non sportif non sportif non sportif non sportif non sportif non sportif
## [67] sportif non sportif non sportif non sportif non sportif non sportif
## [73] non sportif sportif non sportif non sportif non sportif non sportif
## [79] non sportif non sportif non sportif non sportif non sportif sportif
## [85] non sportif non sportif non sportif non sportif non sportif non sportif
## [91] non sportif non sportif non sportif non sportif non sportif non sportif
## [97] non sportif non sportif non sportif non sportif non sportif sportif
## [103] non sportif non sportif non sportif non sportif non sportif non sportif
## [109] non sportif non sportif sportif non sportif non sportif non sportif
## [115] non sportif non sportif non sportif non sportif non sportif non sportif
## [121] non sportif non sportif sportif non sportif non sportif non sportif
## [127] sportif non sportif non sportif non sportif non sportif non sportif
## [133] non sportif non sportif non sportif sportif non sportif sportif
## [139] non sportif non sportif non sportif non sportif non sportif sportif
## [145] sportif non sportif non sportif sportif non sportif sportif
## [151] non sportif non sportif non sportif non sportif non sportif non sportif
## [157] non sportif non sportif non sportif sportif non sportif non sportif
## [163] non sportif sportif non sportif non sportif non sportif non sportif
## [169] non sportif non sportif non sportif non sportif non sportif non sportif
## [175] non sportif non sportif non sportif non sportif non sportif non sportif
## [181] non sportif non sportif non sportif non sportif non sportif sportif
## [187] non sportif non sportif non sportif sportif non sportif sportif
## [193] non sportif sportif non sportif non sportif non sportif non sportif
## [199] non sportif non sportif non sportif sportif sportif non sportif
## [205] non sportif non sportif non sportif non sportif non sportif non sportif
## [211] non sportif non sportif non sportif sportif non sportif non sportif
## [217] non sportif non sportif non sportif non sportif non sportif non sportif
## [223] non sportif non sportif non sportif sportif non sportif sportif
## [229] non sportif non sportif non sportif sportif non sportif non sportif
## [235] non sportif non sportif non sportif non sportif non sportif non sportif
## Levels: non sportif sportif
g <- ggplot(X, aes(Aucun_sport, rythmcard))
g + geom_boxplot(aes(fill=sexe)) +
labs(title="Box plot",
subtitle="Rythme cardiaque en fonction de l'activité sportive",
caption="Source: Otmane NOKRI",
x="Activité sportive",
y="Rythme cardiaque") + scale_fill_brewer(palette = "Greens") +theme_gray()
On peut aussi réaliser des histogrammes
ggplot(X, aes(x=X$taille.cm,color=X$sexe, fill=X$sexe)) +
geom_histogram(aes(y=..density..), alpha=0.5, position="identity") + scale_color_manual(values=c("#e0ff5f", "#e0ff5f"))+ geom_density(alpha=.2) +
scale_fill_manual(values=c("#e0ff5f", "#0b2400")) + labs(title = "Histogramme de la taille par sexe") + scale_color_brewer(palette = "Greens") + theme_gray()
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
En appliquant la fonction filter on peut créer deux sous-populations, stockées dans deux nouveaux tableaux de données :
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
Homme=filter(X, sexe == "M")
Femme=filter(X,sexe !="M")
mean(Homme$poids.kg)
## [1] 70.54867
mean(Femme$poids.kg)
## [1] 57.75591
On peut aussi utiliser la fonction tapply qui nous permet de réaliser la même chose et sans package.
tapply(X$poids.kg, X$sexe, mean)
## F M
## 57.75591 70.54867
Il existe aussi différents test comme le t.test (Test de Student), mais il nous faut un facteur de regroupement avec exactement 2 niveaux.
Avec la fonction geom_ridges on peut représenter la densité du nombre de démission en fonction de la banque
library(ggridges)
library(ggplot2)
library(viridis)
library(hrbrthemes)
ggplot(Y, aes(x = Y$dem, y = Y$banque, fill = ..x..)) +
geom_density_ridges_gradient(scale = 3, rel_min_height = 0.01,alpha=0.2) + theme_gray() +
scale_fill_viridis(name = "T", option = "D") +labs(title ="Densité du nombre de démission", subtitle = "par succursales en fonction de la banque" ) +
theme_ipsum() +
theme(
legend.position="none",
panel.spacing = unit(0.1, "lines"),
strip.text.x = element_text(size = 8))
On peut aussi réaliser un dendrogramme qui nous permet d’analyser la distance entre les classes. (voir projet classif)
Y=read.delim("http://pmbo.pagesperso-orange.fr/STID/Programmation_statistique_2/stock_attrition.txt",header=T, dec=".",sep="\t")
Y <- aggregate( dem ~ banque, data = Y, FUN = mean)
agg <- aggregate(list(Y$dem), by = list(Y$banque), mean)
colnames(agg)=c("banque","dem")
hc <- hclust(dist(agg), "ave")
## Warning in dist(agg): NAs introduits lors de la conversion automatique
hc[["labels"]]=c("SGCB","Alpes","Alsace","Atlantique","BDP","Bourgogne FC",
"BRED","Centre Atlantique","Cote Azur","Loire Lyonnais","Lorainne Champagne",
"Massif Central","Nord","Occitane","Ouest","Provencale Et Corse","Rives de Paris","Sud","Sud Ouest","Val de France")
plot(hc)
library(googleVis)
op <- options(gvis.plot.tag="chart")
Enfin, on peut aussi réaliser une carte à l’aide de GoogleVis
W=read.delim("https://pmbo.pagesperso-orange.fr/STID/Programmation_statistique_2/wdi.txt",header=T,dec=".",sep="\t")
GDP2000=subset(W,(annee=='YR2000') & (indicateur=='GDP per capita growth (annual %)'))
library(googleVis)
Geo=gvisGeoChart(GDP2000, locationvar="pays",
colorvar="valeur",
options=list(projection="kavrayskiy-vii",colors="['sandybrown','limegreen']"))
plot(Geo)
A l’aide de la fonction tapply on peut analyser ce type de variables
tapply(X$taille.cm,list(X$sexe,X$mecriture),mean)
## D G
## F 164.5673 166.6087
## M 178.1959 177.3750
a=tapply(X$taille.cm[X$mecriture=="D"],list(X$sport[X$mecriture=="D"],X$sexe[X$mecriture=="D"]), mean)
is.na(a)
## F M
## aucun FALSE FALSE
## badminton FALSE FALSE
## basket FALSE FALSE
## boules TRUE FALSE
## danse FALSE TRUE
## equitation FALSE FALSE
## football FALSE FALSE
## gymnastique FALSE FALSE
## handball FALSE FALSE
## judo FALSE TRUE
## natation FALSE FALSE
## rugby FALSE FALSE
## ski_alpin FALSE FALSE
## snowboard FALSE TRUE
## tennis FALSE TRUE
## tennis_de_table TRUE FALSE
## volleyball TRUE FALSE
## VTT TRUE FALSE
a=na.exclude(a)
a
## F M
## aucun 163.1538 177.3529
## badminton 169.0000 169.0000
## basket 170.0000 194.0000
## equitation 163.0000 165.0000
## football 158.0000 180.0769
## gymnastique 166.6667 170.0000
## handball 163.5833 176.6000
## natation 162.0000 170.0000
## rugby 162.2500 178.5714
## ski_alpin 160.0000 172.0000
## attr(,"na.action")
## boules tennis_de_table volleyball VTT danse
## 4 16 17 18 5
## judo snowboard tennis
## 10 14 15
## attr(,"class")
## [1] "exclude"
barplot(a,beside=T,main = "Barplot de la taille en fonction du sport, du sexe et de la main d'écriture",col = c("darkseagreen","olivedrab1","palegreen1"))
library(googleVis)
op <- options(gvis.plot.tag="chart")
On peut réaliser un BubblePlot avec le package GoogleVis
attach(X)
## The following object is masked _by_ .GlobalEnv:
##
## IMC
BubbleTest=data.frame(
sport=levels(sport),
taille=tapply(taille.cm,sport,mean),
poids=tapply(poids.kg,sport,mean),
rythm=tapply(rythmcard,sport,mean))
library(googleVis)
Bubble <- gvisBubbleChart(BubbleTest, idvar="sport",
xvar="taille", yvar="poids",
sizevar="rythm",
options=list(
hAxis='{minValue:150, maxValue:185}'),)
plot(Bubble)
Un streamgraph est aussi une analyse possible
library(streamgraph)
W=read.delim("https://pmbo.pagesperso-orange.fr/STID/Programmation_statistique_2/wdi.txt",header=T,dec=".",sep="\t")
Gini= W[W$indicateur =="GINI index",]
annee=gsub("YR","",as.character(factor(Gini$annee)))
annee=as.numeric(annee)
Gini=cbind(Gini,annee)
Gini=Gini[,-3]
V <- Gini[order(Gini$pays, Gini$valeur,decreasing = T),]
pp <- streamgraph(V, key="pays", value="valeur", date="annee", height="300px", width="1200px") %>% sg_legend(show=TRUE, label="names: ") %>%
sg_fill_brewer("Pastel1")
pp
Grâce à ce code on peut réaliser un plot sous forme de gif représentant le PIB par pays en fonction de l’espérance de vie et ceci chrnologiquement et classé par pays.
W=read.delim("https://pmbo.pagesperso-orange.fr/STID/Programmation_statistique_2/wdi.txt",header=T,dec=".",sep="\t")
library(plotly)
library(gapminder)
Pop = W[W$indicateur=="Population, total", ]
GDP = W[W$indicateur=="GDP per capita growth (annual %)", ]
PopGDP=merge(Pop,GDP,by= c("pays","annee"))
annee=gsub("YR","",as.character(factor(PopGDP$annee)))
annee=as.numeric(annee)
PopGDP=cbind(PopGDP,annee)
PopGDP=PopGDP[,-2]
life_expectancy=read.csv("life-expectancy.csv",header =T,dec=".",sep =",") #une base de données trouvé sur internet avec l'espérance de vie par pays
names(life_expectancy)=c("pays","code","annee","life expectancy")
Test2=merge(PopGDP,life_expectancy,by=c("pays","annee"))
Test3=na.omit(Test2)
Test3=Test3[,-7]
Test4=subset(Test3,pays!="World")
PopGDP=Test4
colnames(PopGDP)=c("Pays","Annee","Indicateur.x","Population","Indicateur.y","PIB par pays","Esperance de vie")
p <- gapminder %>%
plot_ly(
x = ~PopGDP$"PIB par pays",
y = ~PopGDP$"Esperance de vie",
size = ~PopGDP$"Population",
color = ~PopGDP$"Pays",
frame = ~PopGDP$"Annee",
text = ~PopGDP$"Pays",
hoverinfo = "text",
type = 'scatter',
mode = 'markers'
) %>%
layout(
xaxis = list(
type = "log"
)
)
p
## Warning in RColorBrewer::brewer.pal(N, "Set2"): n too large, allowed maximum for palette Set2 is 8
## Returning the palette you asked for with that many colors
## Warning in RColorBrewer::brewer.pal(N, "Set2"): n too large, allowed maximum for palette Set2 is 8
## Returning the palette you asked for with that many colors
## Warning in registerFrames(p, frameMapping = frameMapping): production de NaN
## Warning in p$x$data[firstFrame] <- p$x$frames[[1]]$data: le nombre d'objets à
## remplacer n'est pas multiple de la taille du remplacement