arbre+prix
BIN
APP/Rstudio.lnk
Normal file
1
INSA/AnaDonn
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 223c58299348a8c76c78502cc7c098fe214946a3
|
BIN
INSA/TP anadon/.RData
Normal file
171
INSA/TP anadon/.Rhistory
Normal file
|
@ -0,0 +1,171 @@
|
|||
setwd("C:/Users/PC/Desktop/INSA/anadonn")
|
||||
library(knitr)
|
||||
## Global options
|
||||
options(max.print="75")
|
||||
opts_chunk$set(echo=FALSE,
|
||||
eval=FALSE,
|
||||
cache=FALSE,
|
||||
prompt=FALSE,
|
||||
tidy=TRUE,
|
||||
comment=NA,
|
||||
message=FALSE,
|
||||
warning=FALSE,
|
||||
class.source="badCode")
|
||||
opts_knit$set(width=75)
|
||||
donnees <- read.table("DataProjet3MIC-2425.txt",header=TRUE, sep=";")
|
||||
str(donnees)
|
||||
summary(donnees)
|
||||
ggplot(data = donnees)+
|
||||
geom_point(aes(x=ExpT1,y=T1_1H_R1))
|
||||
library(corrplot)
|
||||
library(ggplot2)
|
||||
library(gridExtra)
|
||||
library(forcats)
|
||||
library(reshape2)
|
||||
library(BioStatR)
|
||||
library(FactoMineR)
|
||||
library(factoextra)
|
||||
library(knitr)
|
||||
## Global options
|
||||
options(max.print="75")
|
||||
opts_chunk$set(echo=FALSE,
|
||||
eval=FALSE,
|
||||
cache=FALSE,
|
||||
prompt=FALSE,
|
||||
tidy=TRUE,
|
||||
comment=NA,
|
||||
message=FALSE,
|
||||
warning=FALSE,
|
||||
class.source="badCode")
|
||||
opts_knit$set(width=75)
|
||||
donnees <- read.table("DataProjet3MIC-2425.txt",header=TRUE, sep=";")
|
||||
head(donnees,200)
|
||||
str(donnees)
|
||||
summary(donnees)
|
||||
ggplot(data = donnees)+
|
||||
geom_point(aes(x=ExpT1,y=T1_1H_R1))
|
||||
apply(donnees[,1:36],2,var)
|
||||
apply(donnees[,1:36],2,mean)
|
||||
hist(donnees$T1_1H_R1)
|
||||
ggplot(donnees,aes(x=T1_1H_R1))+geom_boxplot()
|
||||
library(knitr)
|
||||
## Global options
|
||||
options(max.print="75")
|
||||
opts_chunk$set(echo=TRUE,
|
||||
cache=FALSE,
|
||||
prompt=FALSE,
|
||||
tidy=TRUE,
|
||||
comment=NA,
|
||||
message=FALSE,
|
||||
warning=FALSE,
|
||||
class.source="badCode")
|
||||
opts_knit$set(width=75)
|
||||
library(corrplot)
|
||||
library(ggplot2)
|
||||
library(gridExtra)
|
||||
library(forcats)
|
||||
library(reshape2)
|
||||
library(BioStatR)
|
||||
dim(wine)
|
||||
nrow(wine)
|
||||
ncol(wine)
|
||||
head(wine)
|
||||
wine <- read.table("wine.txt",header=TRUE)
|
||||
head(wine)
|
||||
dim(wine)
|
||||
nrow(wine)
|
||||
ncol(wine)
|
||||
is.data.frame(wine)
|
||||
names(wine)
|
||||
colnames(wine)
|
||||
str(wine)
|
||||
wine$Qualite<-as.factor(wine$Qualite)
|
||||
wine$Type<-factor(wine$Type,labels=c("blanc","rouge"))
|
||||
head(wine)
|
||||
summary(wine)
|
||||
gEx <- ggplot(data=wine)
|
||||
summary(gEx)
|
||||
names(gEx)
|
||||
gEx$layers
|
||||
ggplot(data=wine,aes(x=Densite,y=Alcool))+
|
||||
geom_point()
|
||||
ggplot(data=wine)+
|
||||
geom_point(aes(x=Densite,y=Alcool,color=Type))
|
||||
ggplot(data=wine)+
|
||||
geom_point(aes(x=Densite,y=Alcool),color="blue")
|
||||
# A COMPLETER
|
||||
summary(wine$Type)
|
||||
levels(wine$Type
|
||||
)
|
||||
table(wine$Type)
|
||||
g1<-ggplot(wine, aes(x=Type))+
|
||||
geom_bar()+
|
||||
ylab("")+ggtitle("Effectifs")
|
||||
g2<-ggplot(wine, aes(x = Type)) +
|
||||
geom_bar(aes(y = (..count..)/sum(..count..)))+ylab("")+ggtitle("Frequences")
|
||||
df <- data.frame(group = levels(wine$Type),
|
||||
value = as.vector(table(wine$Type))/nrow(wine))
|
||||
g3<-ggplot(df, aes(x="", y=value, fill=group))+
|
||||
geom_bar(width = 1, stat = "identity")+
|
||||
coord_polar("y", start=0)+
|
||||
theme(legend.position="bottom")
|
||||
grid.arrange(g3,g1,g2,ncol=3)
|
||||
wine$Qualite <- fct_relevel(wine$Qualite,"bad","medium","good")
|
||||
EffQual=as.vector(table(wine$Qualite))
|
||||
FreqQual= data.frame(Eff = EffQual, Freq = EffQual/length(wine$Qualite), FreqCumul=cumsum(EffQual)/length(wine$Qualite))
|
||||
rownames(FreqQual)=levels(wine$Qualite)
|
||||
knitr::kable(FreqQual, caption = 'Description de la variable Qualite',booktabs = TRUE,digits=3)
|
||||
df <- data.frame(Qualite = levels(wine$Qualite), value = table(wine$Qualite),
|
||||
valuecumul = 100 * cumsum(prop.table(table(wine$Qualite))))
|
||||
df$Qualite <- fct_relevel(df$Qualite, "bad", "medium", "good")
|
||||
df <- data.frame(df, freq = df$value.Freq/nrow(wine))
|
||||
g1 <- ggplot(wine) + geom_bar(aes(x = Qualite)) + ggtitle("Effectifs")+xlab("Qualite")
|
||||
g2 <- ggplot(wine) + geom_bar(aes(x = Qualite, y = ..prop.., group = 1)) + ggtitle("Frequences")+xlab("Qualite")
|
||||
g3 <- ggplot(df, aes(x = Qualite, y = valuecumul)) + geom_bar(stat = "identity") +
|
||||
ggtitle("Fréquences cumulées")
|
||||
g4 <- ggplot(df, aes(x = "", y = freq, fill = Qualite)) + geom_bar(width = 1, stat = "identity") +
|
||||
coord_polar("y", start = 0)
|
||||
grid.arrange(g1, g2, g3, g4, ncol = 2)
|
||||
mean(wine$Alcool)
|
||||
median(wine$Alcool)
|
||||
var(wine$Alcool)
|
||||
sd(wine$Alcool)
|
||||
range(wine$Alcool)
|
||||
summary(wine$Alcool)
|
||||
quantile(wine$Alcool,0.75,names=FALSE)-quantile(wine$Alcool,0.25,names = FALSE)
|
||||
quantile(wine$Alcool)
|
||||
H<-hist(wine$Alcool)
|
||||
ggplot(wine,aes(y=Alcool))+geom_boxplot()
|
||||
wineaux<-melt(wine[,-c(1,2)])
|
||||
ggplot(wineaux,aes(x=variable,y=value))+
|
||||
geom_boxplot()
|
||||
B<-boxplot(wine$Alcool)
|
||||
print('Correlation')
|
||||
cor(wine[,-c(1,2)])
|
||||
print('Covariance')
|
||||
cov(wine[,-c(1,2)])
|
||||
help(corrplot)
|
||||
corrplot(cor(wine[,-c(1,2)]),method = "ellipse")
|
||||
ggplot(data=wine)+
|
||||
geom_point(aes(x=Alcool,y=Densite))+
|
||||
geom_smooth(aes(x=Alcool,y=Densite),method="lm")
|
||||
donneesaux<-melt(donnees[,-(37:39)])
|
||||
ggplot(donneesaux,aes(x=variable,y=value))+
|
||||
geom_boxplot()
|
||||
donneesaux<-melt(donnees[,(1:18)])
|
||||
ggplot(donneesaux,aes(x=variable,y=value))+
|
||||
geom_boxplot()
|
||||
don_R1<-melt(donnees[,(1:18)])
|
||||
gR1=ggplot(don_R1,aes(x=variable,y=value))+
|
||||
geom_boxplot()
|
||||
don_R2<-melt(donnees[,(19:36)])
|
||||
gR2=ggplot(don_R2,aes(x=variable,y=value))+
|
||||
geom_boxplot()
|
||||
grid.arrange(gR1, gR2, ncol = 2)
|
||||
don_R1<-melt(donnees[,(1:18)])
|
||||
gR1=ggplot(don_R1,aes(x=variable,y=value))+
|
||||
geom_boxplot()
|
||||
don_R2<-melt(donnees[,(19:36)])
|
||||
gR2=ggplot(don_R2,aes(x=variable,y=value))+
|
||||
geom_boxplot()
|
||||
grid.arrange(gR1, gR2, nrow = 2)
|
113
INSA/TP anadon/Ozone.txt
Normal file
|
@ -0,0 +1,113 @@
|
|||
"maxO3" "T9" "T12" "T15" "Ne9" "Ne12" "Ne15" "Vx9" "Vx12" "Vx15" "maxO3v" "vent" "pluie"
|
||||
"20010601" 87 15.6 18.5 18.4 4 4 8 0.6946 -1.7101 -0.6946 84 "Nord" "Sec"
|
||||
"20010602" 82 17 18.4 17.7 5 5 7 -4.3301 -4 -3 87 "Nord" "Sec"
|
||||
"20010603" 92 15.3 17.6 19.5 2 5 4 2.9544 1.8794 0.5209 82 "Est" "Sec"
|
||||
"20010604" 114 16.2 19.7 22.5 1 1 0 0.9848 0.3473 -0.1736 92 "Nord" "Sec"
|
||||
"20010605" 94 17.4 20.5 20.4 8 8 7 -0.5 -2.9544 -4.3301 114 "Ouest" "Sec"
|
||||
"20010606" 80 17.7 19.8 18.3 6 6 7 -5.6382 -5 -6 94 "Ouest" "Pluie"
|
||||
"20010607" 79 16.8 15.6 14.9 7 8 8 -4.3301 -1.8794 -3.7588 80 "Ouest" "Sec"
|
||||
"20010610" 79 14.9 17.5 18.9 5 5 4 0 -1.0419 -1.3892 99 "Nord" "Sec"
|
||||
"20010611" 101 16.1 19.6 21.4 2 4 4 -0.766 -1.0261 -2.2981 79 "Nord" "Sec"
|
||||
"20010612" 106 18.3 21.9 22.9 5 6 8 1.2856 -2.2981 -3.9392 101 "Ouest" "Sec"
|
||||
"20010613" 101 17.3 19.3 20.2 7 7 3 -1.5 -1.5 -0.8682 106 "Nord" "Sec"
|
||||
"20010614" 90 17.6 20.3 17.4 7 6 8 0.6946 -1.0419 -0.6946 101 "Sud" "Sec"
|
||||
"20010615" 72 18.3 19.6 19.4 7 5 6 -0.8682 -2.7362 -6.8944 90 "Sud" "Sec"
|
||||
"20010616" 70 17.1 18.2 18 7 7 7 -4.3301 -7.8785 -5.1962 72 "Ouest" "Pluie"
|
||||
"20010617" 83 15.4 17.4 16.6 8 7 7 -4.3301 -2.0521 -3 70 "Nord" "Sec"
|
||||
"20010618" 88 15.9 19.1 21.5 6 5 4 0.5209 -2.9544 -1.0261 83 "Ouest" "Sec"
|
||||
"20010620" 145 21 24.6 26.9 0 1 1 -0.342 -1.5321 -0.684 121 "Ouest" "Sec"
|
||||
"20010621" 81 16.2 22.4 23.4 8 3 1 0 0.3473 -2.5712 145 "Nord" "Sec"
|
||||
"20010622" 121 19.7 24.2 26.9 2 1 0 1.5321 1.7321 2 81 "Est" "Sec"
|
||||
"20010623" 146 23.6 28.6 28.4 1 1 2 1 -1.9284 -1.2155 121 "Sud" "Sec"
|
||||
"20010624" 121 20.4 25.2 27.7 1 0 0 0 -0.5209 1.0261 146 "Nord" "Sec"
|
||||
"20010625" 146 27 32.7 33.7 0 0 0 2.9544 6.5778 4.3301 121 "Est" "Sec"
|
||||
"20010626" 108 24 23.5 25.1 4 4 0 -2.5712 -3.8567 -4.6985 146 "Sud" "Sec"
|
||||
"20010627" 83 19.7 22.9 24.8 7 6 6 -2.5981 -3.9392 -4.924 108 "Ouest" "Sec"
|
||||
"20010628" 57 20.1 22.4 22.8 7 6 7 -5.6382 -3.8302 -4.5963 83 "Ouest" "Pluie"
|
||||
"20010629" 81 19.6 25.1 27.2 3 4 4 -1.9284 -2.5712 -4.3301 57 "Sud" "Sec"
|
||||
"20010630" 67 19.5 23.4 23.7 5 5 4 -1.5321 -3.0642 -0.8682 81 "Ouest" "Sec"
|
||||
"20010701" 70 18.8 22.7 24.9 5 2 1 0.684 0 1.3681 67 "Nord" "Sec"
|
||||
"20010702" 106 24.1 28.4 30.1 0 0 1 2.8191 3.9392 3.4641 70 "Est" "Sec"
|
||||
"20010703" 139 26.6 30.1 31.9 0 1 4 1.8794 2 1.3681 106 "Sud" "Sec"
|
||||
"20010704" 79 19.5 18.8 17.8 8 8 8 0.6946 -0.866 -1.0261 139 "Ouest" "Sec"
|
||||
"20010705" 93 16.8 18.2 22 8 8 6 0 0 1.2856 79 "Sud" "Pluie"
|
||||
"20010706" 97 20.8 23.7 25 2 3 4 0 1.7101 -2.7362 93 "Nord" "Sec"
|
||||
"20010707" 113 17.5 18.2 22.7 8 8 5 -3.7588 -3.9392 -4.6985 97 "Ouest" "Pluie"
|
||||
"20010708" 72 18.1 21.2 23.9 7 6 4 -2.5981 -3.9392 -3.7588 113 "Ouest" "Pluie"
|
||||
"20010709" 88 19.2 22 25.2 4 7 4 -1.9696 -3.0642 -4 72 "Ouest" "Sec"
|
||||
"20010710" 77 19.4 20.7 22.5 7 8 7 -6.5778 -5.6382 -9 88 "Ouest" "Sec"
|
||||
"20010711" 71 19.2 21 22.4 6 4 6 -7.8785 -6.8937 -6.8937 77 "Ouest" "Sec"
|
||||
"20010712" 56 13.8 17.3 18.5 8 8 6 1.5 -3.8302 -2.0521 71 "Ouest" "Pluie"
|
||||
"20010713" 45 14.3 14.5 15.2 8 8 8 0.684 4 2.9544 56 "Est" "Pluie"
|
||||
"20010714" 67 15.6 18.6 20.3 5 7 5 -3.2139 -3.7588 -4 45 "Ouest" "Pluie"
|
||||
"20010715" 67 16.9 19.1 19.5 5 5 6 -2.2981 -3.7588 0 67 "Ouest" "Pluie"
|
||||
"20010716" 84 17.4 20.4 21.4 3 4 6 0 0.3473 -2.5981 67 "Sud" "Sec"
|
||||
"20010717" 63 15.1 20.5 20.6 8 6 6 2 -5.3623 -6.1284 84 "Ouest" "Pluie"
|
||||
"20010718" 69 15.1 15.6 15.9 8 8 8 -4.5963 -3.8302 -4.3301 63 "Ouest" "Pluie"
|
||||
"20010719" 92 16.7 19.1 19.3 7 6 4 -2.0521 -4.4995 -2.7362 69 "Nord" "Sec"
|
||||
"20010720" 88 16.9 20.3 20.7 6 6 5 -2.8191 -3.4641 -3 92 "Ouest" "Pluie"
|
||||
"20010721" 66 18 21.6 23.3 8 6 5 -3 -3.5 -3.2139 88 "Sud" "Sec"
|
||||
"20010722" 72 18.6 21.9 23.6 4 7 6 0.866 -1.9696 -1.0261 66 "Ouest" "Sec"
|
||||
"20010723" 81 18.8 22.5 23.9 6 3 2 0.5209 -1 -2 72 "Nord" "Sec"
|
||||
"20010724" 83 19 22.5 24.1 2 4 6 0 -1.0261 0.5209 81 "Nord" "Sec"
|
||||
"20010725" 149 19.9 26.9 29 3 4 3 1 -0.9397 -0.6428 83 "Ouest" "Sec"
|
||||
"20010726" 153 23.8 27.7 29.4 1 1 4 0.9397 1.5 0 149 "Nord" "Sec"
|
||||
"20010727" 159 24 28.3 26.5 2 2 7 -0.342 1.2856 -2 153 "Nord" "Sec"
|
||||
"20010728" 149 23.3 27.6 28.8 4 6 3 0.866 -1.5321 -0.1736 159 "Ouest" "Sec"
|
||||
"20010729" 160 25 29.6 31.1 0 3 5 1.5321 -0.684 2.8191 149 "Sud" "Sec"
|
||||
"20010730" 156 24.9 30.5 32.2 0 1 4 -0.5 -1.8794 -1.2856 160 "Ouest" "Sec"
|
||||
"20010731" 84 20.5 26.3 27.8 1 0 2 -1.3681 -0.6946 0 156 "Nord" "Sec"
|
||||
"20010801" 126 25.3 29.5 31.2 1 4 4 3 3.7588 5 84 "Est" "Sec"
|
||||
"20010802" 116 21.3 23.8 22.1 7 7 8 0 -2.3941 -1.3892 126 "Sud" "Pluie"
|
||||
"20010803" 77 20 18.2 23.6 5 7 6 -3.4641 -2.5981 -3.7588 116 "Ouest" "Pluie"
|
||||
"20010804" 63 18.7 20.6 20.3 6 7 7 -5 -4.924 -5.6382 77 "Ouest" "Pluie"
|
||||
"20010805" 54 18.6 18.7 17.8 8 8 8 -4.6985 -2.5 -0.8682 63 "Sud" "Pluie"
|
||||
"20010806" 65 19.2 23 22.7 8 7 7 -3.8302 -4.924 -5.6382 54 "Ouest" "Sec"
|
||||
"20010807" 72 19.9 21.6 20.4 7 7 8 -3 -4.5963 -5.1962 65 "Ouest" "Pluie"
|
||||
"20010808" 60 18.7 21.4 21.7 7 7 7 -5.6382 -6.0622 -6.8937 72 "Ouest" "Pluie"
|
||||
"20010809" 70 18.4 17.1 20.5 3 6 3 -5.9088 -3.2139 -4.4995 60 "Nord" "Pluie"
|
||||
"20010810" 77 17.1 20 20.8 4 5 4 -1.9284 -1.0261 0.5209 70 "Nord" "Sec"
|
||||
"20010811" 98 17.8 22.8 24.3 1 1 0 0 -1.5321 -1 77 "Ouest" "Pluie"
|
||||
"20010812" 111 20.9 25.2 26.7 1 5 2 -1.0261 -3 -2.2981 98 "Ouest" "Sec"
|
||||
"20010813" 75 18.8 20.5 26 8 7 1 -0.866 0 0 111 "Nord" "Sec"
|
||||
"20010814" 116 23.5 29.8 31.7 1 3 5 1.8794 1.3681 0.6946 75 "Sud" "Sec"
|
||||
"20010815" 109 20.8 23.7 26.6 8 5 4 -1.0261 -1.7101 -3.2139 116 "Sud" "Sec"
|
||||
"20010819" 67 18.8 21.1 18.9 7 7 8 -5.3623 -5.3623 -2.5 86 "Ouest" "Pluie"
|
||||
"20010820" 76 17.8 21.3 24 7 5 5 -3.0642 -2.2981 -3.9392 67 "Ouest" "Pluie"
|
||||
"20010821" 113 20.6 24.8 27 1 1 2 1.3681 0.8682 -2.2981 76 "Sud" "Sec"
|
||||
"20010822" 117 21.6 26.9 28.6 6 6 4 1.5321 1.9284 1.9284 113 "Sud" "Pluie"
|
||||
"20010823" 131 22.7 28.4 30.1 5 3 3 0.1736 -1.9696 -1.9284 117 "Ouest" "Sec"
|
||||
"20010824" 166 19.8 27.2 30.8 4 0 1 0.6428 -0.866 0.684 131 "Ouest" "Sec"
|
||||
"20010825" 159 25 33.5 35.5 1 1 1 1 0.6946 -1.7101 166 "Sud" "Sec"
|
||||
"20010826" 100 20.1 22.9 27.6 8 8 6 1.2856 -1.7321 -0.684 159 "Ouest" "Sec"
|
||||
"20010827" 114 21 26.3 26.4 7 4 5 3.0642 2.8191 1.3681 100 "Est" "Sec"
|
||||
"20010828" 112 21 24.4 26.8 1 6 3 4 4 3.7588 114 "Est" "Sec"
|
||||
"20010829" 101 16.9 17.8 20.6 7 7 7 -2 -0.5209 1.8794 112 "Nord" "Pluie"
|
||||
"20010830" 76 17.5 18.6 18.7 7 7 7 -3.4641 -4 -1.7321 101 "Ouest" "Sec"
|
||||
"20010831" 59 16.5 20.3 20.3 5 7 6 -4.3301 -5.3623 -4.5 76 "Ouest" "Pluie"
|
||||
"20010901" 78 17.7 20.2 21.5 5 5 3 0 0.5209 0 59 "Nord" "Pluie"
|
||||
"20010902" 76 17.3 22.7 24.6 4 5 6 -2.9544 -2.9544 -2 78 "Ouest" "Pluie"
|
||||
"20010903" 55 15.3 16.8 19.2 8 7 5 -1.8794 -1.8794 -2.3941 76 "Ouest" "Pluie"
|
||||
"20010904" 71 15.9 19.2 19.5 7 5 3 -6.1284 0 -1.3892 55 "Nord" "Pluie"
|
||||
"20010905" 66 16.2 18.9 19.3 2 5 6 -1.3681 -0.8682 1.7101 71 "Nord" "Pluie"
|
||||
"20010906" 59 18.3 18.3 19 7 7 7 -3.9392 -1.9284 -1.7101 66 "Nord" "Pluie"
|
||||
"20010907" 68 16.9 20.8 22.5 6 5 7 -1.5 -3.4641 -3.0642 59 "Ouest" "Pluie"
|
||||
"20010908" 63 17.3 19.8 19.4 7 8 8 -4.5963 -6.0622 -4.3301 68 "Ouest" "Sec"
|
||||
"20010912" 78 14.2 22.2 22 5 5 6 -0.866 -5 -5 62 "Ouest" "Sec"
|
||||
"20010913" 74 15.8 18.7 19.1 8 7 7 -4.5963 -6.8937 -7.5175 78 "Ouest" "Pluie"
|
||||
"20010914" 71 15.2 17.9 18.6 6 5 1 -1.0419 -1.3681 -1.0419 74 "Nord" "Pluie"
|
||||
"20010915" 69 17.1 17.7 17.5 6 7 8 -5.1962 -2.7362 -1.0419 71 "Nord" "Pluie"
|
||||
"20010916" 71 15.4 17.7 16.6 4 5 5 -3.8302 0 1.3892 69 "Nord" "Sec"
|
||||
"20010917" 60 13.7 14 15.8 4 5 4 0 3.2139 0 71 "Nord" "Pluie"
|
||||
"20010918" 42 12.7 14.3 14.9 8 7 7 -2.5 -3.2139 -2.5 60 "Nord" "Pluie"
|
||||
"20010919" 65 14.8 16.3 15.9 7 7 7 -4.3301 -6.0622 -5.1962 42 "Ouest" "Pluie"
|
||||
"20010920" 71 15.5 18 17.4 7 7 6 -3.9392 -3.0642 0 65 "Ouest" "Sec"
|
||||
"20010921" 96 11.3 19.4 20.2 3 3 3 -0.1736 3.7588 3.8302 71 "Est" "Pluie"
|
||||
"20010922" 98 15.2 19.7 20.3 2 2 2 4 5 4.3301 96 "Est" "Sec"
|
||||
"20010923" 92 14.7 17.6 18.2 1 4 6 5.1962 5.1423 3.5 98 "Nord" "Sec"
|
||||
"20010924" 76 13.3 17.7 17.7 7 7 6 -0.9397 -0.766 -0.5 92 "Ouest" "Pluie"
|
||||
"20010925" 84 13.3 17.7 17.8 3 5 6 0 -1 -1.2856 76 "Sud" "Sec"
|
||||
"20010927" 77 16.2 20.8 22.1 6 5 5 -0.6946 -2 -1.3681 71 "Sud" "Pluie"
|
||||
"20010928" 99 16.9 23 22.6 6 4 7 1.5 0.8682 0.8682 77 "Sud" "Sec"
|
||||
"20010929" 83 16.9 19.8 22.1 6 5 3 -4 -3.7588 -4 99 "Ouest" "Pluie"
|
||||
"20010930" 70 15.7 18.6 20.7 7 7 7 0 -1.0419 -4 83 "Sud" "Sec"
|
BIN
INSA/TP anadon/RData
Normal file
20
INSA/TP anadon/Rhistory
Normal file
|
@ -0,0 +1,20 @@
|
|||
setwd("~/Bureau/Ana_donn/TP2")
|
||||
install.packages(c("gridExtra", "forcats", "reshape2", "BioStatR"))
|
||||
library(knitr)
|
||||
## Global options
|
||||
options(max.print="75")
|
||||
opts_chunk$set(echo=TRUE,
|
||||
cache=FALSE,
|
||||
prompt=FALSE,
|
||||
tidy=TRUE,
|
||||
comment=NA,
|
||||
message=FALSE,
|
||||
warning=FALSE,
|
||||
class.source="badCode")
|
||||
opts_knit$set(width=75)
|
||||
library(corrplot)
|
||||
library(ggplot2)
|
||||
library(gridExtra)
|
||||
library(forcats)
|
||||
library(reshape2)
|
||||
library(BioStatR)
|
290
INSA/TP anadon/Rhistory (1)
Normal file
|
@ -0,0 +1,290 @@
|
|||
install.packages("FactoMineR")
|
||||
install.packages("factoextra")
|
||||
setwd("~/Bureau/Ana_donn/TP3")
|
||||
library(knitr)
|
||||
## Global options
|
||||
options(max.print="75")
|
||||
opts_chunk$set(echo=TRUE,
|
||||
cache=FALSE,
|
||||
prompt=FALSE,
|
||||
tidy=TRUE,
|
||||
comment=NA,
|
||||
message=FALSE,
|
||||
warning=FALSE,
|
||||
class.source="badCode")
|
||||
opts_knit$set(width=75)
|
||||
library(corrplot)
|
||||
library(ggplot2)
|
||||
library(gridExtra)
|
||||
library(FactoMineR)
|
||||
library(factoextra)
|
||||
library(reshape2)
|
||||
library(knitr)
|
||||
## Global options
|
||||
options(max.print="75")
|
||||
opts_chunk$set(echo=TRUE,
|
||||
cache=FALSE,
|
||||
prompt=FALSE,
|
||||
tidy=TRUE,
|
||||
comment=NA,
|
||||
message=FALSE,
|
||||
warning=FALSE,
|
||||
class.source="badCode")
|
||||
opts_knit$set(width=75)
|
||||
library(knitr)
|
||||
## Global options
|
||||
options(max.print="75")
|
||||
opts_chunk$set(echo=TRUE,
|
||||
cache=FALSE,
|
||||
prompt=FALSE,
|
||||
tidy=TRUE,
|
||||
comment=NA,
|
||||
message=FALSE,
|
||||
warning=FALSE,
|
||||
class.source="badCode")
|
||||
opts_knit$set(width=75)
|
||||
library(corrplot)
|
||||
library(ggplot2)
|
||||
library(gridExtra)
|
||||
library(FactoMineR)
|
||||
library(factoextra)
|
||||
library(reshape2)
|
||||
Ozone<-read.table("Ozone.txt",header=T)
|
||||
Ozone$pluie<-as.factor(Ozone$pluie)
|
||||
Ozone$vent<-as.factor(Ozone$vent)
|
||||
Ozone<-Ozone[,-11]
|
||||
summary(Ozone)
|
||||
dim(Ozone)
|
||||
ggplot(melt(Ozone[,-c(11,12)]),aes(x=variable,y=value))+geom_boxplot()
|
||||
g1<-ggplot(Ozone,aes(x=maxO3))+geom_density()
|
||||
g2<-ggplot(melt(Ozone[,c(2:4)]),aes(x=value,color=variable))+geom_density()
|
||||
g3<-ggplot(melt(Ozone[,c(5:7)]),aes(x=value,color=variable))+geom_density()
|
||||
g4<-ggplot(melt(Ozone[,c(8:10)]),aes(x=value,color=variable))+geom_density()
|
||||
grid.arrange(g1,g2,g3,g4,ncol=2)
|
||||
ggplot(Ozone, aes(x = pluie)) +
|
||||
geom_bar(aes(y = (..count..)/sum(..count..)))+ylab("")+ggtitle("Frequences")
|
||||
quan <- as.vector(table(Ozone$vent))/nrow(Ozone)
|
||||
df <- data.frame(group = levels(Ozone$vent),value = quan)
|
||||
ggplot(df, aes(x="", y=value, fill=group))+
|
||||
geom_bar(width = 1, stat = "identity")+ coord_polar("y", start=0)+ theme(legend.position="bottom")
|
||||
corrplot(cor(Ozone[,-c(1,2)]),method = "ellipse")
|
||||
corrplot(cor(Ozone[,-c(9,10)]),method = "ellipse")
|
||||
corrplot(cor(Ozone[,-(9:10)]),method = "ellipse")
|
||||
corrplot(cor(Ozone[,-(9,10)]),method = "ellipse")
|
||||
corrplot(cor(Ozone[,-c(9,10)]),method = "ellipse")
|
||||
corrplot(cor(Ozone[,-c(9,10)]),method = "ellipse")
|
||||
dim(Ozone)
|
||||
corrplot(cor(Ozone[,-c(11,12)]),method = "ellipse")
|
||||
help("scale")
|
||||
OzoneC<-scale(Ozone[,-c(11,12)],scale=FALSE) # A COMPLETER
|
||||
apply(OzoneC,2,mean)
|
||||
n=112
|
||||
p=10
|
||||
W<-diag(1/n,nrow=n,ncol=n)
|
||||
M<- diag(1,nrow = p, ncol = p)
|
||||
Gamma<- t(OzoneC)%*%W%*%OzoneC # A COMPLETER
|
||||
A<-eigen(Gamma
|
||||
Gamma<- t(OzoneC)%*%W%*%OzoneC # A COMPLETER
|
||||
A<-eigen(Gamma)
|
||||
Gamma<- t(OzoneC)%*%W%*%OzoneC # A COMPLETER
|
||||
A<-eigen(Gamma)
|
||||
A
|
||||
n=112
|
||||
p=10
|
||||
W<- diag(1/n,nrow(OzoneC))
|
||||
M<- diag(1,ncol(OzoneC))
|
||||
n=nrow(OzoneC)
|
||||
p=ncol(OzoneC)
|
||||
W<- diag(1/n,n)
|
||||
M<- diag(1,p)
|
||||
Gamma<- t(OzoneC)%*%W%*%OzoneC # A COMPLETER
|
||||
A<-eigen(Gamma)
|
||||
A$values
|
||||
A$values
|
||||
"La trace de gamma est l'inertie de Ozone"
|
||||
sum(A$values)
|
||||
dim(OzoneC)
|
||||
dim(W)
|
||||
dim(M)
|
||||
A$values
|
||||
"La trace de gamma est l'inertie de Ozone"
|
||||
sum(A$values)
|
||||
mean(OzoneC**2)
|
||||
A$values
|
||||
"La trace de gamma est l'inertie de Ozone"
|
||||
sum(A$values)
|
||||
sum(OzoneC**2)/n
|
||||
A$values
|
||||
"La trace de gamma est l'inertie de Ozone"
|
||||
sum(A$values)
|
||||
sum(OzoneC**2)/n
|
||||
sum(A$values)==sum(OzoneC**2)/n
|
||||
A$values
|
||||
"La trace de gamma est l'inertie de Ozone"
|
||||
sum(A$values)
|
||||
sum(OzoneC**2)/n
|
||||
sum(A$values)===sum(OzoneC**2)/n
|
||||
A$values/sum(A$values)
|
||||
A$values/sum(A$values)
|
||||
cumsum(A$values)/sum(A$values)
|
||||
A$values/sum(A$values)
|
||||
B=cumsum(A$values)/sum(A$values)
|
||||
hist(B)
|
||||
B=A$values/sum(A$values)
|
||||
C=cumsum(A$values)/sum(A$values)
|
||||
hist(B)
|
||||
hist(C)
|
||||
A$values/sum(A$values)
|
||||
cumsum(A$values)/sum(A$values)
|
||||
C=OzoneC%*%A$vectors
|
||||
C=OzoneC%*%A$vectors
|
||||
C
|
||||
dim(C)
|
||||
C=OzoneC%*%A$vectors
|
||||
C
|
||||
dim(C)
|
||||
boxplot(OzoneC)
|
||||
respca<-PCA(Ozone,quali.sup=c(11,12),scale.unit = F,graph=F)
|
||||
respca$eig
|
||||
fviz_eig(respca)
|
||||
respca$ind$coord$
|
||||
2
|
||||
respca<-PCA(Ozone,quali.sup=c(11,12),scale.unit = F,graph=F)
|
||||
respca$eig
|
||||
fviz_eig(respca)
|
||||
fviz_pca_ind(respca,geom=c("point"))
|
||||
fviz_pca_ind(respca,geom=c("point"))
|
||||
fviz_pca_ind(respca,col.ind="contrib",geom=c("point"))
|
||||
fviz_pca_ind(respca,geom=c("point"),select.ind = list(cos2=0.95))
|
||||
fviz_pca_ind(respca,habillage=11,geom=c("point"))
|
||||
fviz_pca_ind(respca,habillage=12,geom=c("point"))
|
||||
plot(respca,choix="varcor")
|
||||
corrplot(respca$var$cor,method="ellipse")
|
||||
s<-sqrt((n-1)*apply(OzoneC,2,var)/n)
|
||||
OzoneCR<-OzoneC%*%diag(1/s)
|
||||
s<-sqrt((n-1)*apply(OzoneC,2,var)/n)
|
||||
OzoneCR<-OzoneC%*%diag(1/s)
|
||||
OzoneCR
|
||||
scale(Ozone[,-c(11,12)])
|
||||
Gamma2<- t(OzoneCR)%*%W%*%OzoneCR # A COMPLETER
|
||||
B<-eigen(Gamma2)
|
||||
Gamma2<- t(OzoneCR)%*%W%*%OzoneCR # A COMPLETER
|
||||
B<-eigen(Gamma2)
|
||||
B
|
||||
sum(B$values)
|
||||
Gamma2<- t(OzoneCR)%*%W%*%OzoneCR # A COMPLETER
|
||||
B<-eigen(Gamma2)
|
||||
B
|
||||
n=nrow(OzoneC)
|
||||
p=ncol(OzoneC)
|
||||
W<- diag(1/n,n)
|
||||
M<- diag(1,p)
|
||||
M
|
||||
n=nrow(OzoneC)
|
||||
p=ncol(OzoneC)
|
||||
W<- diag(1/n,n)
|
||||
M<- diag(1,p)
|
||||
sum(B$values)
|
||||
Gamma2<- t(OzoneC)%*%W%*%OzoneC
|
||||
B<-eigen(Gamma2)
|
||||
B
|
||||
Gamma2<- t(OzoneC)%*%W%*%OzoneC
|
||||
B<-eigen(Gamma2)
|
||||
B
|
||||
Gamma2
|
||||
Gamma2<- t(OzoneCR)%*%W%*%OzoneCR
|
||||
B<-eigen(Gamma2)
|
||||
B
|
||||
Gamma2
|
||||
M2<-diag(1/apply(OzoneC,2,var))
|
||||
GammaM=Gamma%*%M2
|
||||
eigen(Gamma2)
|
||||
eigen(GammaM)
|
||||
M2<-diag(1/apply(OzoneC,2,var))
|
||||
GammaM=Gamma%*%M2
|
||||
G=eigen(Gamma2)
|
||||
GM=eigen(GammaM)
|
||||
G$values
|
||||
GM$values
|
||||
M2<-diag(1/apply(OzoneC,2,var))
|
||||
GammaM=Gamma%*%M2
|
||||
G=eigen(Gamma2)
|
||||
GM=eigen(GammaM)
|
||||
sum(G$values)
|
||||
sum(GM$values)
|
||||
M2<-diag(1/apply(OzoneC,2,var))
|
||||
GammaM=Gamma%*%M2
|
||||
G=eigen(Gamma2)
|
||||
GM=eigen(GammaM)
|
||||
sum(G$values)
|
||||
sum(GM$values)
|
||||
G$vectors
|
||||
GM$vectors
|
||||
M2<-diag(1/(apply(OzoneC,2,var)*(n-1)/n))
|
||||
GammaM=Gamma%*%M2
|
||||
G=eigen(Gamma2)
|
||||
GM=eigen(GammaM)
|
||||
sum(G$values)
|
||||
sum(GM$values)
|
||||
G$vectors
|
||||
GM$vectors
|
||||
respca2<-PCA(Ozone,quali.sup=c(11,12),scale.unit=T,graph=F)
|
||||
respca2$eig
|
||||
fviz_eig(respca2)
|
||||
fviz_pca_ind(respca2,geom=c("point"))
|
||||
fviz_pca_ind(respca2,geom=c("point"))
|
||||
fviz_pca_var(respca2)
|
||||
corrplot(OzoneCR)
|
||||
corrplot(OzoneCR([,-c(11,12)]))
|
||||
corrplot(respca2$var$cor,method="ellipse")
|
||||
fviz_pca_ind(respca2,col.ind="contrib",geom=c("point"))
|
||||
fviz_pca_ind(respca2,geom=c("point"),select.ind = list(cos2=0.95))
|
||||
fviz_pca_ind(respca2,habillage=11,geom=c("point"))
|
||||
fviz_pca_ind(respca2,habillage=12,geom=c("point"))
|
||||
fviz_pca_ind(respca2,geom=c("point"))
|
||||
fviz_pca(respca2)
|
||||
fviz_pca_ind(respca2,geom=c("point"))
|
||||
fviz_pca(respca2,geom=c("point"))
|
||||
g1<-fviz_pca_ind(respca2,geom=c("point"))
|
||||
g2<-fviz_pca_var(respca2)
|
||||
library(gridExtra)
|
||||
grid.arrange(g1,g2,ncol=2)
|
||||
fviz_pca_ind(respca2,col.ind="contrib",geom=c("point"))
|
||||
fviz_pca_ind(respca2,geom=c("point"),select.ind = list(cos2=0.95))
|
||||
fviz_pca_ind(respca2,habillage=11,geom=c("point"))
|
||||
fviz_pca_ind(respca2,habillage=11,geom=c("point"))
|
||||
fviz_pca_ind(respca2,col.ind="contrib",geom=c("point"))
|
||||
fviz_pca_ind(respca2,geom=c("point"),select.ind = list(cos2=0.95))
|
||||
fviz_pca_ind(respca2,habillage=11,geom=c("point"))
|
||||
fviz_pca_ind(respca2,habillage=12,geom=c("point"))
|
||||
g1<-fviz_pca_ind(respca2,geom=c("point"),habillage = 11)
|
||||
g2<-fviz_pca_var(respca2)
|
||||
library(gridExtra)
|
||||
grid.arrange(g1,g2,ncol=2)
|
||||
g1<-fviz_pca_ind(respca2,geom=c("point"))
|
||||
g2<-fviz_pca_var(respca2,habillage = 11)
|
||||
library(gridExtra)
|
||||
grid.arrange(g1,g2,ncol=2)
|
||||
g1<-fviz_pca_ind(respca2,geom=c("point"))
|
||||
g2<-fviz_pca_var(respca2)
|
||||
library(gridExtra)
|
||||
grid.arrange(g1,g2,ncol=2)
|
||||
fviz_pca_ind(respca2,col.ind="contrib",geom=c("point"))
|
||||
fviz_pca_ind(respca2,geom=c("point"),select.ind = list(cos2=0.95))
|
||||
fviz_pca_ind(respca2,habillage=11,geom=c("point"))
|
||||
fviz_pca(respca2,habillage=12,geom=c("point"))
|
||||
fviz_pca_ind(respca2,col.ind="contrib",geom=c("point"))
|
||||
fviz_pca_ind(respca2,geom=c("point"),select.ind = list(cos2=0.95))
|
||||
g3=fviz_pca_ind(respca2,habillage=11,geom=c("point"))
|
||||
g4=fviz_pca(respca2,habillage=12,geom=c("point"))
|
||||
grid.arrange(g3,g4,newpage=FALSE)
|
||||
fviz_pca_ind(respca2,col.ind="contrib",geom=c("point"))
|
||||
fviz_pca_ind(respca2,geom=c("point"),select.ind = list(cos2=0.95))
|
||||
g3=fviz_pca_ind(respca2,habillage=11,geom=c("point"))
|
||||
g4=fviz_pca_ind(respca2,habillage=12,geom=c("point"))
|
||||
grid.arrange(g3,g4,newpage=FALSE)
|
||||
fviz_pca_ind(respca2,col.ind="contrib",geom=c("point"))
|
||||
fviz_pca_ind(respca2,geom=c("point"),select.ind = list(cos2=0.95))
|
||||
g3=fviz_pca_ind(respca2,habillage=11,geom=c("point"))
|
||||
g4=fviz_pca_ind(respca2,habillage=12,geom=c("point"))
|
||||
grid.arrange(g3,g4)
|
954
INSA/TP anadon/TP1-InitR.Rmd
Normal file
|
@ -0,0 +1,954 @@
|
|||
---
|
||||
title: "TP 1 : Initiation au langage R. Découverte de Rstudio et Rmarkdown"
|
||||
date : "3MIC - 2024-2025"
|
||||
output:
|
||||
html_document:
|
||||
toc: true
|
||||
toc_float: true
|
||||
number_sections: true
|
||||
---
|
||||
```{css,echo=F}
|
||||
.badCode {
|
||||
background-color: #C9DDE4;
|
||||
}
|
||||
```
|
||||
|
||||
```{r setup, echo=FALSE, cache=FALSE}
|
||||
library(knitr)
|
||||
## Global options
|
||||
opts_chunk$set(echo=TRUE,
|
||||
cache=TRUE,
|
||||
prompt=FALSE,
|
||||
tidy=TRUE,
|
||||
comment=NA,
|
||||
message=FALSE,
|
||||
warning=FALSE,
|
||||
class.source="badCode")
|
||||
```
|
||||
|
||||
**Objectif**
|
||||
|
||||
Les objectifs de cette séance sont
|
||||
|
||||
+ une première prise en main du logiciel R avec la présentation de commandes de base
|
||||
+ se familiariser avec RStudio
|
||||
+ débuter dans la rédaction de documents en Rmarkdown
|
||||
|
||||
|
||||
# Introduction
|
||||
|
||||
## Pourquoi R ?
|
||||
|
||||
Le logiciel R sous licence GNU est facile à installer à partir de la page du [CRAN](https://cran.r-project.org/index.html){target="_blank"} (ou d'un site miroir). Le CRAN contient toutes les ressources nécessaires à l'utilisateur de R, débutant ou expérimenté : fichiers d'installation, mises à jour, librairies, FAQ, newsletter, documentation... R est un logiciel très utilisé dans la communauté statistique.
|
||||
|
||||
Dans sa structure, R est un langage de programmation d'une syntaxe voisine à celle du langage C et capable de manipuler des objets complexes sous forme de matrice, scalaire, vecteur, liste, facteur et aussi data frame. Il dispose également d'une très riche librairie de quasiment toutes les procédures et méthodes statistiques de la littérature. Plus précisément, toutes les recherches récentes sont d'abord développées et diffusées à l'aide de ce
|
||||
logiciel par la communauté scientifique.
|
||||
|
||||
## Présentation de Rstudio
|
||||
|
||||
Nous allons utiliser [RStudio](https://rstudio.com/){target="_blank"} durant les TP d'Analyse de Données. RStudio n’est pas qu’une interface graphique pour R, il s’agit d’un environnement de développement intégré, proposant des outils et facilite l’écriture de scripts et l’utilisation de R. La version gratuite de RStudio étant déjà très riche en fonctionnalités, elle est suffisante pour les enseignements. Elle est disponible pour Linux, Windows et MacOS.
|
||||
|
||||
Sur les ordinateurs en salle TP, sous linux,
|
||||
|
||||
- à partir d'un terminal, placez vous dans le répertoire de travail et tapez la commande `rstudio`
|
||||
- par le menu déroulant, allez dans Applications/Programmation/RStudio
|
||||
|
||||
Si vous souhaitez travailler sur votre propre ordinateur, installez tout d'abord la dernière version du logiciel R (voir [CRAN](https://cran.r-project.org/index.html){target="_blank"}) puis installez la version gratuite de Rstudio adaptée à votre OS.
|
||||
|
||||
### Description des fenêtres de RStudio
|
||||
|
||||
A chaque ouverture de RStudio, l'écran est découpé en quatre grandes zones :
|
||||
|
||||
- En bas à gauche c'est la **Console**, on peut y lire au lancement la version de R que RStudio a chargé. Après le texte d'entrée, la ligne commence par `>` qui est l'invite de commande. RStudio est prêt à recevoir votre première commande. On peut se servir de R comme d'une calculatrice. Vous pouvez par exemple taper `> 2+3` et taper `Entrée`. Le résultat apparait alors dans la console.
|
||||
|
||||
- En haut à droite, on peut voir dans **Environnement** la liste des objets et fonctions créés au fur et à mesure du travail. On a également accès à l'historique des commandes dans **History**.
|
||||
|
||||
- En bas à droite, on trouve plusieurs onglets :
|
||||
|
||||
+ **Files** : permet de voir le contenu du répertoire de travail
|
||||
+ **Plots** : permet de visualiser les graphiques créés
|
||||
+ **Packages** : liste les packages installés pour les charger, mettre à jour, en installer d'autres
|
||||
+ **Help** : permet d'accéder à l'aide en ligne
|
||||
|
||||
- En haut à gauche, c'est la zone d'**Edition** pour gérer les scripts, les executer, ....
|
||||
|
||||
Lorsque vous quittez RStudio, on vous demande si vous souhaiter sauvegarder l'environnement de travail. Si vous y répondez favorablement, un fichier de sauvegarde ` .RData` est enregistré dans le répertoire courant.
|
||||
|
||||
### Types de documents avec RStudio
|
||||
|
||||
En allant dans `File -> New File` ou en cliquant sur la flèche à côté de l'icone de *New File* (en haut à gauche), RStudio propose de nombreux types de document. Vous pouvez noter que l'on peut utiliser RStudio également pour faire du python, du C++, ... Nous allons ici ne parler que de quelques types de fichiers que l'on utilisera par la suite.
|
||||
|
||||
Pour créer un script R, il suffit de sélectionner `R Script`. Ce script peut être enregistré à tout moment dans un fichier avec l'extension " .R" *(ex. monScript.R)* dans le répertoire courant en cliquant sur l'icône de disquette ou par `File->Save`. Vous pouvez l'ouvrir à tout moment grâce au menu `File –> Open file...`, à l'icône dossier ou en double cliquant sur le fichier *monScript.R*. Il est également possible d'executer un script directement depuis la console grâce à la commande `source("monScript.R")`.
|
||||
|
||||
On peut également créer des documents de type rapport, slides, ... contenant du texte, du code, des images, des formules mathématiques en latex, ....
|
||||
|
||||
+ à l'aide de `RMarkdown` en sélectionnant `R markdown ...`. Le document créé sera sauvegardé avec l'extension " .Rmd". On reviendra plus précisément sur les possibilités offertes par Rmarkdown et les commandes principales pour débuter la rédaction d'un rapport dans la section suivante.
|
||||
|
||||
+ à l'aide de `quarto` en sélectionnant `Quarto Document ...` ou `Quarto Presentation ...` pour la création de présentation, rapports, ... Par exemple les slides du cours d'Analyse de Données ont été générés en quarto. La syntaxe est assez proche de celle de Rmarkdown.
|
||||
|
||||
## Environnement
|
||||
|
||||
### Répertoire de travail
|
||||
|
||||
Pour pouvoir récupérer des données, maîtriser la sauvegarde des scripts, des résultats, ... il est important de connaitre le répertoire de travail c'est-à-dire le répertoire sous lequel les divers résultats seront sauvegardés par défaut. Ce dernier s'obtient à l'aide de la commande `> getwd()`.
|
||||
|
||||
Pour changer de répertoire de travail, on peut
|
||||
|
||||
- utiliser la commande `setwd()` dans la Console.
|
||||
A noter que R ne reconnaît que le caractère "/" pour spécifier le chemin d'accès d'un répertoire (même sous Windows).
|
||||
- passer par `Session -> Set Working Directory -> Choose Directory`.
|
||||
|
||||
<h4><b><p style="color:blue;">Exercice :</p></b></h4>
|
||||
|
||||
> Créer un dossier de travail pour ce TP dans votre home (en dehors de RStudio!)
|
||||
> Dans RStudio, placez-vous dans ce dossier de travail pour le TP.
|
||||
|
||||
### Les librairies pour R
|
||||
|
||||
R est un logiciel libre, il s'enrichit grâce au développement de librairies par la communauté. La plupart des extensions sont développées et maintenues par la communauté des utilisateurs de R, et diffusées via le [CRAN (Comprehensive R Archive Network)](https://cran.r-project.org/){target="_blank"}. On peut également trouver des packages déposés sur *github* par exemple.
|
||||
|
||||
A la première ouverture de RStudio sur les ordinateurs de salle TP, un dossier `R/libs` est créé dans votre `home` pour l'installation des librairies.
|
||||
|
||||
Pour installer une librairie disponible sur le CRAN, vous avez plusieurs manières de le faire, dont
|
||||
|
||||
+ passer par le menu `Tools-> Install Packages ...` , sélectionner un site miroir du CRAN et demander la librairie souhaitée
|
||||
+ aller dans l'onglet *Packages* dans la fenêtre en bas à droite et cliquer sur *Install*.
|
||||
+ utiliser la fonction `install.packages()` directement dans la console en précisant la librairie souhaitée
|
||||
|
||||
Toutes les librairies ne sont pas chargées automatiquement au lancement de R. Pour charger une librairie, on utilise la commande `library()`.
|
||||
|
||||
<h4><b><p style="color:blue;">Exercice :</p></b></h4>
|
||||
|
||||
> 1. Installez la librairie *corrplot*
|
||||
> 2. Chargez la librairie *corrplot*
|
||||
|
||||
### L'aide de R
|
||||
|
||||
On peut à tout moment faire appel à l'aide intégrée de R (et surtout avant d'appeler l'enseignant-e !) pour avoir les détails comme les arguments d'une fonction.
|
||||
On peut accéder à l'aide pour une fonction (ex pour la fonction *plot*) en passant le nom de la fonction dans `help()` (ex `> help(plot)`) ou en utilisant le raccourci `> ?plot`.
|
||||
Ces deux commandes permettent d'afficher une page de description (en anglais) de la fonction, ses paramètres, son résultat, d'exemples, ... Dans RStudio, les pages d'aide en ligne s'ouvriront par défaut dans la zone en bas à droite, sous l'onglet **Help**. Un clic sur l'icône en forme de maison vous affichera la page d'accueil de l'aide. Vous pouvez aussi taper directement le nom de la fonction recherchée dans la zone de recherche dans l'onglet **Help**.
|
||||
|
||||
<h4><b><p style="color:blue;">Exercice :</p></b></h4>
|
||||
|
||||
> Accédez à l'aide de la fonction `rnorm`
|
||||
|
||||
## Editer des rapports avec Rmarkdown
|
||||
|
||||
L'extension [**Rmarkdown**](https://rmarkdown.rstudio.com/index.html){target="_blank"} permet de créer des documents dans différents formats (html, pdf, docx, slides, ...) qui contiennent du texte, du code (en R mais pas que!), les résultats, ...
|
||||
Par exemple, les sujets de TP de ce cours sont rédigés en Rmarkdown.
|
||||
Vous devrez également rédiger le rapport de votre projet en Rmarkdown.
|
||||
Nous allons donner ici des éléments de base pour la création de documents avec Rmarkdown. Pour plus de détails, vous pouvez consulter l'aide mémoire de Rmarkdown (accessible via `Help -> Cheatsheets -> Rmarkdown Cheat Sheet`) et le livre en ligne [R Markdown: The Definitive Guide](https://bookdown.org/yihui/rmarkdown/){target="_blank"} de Y. Xie, J. J. Allaire, G. Grolemund.
|
||||
|
||||
### Etapes de création d'un document
|
||||
|
||||
Un document Rmarkdown est un fichier enregistré avec l'extension `.Rmd`. Pour créer un nouveau document, allez dans `File-> NewFile-> Rmarkdown...` (ou cliquez sur l'icone nouveau document et choisissez Rmarkdown).
|
||||
|
||||
<h4><b><p style="color:blue;">Exercice :</p></b></h4>
|
||||
|
||||
> Créez un nouveau document Rmarkdown au format pdf avec le titre et l'auteur de votre choix.
|
||||
> Vous pouvez constater qu'un nouveau document prérempli vient de s'ouvrir dans RStudio.
|
||||
> Nous allons maintenant détailler le contenu de ce document.
|
||||
|
||||
Un document Rmarkdown débute toujours par **l'en-tête** qui est encadré par 3 tirets `---`.
|
||||
Cet en-tête contient au moins les métadonnées du document suivantes : le titre, l'auteur, la date, le format de sortie (`output`).
|
||||
On peut préciser des options au document final en ajoutant des sous-options à droite du `output`. Il est également possible de spécifier des options différentes selon les formats.
|
||||
Voici une liste avec quelques éléments :
|
||||
|
||||
+ `number_section : true` permet de numéroter les sections
|
||||
+ `highlight` permet de spécifier le style syntaxique (par ex `default`, `tango`, `pygments`, `kate`, ...).
|
||||
+ on peut ajouter son propre fichier de style .css avec l'option `css`
|
||||
+ on peut préciser des options concernant les figures avec `fig_width`, `fig_height`, `fig_caption`, `dev`, ...
|
||||
+ on peut ajouter une bibliographie à partir d'un fichier `.bib` avec l'option `bibliography`
|
||||
|
||||
On a ensuite le corps du document qui peut contenir
|
||||
|
||||
+ du texte selon la syntaxe markdown
|
||||
+ des blocs de code (appelés *chunks*) en R, Python, ...
|
||||
+ des formules mathématiques (écrites en latex entre `$ ... $`)
|
||||
+ des images, tableaux, références, ....
|
||||
|
||||
Vous pouvez compiler à tout moment le document Rmarkdown en cliquant sur le bouton `Knit`. Un onglet R Markdown s’ouvre alors dans la même zone que l'onglet *Console* pour indiquer la progression de la compilation et les messages d'erreur éventuels. Une fois la compilation effectuée, le document obtenu s'ouvre et vous pouvez admirer le rendu.
|
||||
|
||||
**Remarque**: Pour la compilation d'un document en pdf, il est nécessaire d'avoir installé un compilateur de Latex sur son ordinateur.
|
||||
|
||||
<h4><b><p style="color:blue;">Exercice :</p></b></h4>
|
||||
|
||||
> Modifiez les options dans l'en-tête de votre fichier Rmarkdown puis compilez le document pour constater l'impact sur le document généré.
|
||||
|
||||
|
||||
### Quelques éléments markdown {#sectMarkdown}
|
||||
|
||||
Le texte d'un document Rmarkdown est régi par le langage markdown.
|
||||
Regardez les quelques éléments de syntaxe et de mise en forme
|
||||
disponible [ici](https://rstudio.github.io/cheatsheets/html/rmarkdown.html?_gl=1*1t61k1h*_ga*MTY5MTU0NjIwNS4xNzI5MDc4NDE1*_ga_2C0WZ1JHG0*MTcyOTA3ODQxNC4xLjEuMTcyOTA3ODQzMC4wLjAuMA..#write-with-markdown){target="_blank"} ou consulter l'aide mémoire de Rmarkdown (accessible via `Help -> Cheatsheets -> Rmarkdown Cheat Sheet`).
|
||||
|
||||
**Remarque: ** Si vous avez organisé votre document avec des sections / sous-sections en faisant débuter une ligne par un ou plusieurs `#`, alors vous pouvez cliquer sur l'icone `Outline` à droite de la barre d'outils associée au fichier R Markdown pour visualiser la table des matières générée automatiquement qui vous permet de naviguer facilement dans le document.
|
||||
|
||||
Pour insérer du code dans un document Rmarkdown, on utilise des blocs appelés **chunk**. Pour cela, il suffit de cliquer sur l'icone d'insertion d'un chunk dans la barre d'outils d'un document Rmarkdown. Il est possible d'insérer un chunk de code R mais pas seulement (par exemple on peut insérer du code Python). Pour du code R, un chunk de la forme $\textrm{```{r} .... ```}$ s'insère alors dans le document.
|
||||
On peut alors saisir du code R dans ce chunk. On peut ajouter un nom à un bloc et préciser des options dans les accolades `{r nomdubloc, ....}`, par exemple
|
||||
|
||||
+ eval (TRUE par défaut, ou FALSE) : détermine si le code R doit être évalué ou non,
|
||||
+ echo (TRUE par défaut, ou FALSE) : détermine si le code R doit être affiché ou non,
|
||||
+ results ('markup' par défaut, 'hide', 'hold' ou 'asis') : détermine comment les sorties doivent être affichées,
|
||||
+ error (FALSE par défaut, ou TRUE) : détermine si les messages d'erreur doivent être affichée,
|
||||
+ warning (TRUE par défaut, ou FALSE) : détermine si les messages d'avertissement doivent être affichées.
|
||||
|
||||
Ces options peuvent être modifiées manuellement ou en utilisant l'interface graphique (en cliquant sur l'icone d'engrenage situé en haut à droite de chaque bloc).
|
||||
|
||||
<h4><b><p style="color:blue;">Exercice :</p></b></h4>
|
||||
|
||||
> - Ajoutez `# Titre 1` avant `## RMarkdown`
|
||||
> - Modifiez ```{r cars}``` en ```{r cars, eval=F}```
|
||||
> - Compilez le document pour voir les différences
|
||||
|
||||
|
||||
De manière générale, il est recommandé de
|
||||
|
||||
- travailler dans le document R Markdown (en lançant balise R par balise
|
||||
R, avec la petite flèche verte en haut à droite de chaque bloc, ou en
|
||||
lançant la ligne de code contenant le curseur en tapant Ctrl Enter),
|
||||
- commenter les résultats obtenus (en dehors des balises R) au fur et à
|
||||
mesure,
|
||||
- ne compiler le document (Knit) qu’à la fin.
|
||||
|
||||
**Pour la suite du TP, récupérez sur moodle le document "TP1-InitR.Rmd", sauvegardez-le dans votre dossier de travail et ouvre-le dans RStudio. C'est le document .Rmd qui a généré cet énoncé de TP et que vous allez compléter dans la suite.**
|
||||
|
||||
|
||||
# Structure des objets en R
|
||||
|
||||
Sous R, les éléments de base sont des objets : des données (vecteurs,
|
||||
matrices, ...), des fonctions, des graphiques, ...
|
||||
Ces objets se différencient par leur mode décrivant leur contenu, et leur classe décrivant leur structure. Les classes d'objets les plus courantes sont : **vector, matrix, array, factor, data.frame, list.**
|
||||
On peut avoir des vecteurs, matrices, tableaux, ... de mode **null** (objet vide), **logical** (TRUE, FALSE, NA), **numeric**, **complex**, **character**. Par contre
|
||||
les listes et les tableaux peuvent être composés d'éléments hétérogènes. On utilise la commande `class()` pour connaître la classe d'un objet et `str()`pour connaitre la nature des éléments composant l'objet.
|
||||
|
||||
Nous allons dans ce TP présenter certains de ces objets, les opérations et manipulations basiques que l'on peut faire, ...
|
||||
|
||||
Remarque : On stocke un objet dans une variable *a* à l'aide de `a<- ...` ou `a= ...`. Pour lister les variables actuellement disponibles dans la session de travail, on utilise la fonction `ls()`. Pour effacer une ou plusieurs variables, on utilise la fonction `rm()`. La commande `rm(list=ls())` permet d'effacer toutes les variables en mémoire.
|
||||
|
||||
|
||||
## Opération sur les scalaires {.tabset}
|
||||
|
||||
### Opérations
|
||||
Les opérations élémentaires sur les scalaires sont `*`,`-`, `+`, `/`, `^`.\
|
||||
|
||||
Executez les commandes suivantes. Vous chercherez en particulier à bien identifier les différents types de données :
|
||||
```{r, echo=T,eval=F}
|
||||
2+2
|
||||
exp(10)
|
||||
a = log(2)
|
||||
a
|
||||
b =cos(10)
|
||||
b
|
||||
a - b
|
||||
a*b
|
||||
d <- 2 < 3
|
||||
d
|
||||
dd <- FALSE
|
||||
dd - d
|
||||
dd + d
|
||||
e<- "toto"
|
||||
class(e)
|
||||
str(e)
|
||||
```
|
||||
|
||||
```{r,echo=F}
|
||||
rm(a,b,d,dd,e)
|
||||
```
|
||||
|
||||
### `is.xxx()/as.xxx()`
|
||||
Pour tester si un objet *obj* est de type *xxx*, on utilise la commande
|
||||
`is.xxx(obj)`. On peut aussi contraindre si possible l'objet *obj* au type *xxx* avec la commande `as.xxx(obj)`.
|
||||
|
||||
```{r}
|
||||
a = 4.3
|
||||
is.numeric(a)
|
||||
is.complex(a)
|
||||
is.character(a)
|
||||
as.character(a)
|
||||
b<- "toto"
|
||||
is.numeric(b)
|
||||
as.list(b)
|
||||
```
|
||||
|
||||
```{r,echo=F}
|
||||
rm(a,b)
|
||||
```
|
||||
|
||||
### Arrondir
|
||||
Pour obtenir des valeurs arrondies sur des valeurs numériques, vous pouvez utiliser l'une des commandes suivantes `round()`, `ceiling()`, `floor()`, `trunc()` ou `signif()` (voir l'aide `?round`).
|
||||
Comparez les codes suivantes:
|
||||
|
||||
```{r}
|
||||
a=1.3579
|
||||
floor(a)
|
||||
ceiling(a)
|
||||
round(a,digits=2)
|
||||
signif(a,digits=2)
|
||||
is.integer(floor(a))
|
||||
is.numeric(floor(a))
|
||||
```
|
||||
|
||||
|
||||
## Booléens et opérations logiques {.tabset}
|
||||
|
||||
En R, un booléen est représenté par *TRUE* ou *FALSE*. Les opérations logiques, `<`, `>`, `<=`, `>=`, `!=` (différent), `==` (égal) retournent *TRUE* ou *FALSE*. On peut définir plusieurs conditions à remplir avec les opérateurs `&` (ET) et `|` (OU).
|
||||
|
||||
Attention, R considère que le booléen *FALSE* vaut $0$ et le booléen *TRUE* vaut $1$. Il est donc capable d'évaluer ` TRUE + 5` bien qu'en toute logique, cela n'a aucun sens!
|
||||
|
||||
Voici quelques exemples de manipulation des booléens pour comprendre :
|
||||
|
||||
```{r}
|
||||
a = 3
|
||||
b = 6
|
||||
a<=b
|
||||
a!=b
|
||||
(b-3==a) & (b>=a)
|
||||
(b==a) | (b>=a)
|
||||
```
|
||||
|
||||
```{r,echo=F}
|
||||
rm(a,b)
|
||||
```
|
||||
|
||||
## Vecteurs *(vector)*{.tabset}
|
||||
|
||||
Un vecteur est un ensemble ordonné d'éléments de même nature (numérique, logique ou alphanumérique). La création d'un vecteur peut se faire par la commande `c(e1,e2,...)`. On peut également générer une séquence avec la commande `seq(a,b,t)` où $a$ est le premier terme, le dernier terme est $\leq b$ et le pas est $t$. Pour créer un vecteur constitué de l'élément $x$ répété $n$ fois, on utilise la commande `rep(x,n)`.
|
||||
|
||||
|
||||
On donne ici quelques exemples à tester sous R pour vous familiariser avec les vecteurs. En particulier, vous pouvez découvrir des fonctions utiles avec les vecteurs comme `length()`, `sum()`, `sort()`, ... , les opérations usuelles, l'extraction d'éléments d'un vecteur, ...
|
||||
|
||||
### Commande `c(...)`
|
||||
```{r}
|
||||
d <- c(2,3,5,8,4,6)
|
||||
d
|
||||
is.vector(d)
|
||||
c(2,5,"toto")
|
||||
1:10
|
||||
```
|
||||
|
||||
### Commande `seq(...)`
|
||||
```{r}
|
||||
seq(1,10)
|
||||
seq(from=1,to=20,by=2)
|
||||
seq(1,20,by=5)
|
||||
seq(1,20,length=5)
|
||||
```
|
||||
|
||||
### Commande `rep(...)`
|
||||
```{r}
|
||||
rep(5,times=10)
|
||||
rep(c(1,2),3)
|
||||
rep(c(1,1,2,18),each=3)
|
||||
```
|
||||
|
||||
### Extraire des éléments
|
||||
```{r}
|
||||
d
|
||||
d[2]
|
||||
d[2:3]
|
||||
d[c(1,3,6)]
|
||||
d[-3]
|
||||
d[-(1:2)]
|
||||
```
|
||||
|
||||
### Opérations
|
||||
|
||||
Additionner ou soustraire un scalaire d'un vecteur
|
||||
```{r}
|
||||
d+4
|
||||
d-4
|
||||
```
|
||||
Multiplier ou diviser un vecteur par un scalaire
|
||||
```{r}
|
||||
2*d
|
||||
d/3
|
||||
```
|
||||
Multiplier/ diviser deux vecteurs terme à terme
|
||||
```{r}
|
||||
e<- rep(2,6)
|
||||
d*e
|
||||
d/e
|
||||
```
|
||||
|
||||
### Fonctions usuelles
|
||||
```{r}
|
||||
d = c(2,3,5,8,4,6)
|
||||
d
|
||||
```
|
||||
|
||||
Longueur d'un vecteur
|
||||
```{r}
|
||||
length(d)
|
||||
```
|
||||
Somme des termes d'un vecteur numérique
|
||||
```{r}
|
||||
sum(d)
|
||||
```
|
||||
Somme des termes cumulés d'un vecteur numérique
|
||||
```{r}
|
||||
cumsum(d)
|
||||
```
|
||||
Différence des termes successifs d'un vecteur numérique
|
||||
```{r}
|
||||
diff(d)
|
||||
```
|
||||
Vérifier si *d* est un vecteur
|
||||
```{r}
|
||||
is.vector(d)
|
||||
```
|
||||
|
||||
Autres fonctions intéressantes avec les vecteurs : `abs()`, `sort()`, `order()`, `which()`, ...
|
||||
```{r}
|
||||
a<-c(3,-1,5,2,-7,3,9)
|
||||
abs(a)
|
||||
sort(a)
|
||||
order(a)
|
||||
which(a<0)
|
||||
```
|
||||
|
||||
On peut appliquer une fonction à tous les éléments d'un vecteur facilement.
|
||||
|
||||
```{r}
|
||||
cos(a)
|
||||
```
|
||||
|
||||
```{r,echo=F}
|
||||
rm(a)
|
||||
```
|
||||
|
||||
### Exercice
|
||||
> Construire
|
||||
>
|
||||
> + le vecteur $a$ constitué des entiers pairs jusqu'à 30
|
||||
> + le vecteur $b$ contenant 6 nombres compris entre 4 et 30 avec un intervalle constant.
|
||||
> + le vecteur $c$ contenant la somme des éléments de $b$, la longueur de $a$ et 5 fois le chiffre 3.
|
||||
>
|
||||
> Extraire du vecteur $c$ le
|
||||
>
|
||||
> + le quatrième élément
|
||||
> + tous les éléments sauf le quatrième
|
||||
> + tous les éléments supérieurs à 10
|
||||
|
||||
|
||||
```{r}
|
||||
a<-seq( from =0, to=30,by=2)
|
||||
b<-seq(from=4,to=30,length=6)
|
||||
c<-c(sum(b),length(a),rep(3,times=5))
|
||||
c[4]
|
||||
c[-4]
|
||||
c[which(c>10)]
|
||||
```
|
||||
|
||||
|
||||
## Matrices (*matrix*){.tabset}
|
||||
|
||||
Comme les vecteurs, les matrices sont de mode quelconque mais ne contiennent que des éléments de même nature. Pour créer une matrice, on utilise la commande `matrix(vec,nrow=n,ncol=p)` où *vec* est le vecteur contenant les éléments de la matrice de taille $n$ par $p$, qui seront rangés en colonne sauf si l'option *byrow=T* est utilisée.
|
||||
|
||||
On donne ici quelques exemples à tester sous R pour vous familiariser avec les matrices. En particulier, vous pouvez découvrir des fonctions utiles avec les matrices comme `dim()`, `t()`, `cbind()`, `rbind()`... , les opérations usuelles dont la différence entre `A*B` et `A%*%B`, l'extraction d'éléments d'une matrice, ...
|
||||
|
||||
### `matrix()`
|
||||
```{r}
|
||||
A = matrix(1:15,ncol=5)
|
||||
A
|
||||
|
||||
B = matrix(1:15,nc=5,byrow=T)
|
||||
B2 = B
|
||||
B2[1,1]="toto"
|
||||
B2
|
||||
```
|
||||
|
||||
```{r}
|
||||
rownames(A)=c(paste("ligne",1:3,sep=""))
|
||||
A
|
||||
```
|
||||
|
||||
### Extraire
|
||||
```{r}
|
||||
A
|
||||
A[1,3]
|
||||
A[,2]
|
||||
A[2,]
|
||||
A[1:3,c(2,5)]
|
||||
A[1:3,-c(2,5)]
|
||||
```
|
||||
|
||||
### `cbind() / rbind()`
|
||||
Pour concaténer deux matrices, on peut utiliser les fonctions `rbind()` ou `cbind()`.
|
||||
|
||||
```{r}
|
||||
A
|
||||
B
|
||||
cbind(A,B)
|
||||
rbind(A,B)
|
||||
```
|
||||
|
||||
### Fonctions utiles
|
||||
|
||||
Dimension d'une matrice
|
||||
```{r}
|
||||
dim(A)
|
||||
```
|
||||
Nombre de lignes et de colonnes
|
||||
```{r}
|
||||
nrow(A)
|
||||
ncol(A)
|
||||
```
|
||||
Transposée et déterminant d'une matrice
|
||||
```{r}
|
||||
t(A)
|
||||
det(A[,3:5])
|
||||
```
|
||||
|
||||
Matrice diagonale et diagonale d'une matrice
|
||||
```{r}
|
||||
diag(A)
|
||||
diag(1:5)
|
||||
```
|
||||
|
||||
Matrice de booléens
|
||||
```{r}
|
||||
A>5
|
||||
A[A<5]<-0
|
||||
A
|
||||
```
|
||||
|
||||
Quelques autres fonctions sur les matrices
|
||||
```{r}
|
||||
colSums(A)
|
||||
apply(A,2,sum)
|
||||
rowSums(A)
|
||||
apply(A,1,sum)
|
||||
rowMeans(A)
|
||||
apply(A,1,mean)
|
||||
apply(A,1,max)
|
||||
```
|
||||
|
||||
Remarque : on reverra dans la section [Programmation](#secProg) la fonction `apply()` qui permet en particulier d'éviter les boucles *for*.\
|
||||
|
||||
### Opérations
|
||||
|
||||
Attention à la multiplication matricielle `%*%` et la multiplication terme à terme `*`!
|
||||
|
||||
Opérations terme à terme de 2 matrices
|
||||
```{r}
|
||||
A+B
|
||||
A*B
|
||||
```
|
||||
|
||||
Multiplication de matrices
|
||||
```{r}
|
||||
t(B) %*%A
|
||||
|
||||
```
|
||||
|
||||
Multiplication par un scalaire
|
||||
```{r}
|
||||
5*A
|
||||
```
|
||||
|
||||
### Exercice
|
||||
|
||||
> 1. Créer la matrice $A=\left(\begin{array}{c c c } 3 & 3 & 3\\ 4 & 4 & 4\\ 5 & 5 & 5\end{array}\right).$
|
||||
> 2. Ajouter 2 à tous les éléments de $A$.
|
||||
> 3. Créer la matrice $B$ en ajoutant la ligne $(1,2,3)$ à $A$, puis la colonne $(1,1,1,1)'$. Déterminer la dimension de $B$.
|
||||
> 4. Extraire de $B$ la sous-matrice $C$ composée des deux premières colonnes et des deux dernières lignes. Calculer la transposée et le déterminant de $C$.
|
||||
|
||||
|
||||
```{r}
|
||||
A<-matrix(rep(c(3,4,5),each=3), ncol=3,byrow=TRUE)
|
||||
A+2
|
||||
B=
|
||||
```
|
||||
|
||||
|
||||
## Listes *(list)* {.tabset #secList}
|
||||
|
||||
Une liste est une collection ordonnée d'objets qui peuvent être de nature différente. Les listes sont
|
||||
en particulier utilisées par certaines fonctions (cf section [Programmation](#secProg)) pour renvoyer des résultats complexes sous
|
||||
forme d'un seul objet.
|
||||
On utilise la fonction `list(nom1=el1,nom2=el2,...)` (l'utilisation
|
||||
des noms étant facultative) pour générer une liste. On peut accéder à chaque élément de la liste à l'aide
|
||||
de son index entre double crochets ` [[...]]`, ou par son nom précédé du signe `$`.
|
||||
|
||||
|
||||
### `list(...)`
|
||||
```{r}
|
||||
x = list("toto",1:8)
|
||||
x
|
||||
```
|
||||
|
||||
Création d'une liste avec des noms aux éléments
|
||||
```{r}
|
||||
y = list(matrice=matrix(1:15,ncol=5),
|
||||
vecteur=seq(1,20,by=5),
|
||||
texte="toto",scalaire=8)
|
||||
y
|
||||
```
|
||||
|
||||
### Extraction
|
||||
Extraction d'un élément par son numéro
|
||||
```{r}
|
||||
x[[1]]
|
||||
```
|
||||
|
||||
Attention, cette commande n'est pas possible:
|
||||
```{r, eval=F}
|
||||
x[[1]]+1
|
||||
```
|
||||
|
||||
par contre celle-ci est possible
|
||||
```{r}
|
||||
x[[2]]+10
|
||||
```
|
||||
|
||||
```{r}
|
||||
y[[1]]
|
||||
y$matrice
|
||||
y$vec
|
||||
y[c("texte","scalaire")]
|
||||
```
|
||||
|
||||
### Fonctions utiles
|
||||
|
||||
```{r}
|
||||
names(y)
|
||||
length(y)
|
||||
length(y$vecteur)
|
||||
cos(y$scal)+y[[2]][1]
|
||||
summary(y)
|
||||
```
|
||||
|
||||
|
||||
### Exercice
|
||||
|
||||
> 1. Créer une liste contenant le nom de trois matières, les notes de 5 élèves pour chacune de ces matières, l'âge des 5 élèves et la filière (PO) d'appartenance de ces 5 élèves.
|
||||
> 2. Récupérer les notes du 4ème élève
|
||||
> 3. Créer une matrice contenant les notes et l'âge des 5 élèves.
|
||||
|
||||
```{r}
|
||||
# A COMPLETER POUR REPONDRE A L'EXERCICE
|
||||
```
|
||||
|
||||
## Data frames {.tabset}
|
||||
Sous R, un data.frame est analogue à une matrice mais le contenu des colonnes
|
||||
peut être ici hétérogène. Un tableau de données est un ensemble de vecteurs rangés colonne par colonne, chaque colonne correspondant à une variable, chaque ligne à un individu. En particulier, lors d'études statistiques, les données à étudier sont souvent représentées par un data.frame sous R. Pour créer un tableau de données, on peut regrouper des variables de même longueur à
|
||||
l'aide de la commande `data.frame(nom1=var1,nom2=var2,...)`. On peut par exemple transformer une matrice en un tableau de données en utilisant la commande `as.data.frame(mat)`.
|
||||
|
||||
|
||||
On donne ici quelques exemples à tester sous R pour vous familiariser avec les data.frames. En particulier, vous pouvez découvrir des fonctions utiles dont `summary()` et `head()`.
|
||||
|
||||
### `data.frame()`
|
||||
```{r}
|
||||
# Création du data.frame H
|
||||
taille = runif(12,150,180)
|
||||
masse = runif(12,50,90)
|
||||
sexe = rep(c("M","F","F","M"),3)
|
||||
H = data.frame(taille,masse,sexe)
|
||||
H
|
||||
class(H)
|
||||
```
|
||||
|
||||
### `summary()/head()`
|
||||
La fonction `summary()` permet de résumer le contenu des différentes colonnes d'un data.frame.
|
||||
```{r}
|
||||
summary(H)
|
||||
```
|
||||
La fonction `head()` permet de visualiser les premières lignes d'un data.frame
|
||||
```{r}
|
||||
head(H)
|
||||
```
|
||||
|
||||
### data.frame / list/matrix
|
||||
Au travers de ces quelques commandes, vous pouvez voir les analogies entre data.frame, list et matrix mais restez prudent sur la nature de l'objet que vous manipulez!
|
||||
```{r}
|
||||
H[1,]
|
||||
H$taille
|
||||
H$sexe
|
||||
is.data.frame(H)
|
||||
is.matrix(H)
|
||||
MH = as.matrix(H)
|
||||
MH
|
||||
summary(MH)
|
||||
as.list(H)
|
||||
```
|
||||
|
||||
|
||||
### Exercice
|
||||
|
||||
> On reprend le data.frame $H$.
|
||||
>
|
||||
>1. Extraire la masse des individus dont la taille est supérieure à 160.
|
||||
>2. Extraire la masse et le sexe de ces mêmes individus.
|
||||
>3. Extraire la taille des individus de sexe masculin dont la masse est inférieure à 80 (c'est possible en une seule ligne avec `&`).
|
||||
|
||||
|
||||
```{r}
|
||||
# A COMPLETER POUR REPONDRE A L'EXERCICE
|
||||
```
|
||||
|
||||
# Les graphiques avec R
|
||||
|
||||
R contient de base des fonctions dédiées aux graphiques.
|
||||
Les fonctions graphiques principales comme `plot()` ouvrent une nouvelle fenêtre à l'execution. Les fonctions graphiques secondaires permettent d'ajouter des éléments à un graphique. Une présentation succinte des graphiques de base avec R est disponible [ici (tutoriel "Premiers Graphiques")](https://cmaugis.github.io/TutorielsR/Part2-InitR.html#premiers-graphiques){target="_blank"}.
|
||||
|
||||
Maintenant il est plus usuel d'utiliser la librairie `ggplot2` pour faire des graphiques sous R. On découvrira les graphiques avec ggplot dans le TP2.
|
||||
|
||||
|
||||
# Programmation avec R {#secProg}
|
||||
|
||||
Cette partie est consacrée à la création des fonctions, les instructions de contrôle, la syntaxe des itérations et la fonction `apply()` (et ses dérivées).
|
||||
|
||||
## Créer une fonction
|
||||
Il est possible sous R de construire ses propres fonctions. De manière générale, la définition d'une nouvelle fonction passe par l'expression suivante :
|
||||
|
||||
```{r,eval=F}
|
||||
nomfonction=function(arg1[=exp1],arg2[=exp2],...){
|
||||
bloc d instructions
|
||||
sortie = ...
|
||||
return(sortie)
|
||||
}
|
||||
```
|
||||
|
||||
Les accolades signalent le début et la fin du code source de la fonction, les crochets indiquent le caractère facultatif des valeurs par défaut des arguments.
|
||||
L'objet *sortie* contient le ou les résultats retournés par la fonction, on peut en particulier utiliser une liste pour retourner plusieurs résultats.
|
||||
|
||||
Voici quelques exemples :
|
||||
|
||||
```{r}
|
||||
MaFonction=function(x){x+2}
|
||||
MaFonction(3)
|
||||
```
|
||||
|
||||
```{r}
|
||||
Fonction2=function(a,b=7){a+b}
|
||||
Fonction2(2,b=3)
|
||||
Fonction2(5)
|
||||
```
|
||||
|
||||
Fonction retournant le périmètre et la surface d'un cercle à partir de son rayon :
|
||||
```{r}
|
||||
CalculsCercle=function(r){
|
||||
p=2*pi*r
|
||||
s=pi*r*r
|
||||
resultats = list(perimetre=p,surface=s)
|
||||
return(resultats)
|
||||
}
|
||||
res=CalculsCercle(3)
|
||||
res
|
||||
res$surf
|
||||
```
|
||||
|
||||
## Structures de contrôle et itérations
|
||||
|
||||
### Instructions conditionnelles
|
||||
La syntaxe `if(condition){instructions}` permet de calculer les instructions uniquement si la condition est vraie.
|
||||
Le code `if(condition){ A }else { B }` calcule les instructions A si la condition est vraie et les instructions B sinon. On peut également utiliser `ifelse`.
|
||||
|
||||
Dans l'exemple suivant, les deux commandes sont équivalentes :
|
||||
|
||||
```{r,eval=F}
|
||||
if(x>0){y=x*log(x)}else{ y=0}
|
||||
y=ifelse(x>0,x*log(x),0)
|
||||
```
|
||||
|
||||
|
||||
### Itérations
|
||||
On utilise les boucles pour exécuter plusieurs fois une instruction ou un bloc d'instructions. Les trois types de boucle sont :
|
||||
|
||||
- la boucle **for** :
|
||||
`for(var in seq){ commandes }`
|
||||
- la boucle **while** :
|
||||
`while(cond){ commandes }`
|
||||
- la boucle **repeat** :
|
||||
`repeat { commandes ; if (cond) break }`
|
||||
|
||||
Pour illustrer les trois types de boucles, on a codé de trois façons différentes la somme des éléments d'un vecteur `x` ce qui correspond à la fonction `sum()` de R.
|
||||
|
||||
```{r}
|
||||
# Exemple boucle for
|
||||
somme1=function(x){
|
||||
t = 0
|
||||
for (i in 1:length(x)){
|
||||
t = t+x[i]
|
||||
}
|
||||
return(t)
|
||||
}
|
||||
|
||||
x = seq(1:10)
|
||||
somme1(x)
|
||||
sum(x)
|
||||
```
|
||||
|
||||
```{r}
|
||||
# Exemple boucle while
|
||||
somme2=function(x){
|
||||
t = 0
|
||||
i = 1
|
||||
while (i<=length(x)){
|
||||
t = t+x[i]
|
||||
i = i+1
|
||||
}
|
||||
return(t)
|
||||
}
|
||||
somme2(x)
|
||||
```
|
||||
|
||||
|
||||
```{r}
|
||||
# Exemple repeat
|
||||
somme3=function(x){
|
||||
t = 0
|
||||
i = 1
|
||||
repeat{
|
||||
t = t+x[i]
|
||||
i = i+1
|
||||
if (i> length(x)) break
|
||||
}
|
||||
return(t)
|
||||
}
|
||||
somme3(x)
|
||||
```
|
||||
|
||||
<h4><b><p style="color:blue;">Exercice :</p></b></h4>
|
||||
|
||||
> 1. Écrire une fonction *ma.var* qui calcule la variance empirique corrigée pour un vecteur $x = (x_1, . . . , x_n)$. Quelle est la variance de la variable "Taille" dans le data.frame $H$ ? Comparez avec la fonction prédéfinie `var()`.
|
||||
> 2. Écrire une fonction qui calcule les $n$ premiers termes de la suite de Fibonacci ($u_1=0, u_2=1, \forall n>2, u_n=u_{n-1}+u_{n-2}$)
|
||||
|
||||
|
||||
```{r}
|
||||
# A COMPLETER POUR REPONDRE A L'EXERCICE
|
||||
```
|
||||
|
||||
## `apply()` et ses variantes
|
||||
|
||||
Il est recommandé d'éviter les boucles très chronophages. On peut utiliser pour cela la fonction `apply()` et ses variantes `sapply()`, `lapply()`, `tapply()` sur des vecteurs ou matrices.
|
||||
|
||||
La fonction `apply()` permet d'appliquer la même fonction *FUN* sur toutes
|
||||
les lignes *(MARGIN=1)* ou les colonnes *(MARGIN=2)* d'une matrice *MAT* : `apply(MAT , MARGIN, FUN)`.
|
||||
|
||||
Les fonctions `lapply()` et `sapply()` calculent la même fonction sur tous les éléments d'un vecteur ou d'une liste.
|
||||
La commande `lapply(X,FUN, ARG.COMMUN)` permet d'appliquer la fonction *FUN* à tous les éléments du vecteur ou de la liste *X*. Les valeurs de *X* sont affectées au premier argument de la fonction *FUN*. Si la fonction *FUN* a plusieurs paramètres d'entrée, ils sont spécifiés dans *ARG.COMMUN*. Cette fonction retourne le résultat sous la forme de listes. `sapply()` est une fonction similaire à `lapply()` mais le résultat est retourné sous forme de vecteurs, si possible.
|
||||
|
||||
La fonction `tapply()` applique une fonction *FUN* sur les sous-groupes d'un
|
||||
vecteur *X* définis par une variable de type factor *GRP* : `tapply(X,GRP,FUN,...)`.
|
||||
|
||||
Voici quelques exemples :
|
||||
|
||||
```{r}
|
||||
data(iris)
|
||||
head(iris)
|
||||
apply(iris[,1:4],2,sum)
|
||||
apply(iris[,1:4],1,sum)
|
||||
lapply(iris[,1:4],sum)
|
||||
sapply(iris[,1:4],sum)
|
||||
tapply(iris[,1],iris[,5],sum)
|
||||
```
|
||||
|
||||
<h4><b><p style="color:blue;">Exercice :</p></b></h4>
|
||||
|
||||
Soit la fonction suivante :
|
||||
```{r,eval=F}
|
||||
Exo1=function(M){
|
||||
res=rep(0,5)
|
||||
for (i in 1:5){
|
||||
tmp=0
|
||||
for (j in 1:4) {tmp = tmp + M[i,j]}
|
||||
res[i]=tmp
|
||||
}
|
||||
return(res)
|
||||
}
|
||||
|
||||
M=matrix(1:20,nrow=5,ncol=4)
|
||||
Exo1(M)
|
||||
```
|
||||
|
||||
> Proposez une fonction équivalente sans aucune boucle.
|
||||
|
||||
```{r}
|
||||
# A COMPLETER
|
||||
```
|
||||
|
||||
# Lois de probabilité sous R
|
||||
|
||||
Le logiciel R permet d’effectuer des calculs avec toutes les lois de probabilité
|
||||
usuelles, et aussi de simuler des échantillons issus de ces lois.
|
||||
Pour chaque distribution, quatre commandes préfixées par une des lettres **d**, **p**, **q**, **r** et suivi du nom de la distribution (`nomdist`) sont disponibles :
|
||||
|
||||
- dnomdist : fonction de densité $f_X(.)$
|
||||
pour une loi continue ou fonction de probabilité $\mathbb P(X=k)$
|
||||
pour une loi discrète
|
||||
- pnomdist : fonction de répartition $F_X(.)=\mathbb P(X\leq .)$𝐹
|
||||
- qnomdist : quantiles
|
||||
- rnomdist : génère des réalisations aléatoires indépendantes de la distribution nomdist.
|
||||
|
||||
Voici une liste non exhaustive de lois de probabilité disponibles :
|
||||
|
||||
```{r,echo=F}
|
||||
df<-data.frame(Loi=c("Gaussienne","Binomiale","Poisson","Uniforme continue","Exponentielle","Student","Khi-deux","Fisher"),
|
||||
nomdist=c("norm","binom","pois","unif","exp","t","chisq","f"))
|
||||
knitr::kable(df,align="ll")
|
||||
```
|
||||
|
||||
<h4><b><p style="color:blue;">Exercice :</p></b></h4>
|
||||
|
||||
> Simulez un échantillon de $n=1000$ variables aléatoires gaussiennes de moyenne $10$ et de variance $4$
|
||||
> Calculez la moyenne et la variance de l'échantillon.
|
||||
|
||||
```{r}
|
||||
# A COMPLETER
|
||||
```
|
||||
|
||||
|
||||
# Entrée / Sortie
|
||||
|
||||
## Importation d'un jeu de données
|
||||
|
||||
Pour importer un tableau de données contenu dans un fichier en un data.frame, on utilise la fonction `read.table()`. Par exemple, pour un fichier nommé “Tableau.txt”, on utilisera la commande `Tab1 <- read.table("Tableau.txt")` qui crée un data.frame `Tab1`. La commande read.table() admet des options dont
|
||||
|
||||
- `header` : indique si la première ligne contient des noms de variables. Par défaut, la valeur de cette option est FALSE.
|
||||
- `sep` : précise le séparateur de champ dans le fichier entre guillemets (" " par défaut).
|
||||
- `dec` : le caractère utilisé pour les décimales ("." par défaut).
|
||||
|
||||
Les fonctions `read.csv()` et `read.csv2()` sont utilisées pour la lecture de fichiers de données au format `.csv`.
|
||||
|
||||
## Exportation
|
||||
|
||||
### Exportation en un fichier de données
|
||||
|
||||
Si maintenant on désire sauvegarder un jeu de données, on utilise la commande `write.table()`. Les principales options de cette fonction sont :
|
||||
|
||||
- `file` : nom du fichier dans lequel écrire (vérifier le répertoire courant)
|
||||
- `append` : prend une valeur logique. Si TRUE, R ajoute les données dans le fichier concerné sans effacer les précédentes. La valeur par défaut est FALSE.
|
||||
- `sep` : précise le séparateur à utiliser.
|
||||
- `dec` : précise le caractère à utiliser pour les décimales.
|
||||
|
||||
<h4><b><p style="color:blue;">Exercice :</p></b></h4>
|
||||
|
||||
> Chargez le jeu de données ìris`disponible dans R avec la commande `data(iris)
|
||||
> Sauvegardez le jeu de données dans un fichier intitulé `SauvIris.txt` avec des ";" pour séparateurs.
|
||||
> Importez les données du fichier `SauvIris.txt`
|
||||
|
||||
```{r}
|
||||
# A COMPLETER
|
||||
```
|
||||
|
||||
|
||||
### Sauvegarde d'un / des objets R
|
||||
|
||||
R permet d’enregistrer des objets entiers, en conservant à la fois les données contenues dans les objets et les structures des objets.
|
||||
|
||||
La fonction `save.image()` peut être utilisée à tout moment pour enregistrer une image de session, c’est à dire l’ensemble des objets dans l’environnement de travail d’une session R. La sauvegarde d’une image de la session vous est également proposée lors de la fermeture de R.
|
||||
|
||||
La fonction `save()` permet d’enregistrer spécifiquement un ou des objets dans un fichier de format .RData. Ce fichier peut être à tout moment rechargé sous R avec la fonction `load()`. Voici un exemple :
|
||||
|
||||
```{r}
|
||||
x <- runif(20)
|
||||
y <- list(a = 1, b = TRUE, c = "oops")
|
||||
save(x, y, file = "xy.RData")
|
||||
load("xy.RData")
|
||||
```
|
||||
|
||||
On peut aussi enregistrer un seul objet, sans inclure le nom de l'objet, à l'aide de la fonction `saveRDS()`. L'objet, sauvegardé au format `.rds` peut être rechargé avec la fonction `readRDS()`.
|
||||
|
||||
|
3066
INSA/TP anadon/TP1-InitR.html
Normal file
458
INSA/TP anadon/TP2-StatDesc.Rmd
Normal file
|
@ -0,0 +1,458 @@
|
|||
---
|
||||
title: "TP2 - Statistique Descriptive"
|
||||
date: "3MIC - 2024-2025"
|
||||
output:
|
||||
pdf_document:
|
||||
toc: true
|
||||
toc_depth: '4'
|
||||
html_document:
|
||||
toc: true
|
||||
toc_float: true
|
||||
toc_depth: 4
|
||||
number_sections: true
|
||||
---
|
||||
|
||||
```{css,echo=F}
|
||||
.badCode {
|
||||
background-color: #C9DDE4;
|
||||
}
|
||||
|
||||
.corrO { background-color: rgb(255,238,237); }
|
||||
.corrS { background-color: pink; color: black; border: 1px solid red; }
|
||||
```
|
||||
|
||||
```{r setup, echo=FALSE, cache=FALSE}
|
||||
library(knitr)
|
||||
## Global options
|
||||
options(max.print="75")
|
||||
opts_chunk$set(echo=TRUE,
|
||||
cache=FALSE,
|
||||
prompt=FALSE,
|
||||
tidy=TRUE,
|
||||
comment=NA,
|
||||
message=FALSE,
|
||||
warning=FALSE,
|
||||
class.source="badCode")
|
||||
opts_knit$set(width=75)
|
||||
```
|
||||
|
||||
```{r,echo=F, error=F,warning=F}
|
||||
library(corrplot)
|
||||
library(ggplot2)
|
||||
library(gridExtra)
|
||||
library(forcats)
|
||||
library(reshape2)
|
||||
library(BioStatR)
|
||||
|
||||
|
||||
```
|
||||
|
||||
Ce TP a pour objectif de mener l'étude descriptive uni- et bi-dimensionnelle
|
||||
du jeu de données `wine` disponible sous Moodle. Vous rédigerez les réponses
|
||||
et vos observations dans le script .Rmd du TP au fur et à mesure. Vous pourrez compiler votre script à la fin du TP pour obtenir un compte-rendu du TP.
|
||||
|
||||
*Remarque : pensez à enlever les "eval=F" au fur et à mesure de l'avancement dans le TP pour avoir les résultats dans votre compte-rendu final de TP.*
|
||||
|
||||
# Données
|
||||
|
||||
On va étudier le jeu de données **wine** disponible sur la page moodle du cours. Commencez par récupérer ce jeu de données et sauvegardez le fichier dans votre dossier de travail.
|
||||
|
||||
Le jeu de données **wine ** comprend des mesures physico-chimiques réalisées sur un échantillon de *$600$ *vins (rouges et blancs) du Portugal. Ces mesures sont complétées par une évaluation sensorielle de la qualité par un ensemble d’experts. Chaque vin est décrit par les variables suivantes :
|
||||
|
||||
+ *Qualite* : son évaluation sensorielle par les experts ("bad","medium","good"),
|
||||
+ *Type* : son type (1 pour un vin rouge, 0 pour un vin blanc),
|
||||
+ *AcidVol* : la teneur en acide volatile (en g/dm3 d’acide acétique),
|
||||
+ *AcidCitr* : la teneur en acide citrique (en g/dm3),
|
||||
+ *SO2lbr* : le dosage du dioxyde de soufre libre (en mg/dm3),
|
||||
+ *SO2tot* : le dosage du dioxyde de soufre total (en mg/dm3),
|
||||
+ *Densite* : la densité (en g/cm3),
|
||||
+ *Alcool* : le degré d’alcool (en % Vol.).
|
||||
|
||||
Dans un premier temps, commencez par charger le jeu de données à l'aide de la fonction `read.table()`.
|
||||
|
||||
```{r}
|
||||
wine <- read.table("wine.txt",header=TRUE)
|
||||
```
|
||||
|
||||
Vous pouvez voir les premières lignes du jeu de données à l'aide de la fonction `head()`
|
||||
|
||||
```{r}
|
||||
head(wine)
|
||||
```
|
||||
|
||||
**Question :** Contrôlez la dimension du jeu de données (c'est-à-dire le nombre d'individus et le nombre de variables) ? Vous pouvez vous aider des fonctions `dim()`, `nrow()`et `ncol()`.
|
||||
|
||||
```{r}
|
||||
dim(wine)
|
||||
nrow(wine)
|
||||
ncol(wine)
|
||||
```
|
||||
|
||||
**Question :** Contrôlez que l'objet `wine` est bien de type data.frame (commande `is.data.frame()`) ? Remarquons que l'on peut obtenir les noms des variables grâce à la commande `names(wine)` ou `colnames(wine)`. Plus largement, on peut utiliser la commande `attributes()`.
|
||||
|
||||
```{r}
|
||||
is.data.frame(wine)
|
||||
names(wine)
|
||||
colnames(wine)
|
||||
```
|
||||
|
||||
**Question :** Quelle est la nature de chaque variable ? Vous pouvez vous aider de la commande `str()`.
|
||||
|
||||
```{r}
|
||||
str(wine)
|
||||
```
|
||||
|
||||
Attention, il faut bien préciser à R les variables qui doivent être considérées comme qualitatives. On utilise donc la fonction `as.factor()` sur les variables *Qualite* et *Type*. On va aussi en profiter pour renommer les modalités de la variable *Type* en `blanc`et `rouge`.
|
||||
|
||||
```{r}
|
||||
wine$Qualite<-as.factor(wine$Qualite)
|
||||
wine$Type<-factor(wine$Type,labels=c("blanc","rouge"))
|
||||
head(wine)
|
||||
str(wine)
|
||||
```
|
||||
|
||||
On peut obtenir un résumé rapide du jeu de données à l'aide de la fonction `summary()`
|
||||
|
||||
```{r}
|
||||
summary(wine)
|
||||
```
|
||||
|
||||
|
||||
# Présentation de `ggplot2`
|
||||
|
||||
Avant de commencer l'analyse uni- et bi-dimensionnelle du jeu de données, on va ici donner quelques notions sur les graphiques avec `ggplot2` pour comprendre la suite.
|
||||
|
||||
[**ggplot2**](https://ggplot2.tidyverse.org/){target="_blank"} est une extension dédiée aux graphiques. Elle est basée sur une syntaxe particulière (il faut oublier les graphiques de base de R) mais robuste et efficace pour la construction de graphiques complexes. Elle part du principe (comme tout package de tidyverse) que les données relatives au graphique sont stockées dans un tableau (data.frame ou tibble).
|
||||
|
||||
Un graphique en `ggplot2` s'initialise avec la fonction `ggplot()` qui prend en argument le jeu de données étudié. Par exemple,
|
||||
|
||||
```{r}
|
||||
gEx <- ggplot(data=wine)
|
||||
```
|
||||
|
||||
Pour l'instant, on ne voit rien mais pourtant l'objet `gEx` contient des informations:
|
||||
```{r}
|
||||
summary(gEx)
|
||||
names(gEx)
|
||||
gEx$layers
|
||||
```
|
||||
|
||||
mais pour l'instant son `layers` est vide.
|
||||
|
||||
On ajoute ensuite des éléments graphiques, appelés `geom`, à l'objet graphique grâce à l'opérateur `+` et on précise à l'aide de la fonction `aes()` les données à utiliser en argument du `geom`. Par exemple, si on veut tracer le nuage de points entre les variables `Densite` et `Alcool` :
|
||||
|
||||
```{r}
|
||||
ggplot(data=wine,aes(x=Densite,y=Alcool))+
|
||||
geom_point()
|
||||
|
||||
```
|
||||
|
||||
Parmi les `geom` les plus utilisés, on peut citer
|
||||
|
||||
- `geom_point()` (nuage de points)
|
||||
- `geom_line()`(trace des lignes)
|
||||
- `geom_bar()` (représentation en bâtons)
|
||||
- `geom_boxplot()` (boxplot)
|
||||
- `geom_violin()` (violin plot)
|
||||
- `geom_histogram()` (histogramme)
|
||||
- `geom_density()` (densité)
|
||||
- `geom_smooth()`
|
||||
|
||||
On peut ajouter un **mappage**, c'est à dire une mise en relation entre un attribut graphique d'un `geom` et une variable du tableau de données. Par exemple, on peut mettre des couleurs à un nuage de points en fonction d'une variable qualitative, ... Il faut bien distinguer un mappage d'une modification d'un attribut graphique sans lien avec une variable. Une règle importante à retenir est donc
|
||||
|
||||
+ pour définir un mappage (relation entre les valeurs d'une variable et un attribut graphique), on le déclare dans `aes()`
|
||||
+ pour modifier un attribut graphique de la même manière pour tous les points, on le définit en-dehors de la fonction `aes()`.
|
||||
|
||||
Par exemple,
|
||||
|
||||
```{r}
|
||||
ggplot(data=wine)+
|
||||
geom_point(aes(x=Densite,y=Alcool,color=Type))
|
||||
```
|
||||
|
||||
```{r}
|
||||
ggplot(data=wine)+
|
||||
geom_point(aes(x=Densite,y=Alcool),color="blue")
|
||||
```
|
||||
|
||||
On peut représenter plusieurs `geom` sur un même graphique simultanément, il suffit d'utiliser l'opérateur `+` pour les ajouter au fur et à mesure.
|
||||
Par exemple,
|
||||
|
||||
```{r}
|
||||
ggplot(data=wine)+
|
||||
geom_violin(aes(x=Qualite,y=Alcool))+
|
||||
geom_point(aes(x=Qualite,y=Alcool), col = "blue", alpha = 0.2,position="jitter")
|
||||
```
|
||||
|
||||
Les *scales* permettent de modifier la façon dont un attribut graphique est lié aux valeurs d'une variable. Pour les modifier, on ajoute un nouvel élément de la forme `scale_<attribut>_<type>` à l'objet graphique ggplot2 avec `+`. Les fonctions *scale* les plus connues sont :
|
||||
|
||||
+ `scale_size()` (avec son argument `range`) pour modifier les tailles minimales, maximales, ...
|
||||
+ `scale_x()` et `scale_y()` pour modifier l'axe `x`et l'axe `y` respectivement
|
||||
+ `scale_x_continuous()` (resp. `scale_x_discrete()`) pour modifier l'axe des `x` dans le cas d'une variable quantitative (resp. une variable qualitative)
|
||||
+ `scale_y_continuous()` (resp. `scale_y_discrete()`) pour modifier l'axe des `y` dans le cas d'une variable quantitative (resp. une variable qualitative)
|
||||
+ `scale_color()` pour modifier les couleurs de dessin
|
||||
+ `scale_fill()` pour modifier les couleurs de remplissage
|
||||
|
||||
Pour les couleurs, on peut spécifier un gradient de couleur sur une variable quantitative avec `scale_color_gradient()`, modifier manuellement la palette de couleur avec `scale_color_manual()`, faire appel à une palette de couleur prédéfinie (par exemple en utilisant le package [viridis]("https://cran.r-project.org/web/packages/viridis/vignettes/intro-to-viridis.html"){target="_blank"} avec `scale_color_viridis`,
|
||||
en s'appuyant sur les palettes disponibles dans [ColorBrewer](https://colorbrewer2.org/#type=sequential&scheme=BuGn&n=3){target="_blank"} avec `scale_color_brewer()`), ...
|
||||
|
||||
|
||||
```{r}
|
||||
ggplot(data=wine)+
|
||||
geom_point(aes(x=Alcool,y=Densite,size=AcidVol,color=Type))+
|
||||
scale_size("Acide vol.", range = c(0,1.5),breaks=seq(0,1.5,0.2)) +
|
||||
scale_x_continuous("Alcool",limits=c(8,16)) +
|
||||
scale_y_continuous("Densité",limits=c(0.985,1.01))
|
||||
```
|
||||
|
||||
|
||||
Remarque : on peut modifier certains éléments avec une commande spécifique comme
|
||||
|
||||
+ `ggtitle()` pour modifier le titre
|
||||
+ `xlab()`et `ylab()` pour modifier l'intituler de l'axe des abscisses et des ordonnées respectivement
|
||||
|
||||
En bref, les possibles avec `ggplot2` sont infinis car de nombreux éléments sont personnalisables. Voici quelques références pour les graphiques en `ggplot2` parmi les nombreuses ressources disponibles sur le web :
|
||||
|
||||
+ Le livre *Ggplot2: Elegant Graphics for Data Analysis* de H. Wickham. [@ggplot2]
|
||||
+ Le [site web de ggplot2]("https://ggplot2.tidyverse.org/"){target="_blank"}
|
||||
+ [The R Graph Gallery](https://www.r-graph-gallery.com/ggplot2-package.html){target="_blank"}
|
||||
+ [The Cheat Sheet de ggplot 2](https://thinkr.fr/pdf/ggplot2-french-cheatsheet.pdf){target="_blank"}
|
||||
|
||||
|
||||
# Etude statistique unidimensionnelle
|
||||
|
||||
## Pour une variable qualitative
|
||||
|
||||
Nous nous intéressons dans cette partie aux deux variables qualitatives *Type* et *Qualite*.
|
||||
|
||||
**Question :** A l'aide des commandes `table()`, `summary()` et `levels()`, donnez un résumé de la variable `Type`. Quels sont les modalités du facteur ?
|
||||
|
||||
```{r}
|
||||
# A COMPLETER
|
||||
summary(wine$Type)
|
||||
levels(wine$Type
|
||||
)
|
||||
table(wine$Type)
|
||||
```
|
||||
|
||||
**Question :** A l'aide du code suivant, résumez graphiquement la variable `Type`
|
||||
par une représentation par secteurs ou un diagramme en barres.
|
||||
Interprétez les résultats.
|
||||
|
||||
```{r}
|
||||
g1<-ggplot(wine, aes(x=Type))+
|
||||
geom_bar()+
|
||||
ylab("")+ggtitle("Effectifs")
|
||||
g2<-ggplot(wine, aes(x = Type)) +
|
||||
geom_bar(aes(y = (..count..)/sum(..count..)))+ylab("")+ggtitle("Frequences")
|
||||
|
||||
df <- data.frame(group = levels(wine$Type),
|
||||
value = as.vector(table(wine$Type))/nrow(wine))
|
||||
g3<-ggplot(df, aes(x="", y=value, fill=group))+
|
||||
geom_bar(width = 1, stat = "identity")+
|
||||
coord_polar("y", start=0)+
|
||||
theme(legend.position="bottom")
|
||||
grid.arrange(g3,g1,g2,ncol=3)
|
||||
|
||||
|
||||
```
|
||||
|
||||
**Question :** La variable *Qualite* est une variable qualitative ordinale. On peut donc utiliser les effectifs cumulés et les fréquences cumulées. Pour tracer les fréquences cumulées, il faut que l'ordre des modalités soit bien compris par R. Ici, on commence par réorganiser les modalités en `bad`, `medium` et `good`. A l'aide des codes suivants, étudiez la variable *Qualite*.
|
||||
|
||||
```{r,echo=T}
|
||||
wine$Qualite <- fct_relevel(wine$Qualite,"bad","medium","good")
|
||||
|
||||
EffQual=as.vector(table(wine$Qualite))
|
||||
FreqQual= data.frame(Eff = EffQual, Freq = EffQual/length(wine$Qualite), FreqCumul=cumsum(EffQual)/length(wine$Qualite))
|
||||
rownames(FreqQual)=levels(wine$Qualite)
|
||||
|
||||
knitr::kable(FreqQual, caption = 'Description de la variable Qualite',booktabs = TRUE,digits=3)
|
||||
```
|
||||
|
||||
```{r}
|
||||
df <- data.frame(Qualite = levels(wine$Qualite), value = table(wine$Qualite),
|
||||
valuecumul = 100 * cumsum(prop.table(table(wine$Qualite))))
|
||||
df$Qualite <- fct_relevel(df$Qualite, "bad", "medium", "good")
|
||||
|
||||
df <- data.frame(df, freq = df$value.Freq/nrow(wine))
|
||||
g1 <- ggplot(wine) + geom_bar(aes(x = Qualite)) + ggtitle("Effectifs")+xlab("Qualite")
|
||||
g2 <- ggplot(wine) + geom_bar(aes(x = Qualite, y = ..prop.., group = 1)) + ggtitle("Frequences")+xlab("Qualite")
|
||||
g3 <- ggplot(df, aes(x = Qualite, y = valuecumul)) + geom_bar(stat = "identity") +
|
||||
ggtitle("Fréquences cumulées")
|
||||
|
||||
g4 <- ggplot(df, aes(x = "", y = freq, fill = Qualite)) + geom_bar(width = 1, stat = "identity") +
|
||||
coord_polar("y", start = 0)
|
||||
grid.arrange(g1, g2, g3, g4, ncol = 2)
|
||||
```
|
||||
|
||||
## Pour une variable quantitative
|
||||
|
||||
Pour cette section, on se focalise sur la variable *Alcool*.
|
||||
|
||||
### Indicateurs statistiques
|
||||
|
||||
**Question :** Que calculent les commandes `mean()`, `median()`, `var()`, `sd()`, `range()` ? Calculez l’étendue des données.
|
||||
|
||||
```{r}
|
||||
mean(wine$Alcool)
|
||||
median(wine$Alcool)
|
||||
var(wine$Alcool)
|
||||
sd(wine$Alcool)
|
||||
range(wine$Alcool)
|
||||
```
|
||||
|
||||
**Question :** Etudiez les sorties des commandes `summary(wine$Alcool)` et `quantile(wine$Alcool)`.
|
||||
Donnez également l’écart interquartile et les valeurs adjacentes.
|
||||
|
||||
```{r}
|
||||
summary(wine$Alcool)
|
||||
|
||||
quantile(wine$Alcool,0.75,names=FALSE)-quantile(wine$Alcool,0.25,names = FALSE)
|
||||
|
||||
quantile(wine$Alcool)
|
||||
|
||||
|
||||
|
||||
```
|
||||
|
||||
### Représentations graphiques
|
||||
|
||||
Le but de la statistique exploratoire est de synthétiser, résumer et structurer l'information contenue dans des données. On utilise pour cela des représentations de données sous forme de graphiques.
|
||||
|
||||
|
||||
**Question :** On peut utiliser la représentation par histogramme.
|
||||
Tapez `H<-hist(wine$Alcool)` et commentez les différents attributs de `H`.
|
||||
```{r}
|
||||
H<-hist(wine$Alcool)
|
||||
|
||||
```
|
||||
|
||||
|
||||
Pour tracer un histogramme avec ggplot, vous pouvez utiliser le code suivant. Commentez.
|
||||
|
||||
```{r hist}
|
||||
g1<-ggplot(wine,aes(x=Alcool))+
|
||||
geom_histogram(bins=15,color="black",fill="white")+
|
||||
ggtitle("Histo. des effectifs")+
|
||||
ylab("Frequency")+xlab("Alcool")
|
||||
g2<-ggplot(wine,aes(x=Alcool))+
|
||||
geom_histogram(aes(y=..density..),bins=15,color="black", fill="white")+
|
||||
ggtitle("Histo. des frequences")+
|
||||
ylab("Density")+xlab("Alcool")
|
||||
grid.arrange(g1,g2,ncol=2)
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
**Question :** A l'aide du code suivant, représentez un boxplot de la variable "Alcool". Que remarquez-vous ? Comparez avec les valeurs adjacentes calculées précédemment.
|
||||
|
||||
```{r}
|
||||
ggplot(wine,aes(y=Alcool))+geom_boxplot()
|
||||
```
|
||||
|
||||
Pour tracer les boxplots de toutes les variables quantitatives en même temps, il faut réorganiser en amont le jeu de données.
|
||||
|
||||
```{r boxplot}
|
||||
wineaux<-melt(wine[,-c(1,2)])
|
||||
ggplot(wineaux,aes(x=variable,y=value))+
|
||||
geom_boxplot()
|
||||
```
|
||||
|
||||
**Question :** En vous aidant de l'aide de R et des résultats de la section précédente, tapez
|
||||
`B<-boxplot(wine$Alcool)` et commentez les différents attributs de `B`.
|
||||
|
||||
```{r}
|
||||
B<-boxplot(wine$Alcool)
|
||||
```
|
||||
|
||||
# Statistiques descriptives bidimensionnelles
|
||||
## Entre 2 variables quantitatives
|
||||
|
||||
**Question :** Calculez la matrice de corrélation des variables quantitatives (commande `cor()`) ou la matrice de variance-covariance (commandes `var()`
|
||||
ou `cov()`). Représentez graphiquement les corrélations à l'aide de la fonction `corrplot()` de la librairie `corrplot`. Vous pourrez utiliser l'option `method="ellipse"` pour une meilleure lisibilité.
|
||||
|
||||
```{r}
|
||||
print('Correlation')
|
||||
cor(wine[,-c(1,2)])
|
||||
print('Covariance')
|
||||
cov(wine[,-c(1,2)])
|
||||
|
||||
help(corrplot)
|
||||
corrplot(cor(wine[,-c(1,2)]),method = "ellipse")
|
||||
|
||||
```
|
||||
|
||||
|
||||
**Question :** Interprétez les résultats.
|
||||
|
||||
=> il y a une forte correlation negative entre l'Alcool et la densié
|
||||
|
||||
**Question :** Représentez graphiquement la *Densite* en fonction de l'**Alcool** à l'aide de la commande `geom_point()`. Au vu de ce graphique, les variables sont-elles corrélées ? Vous pourrez ajouter la commande `+geom_smooth(method="lm")`
|
||||
pour tracer la droite de régression linéaire. Est-ce cohérent avec la corrélation calculée ci-dessus ?
|
||||
|
||||
```{r}
|
||||
ggplot(data=wine)+
|
||||
geom_point(aes(x=Alcool,y=Densite))+
|
||||
geom_smooth(aes(x=Alcool,y=Densite),method="lm")
|
||||
|
||||
```
|
||||
|
||||
## Entre une variable quantitative et une variable qualitative
|
||||
|
||||
**Question :** Représentez le boxplot de la variable `Alcool` pour chaque modalité de la variable qualitative *Type*. Même question avec *Qualite*. Interprétez les résultats.
|
||||
|
||||
```{r}
|
||||
ggplot(wine)+
|
||||
geom_boxplot(aes(x=Type,y=Alcool))
|
||||
ggplot(wine)+
|
||||
geom_boxplot(aes(x=Qualite,y=Alcool))
|
||||
```
|
||||
|
||||
**Question :** Explorez les autres combinaisons de variables quantitatives avec les variables qualitatives afin de déterminer les variables fortement liées.
|
||||
|
||||
```{r}
|
||||
ggplot(wine)+
|
||||
geom_boxplot(aes(x=Type,y=AcidVol))+
|
||||
geom_boxplot(aes(x=Qualite,y=AcidVol))
|
||||
|
||||
ggplot(wine)+
|
||||
geom_boxplot(aes(x=Type,y=Densite))+
|
||||
geom_boxplot(aes(x=Qualite,y=Densite))
|
||||
|
||||
ggplot(wine)+
|
||||
geom_boxplot(aes(x=Type,y=AcidCitr))+
|
||||
geom_boxplot(aes(x=Qualite,y=AcidCitr))
|
||||
```
|
||||
|
||||
**Question :** A l'aide de la fonction `eta2()` de la librairie `BioStatR`, calculez le rapport de corrélation $\eta^2$ entre chaque variable quantitative et la variable *Type*. Commentez. Faites de même avec la variable *Qualité*.
|
||||
|
||||
```{r}
|
||||
eta2(x=wine$AcidVol,y=wine$Type)
|
||||
eta2(x=wine$AcidCitr,y=wine$Type)
|
||||
eta2(x=wine$SO2lbr,y=wine$Type)
|
||||
eta2(x=wine$SO2tot,y=wine$Type)
|
||||
eta2(x=wine$Alcool,y=wine$Type)
|
||||
eta2(x=wine$Densite,y=wine$Type)
|
||||
```
|
||||
|
||||
## Entre deux variables qualitatives
|
||||
|
||||
**Question :** Analysez la table de contingence entre les deux variables qualitatives *Type* et *Qualite* avec la commande `table()`. Ajoutez les effectifs marginaux avec la commande `addmargins()`.
|
||||
|
||||
```{r}
|
||||
a=table(wine$Qualite,wine$Type)
|
||||
|
||||
addmargins(a)
|
||||
|
||||
```
|
||||
|
||||
|
||||
**Question :** Calculez et représentez les profils-lignes à l'aide des fonctions `prop.table(..., margin = ...)`et `mosaicplot`. Interprétez les résultats. Faites de même avec les profils-colonnes.
|
||||
|
||||
```{r}
|
||||
prop.table(table(wine$Qualite,wine$Type), margin = 1)
|
||||
|
||||
help("prop.table")
|
||||
```
|
||||
|
2139
INSA/TP anadon/TP2-StatDesc.html
Normal file
1176
INSA/TP anadon/TP2-StatDesc.tex
Normal file
291
INSA/TP anadon/TP3-ACP.Rmd
Normal file
|
@ -0,0 +1,291 @@
|
|||
---
|
||||
title: "TP3 - Analayse en Composantes Principales (ACP)"
|
||||
date : "3MIC - 2024-2025"
|
||||
output:
|
||||
html_document:
|
||||
toc: true
|
||||
toc_float: true
|
||||
toc_depth : 4
|
||||
number_sections: true
|
||||
---
|
||||
|
||||
```{css,echo=F}
|
||||
.badCode {
|
||||
background-color: #C9DDE4;
|
||||
}
|
||||
|
||||
.corrO { background-color: rgb(255,238,237); }
|
||||
.corrS { background-color: pink; color: black; border: 1px solid red; }
|
||||
```
|
||||
|
||||
```{r setup, echo=FALSE, cache=FALSE}
|
||||
library(knitr)
|
||||
## Global options
|
||||
options(max.print="75")
|
||||
opts_chunk$set(echo=TRUE,
|
||||
cache=FALSE,
|
||||
prompt=FALSE,
|
||||
tidy=TRUE,
|
||||
comment=NA,
|
||||
message=FALSE,
|
||||
warning=FALSE,
|
||||
class.source="badCode")
|
||||
opts_knit$set(width=75)
|
||||
```
|
||||
|
||||
```{r,echo=F, error=F,warning=F}
|
||||
library(corrplot)
|
||||
library(ggplot2)
|
||||
library(gridExtra)
|
||||
library(FactoMineR)
|
||||
library(factoextra)
|
||||
library(reshape2)
|
||||
```
|
||||
|
||||
|
||||
# Description des données
|
||||
|
||||
Les données étudiées dans ce TP ont été recueillies à Rennes dans $112$ stations durant l'été 2001. Les 13 variables observées sont :
|
||||
|
||||
+ maxO3 : Maximum de concentration d'ozone observé sur la journée en $\mu$gr/m3
|
||||
+ T9, T12, T15 : Température observée à 9, 12 et 15h
|
||||
+ Ne9, Ne12, Ne15 : Nébulosité observée à 9, 12 et 15h
|
||||
+ Vx9, Vx12, Vx15 : Composante E-O du vent à 9, 12 et 15h
|
||||
+ vent : orientation du vent à 12h
|
||||
+ pluie : occurrence ou non de précipitations
|
||||
+ maxO3v : Maximum de concentration d'ozone observé la veille
|
||||
|
||||
On charge les données, on transforme les variables qualitatives *pluie* et *vent*, et on supprime la dernière variable que l'on n'utilisera pas dans ce TP.
|
||||
|
||||
```{r,eval=F}
|
||||
Ozone<-read.table("Ozone.txt",header=T)
|
||||
Ozone$pluie<-as.factor(Ozone$pluie)
|
||||
Ozone$vent<-as.factor(Ozone$vent)
|
||||
Ozone<-Ozone[,-11]
|
||||
summary(Ozone)
|
||||
```
|
||||
|
||||
Ainsi on a un jeu de données composé de $n=112$ individus et $p=12$ variables.
|
||||
|
||||
```{r,eval=F}
|
||||
dim(Ozone)
|
||||
```
|
||||
|
||||
|
||||
**Question :** Pour vous familiariser avec le jeu de données, quelques statistiques descriptives ont été programmées. Commentez les résultats.
|
||||
|
||||
|
||||
```{r,eval=F}
|
||||
ggplot(melt(Ozone[,-c(11,12)]),aes(x=variable,y=value))+geom_boxplot()
|
||||
|
||||
g1<-ggplot(Ozone,aes(x=maxO3))+geom_density()
|
||||
g2<-ggplot(melt(Ozone[,c(2:4)]),aes(x=value,color=variable))+geom_density()
|
||||
g3<-ggplot(melt(Ozone[,c(5:7)]),aes(x=value,color=variable))+geom_density()
|
||||
g4<-ggplot(melt(Ozone[,c(8:10)]),aes(x=value,color=variable))+geom_density()
|
||||
grid.arrange(g1,g2,g3,g4,ncol=2)
|
||||
|
||||
ggplot(Ozone, aes(x = pluie)) +
|
||||
geom_bar(aes(y = (..count..)/sum(..count..)))+ylab("")+ggtitle("Frequences")
|
||||
|
||||
quan <- as.vector(table(Ozone$vent))/nrow(Ozone)
|
||||
df <- data.frame(group = levels(Ozone$vent),value = quan)
|
||||
ggplot(df, aes(x="", y=value, fill=group))+
|
||||
geom_bar(width = 1, stat = "identity")+ coord_polar("y", start=0)+ theme(legend.position="bottom")
|
||||
```
|
||||
|
||||
**Question :** Représentez graphiquement les corrélations des
|
||||
variables quantitatives (vous pourrez utiliser la fonction `corrplot()`).
|
||||
Quelles sont les variables linéairement corrélées (ou non) ?
|
||||
|
||||
```{r}
|
||||
corrplot(cor(Ozone[,-c(11,12)]),method = "ellipse")
|
||||
```
|
||||
|
||||
|
||||
# ACP centrée
|
||||
|
||||
Dans cette section, on décide de faire une analyse en composantes principales (ACP) sur les données centrées. A l'aide de la fonction `scale()`, centrez les données. Vérifiez que les variables sont bien centrées avec `apply(...,2,mean)`.
|
||||
|
||||
```{r,eval=F}
|
||||
OzoneC<-scale(Ozone[,-c(11,12)],scale=FALSE) # A COMPLETER
|
||||
apply(OzoneC,2,mean)
|
||||
```
|
||||
|
||||
|
||||
|
||||
## A la main
|
||||
**Question **: A l'aide de la fonction `diag()`, créez la matrice de poids $W=\frac 1 n I_n$ et la métrique $M=I_p$.
|
||||
|
||||
```{r,eval=F}
|
||||
n=nrow(OzoneC)
|
||||
p=ncol(OzoneC)
|
||||
W<- diag(1/n,n)
|
||||
M<- diag(1,p)
|
||||
```
|
||||
|
||||
|
||||
**Question :** Quelle matrice cherche-t-on à diagonaliser dans ce cadre en ACP ?
|
||||
Programmez cette matrice (rappelons que la multiplication matricielle est `%*%`) et diagonalisez-la à l'aide de la fonction `eigen()`.
|
||||
|
||||
```{r,eval=F}
|
||||
Gamma<- t(OzoneC)%*%W%*%OzoneC # A COMPLETER
|
||||
A<-eigen(Gamma)
|
||||
```
|
||||
|
||||
|
||||
**Question :** Que représentent les valeurs propres (`A$values`) dans ce cas ? Que représente la somme de ces valeurs propres ? Vérifiez numériquement.
|
||||
|
||||
```{r,eval=F}
|
||||
A$values
|
||||
"La trace de gamma est l'inertie de Ozone"
|
||||
sum(A$values)
|
||||
sum(OzoneC**2)/n
|
||||
```
|
||||
|
||||
|
||||
**Question :** Calculez les pourcentages (cumulés ou non) d'inertie portés par chaque axe. Combien de composantes principales décidez-vous de retenir ? Vous pouvez vous aider des fonctions `sum()` et `cumsum()`.
|
||||
|
||||
```{r}
|
||||
A$values/sum(A$values)
|
||||
cumsum(A$values)/sum(A$values)
|
||||
|
||||
```
|
||||
|
||||
**Question :** Que représentent les vecteurs propres (`A$vectors`) ? Construisez la matrice $C$ des composantes principales et vérifiez que la matrice $C$ est de dimension $n\times p$. Que représentent les coordonnées de la première colonne de $C$ ?
|
||||
|
||||
```{r}
|
||||
C=OzoneC%*%A$vectors
|
||||
C
|
||||
dim(C)
|
||||
|
||||
boxplot(OzoneC)
|
||||
```
|
||||
|
||||
|
||||
## Avec le package FactoMineR
|
||||
|
||||
Rassurez-vous, nous avons programmé les étapes de l'ACP à des fins pédagogiques. En pratique, on utilise la librairie `FactoMineR`. Et on s'appuie sur la librairie `factoextra` pour les graphiques.
|
||||
|
||||
On commence par programmer l'ACP centrée (pas réduite, `scale.unit=F`). On peut déclarer à la fonction `PCA` des variables qualitatives et quantitatives supplémentaires, ainsi que des individus supplémentaires. Ces éléments ne sont donc pas utilisés pour calculer l'ACP mais peuvent être exploités par la suite. Ici, on déclare donc les deux variables qualitatives *pluie* et *vent* supplémentaires. On trace ensuite les valeurs propres avec la fonction `fviz_eig()`.
|
||||
|
||||
```{r,eval=F}
|
||||
respca<-PCA(Ozone,quali.sup=c(11,12),scale.unit = F,graph=F)
|
||||
respca$eig
|
||||
fviz_eig(respca)
|
||||
```
|
||||
|
||||
|
||||
### Etude des individus
|
||||
|
||||
**Question :** Que contient la sortie `respca$ind$coord$` ? Comparez avec les résultats de la partie précédente ? Vérifiez visuellement à l'aide de la commande `fviz_pca_ind(respca)`.
|
||||
|
||||
```{r,eval=F}
|
||||
fviz_pca_ind(respca,geom=c("point"))
|
||||
```
|
||||
|
||||
**Question :** Que représentent les graphiques suivants ? Commentez.
|
||||
|
||||
```{r,eval=F}
|
||||
fviz_pca_ind(respca,col.ind="contrib",geom=c("point"))
|
||||
fviz_pca_ind(respca,geom=c("point"),select.ind = list(cos2=0.95))
|
||||
fviz_pca_ind(respca,habillage=11,geom=c("point"))
|
||||
fviz_pca_ind(respca,habillage=12,geom=c("point"))
|
||||
```
|
||||
|
||||
### Etude des variables
|
||||
|
||||
**Question :** On représente le graphique des corrélations entre les variables initiales et les méta-variables. Commentez.
|
||||
|
||||
```{r,eval=F}
|
||||
plot(respca,choix="varcor")
|
||||
```
|
||||
|
||||
**Question :** Afin de visualiser les corrélations des variables initiales avec toutes les méta-variables, utilisez la fonction `coorplot()`. Commentez.
|
||||
|
||||
```{r,eval=F}
|
||||
corrplot(respca$var$cor,method="ellipse")
|
||||
```
|
||||
|
||||
# ACP centrée réduite
|
||||
|
||||
## A la main
|
||||
|
||||
On fait maintenant une analyse en composantes principales sur les données centrées et réduites.
|
||||
|
||||
```{r,eval=F}
|
||||
s<-sqrt((n-1)*apply(OzoneC,2,var)/n)
|
||||
OzoneCR<-OzoneC%*%diag(1/s)
|
||||
```
|
||||
|
||||
**Question :** Comparez `OzoneCR` avec `scale(Ozone[,-c(11,12)])`.
|
||||
|
||||
```{r}
|
||||
OzoneCR
|
||||
scale(Ozone[,-c(11,12)])
|
||||
```
|
||||
|
||||
**Question :** Quelle matrice cherche-t-on à diagonaliser dans ce cadre en ACP ?
|
||||
Programmez cette matrice et diagonalisez-la à l'aide de la fonction `eigen()`.
|
||||
|
||||
```{r,eval=F}
|
||||
Gamma2<- t(OzoneCR)%*%W%*%OzoneCR
|
||||
B<-eigen(Gamma2)
|
||||
```
|
||||
|
||||
**Question :** Que représentent les valeurs propres dans ce cas ? Que représente la somme de ces valeurs propres ? Vérifiez numériquement.
|
||||
|
||||
```{r,eval=F}
|
||||
sum(B$values)
|
||||
```
|
||||
|
||||
**Question :** Comment peut-on obtenir les résultats de cette ACP centrée réduite à partir du tableau de données centrées. Vérifiez numériquement.
|
||||
|
||||
```{r,eval=F}
|
||||
M2<-diag(1/(apply(OzoneC,2,var)*(n-1)/n))
|
||||
GammaM=Gamma%*%M2
|
||||
G=eigen(Gamma2)
|
||||
GM=eigen(GammaM)
|
||||
sum(G$values)
|
||||
sum(GM$values)
|
||||
```
|
||||
|
||||
|
||||
## Avec FactoMineR
|
||||
|
||||
**Question :**
|
||||
On fait une ACP centrée réduite à l'aide de la fonction `PCA()` de la librairie `FactoMineR` en imposant `scale.unit=T` et on trace les valeurs propres à l'aide de `fviz_eig()` de la librairie `factoextra`. Interprétez les résultats.
|
||||
|
||||
```{r,eval=F}
|
||||
respca2<-PCA(Ozone,quali.sup=c(11,12),scale.unit=T,graph=F)
|
||||
respca2$eig
|
||||
fviz_eig(respca2)
|
||||
```
|
||||
|
||||
**Question :** Représentez le graphe des individus et celui des variables à l'aide des fonctions `fviz_pca_ind()`et `fviz_pca_var()` dans le premier plan factoriel. Quelles différences remarquez-vous avec l'ACP centrée ?
|
||||
|
||||
```{r}
|
||||
g1<-fviz_pca_ind(respca2,geom=c("point"))
|
||||
g2<-fviz_pca_var(respca2)
|
||||
library(gridExtra)
|
||||
grid.arrange(g1,g2,ncol=2)
|
||||
```
|
||||
|
||||
**Question :** Afin de visualiser les corrélations des variables intiales avec toutes les méta-variables, utilisez la fonction `corrplot()`. Commentez.
|
||||
|
||||
```{r}
|
||||
corrplot(respca2$var$cor,method="ellipse")
|
||||
```
|
||||
|
||||
**Question :** Poursuivez l'exploitation des résultats en regardant d'autres plans factoriels, en exploitant l'information des variables qualitatives *pluie* et *vent*.
|
||||
|
||||
```{r}
|
||||
fviz_pca_ind(respca2,col.ind="contrib",geom=c("point"))
|
||||
fviz_pca_ind(respca2,geom=c("point"),select.ind = list(cos2=0.95))
|
||||
|
||||
g3=fviz_pca_ind(respca2,habillage=11,geom=c("point"))
|
||||
|
||||
g4=fviz_pca_ind(respca2,habillage=12,geom=c("point"))
|
||||
grid.arrange(g3,g4)
|
||||
```
|
||||
|
||||
|
1757
INSA/TP anadon/TP3-ACP.html
Normal file
332
INSA/TP anadon/TP4-Kmeans.Rmd
Normal file
|
@ -0,0 +1,332 @@
|
|||
---
|
||||
title: "TP4 Kmeans et variantes"
|
||||
date : "3 MIC / 2024-2025"
|
||||
output:
|
||||
html_document:
|
||||
toc: true
|
||||
toc_float: true
|
||||
toc_depth : 4
|
||||
number_sections : true
|
||||
header-includes:
|
||||
- \usepackage{comment}
|
||||
params:
|
||||
soln: TRUE
|
||||
---
|
||||
|
||||
```{css,echo=F}
|
||||
.badCode {
|
||||
background-color: #cfdefc;
|
||||
}
|
||||
|
||||
.corrO { background-color: rgb(255,238,237); }
|
||||
.corrS { background-color: pink; color: black; border: 1px solid red; }
|
||||
```
|
||||
|
||||
```{r setup, echo=FALSE, cache=TRUE}
|
||||
library(knitr)
|
||||
## Global options
|
||||
options(max.print="75")
|
||||
opts_chunk$set(echo=TRUE,
|
||||
cache=FALSE,
|
||||
prompt=FALSE,
|
||||
tidy=TRUE,
|
||||
comment=NA,
|
||||
message=FALSE,
|
||||
warning=FALSE,
|
||||
class.source="badCode")
|
||||
opts_knit$set(width=75)
|
||||
```
|
||||
|
||||
L'objectif de ce TP est d'illustrer les notions abordées dans le chapitre dédié aux algorithmes de clustering de type Kmeans. Les librairies R nécessaires pour ce TP :
|
||||
|
||||
```{r,echo=T, error=F,warning=F,message=F}
|
||||
library(forcats)
|
||||
library(ggplot2)
|
||||
library(corrplot)
|
||||
library(reshape2)
|
||||
library(gridExtra)
|
||||
|
||||
library(FactoMineR)
|
||||
library(factoextra)
|
||||
|
||||
library(mclust)
|
||||
library(cluster)
|
||||
library(ppclust)
|
||||
|
||||
library(circlize)
|
||||
library(ggalluvial)
|
||||
```
|
||||
|
||||
# Prise en main des données de vins
|
||||
## Lecture des données
|
||||
|
||||
Dans ce TP, on va utiliser le jeu de données `wine` disponible sur la page moodle du cours.
|
||||
|
||||
Ce jeu de données comprend des mesures physico-chimiques réalisées sur un échantillon de $n=600$ vins (rouges et blancs) du Portugal. Ces mesures sont complétées par une évaluation sensorielle de la qualité par un ensemble d’experts. Chaque vin est décrit par les variables suivantes :
|
||||
|
||||
- Qualite : son évaluation sensorielle par les experts (“bad”,“medium”,“good”),
|
||||
- Type : son type (1 pour un vin rouge, 0 pour un vin blanc),
|
||||
- AcidVol : la teneur en acide volatile (en g/dm3 d’acide acétique),
|
||||
- AcidCitr : la teneur en acide citrique (en g/dm3),
|
||||
- SO2lbr : le dosage du dioxyde de soufre libre (en mg/dm3),
|
||||
- SO2tot : le dosage du dioxyde de soufre total (en mg/dm3),
|
||||
- Densite : la densité (en g/cm3),
|
||||
- Alcool : le degré d’alcool (en % Vol.).
|
||||
|
||||
**Question 1.** Récupérez sur moodle le jeu de données `wine.txt` et chargez-le sous R.
|
||||
|
||||
```{r,eval=F}
|
||||
wine <-read.table("./wine.txt")
|
||||
str(wine)
|
||||
```
|
||||
|
||||
Vérifiez la nature des variables à l'aide de la fonction `str()`. Modifiez si nécessaire les variables qualitatives (à l'aide de `as.factor()`) et transformez les modalités "1" et "0" de la variable `Type`en "rouge" et "blanc" respectivement (à l'aide de la fonction `factor()`).
|
||||
|
||||
```{r,eval=F}
|
||||
wine$Qualite <- as.factor(wine$Qualite)
|
||||
wine$Type <- factor(wine$Type, labels=c("blanc","rouge"))
|
||||
str(wine)
|
||||
```
|
||||
|
||||
|
||||
## Statistiques descriptives avec R
|
||||
|
||||
**Question 2.** Faites quelques statistiques descriptives pour faire connaissance avec le jeu de données, avec des choix adaptés à la nature des variables. En particulier, étudiez les corrélations entre les variables quantitatives et faites une ACP à l'aide de la fonction `PCA()` de la librairie `FactoMineR`.
|
||||
|
||||
```{r,eval=F}
|
||||
# A completer - Stat. descriptives
|
||||
# cf TP2
|
||||
ggplot(data=wine)+
|
||||
geom_point(aes(x=Densite,y=Alcool,color=Type))
|
||||
corrplot(cor(wine[,-c(1,2)]),method = "ellipse")
|
||||
|
||||
```
|
||||
|
||||
```{r,eval=F}
|
||||
# ACP A completer
|
||||
resacp<-PCA(wine,quali.sup=c(1,2), scale.unit = TRUE,graph=FALSE)
|
||||
fviz_eig(resacp)
|
||||
g1=fviz_pca_ind(resacp,geom = c("point"),habillage = 2)
|
||||
g2=fviz_pca_var(resacp)
|
||||
grid.arrange(g2,g1)
|
||||
corrplot(resacp$var$cor,method="ellipse")
|
||||
```
|
||||
|
||||
|
||||
**Question :**
|
||||
Pour la suite, on va utiliser les variables quantitatives pour faire de la classification non supervisée des vins. Les variables *Qualite* et *Type* seront utilisées comme des variables extérieures pour comparer / croiser avec les classifications obtenues pour l'interprétation.
|
||||
|
||||
Pensez-vous qu'il est nécessaire de transformer les variables quantitatives dans l'objectif de clustering avec un algorithme des Kmeans ? Si oui, mettez en place cette transformation.
|
||||
|
||||
```{r,eval=F}
|
||||
wineCR<-scale(wine[,-c(1,2)])
|
||||
```
|
||||
|
||||
# Classification avec l'algorithme des Kmeans
|
||||
## A K=3 fixé
|
||||
|
||||
**Question :** A l'aide de la fonction `kmeans()`, faites une classification non supervisée en 3 classes des vins. Regardez les options disponibles dans la fonction `kmeans()`.
|
||||
|
||||
```{r,eval=F}
|
||||
help(kmeans)
|
||||
reskmeans<-kmeans(wineCR,3)
|
||||
|
||||
```
|
||||
|
||||
**Question : ** Combien a-t-on de vins par classe (vous pouvez vous aider de la fonction `table()`) ? Visualisez la classification obtenue dans les premiers plans de l'ACP (vous pouvez utiliser la fonction `PCA()` de la librairie `FactoMineR` et la fonction `fviz_cluster` de la librairie `factoextra`).
|
||||
|
||||
```{r,eval=F}
|
||||
# A COMPLETER
|
||||
table(reskmeans$size)
|
||||
fviz_cluster(reskmeans,data=wineCR,
|
||||
ellipse.type="norm",labelsize=8,
|
||||
geom=c("point"))+ggtitle("")
|
||||
fviz_pca_ind(resacp,col.ind=as.factor(reskmeans$cluster),
|
||||
geom = c("point"),axes=c(1,2))
|
||||
```
|
||||
|
||||
**Question : ** La classification obtenue précédemment a-t-elle un lien avec le type de vins ? Avec la qualité du vin ? Vous pouvez vous aider de la fonction `table()`, la fonction `adjustedRandIndex()` de la librairie `mclust`, ...
|
||||
|
||||
```{r,eval=F}
|
||||
# A COMPLETER
|
||||
table(wine$Type,reskmeans$cluster )
|
||||
adjustedRandIndex(wine$Type,reskmeans$cluster)
|
||||
|
||||
```
|
||||
|
||||
```{r, eval=F}
|
||||
clust<-paste("Cl-K",reskmeans$cluster,sep="")
|
||||
Tab<-melt(table(clust,wine[,1]))
|
||||
ggplot(Tab,aes(y=value,axis1=clust,axis2=Var2))+
|
||||
geom_alluvium(aes(fill=clust))+
|
||||
geom_stratum(width = 1/12)+
|
||||
geom_text(stat = "stratum", aes(label = after_stat(stratum)))+
|
||||
theme(legend.position = "none")
|
||||
chordDiagram(table(clust,wine[,2]))
|
||||
```
|
||||
|
||||
## Choix du nombre de classes
|
||||
|
||||
**Question :**
|
||||
On s'intéresse dans cette section au choix du nombre de classes $K$ en étudiant l'évolution de l'inertie intraclasse. En faisant varier $K$ entre 2 et 15, calculez l'inertie intraclasse associée à chaque classification obtenue. Tracez l'évolution de l'inertie intraclasse en fonction du nombre de classes. Qu'en concluez-vous ?
|
||||
|
||||
```{r,eval=F}
|
||||
# A completer
|
||||
Kmax<-15
|
||||
reskmeanscl<-matrix(0,nrow=nrow(wine),ncol=Kmax-1)
|
||||
Iintra<-NULL
|
||||
for (k in 2:Kmax){
|
||||
resaux<-kmeans(wineCR,k)
|
||||
reskmeanscl[,k-1]<-resaux$cluster
|
||||
Iintra<-c(Iintra,resaux$tot.withinss)
|
||||
}
|
||||
|
||||
df<-data.frame(K=2:15,Iintra=Iintra)
|
||||
ggplot(df,aes(x=K,y=Iintra))+
|
||||
geom_line()+
|
||||
geom_point()+
|
||||
xlab("Nombre de classes")+
|
||||
ylab("Inertie intraclasse")
|
||||
```
|
||||
|
||||
**Question :** Reprendre la question du choix du nombre de classes en utilisant le critère silhouette (vous pouvez vous aider de la fonction `silhouette()`). Pour la classification sélectionnée, représentez les poids $s(i)$ de chaque individu à l'aide de la fonction `fviz_silhouette()`.
|
||||
|
||||
```{r, eval=F}
|
||||
# A COMPLETER
|
||||
Silhou<-NULL
|
||||
for (k in 2:Kmax){
|
||||
aux<-silhouette(reskmeanscl[,k-1], daisy(wineCR))
|
||||
Silhou<-c(Silhou,mean(aux[,3]))
|
||||
}
|
||||
|
||||
df<-data.frame(K=2:Kmax,Silhouette=Silhou)
|
||||
ggplot(df,aes(x=K,y=Silhouette))+
|
||||
geom_point()+
|
||||
geom_line()+theme(legend.position = "bottom")
|
||||
|
||||
aux<-silhouette(reskmeanscl[,12-1], daisy(wineCR))
|
||||
fviz_silhouette(aux)+
|
||||
theme(plot.title = element_text(size =9))
|
||||
rm(df,Silhou,aux)
|
||||
```
|
||||
|
||||
# Classification avec l'algorithme PAM
|
||||
|
||||
**Question :** Déterminez une classification en $K=3$ classes des vins en utilisant la méthode PAM et représentez graphiquement la classification obtenue. A-t-elle un lien avec le type de vins ? Avec la qualité ? Avec la classification en $K=3$ classes obtenue avec la méthode des Kmeans?
|
||||
|
||||
```{r,eval=F}
|
||||
# A COMPLETER
|
||||
|
||||
resPAM<-pam(wineCR,k=3,metric="euclidean")
|
||||
resPAM$medoids
|
||||
resPAM$id.med
|
||||
|
||||
fviz_cluster(resPAM,data=wineCR,
|
||||
ellipse.type="norm",
|
||||
labelsize=8,
|
||||
geom=c("point"))+
|
||||
ggtitle("")
|
||||
fviz_pca_ind(resacp,
|
||||
col.ind=as.factor(resPAM$clustering),
|
||||
geom = c("point"),
|
||||
axes=c(1,2))
|
||||
|
||||
adjustedRandIndex(wine$Qualite,resPAM$clustering)
|
||||
table(wine$Qualite,resPAM$clustering)
|
||||
|
||||
adjustedRandIndex(wine$Type,resPAM$clustering)
|
||||
table(wine$Type,resPAM$clustering)
|
||||
```
|
||||
|
||||
**Question :** Déterminez le nombre de classes optimal par le critère Silhouette pour $K$ variant entre 2 et 15 avec l'algorithme PAM. Commentez la classification retenue. Est-elle proche de celle obtenue avec l'algorithme des Kmeans ?
|
||||
|
||||
```{r,eval=F}
|
||||
# A compléter
|
||||
|
||||
Kmax<-15
|
||||
resPAMcl<-matrix(0,nrow=nrow(wine),ncol=Kmax-1)
|
||||
Silhou<-NULL
|
||||
for (k in 2:Kmax){
|
||||
resaux<-pam(wineCR,k,metric="euclidean")
|
||||
resPAMcl[,k-1]<-resaux$clustering
|
||||
aux<-silhouette(resPAMcl[,k-1], daisy(wineCR))
|
||||
Silhou<-c(Silhou,mean(aux[,3]))
|
||||
}
|
||||
|
||||
df<-data.frame(K=2:Kmax,Silhouette=Silhou)
|
||||
ggplot(df,aes(x=K,y=Silhouette))+
|
||||
geom_point()+
|
||||
geom_line()+theme(legend.position = "bottom")
|
||||
|
||||
|
||||
aux<-silhouette(resPAMcl[,1], daisy(wineCR))
|
||||
fviz_silhouette(aux)+theme(plot.title = element_text(size =9))
|
||||
|
||||
adjustedRandIndex(wine$Qualite,resPAMcl[,4-1])
|
||||
table(wine$Qualite,resPAMcl[,4-1])
|
||||
|
||||
adjustedRandIndex(wine$Type,resPAMcl[,4-1])
|
||||
table(wine$Type,resPAMcl[,4-1])
|
||||
```
|
||||
|
||||
# Pour aller plus loin : Classification avec l'algorithme fuzzy c-means
|
||||
|
||||
## Présentation
|
||||
Avec les algorithmes de clustering précédents (Kmeans, PAM) nous obtenons une classification "dure" au sens que chaque individu ne peut appartenir qu'à une seule classe et chaque individu participe avec le même poids à la construction des classes. Une classification dure $\mathcal{P}_K=\{\mathcal{C}_1,\ldots,\mathcal{C}_K\}$ peut se traduire en une matrice $Z=(z_{ik})_{\underset{1\leq k \leq K}{1\leq i \leq n}}$ avec $z_{ik}=1$ si $i\in\mathcal{C}_k$ et 0 sinon. Dans cette section, nous allons nous intéresser à une adaptation de l'algorithme des Kmeans, appelée *fuzzy c-means*. L'idée est de retourner une classification *fuzzy* c'est-à-dire une matrice $W=(\omega_{ik})_{\underset{1\leq k \leq K}{1\leq i \leq n}}$ avec $\forall i,\ k,\ \omega_{ik}\geq 0$ et $\forall i,\ \underset{k=1}{\stackrel{K}{\sum}} \omega_{ik}=1$. On donne ainsi plutôt un poids $\omega_{ik}$ que l'individu $i$ appartienne à la classe $\mathcal{C}_k$.
|
||||
|
||||
L'algorithme fuzzy c-means a pour fonction objective
|
||||
|
||||
$$
|
||||
\underset{W,\{m_1,\ldots,m_K\}}{\mbox{argmin}}\ \underset{i=1}{\stackrel{n}{\sum}}\underset{k=1}{\stackrel{K}{\sum}} (\omega_{ik})^\gamma\ \|x_i - m_k\|^2
|
||||
$$
|
||||
où $X=(x_1,\ldots,x_n)'$ est la matrice des données, $\gamma\in[1,+\infty[$, $m_k$ est le centre de la classe $\mathcal{C}_k$.
|
||||
|
||||
Dans le même principe que l'algorithme des Kmeans, l'algorithme fuzzy c-means est un algorithme itératif :
|
||||
|
||||
- Step 1: Initialisation des poids $W^{(0)}$
|
||||
- Step 2: A l'itération $r$, on calcule les centres des classes
|
||||
|
||||
$$
|
||||
m_k^{(r)} = \frac{\underset{i=1}{\stackrel{n}{\sum}} (\omega_{ik}^{(r-1)})^\gamma x_i}{\underset{i=1}{\stackrel{n}{\sum}} (\omega_{ik}^{(r-1)})^\gamma}
|
||||
$$
|
||||
|
||||
- Step 3: Mise à jour des poids ($\gamma>1$)
|
||||
$$
|
||||
\omega_{ik}^{(r)} = \left[\underset{\ell=1}{\stackrel{K}{\sum}} \left(\frac{\|x_i - m_k^{(r)}\|^2}{\|x_i - m_\ell^{(r)}\|^2}\right)^{\frac{1}{\gamma-1}} \right]^{-1}
|
||||
$$
|
||||
|
||||
- Step 4: Si $\|W^{(r)} - W^{(r-1)}\|<$ seuil, on s'arrête, sinon on retourne à l'étape 2.
|
||||
|
||||
En général, la puissance choisie sur les poids est $\gamma=2$. Dans le cas $\gamma=1$, on retrouve l'algorithme des Kmeans.
|
||||
|
||||
|
||||
|
||||
Nous allons ici nous appuyer sur la fonction `fcm()` de la librairie `ppclust`.
|
||||
|
||||
**Question :** Utilisez cet algorithme pour obtenir une classification en $3$ classes. Comment sont initialisés les poids ? Comment est obtenue la classification finale ? A l'aide des poids, étudiez la stabilité des classes. Vous pouvez pour cela étudier les poids des individus par classe.
|
||||
|
||||
```{r,eval=F}
|
||||
# A COMPLETER
|
||||
library(ppclust)
|
||||
resfcm<-fcm(....,centers= ... , m=2)
|
||||
table(.....)
|
||||
|
||||
Aux<-data.frame(cluster=as.factor(resfcm$cluster),
|
||||
PoidsMax=apply(resfcm$u,1,max))
|
||||
ggplot(Aux,aes(x=cluster,y=PoidsMax))+
|
||||
geom_violin()
|
||||
```
|
||||
|
||||
**Question :** Représentez la classification obtenue sur le premier plan de l'ACP en nuançant selon les poids.
|
||||
|
||||
```{r,eval=F}
|
||||
# A COMPLETER
|
||||
fviz_pca_ind(resacp,axes=c(1,2),geom=c("point"),col.ind=apply(....................))+
|
||||
scale_color_gradient2(low="white", mid="blue",high="red", midpoint=0.8, space = "Lab")
|
||||
```
|
||||
|
||||
**Question **: Comparez les classifications obtenues avec Kmeans et fuzzy c-means. Commentez.
|
||||
|
||||
```{r,eval=F}
|
||||
# A COMPLETER
|
||||
```
|
1857
INSA/TP anadon/TP4-Kmeans.html
Normal file
601
INSA/TP anadon/wine (1).txt
Normal file
|
@ -0,0 +1,601 @@
|
|||
"Qualite" "Type" "AcidVol" "AcidCitr" "SO2lbr" "SO2tot" "Densite" "Alcool"
|
||||
"1352" "medium" 1 0.62 0.01 8 46 0.99332 11.8
|
||||
"5493" "medium" 0 0.34 0.1 17 63 0.9937 9.2
|
||||
"5153" "medium" 0 0.22 0.22 39 110 0.99855 9
|
||||
"5308" "medium" 0 0.35 0.46 61 183 0.99786 9
|
||||
"3866" "medium" 0 0.42 0.32 20 167 0.99479 10.6
|
||||
"694" "medium" 1 0.48 0.32 21 122 0.9984 9.4
|
||||
"5085" "good" 0 0.21 0.32 39 113 0.99393 10.2
|
||||
"2280" "medium" 0 0.28 0.14 64 159 0.992 10
|
||||
"5231" "medium" 0 0.3 0.25 21 124 0.99362 10.8
|
||||
"4388" "medium" 0 0.4 0.42 41 176 0.99552 9.4
|
||||
"4172" "medium" 0 0.14 0.28 10 56 0.99352 9.9
|
||||
"4763" "good" 0 0.36 0.37 39 114 0.99036 12.7
|
||||
"4001" "bad" 0 0.16 0.49 18 107 0.99514 10.2
|
||||
"3244" "good" 0 0.19 0.49 50 134 0.9998 9.1
|
||||
"4663" "medium" 0 0.25 0.54 58 176 0.99454 10.4
|
||||
"3256" "medium" 0 0.15 0.49 21 98 0.9929 9.2
|
||||
"3444" "medium" 0 0.34 0.46 21 94 0.991 12.3
|
||||
"3867" "medium" 0 0.19 0.43 53 154 0.99752 10.4
|
||||
"3161" "medium" 0 0.28 0.49 10 112 0.9958 10.1
|
||||
"6420" "medium" 0 0.36 0.5 63 178 0.99212 9.7
|
||||
"1590" "medium" 1 0.725 0.2 29 79 0.9977 9.2
|
||||
"2155" "good" 0 0.25 0.34 31 93 0.9916 11.3
|
||||
"2258" "medium" 0 0.27 0.25 41 188 0.9915 11.3
|
||||
"209" "medium" 1 0.44 0.28 18 95 0.9966 9.4
|
||||
"4560" "good" 0 0.11 0.34 41 114 0.99634 11
|
||||
"1981" "medium" 0 0.28 0.26 48 179 0.9975 9
|
||||
"2166" "medium" 0 0.35 0.34 6 37 0.9944 11.5
|
||||
"5430" "good" 0 0.26 0.23 23 111 0.99274 11.5
|
||||
"6496" "good" 0 0.29 0.3 20 110 0.98869 12.8
|
||||
"346" "medium" 1 0.685 0 40 63 0.9979 9.9
|
||||
"1288" "medium" 1 0.6 0.08 3 7 0.99286 13
|
||||
"3615" "medium" 0 0.19 0.39 22 84 0.994 10.8
|
||||
"1837" "medium" 0 0.52 0.32 54 221 0.9972 9.6
|
||||
"5637" "medium" 0 0.34 0.22 43 176 0.99286 9.9
|
||||
"2520" "good" 0 0.11 0.32 59 144 0.9956 9.4
|
||||
"3046" "medium" 0 0.27 0.49 35 92 0.9911 12.2
|
||||
"2983" "medium" 0 0.36 0.56 25 102 0.9923 10.5
|
||||
"840" "medium" 1 0.5 0.04 13 26 0.99647 10
|
||||
"3185" "medium" 0 0.3 0.74 46 165 0.9982 8.7
|
||||
"4690" "medium" 0 0.17 0.35 33 78 0.99146 11.3
|
||||
"6347" "medium" 0 0.26 0.5 25 93 0.99428 10.5
|
||||
"728" "medium" 1 0.57 0.02 4 11 0.997 9.5
|
||||
"240" "medium" 1 1 0.09 7 37 0.99685 9
|
||||
"6318" "medium" 0 0.24 0.15 32 134 0.99378 9.9
|
||||
"2501" "medium" 0 0.29 0.29 26 113 0.9983 9.7
|
||||
"3003" "good" 0 0.26 0.31 29 128 0.9937 10.9
|
||||
"4537" "medium" 0 0.25 0.3 67 196 0.99555 10.1
|
||||
"4799" "good" 0 0.21 0.4 40 121 0.99214 12
|
||||
"141" "medium" 1 0.745 0.11 16 63 0.9965 9.6
|
||||
"3664" "medium" 0 0.22 0.28 51 180 0.9952 9.5
|
||||
"5167" "medium" 0 0.26 0.27 20 80 0.99089 11.5
|
||||
"5291" "medium" 0 0.22 0.26 23 112 0.9931 11.4
|
||||
"3383" "medium" 0 0.45 0.4 17 100 0.9957 10.1
|
||||
"2712" "medium" 0 0.22 0.34 55 177 0.9983 9.9
|
||||
"449" "medium" 1 0.53 0.22 7 27 0.9967 10.2
|
||||
"214" "medium" 1 0.57 0.26 28 65 0.9959 10.1
|
||||
"3216" "medium" 0 0.34 0.49 61 206 0.9957 9
|
||||
"4917" "medium" 0 0.32 0.32 32 105 0.99266 11.2
|
||||
"5005" "medium" 0 0.15 0.32 14 119 0.99137 10.2
|
||||
"3501" "medium" 0 0.21 0.3 14 118 0.9942 10.4
|
||||
"1291" "medium" 1 0.74 0 6 12 0.99521 11
|
||||
"3137" "medium" 0 0.28 0.49 32 148 0.9936 10
|
||||
"998" "good" 1 0.66 0 3 11 0.99378 12.8
|
||||
"1350" "medium" 1 0.57 0 21 41 0.99518 10.8
|
||||
"6336" "medium" 0 0.16 0.36 13 61 0.99143 10.8
|
||||
"492" "good" 1 0.41 0.5 12 25 0.9952 13.3
|
||||
"3901" "medium" 0 0.22 0.28 25 125 0.99856 9.4
|
||||
"4878" "medium" 0 0.38 0.36 42 214 0.9976 9.4
|
||||
"5343" "good" 0 0.15 0.28 29 149 0.99792 9
|
||||
"5096" "good" 0 0.24 0.28 61 134 0.99146 11.3
|
||||
"4516" "medium" 0 0.44 0.26 57 128 0.98982 12.7
|
||||
"1118" "medium" 1 0.69 0.07 15 21 0.99572 11.3
|
||||
"2680" "good" 0 0.15 0.33 31 118 0.9956 9
|
||||
"452" "medium" 1 0.37 0.53 9 26 0.9979 9.1
|
||||
"3937" "bad" 0 0.28 0.35 61 180 0.9972 9
|
||||
"776" "medium" 1 1 0 7 16 0.99586 10
|
||||
"528" "medium" 1 0.38 0.49 33 85 0.9962 11.4
|
||||
"3445" "medium" 0 0.44 0.2 44 157 0.998 9
|
||||
"203" "medium" 1 0.5 0.11 16 49 0.99545 9.5
|
||||
"1175" "medium" 1 0.36 0.31 26 65 0.99716 9.5
|
||||
"5796" "medium" 0 0.22 0.29 25 68 0.98865 12.6
|
||||
"2334" "medium" 0 0.38 0.25 28 191 0.9971 9.2
|
||||
"3564" "medium" 0 0.31 0.42 50 173 0.9958 9
|
||||
"1921" "medium" 0 0.24 0.35 36 135 0.9938 10.5
|
||||
"4995" "medium" 0 0.26 0.46 48 186 0.9958 9.1
|
||||
"1070" "medium" 1 0.62 0.35 28 52 0.997 10.8
|
||||
"5286" "medium" 0 0.3 0.37 27 177 0.99438 9.8
|
||||
"4421" "medium" 0 0.4 0.46 42 241 0.9968 9.9
|
||||
"5630" "medium" 0 0.19 0.38 30 105 0.99047 11.4
|
||||
"273" "medium" 1 0.37 0.58 17 65 0.99935 10.1
|
||||
"896" "medium" 1 0.59 0.01 27 43 0.9955 10.7
|
||||
"5267" "good" 0 0.32 0.28 46 115 0.98946 13
|
||||
"742" "medium" 1 0.53 0.24 28 139 0.99788 9.5
|
||||
"956" "medium" 1 0.21 0.52 9 23 0.99648 10.4
|
||||
"4435" "medium" 0 0.25 0.22 41 161 0.99256 10.5
|
||||
"414" "good" 1 0.4 0.53 6 19 0.9986 11.7
|
||||
"2737" "good" 0 0.31 0.37 70 170 0.9934 11.7
|
||||
"1496" "medium" 1 0.43 0.02 15 28 0.99492 10.6
|
||||
"455" "medium" 1 0.23 0.4 21 67 0.9952 11.1
|
||||
"3970" "good" 0 0.1 0.24 25 107 0.99511 10.5
|
||||
"286" "medium" 1 0.59 0.07 32 71 1.00015 9.8
|
||||
"1535" "good" 1 0.56 0.14 13 29 0.99397 11.7
|
||||
"3144" "medium" 0 0.13 0.49 6 24 0.9926 9.9
|
||||
"5473" "medium" 0 0.37 0.51 58 181 0.99776 9
|
||||
"6308" "medium" 0 0.33 0.28 26 109 0.99246 10.6
|
||||
"5051" "good" 0 0.21 0.29 43 106 0.99112 11.5
|
||||
"3502" "medium" 0 0.23 0.35 26 183 0.9984 9.1
|
||||
"4286" "medium" 0 0.17 0.29 52 119 0.98944 12.9
|
||||
"1408" "medium" 1 0.51 0 40 54 0.995 10.7
|
||||
"2581" "good" 0 0.28 0.33 32 155 0.9951 10.7
|
||||
"6225" "medium" 0 0.49 0.23 6 158 0.99344 11.2
|
||||
"4614" "medium" 0 0.45 0.34 12 67 0.9976 11
|
||||
"3065" "medium" 0 0.2 0.74 19 163 0.9931 10.2
|
||||
"54" "medium" 1 0.38 0.36 30 119 0.997 9.4
|
||||
"6300" "medium" 0 0.3 0.33 60 168 0.99659 9.8
|
||||
"2050" "medium" 0 0.6 0.2 21 174 0.9971 9.1
|
||||
"5574" "medium" 0 0.29 0.52 35 192 0.99551 9.5
|
||||
"3368" "medium" 0 0.37 0.07 58 144 0.9922 10
|
||||
"2332" "good" 0 0.28 0.45 14 49 0.9934 11.1
|
||||
"4225" "medium" 0 0.19 0.21 89 159 0.99332 8
|
||||
"5508" "good" 0 0.39 0.24 45 138 0.99174 11.2
|
||||
"2830" "medium" 0 0.29 0.3 46 238 0.9986 8.7
|
||||
"5669" "medium" 0 0.24 0.28 54 133 0.9952 10.7
|
||||
"6141" "medium" 0 0.23 0.34 23 111 0.98961 12.7
|
||||
"6395" "good" 0 0.105 0.29 44 140 0.99142 10.7
|
||||
"5337" "medium" 0 0.21 0.72 65 120 0.99324 9.2
|
||||
"878" "medium" 1 0.715 0.01 31 43 0.99371 11.8
|
||||
"4190" "medium" 0 0.13 0.28 47 132 0.99655 10.1
|
||||
"5778" "good" 0 0.19 0.33 49 133 0.99107 11.3
|
||||
"3316" "medium" 0 0.21 0.31 29 108 0.9939 10.8
|
||||
"5832" "medium" 0 0.39 0.28 10 92 0.99206 12.1
|
||||
"5672" "good" 0 0.16 0.38 70.5 163 0.99706 10.4
|
||||
"1786" "medium" 0 0.24 0.41 49 166 0.9954 9.9
|
||||
"2654" "medium" 0 0.31 0.52 5 61 0.9918 10.4
|
||||
"1199" "medium" 1 0.26 0.26 19 77 0.9951 10.9
|
||||
"5997" "medium" 0 0.27 0.26 55 173 0.99699 9.8
|
||||
"1347" "medium" 1 0.59 0.01 5 13 0.99472 11.4
|
||||
"4785" "medium" 0 0.21 0.4 49 115 0.99268 11
|
||||
"5400" "medium" 0 0.2 0.3 7 49 0.99242 10.3
|
||||
"2157" "medium" 0 0.41 0.24 16 137 0.993 10.4
|
||||
"3552" "good" 0 0.31 0.36 29 142 0.9925 13
|
||||
"788" "medium" 1 0.56 0.24 19 58 0.9991 10.1
|
||||
"2624" "medium" 0 0.34 0.74 23 185 0.9928 12
|
||||
"1912" "medium" 0 0.25 0.41 37 149 0.9954 10
|
||||
"499" "good" 1 0.35 0.53 5 16 0.9972 11
|
||||
"2522" "medium" 0 0.32 0.62 56 153 0.9978 8.9
|
||||
"6456" "medium" 0 0.23 0.39 26 172 0.99755 9
|
||||
"4425" "medium" 0 0.25 0.22 41 161 0.99256 10.5
|
||||
"618" "medium" 1 0.31 0.51 14 28 0.9982 9.8
|
||||
"1139" "medium" 1 0.41 0.15 29 94 0.99786 9.1
|
||||
"5815" "medium" 0 0.44 0.24 68 210 0.99718 9.5
|
||||
"1191" "medium" 1 0.4 0.57 6 20 0.99652 12.5
|
||||
"1348" "medium" 1 0.655 0.03 7 12 0.99587 9.5
|
||||
"771" "medium" 1 0.59 0.02 24 94 0.99744 9.7
|
||||
"5530" "medium" 0 0.28 0.26 25 101 0.98894 12.1
|
||||
"858" "good" 1 0.26 0.34 16 47 0.99594 11.3
|
||||
"4070" "medium" 0 0.25 0.34 34 176 0.99434 9.5
|
||||
"5460" "medium" 0 0.25 0.26 52 207 0.99587 9.2
|
||||
"4236" "medium" 0 0.24 0.27 40 174 0.99773 9
|
||||
"5919" "good" 0 0.41 0.24 33 115 0.9901 12.89333333
|
||||
"6340" "medium" 0 0.32 0.46 56 189 0.99308 9.6
|
||||
"5170" "medium" 0 0.26 0.27 20 80 0.99089 11.5
|
||||
"3266" "medium" 0 0.445 0.56 8 84 0.9938 10.8
|
||||
"3696" "medium" 0 0.32 0.34 5 129 0.9953 9.1
|
||||
"6310" "good" 0 0.33 0.31 27 108 0.99031 12.2
|
||||
"6269" "medium" 0 0.44 0.33 12 117 0.99134 11.5
|
||||
"3258" "medium" 0 0.31 0.49 52 220 0.9964 8.8
|
||||
"6313" "medium" 0 0.28 0.28 19 98 0.99216 11.1
|
||||
"362" "medium" 1 0.45 0.31 21 50 0.9982 9.9
|
||||
"2374" "good" 0 0.27 0.45 28 124 0.997 10.4
|
||||
"4507" "medium" 0 0.21 0.25 26 81 0.9902 11.4
|
||||
"1575" "medium" 1 0.31 0.78 23 92 0.99677 10.5
|
||||
"3468" "good" 0 0.21 0.27 41 144 0.9932 11.8
|
||||
"5729" "good" 0 0.34 0.31 18 68 0.98981 13.4
|
||||
"6469" "medium" 0 0.24 0.33 8 81 0.99626 9.8
|
||||
"510" "good" 1 0.29 0.75 23 43 0.9986 11.4
|
||||
"6107" "medium" 0 0.305 0.13 17 73 0.99 12.33333333
|
||||
"1178" "good" 1 0.66 0 6 11 0.99318 12.7
|
||||
"4973" "good" 0 0.28 0.24 49 121 0.98882 13.2
|
||||
"4120" "medium" 0 0.41 0.23 28 174 0.99898 9.7
|
||||
"5295" "medium" 0 0.15 0.4 61 146 0.99112 11
|
||||
"2076" "good" 0 0.28 0.36 42 105 0.9893 12.4
|
||||
"3989" "good" 0 0.46 0.26 28 83 0.99114 12
|
||||
"4518" "medium" 0 0.28 0.28 15 65 0.9902 11.2
|
||||
"3184" "medium" 0 0.25 0.74 52 209 0.9956 9.2
|
||||
"1198" "medium" 1 0.57 0.21 4 9 0.99458 9.8
|
||||
"1847" "good" 0 0.2 0.27 12 77 0.9905 10.9
|
||||
"2285" "medium" 0 0.36 0.26 54 201 0.9976 9
|
||||
"6022" "medium" 0 0.22 0.28 24 125 0.9917 10.5
|
||||
"6087" "medium" 0 0.13 0.28 32 87 0.99175 11.2
|
||||
"113" "medium" 1 0.6 0.1 14 111 0.9964 9.8
|
||||
"5667" "medium" 0 0.38 0.28 22 166 0.99506 10.6
|
||||
"3317" "medium" 0 0.27 0.32 19 142 0.9921 9.9
|
||||
"933" "medium" 1 0.4 0.29 29 66 0.9971 9.5
|
||||
"4658" "medium" 0 0.25 0.38 54 208 0.99572 9.1
|
||||
"1923" "medium" 0 0.28 0.44 35 137 0.9946 10.4
|
||||
"4026" "medium" 0 0.22 0.26 32 172 0.99194 11.2
|
||||
"2244" "medium" 0 0.24 0.29 32 166 0.9968 9.5
|
||||
"226" "medium" 1 0.43 0.25 29 63 0.99615 10.5
|
||||
"1254" "medium" 1 0.66 0 6 13 0.99569 9.5
|
||||
"747" "medium" 1 0.34 0.38 12 57 0.9978 9
|
||||
"2809" "medium" 0 0.23 0.46 30 125 0.9907 12.5
|
||||
"1137" "medium" 1 0.52 0.45 6 13 0.99774 11.4
|
||||
"2067" "medium" 0 0.32 0.21 15 68 0.9932 9.4
|
||||
"2455" "good" 0 0.2 0.35 30 116 0.9949 10.3
|
||||
"6163" "good" 0 0.26 0.27 27 119 0.9947 10.7
|
||||
"3977" "medium" 0 0.22 0.29 24 90 0.99556 9.8
|
||||
"50" "medium" 1 0.31 0.37 12 96 0.9954 9.2
|
||||
"3418" "medium" 0 0.26 0.29 27 96 0.9896 12.3
|
||||
"5477" "medium" 0 0.28 0.31 20 98 0.99069 11.4
|
||||
"2389" "medium" 0 0.3 0.27 31 119 0.99815 9.3
|
||||
"6243" "medium" 0 0.21 0.35 47 197 0.99392 10.1
|
||||
"65" "medium" 1 0.725 0.05 4 11 0.9962 10.9
|
||||
"3678" "medium" 0 0.17 0.3 25 119 0.9931 10.5
|
||||
"3117" "medium" 0 0.24 0.49 52 163 0.9952 10.6
|
||||
"4327" "medium" 0 0.17 0.31 34 121 0.99092 10.5
|
||||
"4206" "medium" 0 0.2 0.36 22 157 0.9938 10.6
|
||||
"1169" "medium" 1 0.34 0.27 8 44 0.99384 12
|
||||
"4188" "good" 0 0.18 0.3 19 171 0.99808 9
|
||||
"5392" "medium" 0 0.25 0.3 53 133 0.99524 10.4
|
||||
"1477" "medium" 1 0.5 0.5 48 82 1.00242 8.8
|
||||
"3063" "medium" 0 0.19 0.49 11 137 0.9918 11
|
||||
"6342" "medium" 0 0.27 0.32 36 133 0.99215 10.8
|
||||
"4634" "medium" 0 0.25 0.47 36 156 0.99604 9.4
|
||||
"3862" "medium" 0 0.25 0.31 11 61 0.99189 11.5
|
||||
"1497" "medium" 1 0.54 0.26 23 147 0.99636 9.7
|
||||
"193" "medium" 1 0.63 0.12 16 126 0.9969 9.5
|
||||
"2273" "medium" 0 0.31 0.3 18 130 0.9928 10.6
|
||||
"3074" "bad" 0 0.25 0.24 13 85 0.9942 9.5
|
||||
"583" "medium" 1 0.49 0.49 5 15 1 9.2
|
||||
"6169" "medium" 0 0.2 0.32 17 126 0.9936 9.4
|
||||
"3865" "medium" 0 0.3 0.21 49 159 0.99827 9
|
||||
"5812" "bad" 0 0.31 0.37 13 164 0.99602 8.8
|
||||
"2658" "medium" 0 0.21 0.34 26 111 0.9931 10.7
|
||||
"4152" "medium" 0 0.36 0.52 8 110 0.9966 9.4
|
||||
"753" "medium" 1 0.54 0.13 24 66 0.99785 9.4
|
||||
"4000" "bad" 0 0.19 0.42 16 104 0.99517 10
|
||||
"5504" "good" 0 0.455 0.18 33 106 0.98746 14
|
||||
"1861" "medium" 0 0.29 0.4 36 156 0.9996 8.9
|
||||
"6068" "medium" 0 0.21 0.24 31 95 0.99036 11.3
|
||||
"4950" "medium" 0 0.22 0.28 41 132 0.9935 11.3
|
||||
"4654" "medium" 0 0.15 0.31 7 73 0.99152 11.9
|
||||
"1511" "medium" 1 0.36 0.21 26 48 0.99661 9.7
|
||||
"1001" "good" 1 0.43 0.3 6 12 0.99495 11.5
|
||||
"2386" "medium" 0 0.34 0.28 31 117 0.99815 9.2
|
||||
"1242" "medium" 1 0.37 0.39 28 65 0.99729 9.8
|
||||
"2045" "bad" 0 0.32 0.32 16 66 0.9937 11.5
|
||||
"2743" "medium" 0 0.24 0.3 27 131 0.9933 10.5
|
||||
"1413" "medium" 1 0.24 0.34 8 22 0.9974 10.9
|
||||
"2060" "medium" 0 0.21 0.27 26 111 0.9956 9.5
|
||||
"5915" "good" 0 0.41 0.24 33 115 0.9901 12.89333333
|
||||
"469" "medium" 1 0.36 0.69 6 21 1 9.2
|
||||
"5454" "medium" 0 0.12 0.27 40 110 0.99226 12.1
|
||||
"4119" "medium" 0 0.24 0.55 67 216 0.99596 9.2
|
||||
"397" "medium" 1 0.735 0.02 68 124 0.9994 9.9
|
||||
"1278" "medium" 1 0.69 0 3 10 0.99636 9.7
|
||||
"2307" "medium" 0 0.18 0.45 57 166 0.9943 11.2
|
||||
"1279" "medium" 1 0.715 0.22 13 81 0.99688 9.5
|
||||
"4528" "good" 0 0.31 0.31 45 140 0.99216 12
|
||||
"761" "medium" 1 0.58 0.25 9 104 0.99779 9.7
|
||||
"3747" "medium" 0 0.29 0.2 20 142 0.9962 10.6
|
||||
"199" "good" 1 0.835 0.08 13 93 0.9924 13
|
||||
"802" "medium" 1 0.55 0.09 8 17 0.99735 10
|
||||
"4150" "medium" 0 0.33 0.14 27 128 0.99475 9.4
|
||||
"271" "medium" 1 0.545 0.06 27 61 0.9965 10.7
|
||||
"5070" "good" 0 0.24 0.3 105 179 0.99189 11.3
|
||||
"6303" "good" 0 0.12 0.28 36 83 0.99074 10.9
|
||||
"146" "medium" 1 0.67 0.55 32 141 0.9968 9.4
|
||||
"3768" "good" 0 0.19 0.3 48.5 229 0.9986 9.1
|
||||
"4665" "medium" 0 0.15 0.38 54 120 0.9975 9.8
|
||||
"2703" "medium" 0 0.29 0.39 6 117 0.9938 10.7
|
||||
"5349" "medium" 0 0.28 0.29 40 143 0.99374 11
|
||||
"1693" "good" 0 0.21 0.33 48 136 0.9899 12.6
|
||||
"1640" "medium" 0 0.23 0.39 63 158 0.9937 9.4
|
||||
"5547" "good" 0 0.3 0.32 41 142 0.98952 12.7
|
||||
"354" "medium" 1 0.53 0.79 23 77 1.0018 13
|
||||
"4161" "medium" 0 0.28 0.22 36 131 0.99696 9.6
|
||||
"3230" "medium" 0 0.25 0.24 6 121 0.993 11.4
|
||||
"1319" "medium" 1 0.63 0.27 17 91 0.99616 9.8
|
||||
"3832" "medium" 0 0.2 0.31 16 89 0.99416 9.5
|
||||
"2894" "bad" 0 0.41 0.22 10 102 0.993 11.6
|
||||
"3282" "good" 0 0.25 0.28 55 205 0.9986 9
|
||||
"5782" "medium" 0 0.38 0.56 15 170 0.99605 9.9
|
||||
"570" "medium" 1 0.36 0.24 19 42 0.9946 11.7
|
||||
"5111" "good" 0 0.19 0.28 22 90 0.99038 11.7
|
||||
"6433" "medium" 0 0.33 0.28 33 97 0.99126 10.9
|
||||
"229" "medium" 1 0.43 0.25 29 63 0.99615 10.5
|
||||
"5419" "medium" 0 0.35 0.26 36 120 0.99188 11.5
|
||||
"2174" "good" 0 0.2 0.33 39 138 0.991 11.7
|
||||
"1749" "medium" 0 0.25 0.3 23 116 0.994 9.4
|
||||
"4782" "medium" 0 0.12 0.33 23 131 0.99164 9.8
|
||||
"5163" "medium" 0 0.48 0.12 23 86 0.99398 9
|
||||
"6059" "medium" 0 0.22 0.18 28 120 0.99403 9.9
|
||||
"4836" "medium" 0 0.22 0.39 44 141 0.99123 12.5
|
||||
"5635" "medium" 0 0.2 0.22 53 172 0.99404 11
|
||||
"6054" "medium" 0 0.18 0.26 17 149 0.9984 9.4
|
||||
"6437" "medium" 0 0.28 0.38 54 216 0.99154 13.1
|
||||
"3347" "medium" 0 0.3 0.36 33 169 0.9982 9.3
|
||||
"684" "medium" 1 0.78 0.23 5 15 0.997 11.3
|
||||
"48" "medium" 1 0.29 0.52 12 37 0.9969 9.5
|
||||
"2117" "medium" 0 0.15 0.42 49 154 0.992 10.4
|
||||
"1224" "medium" 1 0.36 0.47 9 23 0.99638 12
|
||||
"96" "medium" 1 0.6 0.17 17 106 0.9932 12.9
|
||||
"4131" "bad" 0 0.54 0.27 8 178 0.99502 9.4
|
||||
"2726" "good" 0 0.115 0.29 73 166 0.989 12.9
|
||||
"2511" "medium" 0 0.33 0.19 22 143 0.99425 9.9
|
||||
"6262" "medium" 0 0.17 0.36 44 111 0.99272 12.4
|
||||
"3086" "medium" 0 0.15 0.49 17 51 0.9932 9.4
|
||||
"1253" "medium" 1 0.72 0 6 14 0.99627 9.8
|
||||
"4549" "medium" 0 0.28 0.52 30 139 0.99494 9
|
||||
"723" "medium" 1 0.42 0.08 15 48 0.9968 10
|
||||
"5287" "medium" 0 0.16 0.27 39 98 0.99402 10.8
|
||||
"3739" "medium" 0 0.33 0.64 12 105 0.9972 9.2
|
||||
"1658" "medium" 0 0.38 0.15 25 78 0.9931 10.2
|
||||
"76" "medium" 1 0.41 0.64 9 42 0.9986 10.5
|
||||
"1604" "medium" 0 0.23 0.32 47 186 0.9956 9.9
|
||||
"149" "medium" 1 0.49 0.1 12 30 0.9959 10.2
|
||||
"554" "medium" 1 1.04 0.24 32 96 0.9934 11.5
|
||||
"349" "medium" 1 0.56 0.31 15 46 0.9979 10
|
||||
"639" "good" 1 0.915 0.12 7 23 0.9964 10.2
|
||||
"416" "medium" 1 0.725 0.24 31 134 1.0014 9.3
|
||||
"2966" "medium" 0 0.14 0.41 22 95 0.9914 10.9
|
||||
"378" "good" 1 0.27 0.53 6 18 0.9962 12
|
||||
"475" "medium" 1 0.28 0.51 10 24 0.9982 9.4
|
||||
"1212" "medium" 1 0.44 0.15 22 53 0.9957 9.3
|
||||
"5670" "medium" 0 0.28 0.27 41 162 0.99498 9.9
|
||||
"15" "medium" 1 0.62 0.18 52 145 0.9986 9.2
|
||||
"4986" "good" 0 0.28 0.27 56 140 0.99042 12.5
|
||||
"324" "medium" 1 0.59 0.42 35 73 0.999 9.5
|
||||
"3657" "good" 0 0.31 0.31 20 151 0.9926 12
|
||||
"5571" "medium" 0 0.17 0.3 33 125 0.99152 10.4
|
||||
"881" "medium" 1 0.56 0.18 10 21 0.99576 9.9
|
||||
"322" "medium" 1 0.61 0.26 25 87 0.99975 9.7
|
||||
"1998" "medium" 0 0.26 0.27 52 168 0.9993 9.4
|
||||
"3795" "medium" 0 0.25 0.18 13 137 0.9935 9.5
|
||||
"5064" "medium" 0 0.29 0.41 52 171 0.99537 9.6
|
||||
"232" "medium" 1 0.38 0.06 12 49 0.99625 9.9
|
||||
"5447" "medium" 0 0.32 0.23 36 176 0.9986 9.1
|
||||
"2232" "medium" 0 0.24 0.33 16 131 0.9936 10.7
|
||||
"5307" "medium" 0 0.34 0.43 29 114 0.99014 12.6
|
||||
"3578" "medium" 0 0.33 0.26 23 103 0.9932 10.5
|
||||
"4645" "medium" 0 0.12 0.26 21 99 0.99324 9.9
|
||||
"6277" "good" 0 0.28 0.52 37 104 0.99161 11.8
|
||||
"6483" "medium" 0 0.47 0.17 60 148 0.98964 11.5
|
||||
"1028" "medium" 1 0.795 0 28 52 0.99378 11.6
|
||||
"5649" "medium" 0 0.16 0.36 32 98 0.99058 11.3
|
||||
"1493" "medium" 1 0.65 0.06 6 18 0.99348 11.95
|
||||
"52" "medium" 1 0.52 0.04 8 15 0.9956 9.4
|
||||
"4329" "good" 0 0.29 0.31 24 79 0.99053 11.4
|
||||
"5765" "good" 0 0.22 0.35 23 83 0.99019 12
|
||||
"4927" "good" 0 0.17 0.36 11 70 0.99202 10.4
|
||||
"4871" "good" 0 0.32 0.34 27 91 0.99184 12
|
||||
"5099" "good" 0 0.33 0.3 30 124 0.98922 13.1
|
||||
"419" "medium" 1 0.38 0.51 7 20 0.9996 10.4
|
||||
"2019" "medium" 0 0.31 0.28 33 137 0.9929 10.5
|
||||
"3490" "medium" 0 0.3 0.42 45 213 0.9991 9.2
|
||||
"5412" "medium" 0 0.21 0.39 21 138 0.99176 10.9
|
||||
"4310" "medium" 0 0.25 0.34 66 184 0.99976 8.9
|
||||
"2156" "medium" 0 0.35 0.71 22 160 0.9982 9.4
|
||||
"4040" "medium" 0 0.46 0.26 49 159 0.99434 10
|
||||
"4791" "medium" 0 0.24 0.44 49 146 0.9911 11.6
|
||||
"6205" "medium" 0 0.29 0.32 38 93 0.9906 12
|
||||
"1295" "medium" 1 0.635 0.1 25 60 0.99638 10.9
|
||||
"4177" "medium" 0 0.25 0.36 63 206 0.99553 9.6
|
||||
"2216" "good" 0 0.32 0.33 18 101 0.9912 11.7
|
||||
"6355" "medium" 0 0.29 0.73 21 92 0.99 12.4
|
||||
"4493" "good" 0 0.16 0.34 85 153 0.9909 12
|
||||
"4428" "good" 0 0.14 0.31 53 138 0.99084 11.5
|
||||
"3089" "medium" 0 0.16 0.74 52 187 0.9998 9.3
|
||||
"2142" "medium" 0 0.35 0.35 14 167 0.992 9.9
|
||||
"4354" "medium" 0 0.17 0.28 5 28 0.98985 10.6
|
||||
"5650" "good" 0 0.16 0.27 25 135 0.9984 8.7
|
||||
"2801" "good" 0 0.17 0.37 26 75 0.9922 10.8
|
||||
"2977" "medium" 0 0.28 0.41 10 136 0.993 11.4
|
||||
"919" "medium" 1 0.36 0.32 32 79 0.9964 11
|
||||
"1951" "good" 0 0.33 0.4 32 138 0.992 11.9
|
||||
"3641" "medium" 0 0.14 0.27 22 104 0.9949 9
|
||||
"5697" "medium" 0 0.14 0.28 21 82 0.99425 10
|
||||
"6452" "medium" 0 0.23 0.38 12 113 0.99176 11.4
|
||||
"3271" "good" 0 0.35 0.3 27 87 0.9936 11.4
|
||||
"4515" "medium" 0 0.14 0.38 22 81 0.99043 11.4
|
||||
"3665" "medium" 0 0.27 0.28 21 127 0.9934 9.9
|
||||
"4167" "medium" 0 0.24 0.28 39 132 0.99182 11.4
|
||||
"6008" "medium" 0 0.29 0.16 48 197 0.99512 9.4
|
||||
"6094" "medium" 0 0.24 0.29 34 84 0.9902 11.45
|
||||
"605" "medium" 1 0.58 0.13 14 63 0.9984 9.1
|
||||
"5608" "medium" 0 0.25 0.48 25 94 0.99782 9.2
|
||||
"2942" "medium" 0 0.58 0.27 37 116 0.9959 10.8
|
||||
"2360" "medium" 0 0.18 0.38 44 176 0.9958 9.8
|
||||
"4579" "good" 0 0.36 0.26 39 123 0.99119 12.2
|
||||
"4805" "good" 0 0.45 0.36 28 156 0.991 12.4
|
||||
"239" "medium" 1 0.63 0 14 38 0.99675 9
|
||||
"612" "medium" 1 0.38 0.55 5 16 1.0006 9.4
|
||||
"4937" "medium" 0 0.38 0.29 52 189 0.99784 9.5
|
||||
"3692" "medium" 0 0.76 0.03 27 93 0.9932 9.2
|
||||
"4287" "medium" 0 0.24 0.38 56 187 0.99577 9.2
|
||||
"2203" "medium" 0 0.475 0.06 9 131 0.9904 10.8
|
||||
"1547" "medium" 1 0.57 0.02 17 26 0.99575 10.2
|
||||
"5444" "medium" 0 0.37 0.25 24 84 0.9909 11.7
|
||||
"872" "medium" 1 0.56 0.03 36 46 0.99522 10.6
|
||||
"4513" "medium" 0 0.18 0.3 49 199 0.99413 9.3
|
||||
"6280" "bad" 0 0.63 0.04 25 133 0.99271 10.2
|
||||
"5050" "good" 0 0.21 0.29 43 106 0.99112 11.5
|
||||
"2226" "bad" 0 0.56 0.12 22 177 0.9983 9.1
|
||||
"5135" "medium" 0 0.28 0.44 49 179 0.99528 9.2
|
||||
"5278" "medium" 0 0.23 0.25 19 111 1.00044 8.7
|
||||
"2570" "good" 0 0.42 0.01 25 102 0.9894 12.3
|
||||
"4509" "medium" 0 0.18 0.3 23 73 0.99032 11.3
|
||||
"2732" "medium" 0 0.39 0.31 28 162 0.9988 9.1
|
||||
"1820" "medium" 0 0.27 0.36 45 164 0.9939 11
|
||||
"5495" "medium" 0 0.25 0.33 17 76 0.99021 12.3
|
||||
"1882" "bad" 0 0.44 0.37 46 201 0.9938 10.5
|
||||
"789" "medium" 1 0.56 0.24 19 58 0.9991 10.1
|
||||
"4290" "medium" 0 0.3 0.25 26 124 0.99428 9.3
|
||||
"1249" "medium" 1 0.41 0.33 22 36 0.9949 11.1
|
||||
"3306" "medium" 0 0.24 0.22 38 157 0.9934 9.9
|
||||
"5468" "medium" 0 0.22 0.25 112 177 0.9961 9.4
|
||||
"2342" "medium" 0 0.2 0.37 26 136 0.9932 10.2
|
||||
"2217" "medium" 0 0.26 0.27 52 195 0.9928 10.9
|
||||
"1252" "medium" 1 0.58 0.14 27 60 0.9963 9.8
|
||||
"1828" "medium" 0 0.17 0.32 41 200 0.9938 9.7
|
||||
"832" "medium" 1 0.61 0.08 16 24 0.99376 11.1
|
||||
"4529" "medium" 0 0.22 0.29 39 118 0.99834 9.1
|
||||
"2750" "medium" 0 0.32 0.17 69 219 0.9959 8.9
|
||||
"5511" "medium" 0 0.23 0.82 70 109 0.99304 9.2
|
||||
"4111" "medium" 0 0.3 0.49 68 215 0.99656 9.4
|
||||
"2200" "medium" 0 0.3 0.35 36 160 0.9937 9.4
|
||||
"695" "medium" 1 0.47 0.31 24 125 0.9984 9.4
|
||||
"611" "medium" 1 0.24 0.54 25 57 0.9983 9.2
|
||||
"1916" "medium" 0 0.25 0.34 34 134 0.9927 10.6
|
||||
"1646" "bad" 0 0.45 0.26 63 206 0.994 9.8
|
||||
"1774" "medium" 0 0.27 0.31 33 173 0.999 10.2
|
||||
"1977" "good" 0 0.2 0.44 21 98 0.9924 10
|
||||
"5298" "medium" 0 0.22 0.34 32 96 0.98961 11.6
|
||||
"1007" "good" 1 0.29 0.33 13 27 0.99516 11.7
|
||||
"3956" "medium" 0 0.34 0.32 29 130 0.99354 10.4
|
||||
"5659" "medium" 0 0.16 0.36 32 98 0.99058 11.3
|
||||
"6" "medium" 1 0.66 0 13 40 0.9978 9.4
|
||||
"1365" "medium" 1 0.605 0.02 10 31 0.995 11.8
|
||||
"619" "medium" 1 0.46 0.5 4 17 1.0006 10.2
|
||||
"3131" "good" 0 0.3 0.49 26 174 0.9943 11.2
|
||||
"2941" "medium" 0 0.54 0.23 13 151 0.9931 10.4
|
||||
"2027" "medium" 0 0.29 0.5 48 194 0.9974 9.4
|
||||
"3838" "medium" 0 0.15 0.29 39 151 0.99471 10.6
|
||||
"6039" "medium" 0 0.47 0.16 14 125 0.99428 9.8
|
||||
"5624" "medium" 0 0.28 0.27 50 147 0.99126 11.6
|
||||
"5323" "good" 0 0.265 0.28 46 150 0.99299 10.8
|
||||
"2730" "medium" 0 0.2 0.28 36 159 0.9936 9.1
|
||||
"1783" "medium" 0 0.27 0.4 64 227 0.9979 9.6
|
||||
"1579" "medium" 1 0.67 0.15 13 20 0.9954 11.3
|
||||
"3397" "good" 0 0.25 0.27 37 128 0.9936 11.3
|
||||
"3685" "medium" 0 0.17 0.32 47 150 0.9948 9.6
|
||||
"5180" "medium" 0 0.3 0.21 33 143 0.99244 11.1
|
||||
"1741" "medium" 0 0.37 0.67 49 155 0.9975 8.7
|
||||
"5219" "medium" 0 0.45 0.28 27 122 1.00295 10.6
|
||||
"5103" "good" 0 0.33 0.31 21 93 0.9896 13.4
|
||||
"997" "good" 1 0.66 0 3 11 0.99378 12.8
|
||||
"1451" "good" 1 0.37 0.32 15 28 0.9947 11.3
|
||||
"2102" "medium" 0 0.3 0.3 8 210 0.9937 9.9
|
||||
"309" "medium" 1 0.43 0.44 5 12 0.9994 9.5
|
||||
"3508" "good" 0 0.36 0.36 26 98 0.9914 12.5
|
||||
"4429" "medium" 0 0.26 0.32 31 170 0.99644 11.2
|
||||
"2320" "medium" 0 0.29 0.44 62 178 0.99685 8.9
|
||||
"4943" "good" 0 0.36 0.28 51 189 0.99782 9.5
|
||||
"1236" "bad" 1 0.33 0.32 6 113 0.99572 11.5
|
||||
"5285" "medium" 0 0.15 0.41 79.5 183 0.99742 10.2
|
||||
"1622" "good" 0 0.26 0.42 41 122 0.993 10.5
|
||||
"2865" "good" 0 0.31 0.34 36 174 0.9963 11.1
|
||||
"254" "medium" 1 0.775 0.42 8 86 0.9959 9.5
|
||||
"581" "medium" 1 0.5 0.49 5 14 1.0002 9.6
|
||||
"4635" "good" 0 0.24 0.33 31 85 0.99014 11.3
|
||||
"198" "medium" 1 0.3 0.6 12 27 0.9981 10.1
|
||||
"5257" "good" 0 0.15 0.47 49 128 0.99456 10.5
|
||||
"5006" "medium" 0 0.32 0.33 25 95 0.99268 11.1
|
||||
"2363" "medium" 0 0.44 0.04 38 128 0.9985 10.2
|
||||
"922" "medium" 1 0.36 0.32 32 79 0.9964 11
|
||||
"399" "medium" 1 0.59 0.59 13 49 0.9988 11
|
||||
"3948" "medium" 0 0.26 0.31 14 141 0.99077 12.2
|
||||
"2198" "good" 0 0.27 0.29 31 115 0.9949 10.5
|
||||
"5393" "medium" 0 0.32 0.26 63 170 0.9961 9.9
|
||||
"4609" "medium" 0 0.2 0.5 50 221 0.99941 8.8
|
||||
"5299" "medium" 0 0.3 0.37 27 177 0.99438 9.8
|
||||
"2598" "medium" 0 0.24 0.3 43 184 0.9997 9.2
|
||||
"1214" "medium" 1 0.38 0.42 5 13 0.99659 10.5
|
||||
"5875" "medium" 0 0.22 0.2 41 113 0.99862 8.9
|
||||
"3626" "medium" 0 0.26 0.4 5 60 0.9925 10.1
|
||||
"4087" "medium" 0 0.27 0.27 25 122 0.99088 11.9
|
||||
"783" "medium" 1 0.82 0.05 26 96 0.99814 10
|
||||
"1482" "medium" 1 0.28 0.6 10 22 0.99828 10.6
|
||||
"290" "medium" 1 0.42 0.53 33 98 1.001 9.2
|
||||
"5956" "medium" 0 0.29 0.29 35 178 0.99313 10.53333333
|
||||
"3011" "medium" 0 0.2 0.34 32 83 0.9928 11.5
|
||||
"2293" "medium" 0 0.37 0.14 34 185 0.9944 9.8
|
||||
"6176" "medium" 0 0.3 0.29 23 56 0.9904 11.3
|
||||
"3871" "medium" 0 0.25 0.26 50 156 0.99784 9.9
|
||||
"5478" "medium" 0 0.35 0.31 58 170 0.99692 9.4
|
||||
"1123" "medium" 1 0.47 0 27 33 0.9922 12.3
|
||||
"319" "good" 1 0.66 0.39 21 59 0.9989 11.5
|
||||
"2469" "medium" 0 0.24 0.29 37 97 0.9926 10.1
|
||||
"4151" "medium" 0 0.26 0.42 62 209 0.99544 9.5
|
||||
"2395" "medium" 0 0.31 0.26 37 157 0.99625 9
|
||||
"4073" "medium" 0 0.29 0.21 20 142 0.99658 10.1
|
||||
"2072" "medium" 0 0.24 0.29 19 86 0.99 12.5
|
||||
"1762" "medium" 0 0.36 0.3 14 85 0.9932 10.6
|
||||
"1775" "medium" 0 0.23 0.4 50 151 0.9927 11.4
|
||||
"3325" "medium" 0 0.17 0.22 55 152 0.9952 9.3
|
||||
"1560" "medium" 1 0.6 0.26 31 131 0.99622 9.9
|
||||
"3769" "good" 0 0.19 0.3 48.5 229 0.9986 9.1
|
||||
"5755" "medium" 0 0.3 0.47 50 187 0.9927 9.5
|
||||
"4011" "medium" 0 0.27 0.25 50 208 1.00051 9.2
|
||||
"6389" "medium" 0 0.62 0.33 24 118 0.98758 13.55
|
||||
"4958" "medium" 0 0.36 0.28 29 81 0.99151 12.5
|
||||
"3523" "medium" 0 0.37 0.27 10 59 0.9923 10.4
|
||||
"1452" "good" 1 0.32 0.44 8 17 0.99732 11
|
||||
"4576" "medium" 0 0.32 0.39 34 124 0.99286 12.1
|
||||
"5182" "medium" 0 0.32 0.32 12 76 0.98993 12.3
|
||||
"1179" "medium" 1 0.915 0 17 78 0.99346 11.4
|
||||
"1059" "good" 1 0.53 0.57 30 52 0.9971 11.6
|
||||
"6467" "medium" 0 0.6 0.34 3 60 0.98854 13
|
||||
"369" "medium" 1 0.34 0.52 15 75 0.9998 9.4
|
||||
"5795" "good" 0 0.45 0.24 24 87 0.98862 13.4
|
||||
"1836" "medium" 0 0.23 0.38 55 194 0.9979 9
|
||||
"1684" "medium" 0 0.43 0.61 54 155 0.9974 8.7
|
||||
"1737" "medium" 0 0.37 0.67 49 155 0.9975 8.7
|
||||
"988" "medium" 1 0.36 0.3 35 70 0.99693 9.4
|
||||
"5853" "bad" 0 0.47 0.1 11 74 0.99082 11.2
|
||||
"1201" "medium" 1 0.57 0.21 4 9 0.99458 9.8
|
||||
"866" "medium" 1 0.635 0.07 16 86 0.99748 9.7
|
||||
"110" "medium" 1 0.785 0.52 37 153 0.9969 9.3
|
||||
"775" "medium" 1 0.4 0.3 2 45 0.99727 9.5
|
||||
"5303" "medium" 0 0.24 0.31 26 180 0.99884 9.1
|
||||
"1938" "medium" 0 0.26 0.4 12 139 0.9945 10.4
|
||||
"1283" "medium" 1 0.765 0 9 22 0.99619 10.9
|
||||
"5636" "medium" 0 0.33 0.22 40 177 0.99287 9.9
|
||||
"1474" "medium" 1 0.6 0.08 14 45 0.99336 11
|
||||
"3236" "medium" 0 0.49 0.49 29 149 0.9952 10
|
||||
"2262" "bad" 0 0.57 0.1 23 188 0.9972 9.2
|
||||
"2881" "good" 0 0.27 0.34 26 168 0.9911 12.1
|
||||
"892" "medium" 1 0.66 0.03 16 86 0.99743 9.7
|
||||
"2032" "good" 0 0.155 0.34 73.5 214 0.9934 9.9
|
||||
"129" "good" 1 0.59 0.16 3 16 0.9962 10.5
|
||||
"6375" "medium" 0 0.27 0.4 42 124 0.99204 10.1
|
||||
"1044" "good" 1 0.39 0.41 18 39 0.99859 10.9
|
||||
"540" "medium" 1 0.5 0.74 5 17 0.9996 11.2
|
||||
"3219" "good" 0 0.22 0.49 31 128 0.9928 11.3
|
||||
"3183" "medium" 0 0.18 0.74 54 168 0.9978 10.1
|
||||
"1895" "medium" 0 0.33 0.27 34 175 0.9934 9.4
|
||||
"2631" "medium" 0 0.34 0.29 45 232 0.9955 10
|
||||
"1354" "medium" 1 0.645 0.03 14 57 0.9969 10.3
|
||||
"655" "medium" 1 0.47 0.47 7 29 0.9979 9.5
|
||||
"4963" "medium" 0 0.22 0.28 47 90 0.98862 12.6
|
||||
"3040" "medium" 0 0.26 0.74 56 162 0.998 8.8
|
||||
"4729" "medium" 0 0.21 0.38 37 122 0.98972 12
|
||||
"6286" "bad" 0 0.63 0.04 25 133 0.99271 10.2
|
||||
"5823" "bad" 0 0.43 0.11 6 51 0.99076 11.2
|
||||
"4224" "medium" 0 0.21 0.37 20 80 0.99076 12
|
||||
"729" "medium" 1 0.57 0.02 4 11 0.997 9.5
|
||||
"719" "medium" 1 0.56 0.04 10 22 0.9976 9.6
|
||||
"5217" "medium" 0 0.29 0.33 20 117 0.99048 11.4
|
||||
"3569" "good" 0 0.41 0.3 49 164 0.9927 11.7
|
||||
"1447" "medium" 1 0.63 0.02 18 30 0.99712 9.8
|
||||
"1394" "medium" 1 0.52 0.25 19 59 0.99612 10.2
|
||||
"4794" "medium" 0 0.16 0.32 7 89 0.99111 11
|
||||
"1664" "medium" 0 0.24 0.27 31 122 0.9927 10.3
|
||||
"501" "medium" 1 0.52 0.25 14 38 0.9984 9
|
||||
"3668" "medium" 0 0.32 0.18 26 104 0.9906 11
|
||||
"3098" "medium" 0 0.27 0.49 23 86 0.9914 12.5
|
||||
"1080" "good" 1 0.3 0.68 37.5 278 0.99316 12.3
|
||||
"2266" "medium" 0 0.22 0.37 38 195 0.9908 12.5
|
||||
"186" "medium" 1 0.31 0.57 26 85 0.9971 9.7
|
||||
"5841" "medium" 0 0.27 0.29 62 140 0.99237 11.1
|
||||
"3375" "medium" 0 0.49 1 28 135 0.9973 12
|
||||
"1111" "medium" 1 0.53 0 6 14 0.99593 10
|
||||
"430" "medium" 1 0.84 0.63 13 35 0.9997 10.4
|
||||
"677" "medium" 1 0.4 0.41 7 17 0.9984 9.3
|
||||
"3973" "bad" 0 0.48 0.37 5 57 0.99256 10.4
|
||||
"6471" "medium" 0 0.2 0.4 20 98 0.9897 12.05
|
||||
"1021" "medium" 1 0.36 0.66 3 8 0.99642 11.9
|
||||
"3674" "medium" 0 0.22 0.28 51 180 0.9952 9.5
|
||||
"6203" "medium" 0 0.33 0.18 40 124 0.99114 11
|
||||
"2762" "good" 0 0.25 0.41 29 151 0.9946 10.2
|
||||
"572" "medium" 1 0.36 0.24 19 42 0.9946 11.7
|
||||
"5960" "medium" 0 0.28 0.35 31 148 0.99178 10.7
|
||||
"970" "medium" 1 0.56 0.09 7 22 0.99669 10.2
|
||||
"460" "bad" 1 0.58 0.66 10 47 1.0008 9
|
||||
"4630" "good" 0 0.47 0.29 22 142 0.99518 12
|
||||
"5655" "medium" 0 0.3 0.27 22 97 0.99314 11.7
|
||||
"5365" "medium" 0 0.4 0.17 59 186 0.99754 9.4
|
||||
"2020" "good" 0 0.22 0.31 41 136 0.9898 12.7
|
||||
"3275" "medium" 0 0.27 0.32 65 224 0.9961 8.9
|
||||
"5150" "medium" 0 0.14 0.32 48 116 0.99218 10
|
||||
"3265" "good" 0 0.13 0.37 48 114 0.9911 11.5
|
||||
"3328" "medium" 0 0.3 0.24 35 116 0.9953 9.4
|
||||
"3925" "medium" 0 0.35 0.17 7 119 0.99297 9.7
|
||||
"1265" "medium" 1 0.37 0.32 26 51 0.99456 11.8
|
||||
"768" "medium" 1 0.6 0.32 13 98 0.99938 9.5
|
||||
"670" "medium" 1 0.34 0.45 6 15 0.9988 9.2
|
||||
"1156" "medium" 1 0.6 0.25 9 38 0.99616 9.8
|
||||
"2275" "medium" 0 0.28 0.25 44 201 0.9955 9.1
|
||||
"974" "medium" 1 0.34 0.44 6 12 0.99605 10.7
|
601
INSA/TP anadon/wine.txt
Normal file
|
@ -0,0 +1,601 @@
|
|||
"Qualite" "Type" "AcidVol" "AcidCitr" "SO2lbr" "SO2tot" "Densite" "Alcool"
|
||||
"1352" "medium" 1 0.62 0.01 8 46 0.99332 11.8
|
||||
"5493" "medium" 0 0.34 0.1 17 63 0.9937 9.2
|
||||
"5153" "medium" 0 0.22 0.22 39 110 0.99855 9
|
||||
"5308" "medium" 0 0.35 0.46 61 183 0.99786 9
|
||||
"3866" "medium" 0 0.42 0.32 20 167 0.99479 10.6
|
||||
"694" "medium" 1 0.48 0.32 21 122 0.9984 9.4
|
||||
"5085" "good" 0 0.21 0.32 39 113 0.99393 10.2
|
||||
"2280" "medium" 0 0.28 0.14 64 159 0.992 10
|
||||
"5231" "medium" 0 0.3 0.25 21 124 0.99362 10.8
|
||||
"4388" "medium" 0 0.4 0.42 41 176 0.99552 9.4
|
||||
"4172" "medium" 0 0.14 0.28 10 56 0.99352 9.9
|
||||
"4763" "good" 0 0.36 0.37 39 114 0.99036 12.7
|
||||
"4001" "bad" 0 0.16 0.49 18 107 0.99514 10.2
|
||||
"3244" "good" 0 0.19 0.49 50 134 0.9998 9.1
|
||||
"4663" "medium" 0 0.25 0.54 58 176 0.99454 10.4
|
||||
"3256" "medium" 0 0.15 0.49 21 98 0.9929 9.2
|
||||
"3444" "medium" 0 0.34 0.46 21 94 0.991 12.3
|
||||
"3867" "medium" 0 0.19 0.43 53 154 0.99752 10.4
|
||||
"3161" "medium" 0 0.28 0.49 10 112 0.9958 10.1
|
||||
"6420" "medium" 0 0.36 0.5 63 178 0.99212 9.7
|
||||
"1590" "medium" 1 0.725 0.2 29 79 0.9977 9.2
|
||||
"2155" "good" 0 0.25 0.34 31 93 0.9916 11.3
|
||||
"2258" "medium" 0 0.27 0.25 41 188 0.9915 11.3
|
||||
"209" "medium" 1 0.44 0.28 18 95 0.9966 9.4
|
||||
"4560" "good" 0 0.11 0.34 41 114 0.99634 11
|
||||
"1981" "medium" 0 0.28 0.26 48 179 0.9975 9
|
||||
"2166" "medium" 0 0.35 0.34 6 37 0.9944 11.5
|
||||
"5430" "good" 0 0.26 0.23 23 111 0.99274 11.5
|
||||
"6496" "good" 0 0.29 0.3 20 110 0.98869 12.8
|
||||
"346" "medium" 1 0.685 0 40 63 0.9979 9.9
|
||||
"1288" "medium" 1 0.6 0.08 3 7 0.99286 13
|
||||
"3615" "medium" 0 0.19 0.39 22 84 0.994 10.8
|
||||
"1837" "medium" 0 0.52 0.32 54 221 0.9972 9.6
|
||||
"5637" "medium" 0 0.34 0.22 43 176 0.99286 9.9
|
||||
"2520" "good" 0 0.11 0.32 59 144 0.9956 9.4
|
||||
"3046" "medium" 0 0.27 0.49 35 92 0.9911 12.2
|
||||
"2983" "medium" 0 0.36 0.56 25 102 0.9923 10.5
|
||||
"840" "medium" 1 0.5 0.04 13 26 0.99647 10
|
||||
"3185" "medium" 0 0.3 0.74 46 165 0.9982 8.7
|
||||
"4690" "medium" 0 0.17 0.35 33 78 0.99146 11.3
|
||||
"6347" "medium" 0 0.26 0.5 25 93 0.99428 10.5
|
||||
"728" "medium" 1 0.57 0.02 4 11 0.997 9.5
|
||||
"240" "medium" 1 1 0.09 7 37 0.99685 9
|
||||
"6318" "medium" 0 0.24 0.15 32 134 0.99378 9.9
|
||||
"2501" "medium" 0 0.29 0.29 26 113 0.9983 9.7
|
||||
"3003" "good" 0 0.26 0.31 29 128 0.9937 10.9
|
||||
"4537" "medium" 0 0.25 0.3 67 196 0.99555 10.1
|
||||
"4799" "good" 0 0.21 0.4 40 121 0.99214 12
|
||||
"141" "medium" 1 0.745 0.11 16 63 0.9965 9.6
|
||||
"3664" "medium" 0 0.22 0.28 51 180 0.9952 9.5
|
||||
"5167" "medium" 0 0.26 0.27 20 80 0.99089 11.5
|
||||
"5291" "medium" 0 0.22 0.26 23 112 0.9931 11.4
|
||||
"3383" "medium" 0 0.45 0.4 17 100 0.9957 10.1
|
||||
"2712" "medium" 0 0.22 0.34 55 177 0.9983 9.9
|
||||
"449" "medium" 1 0.53 0.22 7 27 0.9967 10.2
|
||||
"214" "medium" 1 0.57 0.26 28 65 0.9959 10.1
|
||||
"3216" "medium" 0 0.34 0.49 61 206 0.9957 9
|
||||
"4917" "medium" 0 0.32 0.32 32 105 0.99266 11.2
|
||||
"5005" "medium" 0 0.15 0.32 14 119 0.99137 10.2
|
||||
"3501" "medium" 0 0.21 0.3 14 118 0.9942 10.4
|
||||
"1291" "medium" 1 0.74 0 6 12 0.99521 11
|
||||
"3137" "medium" 0 0.28 0.49 32 148 0.9936 10
|
||||
"998" "good" 1 0.66 0 3 11 0.99378 12.8
|
||||
"1350" "medium" 1 0.57 0 21 41 0.99518 10.8
|
||||
"6336" "medium" 0 0.16 0.36 13 61 0.99143 10.8
|
||||
"492" "good" 1 0.41 0.5 12 25 0.9952 13.3
|
||||
"3901" "medium" 0 0.22 0.28 25 125 0.99856 9.4
|
||||
"4878" "medium" 0 0.38 0.36 42 214 0.9976 9.4
|
||||
"5343" "good" 0 0.15 0.28 29 149 0.99792 9
|
||||
"5096" "good" 0 0.24 0.28 61 134 0.99146 11.3
|
||||
"4516" "medium" 0 0.44 0.26 57 128 0.98982 12.7
|
||||
"1118" "medium" 1 0.69 0.07 15 21 0.99572 11.3
|
||||
"2680" "good" 0 0.15 0.33 31 118 0.9956 9
|
||||
"452" "medium" 1 0.37 0.53 9 26 0.9979 9.1
|
||||
"3937" "bad" 0 0.28 0.35 61 180 0.9972 9
|
||||
"776" "medium" 1 1 0 7 16 0.99586 10
|
||||
"528" "medium" 1 0.38 0.49 33 85 0.9962 11.4
|
||||
"3445" "medium" 0 0.44 0.2 44 157 0.998 9
|
||||
"203" "medium" 1 0.5 0.11 16 49 0.99545 9.5
|
||||
"1175" "medium" 1 0.36 0.31 26 65 0.99716 9.5
|
||||
"5796" "medium" 0 0.22 0.29 25 68 0.98865 12.6
|
||||
"2334" "medium" 0 0.38 0.25 28 191 0.9971 9.2
|
||||
"3564" "medium" 0 0.31 0.42 50 173 0.9958 9
|
||||
"1921" "medium" 0 0.24 0.35 36 135 0.9938 10.5
|
||||
"4995" "medium" 0 0.26 0.46 48 186 0.9958 9.1
|
||||
"1070" "medium" 1 0.62 0.35 28 52 0.997 10.8
|
||||
"5286" "medium" 0 0.3 0.37 27 177 0.99438 9.8
|
||||
"4421" "medium" 0 0.4 0.46 42 241 0.9968 9.9
|
||||
"5630" "medium" 0 0.19 0.38 30 105 0.99047 11.4
|
||||
"273" "medium" 1 0.37 0.58 17 65 0.99935 10.1
|
||||
"896" "medium" 1 0.59 0.01 27 43 0.9955 10.7
|
||||
"5267" "good" 0 0.32 0.28 46 115 0.98946 13
|
||||
"742" "medium" 1 0.53 0.24 28 139 0.99788 9.5
|
||||
"956" "medium" 1 0.21 0.52 9 23 0.99648 10.4
|
||||
"4435" "medium" 0 0.25 0.22 41 161 0.99256 10.5
|
||||
"414" "good" 1 0.4 0.53 6 19 0.9986 11.7
|
||||
"2737" "good" 0 0.31 0.37 70 170 0.9934 11.7
|
||||
"1496" "medium" 1 0.43 0.02 15 28 0.99492 10.6
|
||||
"455" "medium" 1 0.23 0.4 21 67 0.9952 11.1
|
||||
"3970" "good" 0 0.1 0.24 25 107 0.99511 10.5
|
||||
"286" "medium" 1 0.59 0.07 32 71 1.00015 9.8
|
||||
"1535" "good" 1 0.56 0.14 13 29 0.99397 11.7
|
||||
"3144" "medium" 0 0.13 0.49 6 24 0.9926 9.9
|
||||
"5473" "medium" 0 0.37 0.51 58 181 0.99776 9
|
||||
"6308" "medium" 0 0.33 0.28 26 109 0.99246 10.6
|
||||
"5051" "good" 0 0.21 0.29 43 106 0.99112 11.5
|
||||
"3502" "medium" 0 0.23 0.35 26 183 0.9984 9.1
|
||||
"4286" "medium" 0 0.17 0.29 52 119 0.98944 12.9
|
||||
"1408" "medium" 1 0.51 0 40 54 0.995 10.7
|
||||
"2581" "good" 0 0.28 0.33 32 155 0.9951 10.7
|
||||
"6225" "medium" 0 0.49 0.23 6 158 0.99344 11.2
|
||||
"4614" "medium" 0 0.45 0.34 12 67 0.9976 11
|
||||
"3065" "medium" 0 0.2 0.74 19 163 0.9931 10.2
|
||||
"54" "medium" 1 0.38 0.36 30 119 0.997 9.4
|
||||
"6300" "medium" 0 0.3 0.33 60 168 0.99659 9.8
|
||||
"2050" "medium" 0 0.6 0.2 21 174 0.9971 9.1
|
||||
"5574" "medium" 0 0.29 0.52 35 192 0.99551 9.5
|
||||
"3368" "medium" 0 0.37 0.07 58 144 0.9922 10
|
||||
"2332" "good" 0 0.28 0.45 14 49 0.9934 11.1
|
||||
"4225" "medium" 0 0.19 0.21 89 159 0.99332 8
|
||||
"5508" "good" 0 0.39 0.24 45 138 0.99174 11.2
|
||||
"2830" "medium" 0 0.29 0.3 46 238 0.9986 8.7
|
||||
"5669" "medium" 0 0.24 0.28 54 133 0.9952 10.7
|
||||
"6141" "medium" 0 0.23 0.34 23 111 0.98961 12.7
|
||||
"6395" "good" 0 0.105 0.29 44 140 0.99142 10.7
|
||||
"5337" "medium" 0 0.21 0.72 65 120 0.99324 9.2
|
||||
"878" "medium" 1 0.715 0.01 31 43 0.99371 11.8
|
||||
"4190" "medium" 0 0.13 0.28 47 132 0.99655 10.1
|
||||
"5778" "good" 0 0.19 0.33 49 133 0.99107 11.3
|
||||
"3316" "medium" 0 0.21 0.31 29 108 0.9939 10.8
|
||||
"5832" "medium" 0 0.39 0.28 10 92 0.99206 12.1
|
||||
"5672" "good" 0 0.16 0.38 70.5 163 0.99706 10.4
|
||||
"1786" "medium" 0 0.24 0.41 49 166 0.9954 9.9
|
||||
"2654" "medium" 0 0.31 0.52 5 61 0.9918 10.4
|
||||
"1199" "medium" 1 0.26 0.26 19 77 0.9951 10.9
|
||||
"5997" "medium" 0 0.27 0.26 55 173 0.99699 9.8
|
||||
"1347" "medium" 1 0.59 0.01 5 13 0.99472 11.4
|
||||
"4785" "medium" 0 0.21 0.4 49 115 0.99268 11
|
||||
"5400" "medium" 0 0.2 0.3 7 49 0.99242 10.3
|
||||
"2157" "medium" 0 0.41 0.24 16 137 0.993 10.4
|
||||
"3552" "good" 0 0.31 0.36 29 142 0.9925 13
|
||||
"788" "medium" 1 0.56 0.24 19 58 0.9991 10.1
|
||||
"2624" "medium" 0 0.34 0.74 23 185 0.9928 12
|
||||
"1912" "medium" 0 0.25 0.41 37 149 0.9954 10
|
||||
"499" "good" 1 0.35 0.53 5 16 0.9972 11
|
||||
"2522" "medium" 0 0.32 0.62 56 153 0.9978 8.9
|
||||
"6456" "medium" 0 0.23 0.39 26 172 0.99755 9
|
||||
"4425" "medium" 0 0.25 0.22 41 161 0.99256 10.5
|
||||
"618" "medium" 1 0.31 0.51 14 28 0.9982 9.8
|
||||
"1139" "medium" 1 0.41 0.15 29 94 0.99786 9.1
|
||||
"5815" "medium" 0 0.44 0.24 68 210 0.99718 9.5
|
||||
"1191" "medium" 1 0.4 0.57 6 20 0.99652 12.5
|
||||
"1348" "medium" 1 0.655 0.03 7 12 0.99587 9.5
|
||||
"771" "medium" 1 0.59 0.02 24 94 0.99744 9.7
|
||||
"5530" "medium" 0 0.28 0.26 25 101 0.98894 12.1
|
||||
"858" "good" 1 0.26 0.34 16 47 0.99594 11.3
|
||||
"4070" "medium" 0 0.25 0.34 34 176 0.99434 9.5
|
||||
"5460" "medium" 0 0.25 0.26 52 207 0.99587 9.2
|
||||
"4236" "medium" 0 0.24 0.27 40 174 0.99773 9
|
||||
"5919" "good" 0 0.41 0.24 33 115 0.9901 12.89333333
|
||||
"6340" "medium" 0 0.32 0.46 56 189 0.99308 9.6
|
||||
"5170" "medium" 0 0.26 0.27 20 80 0.99089 11.5
|
||||
"3266" "medium" 0 0.445 0.56 8 84 0.9938 10.8
|
||||
"3696" "medium" 0 0.32 0.34 5 129 0.9953 9.1
|
||||
"6310" "good" 0 0.33 0.31 27 108 0.99031 12.2
|
||||
"6269" "medium" 0 0.44 0.33 12 117 0.99134 11.5
|
||||
"3258" "medium" 0 0.31 0.49 52 220 0.9964 8.8
|
||||
"6313" "medium" 0 0.28 0.28 19 98 0.99216 11.1
|
||||
"362" "medium" 1 0.45 0.31 21 50 0.9982 9.9
|
||||
"2374" "good" 0 0.27 0.45 28 124 0.997 10.4
|
||||
"4507" "medium" 0 0.21 0.25 26 81 0.9902 11.4
|
||||
"1575" "medium" 1 0.31 0.78 23 92 0.99677 10.5
|
||||
"3468" "good" 0 0.21 0.27 41 144 0.9932 11.8
|
||||
"5729" "good" 0 0.34 0.31 18 68 0.98981 13.4
|
||||
"6469" "medium" 0 0.24 0.33 8 81 0.99626 9.8
|
||||
"510" "good" 1 0.29 0.75 23 43 0.9986 11.4
|
||||
"6107" "medium" 0 0.305 0.13 17 73 0.99 12.33333333
|
||||
"1178" "good" 1 0.66 0 6 11 0.99318 12.7
|
||||
"4973" "good" 0 0.28 0.24 49 121 0.98882 13.2
|
||||
"4120" "medium" 0 0.41 0.23 28 174 0.99898 9.7
|
||||
"5295" "medium" 0 0.15 0.4 61 146 0.99112 11
|
||||
"2076" "good" 0 0.28 0.36 42 105 0.9893 12.4
|
||||
"3989" "good" 0 0.46 0.26 28 83 0.99114 12
|
||||
"4518" "medium" 0 0.28 0.28 15 65 0.9902 11.2
|
||||
"3184" "medium" 0 0.25 0.74 52 209 0.9956 9.2
|
||||
"1198" "medium" 1 0.57 0.21 4 9 0.99458 9.8
|
||||
"1847" "good" 0 0.2 0.27 12 77 0.9905 10.9
|
||||
"2285" "medium" 0 0.36 0.26 54 201 0.9976 9
|
||||
"6022" "medium" 0 0.22 0.28 24 125 0.9917 10.5
|
||||
"6087" "medium" 0 0.13 0.28 32 87 0.99175 11.2
|
||||
"113" "medium" 1 0.6 0.1 14 111 0.9964 9.8
|
||||
"5667" "medium" 0 0.38 0.28 22 166 0.99506 10.6
|
||||
"3317" "medium" 0 0.27 0.32 19 142 0.9921 9.9
|
||||
"933" "medium" 1 0.4 0.29 29 66 0.9971 9.5
|
||||
"4658" "medium" 0 0.25 0.38 54 208 0.99572 9.1
|
||||
"1923" "medium" 0 0.28 0.44 35 137 0.9946 10.4
|
||||
"4026" "medium" 0 0.22 0.26 32 172 0.99194 11.2
|
||||
"2244" "medium" 0 0.24 0.29 32 166 0.9968 9.5
|
||||
"226" "medium" 1 0.43 0.25 29 63 0.99615 10.5
|
||||
"1254" "medium" 1 0.66 0 6 13 0.99569 9.5
|
||||
"747" "medium" 1 0.34 0.38 12 57 0.9978 9
|
||||
"2809" "medium" 0 0.23 0.46 30 125 0.9907 12.5
|
||||
"1137" "medium" 1 0.52 0.45 6 13 0.99774 11.4
|
||||
"2067" "medium" 0 0.32 0.21 15 68 0.9932 9.4
|
||||
"2455" "good" 0 0.2 0.35 30 116 0.9949 10.3
|
||||
"6163" "good" 0 0.26 0.27 27 119 0.9947 10.7
|
||||
"3977" "medium" 0 0.22 0.29 24 90 0.99556 9.8
|
||||
"50" "medium" 1 0.31 0.37 12 96 0.9954 9.2
|
||||
"3418" "medium" 0 0.26 0.29 27 96 0.9896 12.3
|
||||
"5477" "medium" 0 0.28 0.31 20 98 0.99069 11.4
|
||||
"2389" "medium" 0 0.3 0.27 31 119 0.99815 9.3
|
||||
"6243" "medium" 0 0.21 0.35 47 197 0.99392 10.1
|
||||
"65" "medium" 1 0.725 0.05 4 11 0.9962 10.9
|
||||
"3678" "medium" 0 0.17 0.3 25 119 0.9931 10.5
|
||||
"3117" "medium" 0 0.24 0.49 52 163 0.9952 10.6
|
||||
"4327" "medium" 0 0.17 0.31 34 121 0.99092 10.5
|
||||
"4206" "medium" 0 0.2 0.36 22 157 0.9938 10.6
|
||||
"1169" "medium" 1 0.34 0.27 8 44 0.99384 12
|
||||
"4188" "good" 0 0.18 0.3 19 171 0.99808 9
|
||||
"5392" "medium" 0 0.25 0.3 53 133 0.99524 10.4
|
||||
"1477" "medium" 1 0.5 0.5 48 82 1.00242 8.8
|
||||
"3063" "medium" 0 0.19 0.49 11 137 0.9918 11
|
||||
"6342" "medium" 0 0.27 0.32 36 133 0.99215 10.8
|
||||
"4634" "medium" 0 0.25 0.47 36 156 0.99604 9.4
|
||||
"3862" "medium" 0 0.25 0.31 11 61 0.99189 11.5
|
||||
"1497" "medium" 1 0.54 0.26 23 147 0.99636 9.7
|
||||
"193" "medium" 1 0.63 0.12 16 126 0.9969 9.5
|
||||
"2273" "medium" 0 0.31 0.3 18 130 0.9928 10.6
|
||||
"3074" "bad" 0 0.25 0.24 13 85 0.9942 9.5
|
||||
"583" "medium" 1 0.49 0.49 5 15 1 9.2
|
||||
"6169" "medium" 0 0.2 0.32 17 126 0.9936 9.4
|
||||
"3865" "medium" 0 0.3 0.21 49 159 0.99827 9
|
||||
"5812" "bad" 0 0.31 0.37 13 164 0.99602 8.8
|
||||
"2658" "medium" 0 0.21 0.34 26 111 0.9931 10.7
|
||||
"4152" "medium" 0 0.36 0.52 8 110 0.9966 9.4
|
||||
"753" "medium" 1 0.54 0.13 24 66 0.99785 9.4
|
||||
"4000" "bad" 0 0.19 0.42 16 104 0.99517 10
|
||||
"5504" "good" 0 0.455 0.18 33 106 0.98746 14
|
||||
"1861" "medium" 0 0.29 0.4 36 156 0.9996 8.9
|
||||
"6068" "medium" 0 0.21 0.24 31 95 0.99036 11.3
|
||||
"4950" "medium" 0 0.22 0.28 41 132 0.9935 11.3
|
||||
"4654" "medium" 0 0.15 0.31 7 73 0.99152 11.9
|
||||
"1511" "medium" 1 0.36 0.21 26 48 0.99661 9.7
|
||||
"1001" "good" 1 0.43 0.3 6 12 0.99495 11.5
|
||||
"2386" "medium" 0 0.34 0.28 31 117 0.99815 9.2
|
||||
"1242" "medium" 1 0.37 0.39 28 65 0.99729 9.8
|
||||
"2045" "bad" 0 0.32 0.32 16 66 0.9937 11.5
|
||||
"2743" "medium" 0 0.24 0.3 27 131 0.9933 10.5
|
||||
"1413" "medium" 1 0.24 0.34 8 22 0.9974 10.9
|
||||
"2060" "medium" 0 0.21 0.27 26 111 0.9956 9.5
|
||||
"5915" "good" 0 0.41 0.24 33 115 0.9901 12.89333333
|
||||
"469" "medium" 1 0.36 0.69 6 21 1 9.2
|
||||
"5454" "medium" 0 0.12 0.27 40 110 0.99226 12.1
|
||||
"4119" "medium" 0 0.24 0.55 67 216 0.99596 9.2
|
||||
"397" "medium" 1 0.735 0.02 68 124 0.9994 9.9
|
||||
"1278" "medium" 1 0.69 0 3 10 0.99636 9.7
|
||||
"2307" "medium" 0 0.18 0.45 57 166 0.9943 11.2
|
||||
"1279" "medium" 1 0.715 0.22 13 81 0.99688 9.5
|
||||
"4528" "good" 0 0.31 0.31 45 140 0.99216 12
|
||||
"761" "medium" 1 0.58 0.25 9 104 0.99779 9.7
|
||||
"3747" "medium" 0 0.29 0.2 20 142 0.9962 10.6
|
||||
"199" "good" 1 0.835 0.08 13 93 0.9924 13
|
||||
"802" "medium" 1 0.55 0.09 8 17 0.99735 10
|
||||
"4150" "medium" 0 0.33 0.14 27 128 0.99475 9.4
|
||||
"271" "medium" 1 0.545 0.06 27 61 0.9965 10.7
|
||||
"5070" "good" 0 0.24 0.3 105 179 0.99189 11.3
|
||||
"6303" "good" 0 0.12 0.28 36 83 0.99074 10.9
|
||||
"146" "medium" 1 0.67 0.55 32 141 0.9968 9.4
|
||||
"3768" "good" 0 0.19 0.3 48.5 229 0.9986 9.1
|
||||
"4665" "medium" 0 0.15 0.38 54 120 0.9975 9.8
|
||||
"2703" "medium" 0 0.29 0.39 6 117 0.9938 10.7
|
||||
"5349" "medium" 0 0.28 0.29 40 143 0.99374 11
|
||||
"1693" "good" 0 0.21 0.33 48 136 0.9899 12.6
|
||||
"1640" "medium" 0 0.23 0.39 63 158 0.9937 9.4
|
||||
"5547" "good" 0 0.3 0.32 41 142 0.98952 12.7
|
||||
"354" "medium" 1 0.53 0.79 23 77 1.0018 13
|
||||
"4161" "medium" 0 0.28 0.22 36 131 0.99696 9.6
|
||||
"3230" "medium" 0 0.25 0.24 6 121 0.993 11.4
|
||||
"1319" "medium" 1 0.63 0.27 17 91 0.99616 9.8
|
||||
"3832" "medium" 0 0.2 0.31 16 89 0.99416 9.5
|
||||
"2894" "bad" 0 0.41 0.22 10 102 0.993 11.6
|
||||
"3282" "good" 0 0.25 0.28 55 205 0.9986 9
|
||||
"5782" "medium" 0 0.38 0.56 15 170 0.99605 9.9
|
||||
"570" "medium" 1 0.36 0.24 19 42 0.9946 11.7
|
||||
"5111" "good" 0 0.19 0.28 22 90 0.99038 11.7
|
||||
"6433" "medium" 0 0.33 0.28 33 97 0.99126 10.9
|
||||
"229" "medium" 1 0.43 0.25 29 63 0.99615 10.5
|
||||
"5419" "medium" 0 0.35 0.26 36 120 0.99188 11.5
|
||||
"2174" "good" 0 0.2 0.33 39 138 0.991 11.7
|
||||
"1749" "medium" 0 0.25 0.3 23 116 0.994 9.4
|
||||
"4782" "medium" 0 0.12 0.33 23 131 0.99164 9.8
|
||||
"5163" "medium" 0 0.48 0.12 23 86 0.99398 9
|
||||
"6059" "medium" 0 0.22 0.18 28 120 0.99403 9.9
|
||||
"4836" "medium" 0 0.22 0.39 44 141 0.99123 12.5
|
||||
"5635" "medium" 0 0.2 0.22 53 172 0.99404 11
|
||||
"6054" "medium" 0 0.18 0.26 17 149 0.9984 9.4
|
||||
"6437" "medium" 0 0.28 0.38 54 216 0.99154 13.1
|
||||
"3347" "medium" 0 0.3 0.36 33 169 0.9982 9.3
|
||||
"684" "medium" 1 0.78 0.23 5 15 0.997 11.3
|
||||
"48" "medium" 1 0.29 0.52 12 37 0.9969 9.5
|
||||
"2117" "medium" 0 0.15 0.42 49 154 0.992 10.4
|
||||
"1224" "medium" 1 0.36 0.47 9 23 0.99638 12
|
||||
"96" "medium" 1 0.6 0.17 17 106 0.9932 12.9
|
||||
"4131" "bad" 0 0.54 0.27 8 178 0.99502 9.4
|
||||
"2726" "good" 0 0.115 0.29 73 166 0.989 12.9
|
||||
"2511" "medium" 0 0.33 0.19 22 143 0.99425 9.9
|
||||
"6262" "medium" 0 0.17 0.36 44 111 0.99272 12.4
|
||||
"3086" "medium" 0 0.15 0.49 17 51 0.9932 9.4
|
||||
"1253" "medium" 1 0.72 0 6 14 0.99627 9.8
|
||||
"4549" "medium" 0 0.28 0.52 30 139 0.99494 9
|
||||
"723" "medium" 1 0.42 0.08 15 48 0.9968 10
|
||||
"5287" "medium" 0 0.16 0.27 39 98 0.99402 10.8
|
||||
"3739" "medium" 0 0.33 0.64 12 105 0.9972 9.2
|
||||
"1658" "medium" 0 0.38 0.15 25 78 0.9931 10.2
|
||||
"76" "medium" 1 0.41 0.64 9 42 0.9986 10.5
|
||||
"1604" "medium" 0 0.23 0.32 47 186 0.9956 9.9
|
||||
"149" "medium" 1 0.49 0.1 12 30 0.9959 10.2
|
||||
"554" "medium" 1 1.04 0.24 32 96 0.9934 11.5
|
||||
"349" "medium" 1 0.56 0.31 15 46 0.9979 10
|
||||
"639" "good" 1 0.915 0.12 7 23 0.9964 10.2
|
||||
"416" "medium" 1 0.725 0.24 31 134 1.0014 9.3
|
||||
"2966" "medium" 0 0.14 0.41 22 95 0.9914 10.9
|
||||
"378" "good" 1 0.27 0.53 6 18 0.9962 12
|
||||
"475" "medium" 1 0.28 0.51 10 24 0.9982 9.4
|
||||
"1212" "medium" 1 0.44 0.15 22 53 0.9957 9.3
|
||||
"5670" "medium" 0 0.28 0.27 41 162 0.99498 9.9
|
||||
"15" "medium" 1 0.62 0.18 52 145 0.9986 9.2
|
||||
"4986" "good" 0 0.28 0.27 56 140 0.99042 12.5
|
||||
"324" "medium" 1 0.59 0.42 35 73 0.999 9.5
|
||||
"3657" "good" 0 0.31 0.31 20 151 0.9926 12
|
||||
"5571" "medium" 0 0.17 0.3 33 125 0.99152 10.4
|
||||
"881" "medium" 1 0.56 0.18 10 21 0.99576 9.9
|
||||
"322" "medium" 1 0.61 0.26 25 87 0.99975 9.7
|
||||
"1998" "medium" 0 0.26 0.27 52 168 0.9993 9.4
|
||||
"3795" "medium" 0 0.25 0.18 13 137 0.9935 9.5
|
||||
"5064" "medium" 0 0.29 0.41 52 171 0.99537 9.6
|
||||
"232" "medium" 1 0.38 0.06 12 49 0.99625 9.9
|
||||
"5447" "medium" 0 0.32 0.23 36 176 0.9986 9.1
|
||||
"2232" "medium" 0 0.24 0.33 16 131 0.9936 10.7
|
||||
"5307" "medium" 0 0.34 0.43 29 114 0.99014 12.6
|
||||
"3578" "medium" 0 0.33 0.26 23 103 0.9932 10.5
|
||||
"4645" "medium" 0 0.12 0.26 21 99 0.99324 9.9
|
||||
"6277" "good" 0 0.28 0.52 37 104 0.99161 11.8
|
||||
"6483" "medium" 0 0.47 0.17 60 148 0.98964 11.5
|
||||
"1028" "medium" 1 0.795 0 28 52 0.99378 11.6
|
||||
"5649" "medium" 0 0.16 0.36 32 98 0.99058 11.3
|
||||
"1493" "medium" 1 0.65 0.06 6 18 0.99348 11.95
|
||||
"52" "medium" 1 0.52 0.04 8 15 0.9956 9.4
|
||||
"4329" "good" 0 0.29 0.31 24 79 0.99053 11.4
|
||||
"5765" "good" 0 0.22 0.35 23 83 0.99019 12
|
||||
"4927" "good" 0 0.17 0.36 11 70 0.99202 10.4
|
||||
"4871" "good" 0 0.32 0.34 27 91 0.99184 12
|
||||
"5099" "good" 0 0.33 0.3 30 124 0.98922 13.1
|
||||
"419" "medium" 1 0.38 0.51 7 20 0.9996 10.4
|
||||
"2019" "medium" 0 0.31 0.28 33 137 0.9929 10.5
|
||||
"3490" "medium" 0 0.3 0.42 45 213 0.9991 9.2
|
||||
"5412" "medium" 0 0.21 0.39 21 138 0.99176 10.9
|
||||
"4310" "medium" 0 0.25 0.34 66 184 0.99976 8.9
|
||||
"2156" "medium" 0 0.35 0.71 22 160 0.9982 9.4
|
||||
"4040" "medium" 0 0.46 0.26 49 159 0.99434 10
|
||||
"4791" "medium" 0 0.24 0.44 49 146 0.9911 11.6
|
||||
"6205" "medium" 0 0.29 0.32 38 93 0.9906 12
|
||||
"1295" "medium" 1 0.635 0.1 25 60 0.99638 10.9
|
||||
"4177" "medium" 0 0.25 0.36 63 206 0.99553 9.6
|
||||
"2216" "good" 0 0.32 0.33 18 101 0.9912 11.7
|
||||
"6355" "medium" 0 0.29 0.73 21 92 0.99 12.4
|
||||
"4493" "good" 0 0.16 0.34 85 153 0.9909 12
|
||||
"4428" "good" 0 0.14 0.31 53 138 0.99084 11.5
|
||||
"3089" "medium" 0 0.16 0.74 52 187 0.9998 9.3
|
||||
"2142" "medium" 0 0.35 0.35 14 167 0.992 9.9
|
||||
"4354" "medium" 0 0.17 0.28 5 28 0.98985 10.6
|
||||
"5650" "good" 0 0.16 0.27 25 135 0.9984 8.7
|
||||
"2801" "good" 0 0.17 0.37 26 75 0.9922 10.8
|
||||
"2977" "medium" 0 0.28 0.41 10 136 0.993 11.4
|
||||
"919" "medium" 1 0.36 0.32 32 79 0.9964 11
|
||||
"1951" "good" 0 0.33 0.4 32 138 0.992 11.9
|
||||
"3641" "medium" 0 0.14 0.27 22 104 0.9949 9
|
||||
"5697" "medium" 0 0.14 0.28 21 82 0.99425 10
|
||||
"6452" "medium" 0 0.23 0.38 12 113 0.99176 11.4
|
||||
"3271" "good" 0 0.35 0.3 27 87 0.9936 11.4
|
||||
"4515" "medium" 0 0.14 0.38 22 81 0.99043 11.4
|
||||
"3665" "medium" 0 0.27 0.28 21 127 0.9934 9.9
|
||||
"4167" "medium" 0 0.24 0.28 39 132 0.99182 11.4
|
||||
"6008" "medium" 0 0.29 0.16 48 197 0.99512 9.4
|
||||
"6094" "medium" 0 0.24 0.29 34 84 0.9902 11.45
|
||||
"605" "medium" 1 0.58 0.13 14 63 0.9984 9.1
|
||||
"5608" "medium" 0 0.25 0.48 25 94 0.99782 9.2
|
||||
"2942" "medium" 0 0.58 0.27 37 116 0.9959 10.8
|
||||
"2360" "medium" 0 0.18 0.38 44 176 0.9958 9.8
|
||||
"4579" "good" 0 0.36 0.26 39 123 0.99119 12.2
|
||||
"4805" "good" 0 0.45 0.36 28 156 0.991 12.4
|
||||
"239" "medium" 1 0.63 0 14 38 0.99675 9
|
||||
"612" "medium" 1 0.38 0.55 5 16 1.0006 9.4
|
||||
"4937" "medium" 0 0.38 0.29 52 189 0.99784 9.5
|
||||
"3692" "medium" 0 0.76 0.03 27 93 0.9932 9.2
|
||||
"4287" "medium" 0 0.24 0.38 56 187 0.99577 9.2
|
||||
"2203" "medium" 0 0.475 0.06 9 131 0.9904 10.8
|
||||
"1547" "medium" 1 0.57 0.02 17 26 0.99575 10.2
|
||||
"5444" "medium" 0 0.37 0.25 24 84 0.9909 11.7
|
||||
"872" "medium" 1 0.56 0.03 36 46 0.99522 10.6
|
||||
"4513" "medium" 0 0.18 0.3 49 199 0.99413 9.3
|
||||
"6280" "bad" 0 0.63 0.04 25 133 0.99271 10.2
|
||||
"5050" "good" 0 0.21 0.29 43 106 0.99112 11.5
|
||||
"2226" "bad" 0 0.56 0.12 22 177 0.9983 9.1
|
||||
"5135" "medium" 0 0.28 0.44 49 179 0.99528 9.2
|
||||
"5278" "medium" 0 0.23 0.25 19 111 1.00044 8.7
|
||||
"2570" "good" 0 0.42 0.01 25 102 0.9894 12.3
|
||||
"4509" "medium" 0 0.18 0.3 23 73 0.99032 11.3
|
||||
"2732" "medium" 0 0.39 0.31 28 162 0.9988 9.1
|
||||
"1820" "medium" 0 0.27 0.36 45 164 0.9939 11
|
||||
"5495" "medium" 0 0.25 0.33 17 76 0.99021 12.3
|
||||
"1882" "bad" 0 0.44 0.37 46 201 0.9938 10.5
|
||||
"789" "medium" 1 0.56 0.24 19 58 0.9991 10.1
|
||||
"4290" "medium" 0 0.3 0.25 26 124 0.99428 9.3
|
||||
"1249" "medium" 1 0.41 0.33 22 36 0.9949 11.1
|
||||
"3306" "medium" 0 0.24 0.22 38 157 0.9934 9.9
|
||||
"5468" "medium" 0 0.22 0.25 112 177 0.9961 9.4
|
||||
"2342" "medium" 0 0.2 0.37 26 136 0.9932 10.2
|
||||
"2217" "medium" 0 0.26 0.27 52 195 0.9928 10.9
|
||||
"1252" "medium" 1 0.58 0.14 27 60 0.9963 9.8
|
||||
"1828" "medium" 0 0.17 0.32 41 200 0.9938 9.7
|
||||
"832" "medium" 1 0.61 0.08 16 24 0.99376 11.1
|
||||
"4529" "medium" 0 0.22 0.29 39 118 0.99834 9.1
|
||||
"2750" "medium" 0 0.32 0.17 69 219 0.9959 8.9
|
||||
"5511" "medium" 0 0.23 0.82 70 109 0.99304 9.2
|
||||
"4111" "medium" 0 0.3 0.49 68 215 0.99656 9.4
|
||||
"2200" "medium" 0 0.3 0.35 36 160 0.9937 9.4
|
||||
"695" "medium" 1 0.47 0.31 24 125 0.9984 9.4
|
||||
"611" "medium" 1 0.24 0.54 25 57 0.9983 9.2
|
||||
"1916" "medium" 0 0.25 0.34 34 134 0.9927 10.6
|
||||
"1646" "bad" 0 0.45 0.26 63 206 0.994 9.8
|
||||
"1774" "medium" 0 0.27 0.31 33 173 0.999 10.2
|
||||
"1977" "good" 0 0.2 0.44 21 98 0.9924 10
|
||||
"5298" "medium" 0 0.22 0.34 32 96 0.98961 11.6
|
||||
"1007" "good" 1 0.29 0.33 13 27 0.99516 11.7
|
||||
"3956" "medium" 0 0.34 0.32 29 130 0.99354 10.4
|
||||
"5659" "medium" 0 0.16 0.36 32 98 0.99058 11.3
|
||||
"6" "medium" 1 0.66 0 13 40 0.9978 9.4
|
||||
"1365" "medium" 1 0.605 0.02 10 31 0.995 11.8
|
||||
"619" "medium" 1 0.46 0.5 4 17 1.0006 10.2
|
||||
"3131" "good" 0 0.3 0.49 26 174 0.9943 11.2
|
||||
"2941" "medium" 0 0.54 0.23 13 151 0.9931 10.4
|
||||
"2027" "medium" 0 0.29 0.5 48 194 0.9974 9.4
|
||||
"3838" "medium" 0 0.15 0.29 39 151 0.99471 10.6
|
||||
"6039" "medium" 0 0.47 0.16 14 125 0.99428 9.8
|
||||
"5624" "medium" 0 0.28 0.27 50 147 0.99126 11.6
|
||||
"5323" "good" 0 0.265 0.28 46 150 0.99299 10.8
|
||||
"2730" "medium" 0 0.2 0.28 36 159 0.9936 9.1
|
||||
"1783" "medium" 0 0.27 0.4 64 227 0.9979 9.6
|
||||
"1579" "medium" 1 0.67 0.15 13 20 0.9954 11.3
|
||||
"3397" "good" 0 0.25 0.27 37 128 0.9936 11.3
|
||||
"3685" "medium" 0 0.17 0.32 47 150 0.9948 9.6
|
||||
"5180" "medium" 0 0.3 0.21 33 143 0.99244 11.1
|
||||
"1741" "medium" 0 0.37 0.67 49 155 0.9975 8.7
|
||||
"5219" "medium" 0 0.45 0.28 27 122 1.00295 10.6
|
||||
"5103" "good" 0 0.33 0.31 21 93 0.9896 13.4
|
||||
"997" "good" 1 0.66 0 3 11 0.99378 12.8
|
||||
"1451" "good" 1 0.37 0.32 15 28 0.9947 11.3
|
||||
"2102" "medium" 0 0.3 0.3 8 210 0.9937 9.9
|
||||
"309" "medium" 1 0.43 0.44 5 12 0.9994 9.5
|
||||
"3508" "good" 0 0.36 0.36 26 98 0.9914 12.5
|
||||
"4429" "medium" 0 0.26 0.32 31 170 0.99644 11.2
|
||||
"2320" "medium" 0 0.29 0.44 62 178 0.99685 8.9
|
||||
"4943" "good" 0 0.36 0.28 51 189 0.99782 9.5
|
||||
"1236" "bad" 1 0.33 0.32 6 113 0.99572 11.5
|
||||
"5285" "medium" 0 0.15 0.41 79.5 183 0.99742 10.2
|
||||
"1622" "good" 0 0.26 0.42 41 122 0.993 10.5
|
||||
"2865" "good" 0 0.31 0.34 36 174 0.9963 11.1
|
||||
"254" "medium" 1 0.775 0.42 8 86 0.9959 9.5
|
||||
"581" "medium" 1 0.5 0.49 5 14 1.0002 9.6
|
||||
"4635" "good" 0 0.24 0.33 31 85 0.99014 11.3
|
||||
"198" "medium" 1 0.3 0.6 12 27 0.9981 10.1
|
||||
"5257" "good" 0 0.15 0.47 49 128 0.99456 10.5
|
||||
"5006" "medium" 0 0.32 0.33 25 95 0.99268 11.1
|
||||
"2363" "medium" 0 0.44 0.04 38 128 0.9985 10.2
|
||||
"922" "medium" 1 0.36 0.32 32 79 0.9964 11
|
||||
"399" "medium" 1 0.59 0.59 13 49 0.9988 11
|
||||
"3948" "medium" 0 0.26 0.31 14 141 0.99077 12.2
|
||||
"2198" "good" 0 0.27 0.29 31 115 0.9949 10.5
|
||||
"5393" "medium" 0 0.32 0.26 63 170 0.9961 9.9
|
||||
"4609" "medium" 0 0.2 0.5 50 221 0.99941 8.8
|
||||
"5299" "medium" 0 0.3 0.37 27 177 0.99438 9.8
|
||||
"2598" "medium" 0 0.24 0.3 43 184 0.9997 9.2
|
||||
"1214" "medium" 1 0.38 0.42 5 13 0.99659 10.5
|
||||
"5875" "medium" 0 0.22 0.2 41 113 0.99862 8.9
|
||||
"3626" "medium" 0 0.26 0.4 5 60 0.9925 10.1
|
||||
"4087" "medium" 0 0.27 0.27 25 122 0.99088 11.9
|
||||
"783" "medium" 1 0.82 0.05 26 96 0.99814 10
|
||||
"1482" "medium" 1 0.28 0.6 10 22 0.99828 10.6
|
||||
"290" "medium" 1 0.42 0.53 33 98 1.001 9.2
|
||||
"5956" "medium" 0 0.29 0.29 35 178 0.99313 10.53333333
|
||||
"3011" "medium" 0 0.2 0.34 32 83 0.9928 11.5
|
||||
"2293" "medium" 0 0.37 0.14 34 185 0.9944 9.8
|
||||
"6176" "medium" 0 0.3 0.29 23 56 0.9904 11.3
|
||||
"3871" "medium" 0 0.25 0.26 50 156 0.99784 9.9
|
||||
"5478" "medium" 0 0.35 0.31 58 170 0.99692 9.4
|
||||
"1123" "medium" 1 0.47 0 27 33 0.9922 12.3
|
||||
"319" "good" 1 0.66 0.39 21 59 0.9989 11.5
|
||||
"2469" "medium" 0 0.24 0.29 37 97 0.9926 10.1
|
||||
"4151" "medium" 0 0.26 0.42 62 209 0.99544 9.5
|
||||
"2395" "medium" 0 0.31 0.26 37 157 0.99625 9
|
||||
"4073" "medium" 0 0.29 0.21 20 142 0.99658 10.1
|
||||
"2072" "medium" 0 0.24 0.29 19 86 0.99 12.5
|
||||
"1762" "medium" 0 0.36 0.3 14 85 0.9932 10.6
|
||||
"1775" "medium" 0 0.23 0.4 50 151 0.9927 11.4
|
||||
"3325" "medium" 0 0.17 0.22 55 152 0.9952 9.3
|
||||
"1560" "medium" 1 0.6 0.26 31 131 0.99622 9.9
|
||||
"3769" "good" 0 0.19 0.3 48.5 229 0.9986 9.1
|
||||
"5755" "medium" 0 0.3 0.47 50 187 0.9927 9.5
|
||||
"4011" "medium" 0 0.27 0.25 50 208 1.00051 9.2
|
||||
"6389" "medium" 0 0.62 0.33 24 118 0.98758 13.55
|
||||
"4958" "medium" 0 0.36 0.28 29 81 0.99151 12.5
|
||||
"3523" "medium" 0 0.37 0.27 10 59 0.9923 10.4
|
||||
"1452" "good" 1 0.32 0.44 8 17 0.99732 11
|
||||
"4576" "medium" 0 0.32 0.39 34 124 0.99286 12.1
|
||||
"5182" "medium" 0 0.32 0.32 12 76 0.98993 12.3
|
||||
"1179" "medium" 1 0.915 0 17 78 0.99346 11.4
|
||||
"1059" "good" 1 0.53 0.57 30 52 0.9971 11.6
|
||||
"6467" "medium" 0 0.6 0.34 3 60 0.98854 13
|
||||
"369" "medium" 1 0.34 0.52 15 75 0.9998 9.4
|
||||
"5795" "good" 0 0.45 0.24 24 87 0.98862 13.4
|
||||
"1836" "medium" 0 0.23 0.38 55 194 0.9979 9
|
||||
"1684" "medium" 0 0.43 0.61 54 155 0.9974 8.7
|
||||
"1737" "medium" 0 0.37 0.67 49 155 0.9975 8.7
|
||||
"988" "medium" 1 0.36 0.3 35 70 0.99693 9.4
|
||||
"5853" "bad" 0 0.47 0.1 11 74 0.99082 11.2
|
||||
"1201" "medium" 1 0.57 0.21 4 9 0.99458 9.8
|
||||
"866" "medium" 1 0.635 0.07 16 86 0.99748 9.7
|
||||
"110" "medium" 1 0.785 0.52 37 153 0.9969 9.3
|
||||
"775" "medium" 1 0.4 0.3 2 45 0.99727 9.5
|
||||
"5303" "medium" 0 0.24 0.31 26 180 0.99884 9.1
|
||||
"1938" "medium" 0 0.26 0.4 12 139 0.9945 10.4
|
||||
"1283" "medium" 1 0.765 0 9 22 0.99619 10.9
|
||||
"5636" "medium" 0 0.33 0.22 40 177 0.99287 9.9
|
||||
"1474" "medium" 1 0.6 0.08 14 45 0.99336 11
|
||||
"3236" "medium" 0 0.49 0.49 29 149 0.9952 10
|
||||
"2262" "bad" 0 0.57 0.1 23 188 0.9972 9.2
|
||||
"2881" "good" 0 0.27 0.34 26 168 0.9911 12.1
|
||||
"892" "medium" 1 0.66 0.03 16 86 0.99743 9.7
|
||||
"2032" "good" 0 0.155 0.34 73.5 214 0.9934 9.9
|
||||
"129" "good" 1 0.59 0.16 3 16 0.9962 10.5
|
||||
"6375" "medium" 0 0.27 0.4 42 124 0.99204 10.1
|
||||
"1044" "good" 1 0.39 0.41 18 39 0.99859 10.9
|
||||
"540" "medium" 1 0.5 0.74 5 17 0.9996 11.2
|
||||
"3219" "good" 0 0.22 0.49 31 128 0.9928 11.3
|
||||
"3183" "medium" 0 0.18 0.74 54 168 0.9978 10.1
|
||||
"1895" "medium" 0 0.33 0.27 34 175 0.9934 9.4
|
||||
"2631" "medium" 0 0.34 0.29 45 232 0.9955 10
|
||||
"1354" "medium" 1 0.645 0.03 14 57 0.9969 10.3
|
||||
"655" "medium" 1 0.47 0.47 7 29 0.9979 9.5
|
||||
"4963" "medium" 0 0.22 0.28 47 90 0.98862 12.6
|
||||
"3040" "medium" 0 0.26 0.74 56 162 0.998 8.8
|
||||
"4729" "medium" 0 0.21 0.38 37 122 0.98972 12
|
||||
"6286" "bad" 0 0.63 0.04 25 133 0.99271 10.2
|
||||
"5823" "bad" 0 0.43 0.11 6 51 0.99076 11.2
|
||||
"4224" "medium" 0 0.21 0.37 20 80 0.99076 12
|
||||
"729" "medium" 1 0.57 0.02 4 11 0.997 9.5
|
||||
"719" "medium" 1 0.56 0.04 10 22 0.9976 9.6
|
||||
"5217" "medium" 0 0.29 0.33 20 117 0.99048 11.4
|
||||
"3569" "good" 0 0.41 0.3 49 164 0.9927 11.7
|
||||
"1447" "medium" 1 0.63 0.02 18 30 0.99712 9.8
|
||||
"1394" "medium" 1 0.52 0.25 19 59 0.99612 10.2
|
||||
"4794" "medium" 0 0.16 0.32 7 89 0.99111 11
|
||||
"1664" "medium" 0 0.24 0.27 31 122 0.9927 10.3
|
||||
"501" "medium" 1 0.52 0.25 14 38 0.9984 9
|
||||
"3668" "medium" 0 0.32 0.18 26 104 0.9906 11
|
||||
"3098" "medium" 0 0.27 0.49 23 86 0.9914 12.5
|
||||
"1080" "good" 1 0.3 0.68 37.5 278 0.99316 12.3
|
||||
"2266" "medium" 0 0.22 0.37 38 195 0.9908 12.5
|
||||
"186" "medium" 1 0.31 0.57 26 85 0.9971 9.7
|
||||
"5841" "medium" 0 0.27 0.29 62 140 0.99237 11.1
|
||||
"3375" "medium" 0 0.49 1 28 135 0.9973 12
|
||||
"1111" "medium" 1 0.53 0 6 14 0.99593 10
|
||||
"430" "medium" 1 0.84 0.63 13 35 0.9997 10.4
|
||||
"677" "medium" 1 0.4 0.41 7 17 0.9984 9.3
|
||||
"3973" "bad" 0 0.48 0.37 5 57 0.99256 10.4
|
||||
"6471" "medium" 0 0.2 0.4 20 98 0.9897 12.05
|
||||
"1021" "medium" 1 0.36 0.66 3 8 0.99642 11.9
|
||||
"3674" "medium" 0 0.22 0.28 51 180 0.9952 9.5
|
||||
"6203" "medium" 0 0.33 0.18 40 124 0.99114 11
|
||||
"2762" "good" 0 0.25 0.41 29 151 0.9946 10.2
|
||||
"572" "medium" 1 0.36 0.24 19 42 0.9946 11.7
|
||||
"5960" "medium" 0 0.28 0.35 31 148 0.99178 10.7
|
||||
"970" "medium" 1 0.56 0.09 7 22 0.99669 10.2
|
||||
"460" "bad" 1 0.58 0.66 10 47 1.0008 9
|
||||
"4630" "good" 0 0.47 0.29 22 142 0.99518 12
|
||||
"5655" "medium" 0 0.3 0.27 22 97 0.99314 11.7
|
||||
"5365" "medium" 0 0.4 0.17 59 186 0.99754 9.4
|
||||
"2020" "good" 0 0.22 0.31 41 136 0.9898 12.7
|
||||
"3275" "medium" 0 0.27 0.32 65 224 0.9961 8.9
|
||||
"5150" "medium" 0 0.14 0.32 48 116 0.99218 10
|
||||
"3265" "good" 0 0.13 0.37 48 114 0.9911 11.5
|
||||
"3328" "medium" 0 0.3 0.24 35 116 0.9953 9.4
|
||||
"3925" "medium" 0 0.35 0.17 7 119 0.99297 9.7
|
||||
"1265" "medium" 1 0.37 0.32 26 51 0.99456 11.8
|
||||
"768" "medium" 1 0.6 0.32 13 98 0.99938 9.5
|
||||
"670" "medium" 1 0.34 0.45 6 15 0.9988 9.2
|
||||
"1156" "medium" 1 0.6 0.25 9 38 0.99616 9.8
|
||||
"2275" "medium" 0 0.28 0.25 44 201 0.9955 9.1
|
||||
"974" "medium" 1 0.34 0.44 6 12 0.99605 10.7
|
17
INSA/cle ssh.txt
Normal file
|
@ -0,0 +1,17 @@
|
|||
Generating publicprivate ed25519 key pair.
|
||||
Your identification has been saved in CUsersPC.sshid_ed25519.
|
||||
Your public key has been saved in CUsersPC.sshid_ed25519.pub.
|
||||
The key fingerprint is
|
||||
SHA25673MajauxjnuZNpAn2N5z1mVnlOIPS7hIhMTfytcBQWs pc@Kdo-de-Nowe-Ju
|
||||
The key's randomart image is
|
||||
+--[ED25519 256]--+
|
||||
. .o.
|
||||
o ..
|
||||
. o .E. .
|
||||
. o.. o ..
|
||||
o .S . + o.
|
||||
. = .= = =o o
|
||||
. =oo.+o+o
|
||||
..O=++o. .
|
||||
o=+++
|
||||
+----[SHA256]-----+
|
|
@ -84,7 +84,7 @@
|
|||
"boost": 40,
|
||||
"cout": 1000000,
|
||||
"borne": 500000,
|
||||
"evolution":4,
|
||||
"evolution":5,
|
||||
"css_id": "t6.css",
|
||||
"narration": "XHTML 4.01 améliore encore la norme HTML, avec une plus grande rigueur et des règles de codage strictes. Vous commencez à créer des pages web plus robustes et accessibles, prêtes à supporter un contenu riche et diversifié. Le web devient plus stable et professionnel."
|
||||
},
|
||||
|
@ -99,7 +99,7 @@
|
|||
"boost": 50,
|
||||
"cout": 10000000,
|
||||
"borne": 5000000,
|
||||
"evolution":5,
|
||||
"evolution":6,
|
||||
"css_id": "t7.css",
|
||||
"narration": "Avec XHTML 1.0, vous atteignez un nouveau niveau de qualité. Vous écrivez un code plus propre et plus cohérent, et l'expérience utilisateur s'en trouve améliorée. Les pages se chargent plus rapidement et sont plus fiables. La perfection est en marche !"
|
||||
},
|
||||
|
@ -114,7 +114,7 @@
|
|||
"boost": 60,
|
||||
"cout": 1000000000,
|
||||
"borne": 50000000,
|
||||
"evolution":6,
|
||||
"evolution":7,
|
||||
"css_id": "t8.css",
|
||||
"narration": "L'HTML 5 débarque ! C'est l'arrivée des vidéos et de l'audio sur le web. Grâce à la balise `<video>`, vous pouvez intégrer des vidéos directement dans vos pages, et la balise `<audio>` permet de diffuser des sons. Vous redéfinissez l'expérience multimédia sur Internet."
|
||||
},
|
||||
|
@ -129,7 +129,7 @@
|
|||
"boost": 70,
|
||||
"cout": 10000000000,
|
||||
"borne": 500000000,
|
||||
"evolution":7,
|
||||
"evolution":8,
|
||||
"css_id": "t9.css",
|
||||
"narration": "XHTML 5 vous permet d'aller encore plus loin dans l'interactivité. Grâce à l'introduction des balises HTML5, vous pouvez gérer des éléments multimédia comme des vidéos, des sons, et même des animations interactives avec le JavaScript intégré. Le web devient une plateforme riche et immersive, tout est possible !"
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ img {
|
|||
|
||||
th {
|
||||
font-family:Impact;
|
||||
color: rgb(77, 230, 143);
|
||||
color: rgb(38, 231, 17);
|
||||
}
|
||||
|
||||
table {
|
||||
|
|
|
@ -43,7 +43,7 @@ async function remplirMagasinTechnologies(){
|
|||
const case_boost = document.createElement("td")
|
||||
case_boost.innerText = el.boost
|
||||
const case_cout = document.createElement("td")
|
||||
case_cout.innerText = el.cout
|
||||
case_cout.innerText = rendreNombreLisible(el.cout)
|
||||
|
||||
const test = document.createElement("td")
|
||||
const btn_acheter = document.createElement("button")
|
||||
|
@ -151,7 +151,7 @@ async function remplirMagasinCollegues(){
|
|||
const case_boost = document.createElement("td")
|
||||
case_boost.innerText = el.revenu_passif
|
||||
const case_cout = document.createElement("td")
|
||||
case_cout.innerText = el.cout
|
||||
case_cout.innerText = rendreNombreLisible(el.cout)
|
||||
case_cout.id = "case_cout_"+key
|
||||
|
||||
// case contenant un lien vers la page wikipédia du personnage
|
||||
|
@ -290,7 +290,7 @@ function augmenterScorePassivement(){
|
|||
}
|
||||
|
||||
function leBoostDuProf(){
|
||||
score += 10000000000000000
|
||||
score += 1000000000
|
||||
majAffichageScore()
|
||||
}
|
||||
|
||||
|
@ -340,9 +340,8 @@ function genererConfetti() {
|
|||
function rendreNombreLisible(n){
|
||||
let ret = n
|
||||
|
||||
if(n>=1000){
|
||||
if(n>=1000000){
|
||||
const quantifiers = [
|
||||
"Millier", // 10^3
|
||||
"Million", // 10^6
|
||||
"Milliard", // 10^9
|
||||
"Billion", // 10^12
|
||||
|
@ -374,7 +373,7 @@ function rendreNombreLisible(n){
|
|||
|
||||
// ici, on ne garde que jusqu'à la centaine de l'unité choisie
|
||||
// et on le met dans la variable de retour
|
||||
ret = Math.floor( n/(10**(3*puiss_mil)) )
|
||||
ret = Number(n/(10**(3*puiss_mil))).toFixed(2)
|
||||
|
||||
// enfin, on rajoute le quantificateur, avec un 's' si on est pas à l'unité
|
||||
let q = " "+ quantifiers[puiss_mil -1]
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
print("hello world")
|
231
bdd/arbre.json
|
@ -1,231 +0,0 @@
|
|||
{
|
||||
"technologies": {
|
||||
"html": {
|
||||
"nom": "HTML",
|
||||
"elements": {
|
||||
"button": {
|
||||
}
|
||||
},
|
||||
"boost": 2,
|
||||
"cout": 10,
|
||||
"borne": 5,
|
||||
"evolution":0,
|
||||
"css_id": "t1.css",
|
||||
"narration": "C'est le début de l'aventure web ! HTML, le langage de base, permet de structurer des pages avec des titres, des paragraphes, des listes, et surtout des boutons pour interagir avec les utilisateurs. Vous avez posé les premières pierres de l'Internet. Le web commence tout juste à s'ouvrir au monde."
|
||||
},
|
||||
|
||||
"html+": {
|
||||
"nom": "HTML+",
|
||||
"elements": {
|
||||
"button": {
|
||||
|
||||
}
|
||||
},
|
||||
"boost": 5,
|
||||
"cout": 100,
|
||||
"borne": 50,
|
||||
"evolution":1,
|
||||
"css_id": "t2.css",
|
||||
"narration": "L'HTML+ améliore ce que vous avez construit. Plus de possibilités pour styliser votre page, et le pouvoir d'ajouter des formulaires et des éléments interactifs. Le web devient plus attrayant et engageant, prêt à accueillir un public plus large !"
|
||||
},
|
||||
|
||||
"html_2.0": {
|
||||
"nom": "HTML 2.0",
|
||||
"elements": {
|
||||
"button": {
|
||||
|
||||
}
|
||||
},
|
||||
"boost": 10,
|
||||
"cout": 1000,
|
||||
"borne": 500,
|
||||
"evolution":2,
|
||||
"css_id": "t3.css",
|
||||
"narration": "HTML 2.0 est arrivé ! Ce n'est pas juste une mise à jour, c'est une révolution. Avec cette version, vous pouvez organiser vos pages avec des tableaux et ajouter des formulaires interactifs. Le web devient un lieu où l'on peut entrer et interagir, et non seulement lire. Bienvenue dans l'ère de l'interaction !"
|
||||
},
|
||||
|
||||
"html_3.2": {
|
||||
"nom": "HTML 3.2",
|
||||
"elements": {
|
||||
"button": {
|
||||
|
||||
}
|
||||
},
|
||||
"boost": 20,
|
||||
"cout": 10000,
|
||||
"borne": 5000,
|
||||
"evolution":3,
|
||||
"css_id": "t4.css",
|
||||
"narration": "L'HTML 3.2 marque un tournant décisif dans l'histoire du web. Grâce à l'introduction de la balise `<img>`, vous pouvez désormais ajouter des images à vos pages ! Le web devient visuel et prend vie avec des images. Vous êtes sur le point de changer la façon dont les utilisateurs perçoivent Internet."
|
||||
},
|
||||
|
||||
"html_4.01": {
|
||||
"nom": "HTML 4.01",
|
||||
"elements": {
|
||||
"button": {
|
||||
|
||||
}
|
||||
},
|
||||
"boost": 30,
|
||||
"cout": 100000,
|
||||
"borne": 50000,
|
||||
"evolution":3,
|
||||
"css_id": "t5.css",
|
||||
"narration": "HTML 4.01 a ouvert la voie à une nouvelle ère de personnalisation du design web. L'ajout des feuilles de style CSS a permis de donner libre cours à la créativité. Vous avez désormais un contrôle total sur l'apparence de vos pages, et le web devient plus dynamique et élégant."
|
||||
},
|
||||
|
||||
"xhtml_4.01": {
|
||||
"nom": "XHTML 4.01",
|
||||
"elements": {
|
||||
"button": {
|
||||
|
||||
}
|
||||
},
|
||||
"boost": 40,
|
||||
"cout": 1000000,
|
||||
"borne": 500000,
|
||||
"evolution":4,
|
||||
"css_id": "t6.css",
|
||||
"narration": "XHTML 4.01 améliore encore la norme HTML, avec une plus grande rigueur et des règles de codage strictes. Vous commencez à créer des pages web plus robustes et accessibles, prêtes à supporter un contenu riche et diversifié. Le web devient plus stable et professionnel."
|
||||
},
|
||||
|
||||
"xhtml_1.0": {
|
||||
"nom": "XHTML 1.0",
|
||||
"elements": {
|
||||
"button": {
|
||||
|
||||
}
|
||||
},
|
||||
"boost": 50,
|
||||
"cout": 10000000,
|
||||
"borne": 5000000,
|
||||
"evolution":5,
|
||||
"css_id": "t7.css",
|
||||
"narration": "Avec XHTML 1.0, vous atteignez un nouveau niveau de qualité. Vous écrivez un code plus propre et plus cohérent, et l'expérience utilisateur s'en trouve améliorée. Les pages se chargent plus rapidement et sont plus fiables. La perfection est en marche !"
|
||||
},
|
||||
|
||||
"html_5": {
|
||||
"nom": "HTML 5",
|
||||
"elements": {
|
||||
"button": {
|
||||
|
||||
}
|
||||
},
|
||||
"boost": 60,
|
||||
"cout": 1000000000,
|
||||
"borne": 50000000,
|
||||
"evolution":6,
|
||||
"css_id": "t8.css",
|
||||
"narration": "L'HTML 5 débarque ! C'est l'arrivée des vidéos et de l'audio sur le web. Grâce à la balise `<video>`, vous pouvez intégrer des vidéos directement dans vos pages, et la balise `<audio>` permet de diffuser des sons. Vous redéfinissez l'expérience multimédia sur Internet."
|
||||
},
|
||||
|
||||
"xhtml_5": {
|
||||
"nom": "XHTML 5",
|
||||
"elements": {
|
||||
"button": {
|
||||
|
||||
}
|
||||
},
|
||||
"boost": 70,
|
||||
"cout": 10000000000,
|
||||
"borne": 500000000,
|
||||
"evolution":7,
|
||||
"css_id": "t9.css",
|
||||
"narration": "XHTML 5 vous permet d'aller encore plus loin dans l'interactivité. Grâce à l'introduction des balises HTML5, vous pouvez gérer des éléments multimédia comme des vidéos, des sons, et même des animations interactives avec le JavaScript intégré. Le web devient une plateforme riche et immersive, tout est possible !"
|
||||
}
|
||||
},
|
||||
|
||||
"collegues": {
|
||||
"ada_lovelace": {
|
||||
"nom": "Ada Lovelace",
|
||||
"cout": 15,
|
||||
"revenu_passif": 0.1,
|
||||
"evolution": 0,
|
||||
"narration": "Ada Lovelace est considérée comme la première programmeuse de l'histoire. Elle a collaboré avec Charles Babbage sur la machine analytique et a écrit des notes qui contiennent l'algorithme destiné à être exécuté par la machine, un concept essentiel à la programmation moderne.",
|
||||
"wikipedia": "https://fr.wikipedia.org/wiki/Ada_Lovelace",
|
||||
"nom_fichier_image":"img/Ada_Byron_daguerreotype_by_Antoine_Claudet_1843_or_1850_-_cropped.png"
|
||||
},
|
||||
"george_boole": {
|
||||
"nom": "George Boole",
|
||||
"cout": 100,
|
||||
"revenu_passif": 1,
|
||||
"evolution": 0,
|
||||
"narration": "George Boole était un mathématicien et logicien britannique, connu pour avoir formulé les bases de l'algèbre logique, un outil fondamental en informatique et en intelligence artificielle.",
|
||||
"wikipedia": "https://fr.wikipedia.org/wiki/George_Boole",
|
||||
"nom_fichier_image":"img/George_Boole_color.jpg"
|
||||
},
|
||||
"grace_hopper": {
|
||||
"nom": "Grace Hopper",
|
||||
"cout": 1100,
|
||||
"revenu_passif": 8,
|
||||
"evolution": 0,
|
||||
"narration": "Grace Hopper était une informaticienne et contre-amiral de la marine américaine. Elle est connue pour ses travaux sur le développement du premier compilateur et pour avoir popularisé le terme 'bug' pour décrire un dysfonctionnement dans les programmes.",
|
||||
"wikipedia": "https://fr.wikipedia.org/wiki/Grace_Hopper",
|
||||
"nom_fichier_image":"img/390px-Commodore_Grace_M._Hopper,_USN_(covered).jpg"
|
||||
},
|
||||
"france_spence": {
|
||||
"nom": "Frances V. Spence",
|
||||
"cout": 6000,
|
||||
"revenu_passif": 47,
|
||||
"evolution": 1,
|
||||
"narration": "Frances V. Spence est l'une des premières programmeuses pour l'ENIAC (le premier ordinateur numérique). Elle est considérée comme l'une des pionnières de l'histoire de la programmation informatique.",
|
||||
"wikipedia": "https://fr.wikipedia.org/wiki/Frances_Spence",
|
||||
"nom_fichier_image":"img/Frances_Bilas_Spence_feeding_punch_cards_into_ENIAC,_Feb_1946.png"
|
||||
},
|
||||
"claude_shannon": {
|
||||
"nom": "Claude Shannon",
|
||||
"cout": 10000,
|
||||
"revenu_passif": 260,
|
||||
"evolution": 1,
|
||||
"narration": "Claude Shannon est considéré comme le père de la théorie de l'information. Ses travaux ont révolutionné les domaines de la communication et de l'informatique.",
|
||||
"wikipedia": "https://fr.wikipedia.org/wiki/Claude_Shannon",
|
||||
"nom_fichier_image":"img/ClaudeShannon_MFO3807.jpg"
|
||||
},
|
||||
"alan_turing": {
|
||||
"nom": "Alan Turing",
|
||||
"cout": 700000,
|
||||
"revenu_passif": 1400,
|
||||
"evolution": 1,
|
||||
"narration": "Alan Turing était un mathématicien et cryptanalyste britannique, célèbre pour son travail sur la machine de Turing, une base fondamentale pour la conception des ordinateurs modernes.",
|
||||
"wikipedia": "https://fr.wikipedia.org/wiki/Alan_Turing",
|
||||
"nom_fichier_image":"img/Alan_Turing_(1912-1954)_in_1936_at_Princeton_University.jpg"
|
||||
},
|
||||
"maragaret_hamilton": {
|
||||
"nom": "Margaret Hamilton",
|
||||
"cout": 5000000,
|
||||
"revenu_passif": 7800,
|
||||
"evolution": 2,
|
||||
"narration": "Margaret Hamilton est une informaticienne qui a dirigé l'équipe de développement logiciel pour la mission Apollo. Elle est connue pour avoir écrit le code qui a permis de poser l'homme sur la Lune.",
|
||||
"wikipedia": "https://fr.wikipedia.org/wiki/Margaret_Hamilton_(scientifique)",
|
||||
"nom_fichier_image":"img/330px-Margaret_Hamilton_-_restoration.jpg"
|
||||
},
|
||||
"tim_berners_lee": {
|
||||
"nom": "Tim Berner-Lee",
|
||||
"cout": 50000000,
|
||||
"revenu_passif": 44000,
|
||||
"evolution": 2,
|
||||
"narration": "Tim Berners-Lee est l'inventeur du World Wide Web. Son travail a permis de rendre Internet accessible et compréhensible pour le grand public.",
|
||||
"wikipedia": "https://fr.wikipedia.org/wiki/Tim_Berners-Lee",
|
||||
"nom_fichier_image":"img/390px-Tim_Berners-Lee_closeup.jpg"
|
||||
},
|
||||
"dennis_ritchie": {
|
||||
"nom": "Dennis Ritchie",
|
||||
"cout": 70000000,
|
||||
"revenu_passif": 260000,
|
||||
"evolution": 2,
|
||||
"narration": "Dennis Ritchie était un informaticien américain, co-créateur du langage de programmation C et du système d'exploitation UNIX, qui sont devenus des fondations de l'informatique moderne.",
|
||||
"wikipedia": "https://fr.wikipedia.org/wiki/Dennis_Ritchie",
|
||||
"nom_fichier_image":"img/390px-Dennis_Ritchie_2011.jpg"
|
||||
},
|
||||
"linus_torvald": {
|
||||
"nom": "Linus Torvald",
|
||||
"cout": 100000000,
|
||||
"revenu_passif": 1600000,
|
||||
"evolution": 3,
|
||||
"narration": "Linus Torvalds est le créateur de Linux, un noyau de système d'exploitation open-source qui est devenu la base de nombreuses distributions utilisées dans des serveurs, des ordinateurs personnels et des appareils mobiles.",
|
||||
"wikipedia": "https://fr.wikipedia.org/wiki/Linus_Torvalds",
|
||||
"nom_fichier_image":"img/LinuxCon_Europe_Linus_Torvalds_03_(cropped).jpg"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
/*
|
||||
* @file css/alerte.css
|
||||
* @description
|
||||
* @author mougnibas <mougnibas@insa-toulouse.fr>
|
||||
* @createTime 2024-11-29 10:35:07
|
||||
* @lastModified 2024-12-15 18:53:32
|
||||
* Copyright ©Théo Mougnibas All rights reserved
|
||||
*/
|
||||
|
||||
/* Le conteneur de l'alerte, va couvrir tout l'écran*/
|
||||
.modal {
|
||||
display: none; /* on la cache par défaut */
|
||||
position: fixed;
|
||||
z-index: 1; /* BAM ! AU DESSUS DE TOUT */
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0, 0, 0, 0.4); /* On floute le derrière */
|
||||
}
|
||||
|
||||
/* Contenu de l'alerte */
|
||||
.modal-content {
|
||||
background-color: #fefefe;
|
||||
margin: 15% auto; /* on le centre */
|
||||
padding: 20px;
|
||||
border: 1px solid #888;
|
||||
width: 80%;
|
||||
max-width: 400px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Bouton pour fermer l'alerte */
|
||||
.close-btn {
|
||||
color: #aaa;
|
||||
float: right;
|
||||
font-size: 28px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.close-btn:hover,
|
||||
.close-btn:focus {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* Bouton OK */
|
||||
.modal.button {
|
||||
padding: 10px 20px;
|
||||
background-color: #4CAF50;
|
||||
color: white;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
.modal {
|
||||
display: none;
|
||||
position: fixed;
|
||||
z-index: 1;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #ccc; /* Gris uni */
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
background-color: white;
|
||||
margin: 15% auto;
|
||||
padding: 10px;
|
||||
border: 2px solid black; /* Bordures noires bien visibles */
|
||||
width: 40vw;
|
||||
text-align: left; /* Alignement à gauche */
|
||||
font-family: Arial, sans-serif; /* Typo basique */
|
||||
}
|
||||
|
||||
.close-btn {
|
||||
color: black;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.modal.button {
|
||||
padding: 5px 10px;
|
||||
background-color: #008CBA; /* Bleu très simple */
|
||||
color: white;
|
||||
}
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
.modal {
|
||||
display: none;
|
||||
position: fixed;
|
||||
z-index: 1;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #ccc; /* Gris uni */
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
background-color: white;
|
||||
margin: 15% auto;
|
||||
padding: 10px;
|
||||
border: 2px solid black; /* Bordures noires bien visibles */
|
||||
width: 40vw;
|
||||
text-align: left; /* Alignement à gauche */
|
||||
font-family: Arial, sans-serif; /* Typo basique */
|
||||
border-radius: 5px; /* Bordures légèrement arrondies */
|
||||
border: 1px solid gray;
|
||||
}
|
||||
|
||||
.close-btn {
|
||||
color: black;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.modal.button {
|
||||
padding: 5px 10px;
|
||||
background-color: #008CBA; /* Bleu très simple */
|
||||
color: white;
|
||||
}
|
||||
|
||||
.close-btn:hover,
|
||||
.close-btn:focus {
|
||||
color: red; /* Rouge pour attirer l’attention */
|
||||
}
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
.modal {
|
||||
display: none;
|
||||
position: fixed;
|
||||
z-index: 1;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: url('background.jpg') repeat; /* Texture kitsch */
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
background-color: white;
|
||||
margin: 15% auto;
|
||||
padding: 10px;
|
||||
width: 40vw;
|
||||
text-align: left; /* Alignement à gauche */
|
||||
border-radius: 5px; /* Bordures légèrement arrondies */
|
||||
border: 1px solid gray;
|
||||
font-family: "Comic Sans MS", cursive; /* Typo iconique des années 2000 */
|
||||
background-color: pink; /* Couleurs flashy */
|
||||
box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5); /* Ombres portées pour effet "pop" */
|
||||
}
|
||||
|
||||
.close-btn {
|
||||
color: black;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.modal.button {
|
||||
padding: 5px 10px;
|
||||
background-color: #ff69b4; /* Rose bonbon */
|
||||
font-weight: bold;}
|
||||
|
||||
.close-btn:hover,
|
||||
.close-btn:focus {
|
||||
color: red; /* Rouge pour attirer l’attention */
|
||||
}
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
.modal {
|
||||
display: none;
|
||||
position: fixed;
|
||||
z-index: 1;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: url('../../img/tecktonik.jpeg') repeat; /* Texture kitsch */
|
||||
}
|
||||
@font-face {
|
||||
font-family: "Comic Sans MS";
|
||||
src: url("../font/comic-sans.woff") format("woff");
|
||||
}
|
||||
.modal-content {
|
||||
margin: 15% auto;
|
||||
padding: 10px;
|
||||
width: 40vw;
|
||||
text-align: left; /* Alignement à gauche */
|
||||
font-family:"Comic Sans MS"; /* Typo iconique des années 2000 */
|
||||
box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.7); /* Ombres portées pour effet "pop" */
|
||||
background: linear-gradient(to bottom, #ffffff, #e0e0e0); /* Dégradé élégant */
|
||||
border: none;
|
||||
border-radius: 10px;
|
||||
color:purple;
|
||||
}
|
||||
|
||||
.close-btn {
|
||||
color: black;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.modal.button {
|
||||
padding: 5px 10px;
|
||||
background-color: #ff69b4; /* Rose bonbon */
|
||||
font-weight: bold;
|
||||
border-radius: 0px !important;
|
||||
}
|
||||
|
||||
.close-btn:hover,
|
||||
.close-btn:focus {
|
||||
color: red; /* Rouge pour attirer l’attention */
|
||||
}
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
.modal {
|
||||
display: none;
|
||||
position: fixed;
|
||||
z-index: 1;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
margin: 15% auto;
|
||||
padding: 10px;
|
||||
width: 40vw;
|
||||
text-align: left; /* Alignement à gauche */
|
||||
background-color: white;
|
||||
border: 2px solid #4caf50; /* Vert plat */
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.close-btn {
|
||||
color: black;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.modal.button {
|
||||
background-color: #4caf50;
|
||||
color: white;
|
||||
border-radius: 3px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.close-btn:hover,
|
||||
.close-btn:focus {
|
||||
color: red; /* Rouge pour attirer l’attention */
|
||||
}
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
.modal {
|
||||
display: none;
|
||||
position: fixed;
|
||||
z-index: 1;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
margin: 15% auto;
|
||||
padding: 10px;
|
||||
width: 40vw;
|
||||
background-color: white;
|
||||
box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1); /* Ombres douces */
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.close-btn {
|
||||
color: black;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.modal.button {
|
||||
background-color: #4caf50;
|
||||
color: white;
|
||||
border-radius: 3px;
|
||||
border: none;
|
||||
transition: background-color 0.3s ease;
|
||||
}
|
||||
|
||||
.modal.button:hover {
|
||||
background-color: #45a049; /* Vert plus sombre au survol */
|
||||
}
|
||||
|
||||
.close-btn:hover,
|
||||
.close-btn:focus {
|
||||
color: red; /* Rouge pour attirer l’attention */
|
||||
}
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
.modal {
|
||||
display: none;
|
||||
position: fixed;
|
||||
z-index: 1;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0, 0, 0, 0.8); /* Fond plus sombre */
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
margin: 15% auto;
|
||||
padding: 10px;
|
||||
width: 40vw;
|
||||
box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1); /* Ombres douces */
|
||||
background-color: #1e1e1e; /* Fond sombre */
|
||||
color: #ffffff;
|
||||
border: 1px solid #444444;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
|
||||
.close-btn {
|
||||
color: black;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.modal.button {
|
||||
border-radius: 3px;
|
||||
border: none;
|
||||
background-color: #bb86fc; /* Couleur violet pastel */
|
||||
color: #000;
|
||||
}
|
||||
|
||||
|
||||
.close-btn:hover,
|
||||
.close-btn:focus {
|
||||
color: red; /* Rouge pour attirer l’attention */
|
||||
}
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
.modal {
|
||||
display: none;
|
||||
position: fixed;
|
||||
z-index: 1;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0, 0, 0, 0.8); /* Fond plus sombre */
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
margin: 15% auto;
|
||||
padding: 10px;
|
||||
width: 40vw;
|
||||
background-color: #ffdb00; /* Jaune vif */
|
||||
color: #000;
|
||||
border: 4px solid #000; /* Bordures audacieuses */
|
||||
font-family: "Arial Black", sans-serif;
|
||||
}
|
||||
|
||||
|
||||
.close-btn {
|
||||
color: black;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.modal.button {
|
||||
border-radius: 3px;
|
||||
border: none;
|
||||
background-color: #e63946; /* Rouge frappant */
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
|
||||
.close-btn:hover,
|
||||
.close-btn:focus {
|
||||
color: red; /* Rouge pour attirer l’attention */
|
||||
}
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
.modal {
|
||||
background: linear-gradient(135deg, #1f1c2c, #928dab); /* Dégradé futuriste */
|
||||
backdrop-filter: blur(10px); /* Flou pour un effet sophistiqué */
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
background: radial-gradient(circle, #222, #000);
|
||||
color: #fff;
|
||||
border-radius: 20px;
|
||||
border: none;
|
||||
width: 40vw;
|
||||
box-shadow: 0px 8px 30px rgba(0, 0, 0, 0.5); /* Ombres intenses */
|
||||
transform: perspective(1000px) rotateX(5deg); /* Effet 3D */
|
||||
}
|
||||
|
||||
.modal.button {
|
||||
background: linear-gradient(45deg, #ff6f91, #ffc371); /* Dégradé dynamique */
|
||||
font-size: 20px;
|
||||
border-radius: 50px;
|
||||
animation: pulse 1.5s infinite; /* Animation d’impulsion */
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0% {
|
||||
transform: scale(1);
|
||||
}
|
||||
50% {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
100% {
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
|
@ -1,53 +0,0 @@
|
|||
@keyframes faireTournerImage {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
#image-collegue-animee {
|
||||
width: auto;
|
||||
height: auto;
|
||||
animation: faireTournerImage 2s linear forwards infinite;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.div-centrer-contenu{
|
||||
width: 100%;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
@keyframes pluieConfetti {
|
||||
0% {
|
||||
transform: translateY(-100px) rotate(0deg);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
transform: translateY(100vh) rotate(720deg);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.confetti {
|
||||
position: absolute;
|
||||
width: 10px;
|
||||
height: 20px;
|
||||
animation: pluieConfetti 5s linear infinite;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.confetti-container {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
pointer-events: none; /* pour ne pas interagir avec les confettis */
|
||||
}
|
33
css/t1.css
|
@ -1,33 +0,0 @@
|
|||
/* t1.css - HTML */
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
background-color: white;
|
||||
color: black;
|
||||
margin: 500;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
button {
|
||||
padding: 5px 15px;
|
||||
border: 1px solid #000;
|
||||
background-color: white;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
border: 1px solid #000;
|
||||
}
|
||||
|
||||
table.table_magasin{
|
||||
width: 150px;
|
||||
padding: 12px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
|
||||
}
|
74
css/t2.css
|
@ -1,74 +0,0 @@
|
|||
/* t2.css - HTML+ */
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
background-color: #f55555;
|
||||
color: #333333;
|
||||
margin: 10;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
output {
|
||||
color: aqua;
|
||||
font-size: 75px;
|
||||
border:dotted #00ff62;
|
||||
border-radius: 14px;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 8px 15px;
|
||||
border: 1px solid #ddd;
|
||||
background-color: #0206ff;
|
||||
cursor: pointer;
|
||||
border-radius: 5px;
|
||||
color: #ddd;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #bbb;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
th {
|
||||
font-family:Impact;
|
||||
color: rgb(77, 230, 143);
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
border: 15px solid #e99d0f;
|
||||
}
|
||||
|
||||
td, th {
|
||||
padding: 8px;
|
||||
text-align: left;
|
||||
border: 8px solid #fc04fc;
|
||||
}
|
||||
|
||||
div.ad{
|
||||
visibility: visible;
|
||||
display: block !important;
|
||||
|
||||
width: 150px;
|
||||
padding: 12px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
border: 1px solid #87bc44;
|
||||
background: #e0ff92;
|
||||
line-height: 1.2;
|
||||
}
|
||||
div.ad.adt3{
|
||||
visibility: hidden;
|
||||
}
|
||||
table.table_magasin{
|
||||
width: 150px;
|
||||
padding: 12px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
|
||||
}
|
78
css/t3.css
|
@ -1,78 +0,0 @@
|
|||
/* t3.css - HTML 2.0 */
|
||||
body {
|
||||
font-family: 'Segoe UI', sans-serif;
|
||||
background-color: #f0f0f0;
|
||||
color: #ddd;
|
||||
margin: 0;
|
||||
padding: 30px;
|
||||
background-image: url(../img/codevert.jpg);
|
||||
}
|
||||
|
||||
|
||||
|
||||
button {
|
||||
padding: 10px 20px;
|
||||
border: none;
|
||||
background-color: #000000;
|
||||
color: white;
|
||||
cursor: pointer;
|
||||
border-radius: 10px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #66ff00;
|
||||
}
|
||||
|
||||
output {
|
||||
color: #ddd;
|
||||
font-size: 50px;
|
||||
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
th {
|
||||
font-size: 20px;
|
||||
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 10px;
|
||||
text-align: left;
|
||||
border: 1px solid #ddd;
|
||||
}
|
||||
|
||||
div.ad{
|
||||
visibility: visible;
|
||||
display: block !important;
|
||||
float: right;
|
||||
width: 162px;
|
||||
padding: 12px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
border: 1px solid #87bc44;
|
||||
background: #e0ff92;
|
||||
line-height: 1.2;
|
||||
}
|
||||
div.ad.adt3{
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
table.table_magasin{
|
||||
width: 150px;
|
||||
padding: 12px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
|
||||
}
|
72
css/t4.css
|
@ -1,72 +0,0 @@
|
|||
/*
|
||||
* @file css/t4.css
|
||||
* @description
|
||||
* @author mougnibas <mougnibas@insa-toulouse.fr>
|
||||
* @createTime 2024-11-21 11:51:17
|
||||
* @lastModified 2024-12-15 20:38:31
|
||||
* Copyright ©Théo Mougnibas All rights reserved
|
||||
*/
|
||||
|
||||
body {
|
||||
background-color: #ecf0f1;
|
||||
color: #ddd;
|
||||
margin: 0;
|
||||
padding: 40px;
|
||||
background-image: url(../img/matrix.gif), url(../img/codevert.jpg);
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 12px 25px;
|
||||
border: none;
|
||||
background-color: #000000;
|
||||
color: white;
|
||||
cursor: pointer;
|
||||
border-radius: 20px;
|
||||
font-weight: bold;
|
||||
transition: background-color 0.3s ease;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #33ff00;
|
||||
}
|
||||
|
||||
output {
|
||||
font-size: 50px;
|
||||
color: #ddd;
|
||||
background-color: #000000;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border-radius: 15px;
|
||||
box-shadow: 0 8px 15px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
|
||||
border: 1px solid #ddd;
|
||||
}
|
||||
|
||||
th {
|
||||
padding: 12px;
|
||||
text-align: left;
|
||||
border: 1px solid #ccc;
|
||||
color: #ddd;
|
||||
font-size: 20px;
|
||||
}
|
||||
td {
|
||||
padding: 10px;
|
||||
text-align: left;
|
||||
border: 1px solid #ddd;
|
||||
}
|
||||
|
||||
table.table_magasin{
|
||||
width: 150px;
|
||||
padding: 12px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
|
||||
}
|
70
css/t5.css
|
@ -1,70 +0,0 @@
|
|||
/* t5.css - HTML 4.01 */
|
||||
body {
|
||||
font-family: 'Helvetica Neue', sans-serif;
|
||||
background-color: #fafafa;
|
||||
color: #ddd;
|
||||
margin: 0;
|
||||
padding: 50px;
|
||||
background-image: url(../img/codevertmatrix.gif);
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
color: #e74c3c;
|
||||
text-align: center;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
output {
|
||||
font-size: 50px;
|
||||
color: #ddd;
|
||||
background-color: #000000;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 15px 30px;
|
||||
border: 2px solid #33ff00;
|
||||
background-color: #ecf0f1;
|
||||
color: #33ff00;
|
||||
cursor: pointer;
|
||||
border-radius: 25px;
|
||||
font-size: 16px;
|
||||
transition: background-color 0.3s ease;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #33ff00;
|
||||
color: white;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
border: 1px solid #ecf0f1;
|
||||
}
|
||||
|
||||
td, th {
|
||||
padding: 15px;
|
||||
text-align: left;
|
||||
border: 1px solid #ecf0f1;
|
||||
}
|
||||
table.table_magasin{
|
||||
width: 150px;
|
||||
padding: 12px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
|
||||
}
|
||||
a{
|
||||
color: #33ff00;
|
||||
|
||||
}
|
||||
a.hoover{
|
||||
color: #ffffff;
|
||||
}
|
49
css/t6.css
|
@ -1,49 +0,0 @@
|
|||
/* t6.css - XHTML 4.01 */
|
||||
body {
|
||||
font-family: 'Verdana', sans-serif;
|
||||
background-color: #ffffff;
|
||||
color: #2c3e50;
|
||||
margin: 0;
|
||||
padding: 60px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
button {
|
||||
padding: 18px 35px;
|
||||
border: none;
|
||||
background-color: #e74c3c;
|
||||
color: white;
|
||||
cursor: pointer;
|
||||
border-radius: 5px;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #fda500;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border-radius: 5px;
|
||||
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
td, th {
|
||||
padding: 18px;
|
||||
text-align: left;
|
||||
border: 1px solid #ddd;
|
||||
}
|
||||
table.table_magasin{
|
||||
width: 150px;
|
||||
padding: 12px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
|
||||
}
|
58
css/t7.css
|
@ -1,58 +0,0 @@
|
|||
/* t7.css - XHTML 1.0 */
|
||||
body {
|
||||
font-family: 'Segoe UI', serif;
|
||||
background-color: #ecf0f1;
|
||||
color: #34495e;
|
||||
margin: 0;
|
||||
padding: 70px;
|
||||
}
|
||||
|
||||
output {
|
||||
font-size: 30px;
|
||||
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 15px 30px;
|
||||
border: 2px solid #e74c3c;
|
||||
background-color: white;
|
||||
color: #e74c3c;
|
||||
cursor: pointer;
|
||||
border-radius: 25px;
|
||||
font-size: 20px;
|
||||
transition: transform 0.2s ease;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
transform: scale(1.1);
|
||||
background-color: #e74c3c;
|
||||
color: white;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border-radius: 20px;
|
||||
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
border: 2px solid #ff9900;
|
||||
|
||||
}
|
||||
|
||||
td, th {
|
||||
padding: 20px;
|
||||
text-align: left;
|
||||
border: 1px solid #ff9900;
|
||||
|
||||
}
|
||||
table.table_magasin{
|
||||
width: 150px;
|
||||
padding: 12px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
|
||||
}
|
73
css/t8.css
|
@ -1,73 +0,0 @@
|
|||
/* t8.css - HTML 5 */
|
||||
body {
|
||||
font-family: 'Roboto', sans-serif;
|
||||
background-color: #f5f5f5;
|
||||
color: #333;
|
||||
margin: 0;
|
||||
padding: 80px;
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
color: #16a085;
|
||||
text-align: center;
|
||||
margin-bottom: 30px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 20px 40px;
|
||||
border: none;
|
||||
background-color: #e74c3c;
|
||||
color: white;
|
||||
cursor: pointer;
|
||||
border-radius: 50px;
|
||||
font-size: 22px;
|
||||
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
|
||||
transition: background-color 0.3s ease, transform 0.2s ease;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #ff9900;
|
||||
transform: translateY(-3px);
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border-radius: 20px;
|
||||
box-shadow: 0 15px 30px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
border: 2px solid #ff9900;
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
td, th {
|
||||
padding: 25px;
|
||||
text-align: left;
|
||||
border: 1px solid #ff9900;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
td {
|
||||
background-color: #ecf0f1;
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: #ff9900;
|
||||
color: white;
|
||||
}
|
||||
|
||||
table tr:hover {
|
||||
background-color: #f1f1f1;
|
||||
}
|
||||
table.table_magasin{
|
||||
width: 150px;
|
||||
padding: 12px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
91
css/t9.css
|
@ -1,91 +0,0 @@
|
|||
/* t9.css - XHTML 5 */
|
||||
body {
|
||||
font-family: 'Montserrat', sans-serif;
|
||||
background-color: #ffffff;
|
||||
color: #2c3e50;
|
||||
margin: 0;
|
||||
padding: 90px;
|
||||
|
||||
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
color: #2980b9;
|
||||
text-align: center;
|
||||
font-weight: 800;
|
||||
text-transform: uppercase;
|
||||
margin-bottom: 35px;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 25px 50px;
|
||||
border: none;
|
||||
background-color: #e74c3c;
|
||||
color: white;
|
||||
cursor: pointer;
|
||||
border-radius: 40px;
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
letter-spacing: 1px;
|
||||
transition: background-color 0.3s ease, transform 0.3s ease, box-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #ff9900;
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
button:active {
|
||||
transform: translateY(2px);
|
||||
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border-radius: 25px;
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
img:hover {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
border: 3px solid #ff9900;
|
||||
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
td, th {
|
||||
padding: 30px;
|
||||
text-align: left;
|
||||
border: 1px solid #ff9900;
|
||||
font-size: 20px;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
td {
|
||||
background-color: #ecf0f1;
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: #ff9900;
|
||||
color: white;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
table tr:hover {
|
||||
background-color: #b61212;
|
||||
}
|
||||
|
||||
table.table_magasin{
|
||||
width: 150px;
|
||||
padding: 12px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
|
||||
}
|
BIN
desktop.ini
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 261 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 120 KiB |
Before Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 27 KiB |
BIN
img/codevert.jpg
Before Width: | Height: | Size: 20 MiB |
Before Width: | Height: | Size: 1.7 MiB |
BIN
img/matrix.gif
Before Width: | Height: | Size: 200 KiB |
BIN
img/miaou1.jpeg
Before Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 11 KiB |
92
index.html
|
@ -1,92 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Prog Web Legend</title>
|
||||
<link rel="stylesheet" href="" id="link-css">
|
||||
<link rel="stylesheet" href="./css/index.css">
|
||||
<link rel="stylesheet" href="./css/alerte/a1.css" id="alerte-css">
|
||||
<script src="./js/intro.js" defer></script>
|
||||
<script src="./js/element.js"></script>
|
||||
<script src="./js/technologie.js"></script>
|
||||
<script src="./js/main.js" defer></script>
|
||||
<script src="./js/alerte.js"></script>
|
||||
<script src="./js/collegue.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="conteneur_confetti"></div>
|
||||
|
||||
<section>
|
||||
<div id="div_score" style=" display: flex; justify-content: center;">
|
||||
|
||||
</div>
|
||||
|
||||
<div id="div_button" style=" display: flex; justify-content: center;">
|
||||
|
||||
<button id="bouton-prof" onclick="leBoostDuProf()">Le Méga Boost du Prof</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<section>
|
||||
<table id="table_magasin_technologies" class="table_magasin">
|
||||
<thead id="table_magasin_technologies_head">
|
||||
|
||||
</thead>
|
||||
|
||||
<tbody id="table_magasin_technologies_body">
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table style="margin-top:10px ;">
|
||||
<thead>
|
||||
<th>nom</th>
|
||||
<th>revenu passif</th>
|
||||
<th>cout</th>
|
||||
<th>lien</th>
|
||||
</thead>
|
||||
<tbody id="table_magasin_collegues_body">
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- Signaler que ces éléments sont superflus avec une balise d'accessibilité-->
|
||||
<aside>
|
||||
<!-- Alerte personalisée pour faire évoluer le style -->
|
||||
<div id="alerte_jolie" class="modal">
|
||||
<div class="modal-content">
|
||||
<span class="close-btn" onclick="fermerAlerte()">×</span>
|
||||
<p id="message_alerte_jolie"></p>
|
||||
<button onclick="fermerAlerte()">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ad" style="display: none;">
|
||||
|
||||
<img src="./img/miaou1.jpeg" alt="Chat" class="adt2">
|
||||
<div></div>
|
||||
<img src="./img/GIF-CHATON.gif" alt="Chat" class="adt3">
|
||||
</div>
|
||||
|
||||
<div class="div-centrer-contenu">
|
||||
<img id="image-collegue-animee">
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
|
||||
</body>
|
||||
<footer>
|
||||
<p>L'evolution est non contractuelle, adaptée pour le gameplay</p>
|
||||
|
||||
</footer>
|
||||
</html>
|
52
js/alerte.js
|
@ -1,52 +0,0 @@
|
|||
// prévention de l'empilement d'alertes, qui entrainerait la suppression de tous les messages sauf le dernier
|
||||
// Pour cela, on utilise une file et une fonction asynchrone qui boucle et vide la file alerte par alerte
|
||||
let file_alertes = []
|
||||
|
||||
function ouvrirAlerte(message){
|
||||
file_alertes.push(message)
|
||||
|
||||
// si c'est la seule alerte en attente, on l'affiche
|
||||
if(file_alertes.length == 1 ) {
|
||||
afficherAlerte(file_alertes[0])
|
||||
}
|
||||
// sinon, elle sera automatiquement affichée lors de la fermeture de l'alerte juste avant dans la file
|
||||
}
|
||||
|
||||
|
||||
// Fonction pour afficher une alerte mais plus jolie que celle par défaut
|
||||
function afficherAlerte(message) {
|
||||
|
||||
// on signale une alerte en train d'être visionnée
|
||||
flag = true
|
||||
|
||||
|
||||
// on prend les elements
|
||||
let modal = document.getElementById('alerte_jolie');
|
||||
|
||||
var messageElement = document.getElementById('message_alerte_jolie');
|
||||
|
||||
// Mettre le message
|
||||
messageElement.textContent = message;
|
||||
|
||||
// et on affiche en changeant la propriété css
|
||||
modal.style.display = "block";
|
||||
}
|
||||
|
||||
|
||||
// Fonction pour fermer l'alerte
|
||||
function fermerAlerte() {
|
||||
|
||||
var modal = document.getElementById('alerte_jolie');
|
||||
|
||||
// et on cache en changeant la propriété css
|
||||
modal.style.display = "none";
|
||||
|
||||
// enlève notre élément de la file
|
||||
file_alertes.shift()
|
||||
|
||||
// affiche récursivement les autres alertes en attentes
|
||||
if(file_alertes.length > 0){
|
||||
afficherAlerte(file_alertes[0])
|
||||
}
|
||||
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
class Collegue{
|
||||
constructor(json) {
|
||||
this.props = json
|
||||
this.nom = this.props.nom
|
||||
this.cout = this.props.cout
|
||||
this.boost = this.props.boost
|
||||
this.revenu_passif = this.props.revenu_passif
|
||||
}
|
||||
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
class Element{
|
||||
constructor(techno,tag) {
|
||||
this.tag = tag
|
||||
this.techno = techno
|
||||
}
|
||||
|
||||
async chargerDepuisBdd(){
|
||||
let data = await fetch("../bdd/arbre.json")
|
||||
data = await data.json()
|
||||
|
||||
this.props = data["technologies"][this.techno]["elements"][this.tag]
|
||||
this.cout = this.props.cout
|
||||
this.nom = this.props.nom
|
||||
this.boost = this.props.boost
|
||||
}
|
||||
|
||||
afficherDropsDansHtml(){
|
||||
const table= document.getElementById("table_technologies_body")
|
||||
|
||||
const tr = document.createElement("tr")
|
||||
const nom = document.createElement("td")
|
||||
nom.innerText = this.nom
|
||||
const boost = document.createElement("td")
|
||||
boost.innerText = this.boost
|
||||
|
||||
tr.appendChild(nom)
|
||||
tr.appendChild(boost)
|
||||
table.appendChild(tr)
|
||||
|
||||
}
|
||||
|
||||
}
|
30
js/intro.js
|
@ -1,30 +0,0 @@
|
|||
|
||||
window.addEventListener("DOMContentLoaded",(w,e)=>{
|
||||
ouvrirAlerte("Cliquez sur OK pour jouer !")
|
||||
firstClick()
|
||||
})
|
||||
|
||||
function firstClick(){
|
||||
let position_button=document.getElementById("div_button")
|
||||
let position_score=document.getElementById("div_score")
|
||||
|
||||
const score_aff = document.createElement("output")
|
||||
score_aff.innerText="SCORE"
|
||||
score_aff.id = "score_affichage"
|
||||
|
||||
const click = document.createElement("button")
|
||||
click.innerText="click"
|
||||
|
||||
position_score.appendChild(score_aff)
|
||||
position_button.appendChild(click)
|
||||
|
||||
click.addEventListener("click",scoreCount)
|
||||
|
||||
|
||||
document.removeEventListener("click",firstClick)
|
||||
|
||||
augmenterScorePassivement()
|
||||
|
||||
}
|
||||
|
||||
|
392
js/main.js
|
@ -1,392 +0,0 @@
|
|||
let score = 0
|
||||
|
||||
// stoque les ameliorations deja disponibles dans le magasin pour ne pas le faire clignoter
|
||||
let magasin_tech = {}
|
||||
|
||||
let magasin_coll = {}
|
||||
|
||||
// stoquer les ameliorations deja achetees pour ne pas les afficher dans le magasin
|
||||
let sacado = {}
|
||||
|
||||
// premet de ne pas laisser le joueur acheter html 5 si il n'a pas débloqué html 1.0 etc..
|
||||
let evolution_tech = 0
|
||||
let evolution_coll = 0
|
||||
|
||||
// variable qui permet d'augmenter la taille de l'incrément du score pour chaque clic, en fonction de la technlologie déloquée
|
||||
let boost = 1
|
||||
|
||||
let revenu_passif = 0
|
||||
|
||||
|
||||
|
||||
async function remplirMagasinTechnologies(){
|
||||
|
||||
|
||||
const table= document.getElementById("table_magasin_technologies_body")
|
||||
|
||||
let data = await fetch("../bdd/arbre.json")
|
||||
data = await data.json()
|
||||
|
||||
|
||||
let tech = data["technologies"]
|
||||
|
||||
for(const key in tech){
|
||||
// ne va pas s'embeter à proecess si on a deja acheté l'amelioration
|
||||
if(!sacado[key] && !magasin_tech[key]){
|
||||
el = tech[key]
|
||||
|
||||
|
||||
|
||||
const tr = document.createElement("tr")
|
||||
const case_nom = document.createElement("td")
|
||||
case_nom.innerText = el.nom
|
||||
const case_boost = document.createElement("td")
|
||||
case_boost.innerText = el.boost
|
||||
const case_cout = document.createElement("td")
|
||||
case_cout.innerText = el.cout
|
||||
|
||||
const test = document.createElement("td")
|
||||
const btn_acheter = document.createElement("button")
|
||||
|
||||
|
||||
let t = new Technologie(el)
|
||||
|
||||
/* fonction qui va s'activer lorsqu'on achète l'objet*/
|
||||
btn_acheter.addEventListener("click", (event) =>{
|
||||
|
||||
|
||||
// ne laisse acheter que si on a l'argent
|
||||
if(score >= t.cout){
|
||||
|
||||
|
||||
// incrémente le score implicite d'evolution pour permettre à la prochaine amelioration de s'afficher
|
||||
evolution_tech += 1
|
||||
|
||||
// on améliore le style de la page :)
|
||||
t.appliquerAmeliorationStyle()
|
||||
|
||||
// et on ajouter l'amélioration dans l'abre des compétences débloquées
|
||||
sacado[key] = true
|
||||
|
||||
|
||||
|
||||
// on refresh le magasin pour enlever l'amelioration de la liste
|
||||
// vide le ventre du magasin
|
||||
table.innerHTML = ""
|
||||
magasin_tech = {}
|
||||
remplirMagasinTechnologies()
|
||||
|
||||
|
||||
// finalement, on lui débit son compte de points tel un vendeur de voitures
|
||||
score -= t.cout
|
||||
majAffichageScore()
|
||||
|
||||
// augmentation du boost d'incrément
|
||||
ouvrirAlerte("Incrémentation de la rentabilité de tes clicks de "+t.boost+" points !!")
|
||||
|
||||
if(t.props.evolution == 0){
|
||||
boost += t.boost -1 // car sinon, le premier boost ne va pas entrainer un nombre rond de points par click :)
|
||||
|
||||
}else{
|
||||
boost += t.boost
|
||||
}
|
||||
|
||||
}else{
|
||||
// PAS ASSEZ RICHE !!!!!
|
||||
ouvrirAlerte("PAS ASSEZ RICHE !!!!!!!!!!!!")
|
||||
}
|
||||
|
||||
|
||||
})
|
||||
|
||||
btn_acheter.innerText = "Acheter"
|
||||
|
||||
// n'afficher l'amélioration que si le score est assez élevé
|
||||
if((t.props.borne <= score) && (evolution_tech === parseInt(t.props.evolution))){
|
||||
ouvrirAlerte(tech[key]["narration"])
|
||||
// met à jour le contenu du magasin
|
||||
// pour ne pas re-afficher cette ligne et éviter un clignotement
|
||||
magasin_tech[key] = true
|
||||
|
||||
test.appendChild(btn_acheter)
|
||||
|
||||
|
||||
tr.appendChild(case_nom)
|
||||
tr.appendChild(case_boost)
|
||||
tr.appendChild(case_cout)
|
||||
tr.appendChild(test)
|
||||
|
||||
table.appendChild(tr)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
async function remplirMagasinCollegues(){
|
||||
|
||||
|
||||
const table= document.getElementById("table_magasin_collegues_body")
|
||||
|
||||
let data = await fetch("../bdd/arbre.json")
|
||||
data = await data.json()
|
||||
|
||||
|
||||
let collegues = data["collegues"]
|
||||
|
||||
for(const key in collegues){
|
||||
// ne va pas s'embeter à proecess si déjà présent dans le magasin
|
||||
// ou si le score d'évolution n'est pas assez élevé
|
||||
const el = collegues[key]
|
||||
if(!magasin_coll[key] && evolution_coll === parseInt(el.evolution)){
|
||||
|
||||
|
||||
|
||||
const tr = document.createElement("tr")
|
||||
const case_nom = document.createElement("td")
|
||||
case_nom.innerText = el.nom
|
||||
const case_boost = document.createElement("td")
|
||||
case_boost.innerText = el.revenu_passif
|
||||
const case_cout = document.createElement("td")
|
||||
case_cout.innerText = el.cout
|
||||
case_cout.id = "case_cout_"+key
|
||||
|
||||
// case contenant un lien vers la page wikipédia du personnage
|
||||
const case_wiki = document.createElement("td")
|
||||
let a = document.createElement("a")
|
||||
a.href = el.wikipedia
|
||||
a.innerText = el.nom
|
||||
case_wiki.appendChild(a)
|
||||
|
||||
|
||||
const action = document.createElement("td")
|
||||
const btn_acheter = document.createElement("button")
|
||||
|
||||
|
||||
let c = new Collegue(el)
|
||||
|
||||
|
||||
/* fonction qui va s'activer lorsqu'on achète l'objet*/
|
||||
btn_acheter.addEventListener("click", (event) =>{
|
||||
|
||||
// calcul du cout en fonction du nombre de collegue de ce type déjà acheté
|
||||
let exp = 0
|
||||
if(key in sacado){
|
||||
exp = sacado[key]
|
||||
}
|
||||
const cout_reel = Number(el.cout * (1.1)**exp).toFixed(1)
|
||||
|
||||
// ne laisse acheter que si on a l'argent
|
||||
if(score >= cout_reel){
|
||||
|
||||
|
||||
if(!(key in sacado)){
|
||||
|
||||
//lancer l'animation d'achat avec l'image correspondante
|
||||
let image = document.getElementById("image-collegue-animee")
|
||||
image.setAttribute("src",c.props.nom_fichier_image)
|
||||
// affiche l'image
|
||||
image.removeAttribute("hidden")
|
||||
|
||||
// PLUIE DE CONFETTTIIII
|
||||
genererConfetti()
|
||||
|
||||
|
||||
// recache l'image après 6 secondes et lance la narration
|
||||
setTimeout(() => {
|
||||
image.setAttribute("hidden",true)
|
||||
|
||||
// narration comme c'est la première fois qu'on achète
|
||||
|
||||
ouvrirAlerte("Vous avez débloqué "+ c.nom+" !!"+collegues[key]["narration"])
|
||||
ouvrirAlerte("Incrémentation de la rentabilité passive de "+c.revenu_passif+" points !!")
|
||||
|
||||
}, (4000));
|
||||
|
||||
// on ajoute l'amélioration dans l'abre des compétences débloquées
|
||||
sacado[key] = 1
|
||||
|
||||
// incrémente le score implicite d'evolution pour permettre à la prochaine amelioration de s'afficher
|
||||
evolution_coll += 1
|
||||
|
||||
}else{
|
||||
// on incrémente la qtt d'objet dans son sacado
|
||||
sacado[key] += 1
|
||||
}
|
||||
|
||||
// augmentation du boost d'incrément
|
||||
revenu_passif += c.revenu_passif
|
||||
|
||||
// finalement, on lui débit son compte de points tel un vendeur de voitures
|
||||
console.log(cout_reel)
|
||||
console.log(score)
|
||||
console.log(score-cout_reel)
|
||||
score = score - cout_reel
|
||||
majAffichageScore()
|
||||
|
||||
// on change le futur cout dans le tableau
|
||||
document.getElementById("case_cout_"+key).innerText = Number(c.cout * (1.1)**sacado[key]).toFixed(1)
|
||||
|
||||
|
||||
}else{
|
||||
// PAS ASSEZ RICHE !!!!!
|
||||
ouvrirAlerte("PAS ASSEZ RICHE !!!!!!!!!!!!")
|
||||
}
|
||||
|
||||
|
||||
})
|
||||
|
||||
btn_acheter.innerText = "Acheter"
|
||||
|
||||
// met à jour le contenu du magasin
|
||||
// pour ne pas re-afficher cette ligne et éviter un clignotement
|
||||
magasin_coll[key] = true
|
||||
|
||||
action.appendChild(btn_acheter)
|
||||
|
||||
|
||||
tr.appendChild(case_nom)
|
||||
tr.appendChild(case_boost)
|
||||
tr.appendChild(case_cout)
|
||||
tr.appendChild(case_wiki)
|
||||
tr.appendChild(action)
|
||||
|
||||
table.appendChild(tr)
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function majAffichageScore(){
|
||||
const score_aff = document.getElementById("score_affichage")
|
||||
score = Number((score).toFixed(1))
|
||||
score_aff.textContent ="SCORE : " + rendreNombreLisible(score)
|
||||
|
||||
}
|
||||
|
||||
// fonction appelée à chaque clic de souris
|
||||
function scoreCount(){
|
||||
score += boost
|
||||
majAffichageScore()
|
||||
// check refresh la table magasin pour afficher une amélioration si un palier est atteint
|
||||
remplirMagasinTechnologies()
|
||||
remplirMagasinCollegues()
|
||||
}
|
||||
|
||||
// revenu passif à chaque seconde
|
||||
|
||||
function augmenterScorePassivement(){
|
||||
score += revenu_passif
|
||||
majAffichageScore()
|
||||
setTimeout(() => {
|
||||
augmenterScorePassivement()
|
||||
}, 1000)
|
||||
}
|
||||
|
||||
function leBoostDuProf(){
|
||||
score += 10000000000000000
|
||||
majAffichageScore()
|
||||
}
|
||||
|
||||
|
||||
// fonction qui va creer plein d'elements confetti
|
||||
function genererConfetti() {
|
||||
|
||||
const container = document.getElementById("conteneur_confetti")
|
||||
|
||||
// couleurs des confetti à generer
|
||||
const colors = ["#FF5733", "#33FF57", "#3357FF", "#FF33A1", "#FFD633", "#A833FF", "#33FFF6"]
|
||||
|
||||
const nb_confetti = 150 // nombre de confettis
|
||||
|
||||
for (let i = 0; i < nb_confetti; i++) {
|
||||
|
||||
//créer un nouvel element de classe confetti
|
||||
const confetti = document.createElement("div")
|
||||
confetti.classList.add("confetti")
|
||||
|
||||
//prendre une couleur aléatoire dans la liste
|
||||
confetti.style.setProperty("background-color", colors[Math.floor(Math.random() * colors.length)])
|
||||
|
||||
// positionner le confetti à un endroit random horizontalement
|
||||
confetti.style.left = Math.random() * 100 + "vw"
|
||||
|
||||
// mettre une fraction de 5s pour faire un temps à l'écran assez naturel
|
||||
const longevite = Math.random() * 5
|
||||
confetti.style.animationDelay = longevite+"s"
|
||||
|
||||
// faire des confettis qui vont plus vite que d'autres
|
||||
confetti.style.animationDuration = 4 + Math.random() * 2 + "s"
|
||||
|
||||
// ajouter le confetti au container
|
||||
container.appendChild(confetti)
|
||||
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
// vide le conteneur à la fin pour ne pas surcharger la page d'elements
|
||||
container.innerHTML = ""
|
||||
}, 10000);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function rendreNombreLisible(n){
|
||||
let ret = n
|
||||
|
||||
if(n>=1000){
|
||||
const quantifiers = [
|
||||
"Millier", // 10^3
|
||||
"Million", // 10^6
|
||||
"Milliard", // 10^9
|
||||
"Billion", // 10^12
|
||||
"Billiard", // 10^15
|
||||
"Trillion", // 10^18
|
||||
"Trilliard", // 10^21
|
||||
"Quadrillion", // 10^24
|
||||
"Quadrilliard", // 10^27
|
||||
"Quintillion", // 10^30
|
||||
"Quintilliard", // 10^33
|
||||
"Sextillion", // 10^36
|
||||
"Sextilliard", // 10^39
|
||||
"Septillion", // 10^42
|
||||
"Septilliard", // 10^45
|
||||
"Octillion", // 10^48
|
||||
"Octilliard", // 10^51
|
||||
"Nonillion", // 10^54
|
||||
"Nonilliard", // 10^57
|
||||
"Décillion", // 10^60
|
||||
"Décilliard", // 10^63
|
||||
"Undécillion", // 10^66
|
||||
];
|
||||
// on enlève la virgule et la partie decimal pour ne pas
|
||||
// fausser la longueur du string
|
||||
const rpz_string = Number(n).toFixed(0)+""
|
||||
// les qualificatifs étant par puissance de mille,
|
||||
// compte la puissance de 10 mais divisée par 3
|
||||
const puiss_mil = Math.floor((rpz_string.length-1)/3)
|
||||
|
||||
// ici, on ne garde que jusqu'à la centaine de l'unité choisie
|
||||
// et on le met dans la variable de retour
|
||||
ret = Math.floor( n/(10**(3*puiss_mil)) )
|
||||
|
||||
// enfin, on rajoute le quantificateur, avec un 's' si on est pas à l'unité
|
||||
let q = " "+ quantifiers[puiss_mil -1]
|
||||
if(ret != 1){
|
||||
q +='s'
|
||||
}
|
||||
|
||||
ret += q
|
||||
|
||||
}
|
||||
|
||||
return ret
|
||||
|
||||
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
class Technologie{
|
||||
constructor(json) {
|
||||
this.props = json
|
||||
this.cout = this.props.cout
|
||||
this.boost = this.props.boost
|
||||
this.nom = this.props.nom
|
||||
}
|
||||
|
||||
appliquerAmeliorationStyle(){
|
||||
document.getElementById("alerte-css").setAttribute("href","css/alerte/a"+evolution_tech+".css")
|
||||
document.getElementById("link-css").setAttribute("href","css/"+this.props.css_id)
|
||||
}
|
||||
|
||||
|
||||
}
|
48
lisezmoi.md
|
@ -1,48 +0,0 @@
|
|||
# Projet de prog web
|
||||
|
||||
- A simple cookie clicker
|
||||
- but every power up is on a technologic tree of web
|
||||
- the interface becomes more and more fancy
|
||||
- you can unlock AI, coworkers, html elements ....
|
||||
|
||||
## Element properties
|
||||
- each element has its own passive or active boost
|
||||
- each element has a cost
|
||||
|
||||
## coworkers properties
|
||||
- each coworker bring its own passive income per second
|
||||
- the coworker are:
|
||||
Ada Lovelace
|
||||
George Boole
|
||||
Grace Hopper
|
||||
Jean Bartik
|
||||
Claude Shannon
|
||||
Alan Turing
|
||||
Margaret Hamilton
|
||||
Tim Berners-Lee
|
||||
Dennis Ritchie
|
||||
Linus Torvald
|
||||
|
||||
## Technologie properties
|
||||
- each technologies give a boost like double the gain per click.
|
||||
- the technologies are:
|
||||
HTML
|
||||
HTML+
|
||||
HTML 2.0
|
||||
HTML 3.2
|
||||
HTML 4.01
|
||||
XHTML 4.01
|
||||
XHTML 1.0
|
||||
HTML 5
|
||||
XHTML5
|
||||
|
||||
## TOUDOU
|
||||
- rajouter dans le html des elements invisibles qui pop petit à petit et s'améliorent
|
||||
- mettre des animations quand le score change de milier ( feu d'artifice ?)
|
||||
- vidéos
|
||||
- ne faire apparaitre les header du tableau qu'au premier clic
|
||||
- mettre un palier où des photos aparaissent à coté de chaque collegue dans le magasin
|
||||
|
||||
## Idée de con
|
||||
- Quand on débloque la balise vidéo , on rick roll le prof
|
||||
- Quand on débloque la sécurité , on a un capchat (on met juste une grosse image de chat) qui apparait
|