setwd('D:\\Downloads\\Cours M2\\Data Mining\\seance4\\Titanic')
titanic=read.table("Titanic.csv",sep=";",header=TRUE,na.strings=c(""),dec=",")
summary(titanic)
## PassengerId Survived Pclass
## Min. : 1 Min. :0.0000 Min. :1.000
## 1st Qu.: 328 1st Qu.:0.0000 1st Qu.:2.000
## Median : 655 Median :0.0000 Median :3.000
## Mean : 655 Mean :0.3774 Mean :2.295
## 3rd Qu.: 982 3rd Qu.:1.0000 3rd Qu.:3.000
## Max. :1309 Max. :1.0000 Max. :3.000
##
## Name Sex Age
## Connolly, Miss. Kate : 2 female:466 Min. : 0.17
## Kelly, Mr. James : 2 male :843 1st Qu.:21.00
## Abbing, Mr. Anthony : 1 Median :28.00
## Abbott, Master. Eugene Joseph : 1 Mean :29.88
## Abbott, Mr. Rossmore Edward : 1 3rd Qu.:39.00
## Abbott, Mrs. Stanton (Rosa Hunt): 1 Max. :80.00
## (Other) :1301 NA's :263
## SibSp Parch Ticket Fare
## Min. :0.0000 Min. :0.000 CA. 2343: 11 Min. : 0.000
## 1st Qu.:0.0000 1st Qu.:0.000 1601 : 8 1st Qu.: 7.896
## Median :0.0000 Median :0.000 CA 2144 : 8 Median : 14.454
## Mean :0.4989 Mean :0.385 3101295 : 7 Mean : 33.295
## 3rd Qu.:1.0000 3rd Qu.:0.000 347077 : 7 3rd Qu.: 31.275
## Max. :8.0000 Max. :9.000 347082 : 7 Max. :512.329
## (Other) :1261 NA's :1
## Cabin Embarked
## C23 C25 C27 : 6 C :270
## B57 B59 B63 B66: 5 Q :123
## G6 : 5 S :914
## B96 B98 : 4 NA's: 2
## C22 C26 : 4
## (Other) : 271
## NA's :1014
titanic<-titanic%>%dplyr::select(-Cabin)
titanic <- titanic %>% na.omit()
nrow(titanic)
## [1] 1043
survived <- titanic %>% filter(Survived=="1")
#le nombre de colonnes
ncol(titanic)
## [1] 11
#la dimension de la table
dim(titanic)
## [1] 1043 11
#Descriptif détaillé et valeurs des première variables
str(titanic)
## 'data.frame': 1043 obs. of 11 variables:
## $ PassengerId: int 1 2 3 4 5 7 8 9 10 11 ...
## $ Survived : int 0 1 1 1 0 0 0 1 1 1 ...
## $ Pclass : int 3 1 3 1 3 1 3 3 2 3 ...
## $ Name : Factor w/ 1307 levels "Abbing, Mr. Anthony",..: 156 287 531 430 23 775 922 613 855 1075 ...
## $ Sex : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 1 1 1 ...
## $ Age : num 22 38 26 35 35 54 2 27 14 4 ...
## $ SibSp : int 1 1 0 1 0 0 3 0 1 1 ...
## $ Parch : int 0 0 0 0 0 0 1 2 0 1 ...
## $ Ticket : Factor w/ 929 levels "110152","110413",..: 721 817 915 66 650 110 542 478 175 840 ...
## $ Fare : num 7.25 71.28 7.92 53.1 8.05 ...
## $ Embarked : Factor w/ 3 levels "C","Q","S": 3 1 3 3 3 3 3 3 1 3 ...
## - attr(*, "na.action")= 'omit' Named int 6 18 20 27 29 30 32 33 37 43 ...
## ..- attr(*, "names")= chr "6" "18" "20" "27" ...
survived %>% group_by(Pclass) %>% count()
## # A tibble: 3 x 2
## # Groups: Pclass [3]
## Pclass n
## <int> <int>
## 1 1 168
## 2 2 112
## 3 3 135
#nombre de survivant de la première classe est 168
#nombre de survivant de la seconde classe est 112
#nombre de survivant de la troisième classe est 135
Analyse : On a plus de survécus en première classe qu’en deuxième ou troisième. Par contre, plus de survécus en troisième qu’en deuxième classe.
La troisième classe transportait plus de passagers que la deuxième ou la première.
ggplot(titanic, aes(x = Pclass)) + geom_bar()+labs(y= "Nombre de passagers")
Parmis les survivants, les plus nombreux sont ceux qui étaient dans la première classe.
ggplot(survived, aes(x = Pclass, fill=Survived)) + geom_bar(aes(y = (..count..)/sum(..count..)*100))+labs(y= "% des survivants")
ggbar <- ggplot(titanic) + geom_bar(stat = "count", )
ggbar + aes(x = factor(Pclass, labels = c("Classe1", "Classe2", "Classe3")),
fill = factor(Survived, labels = c("Décédé", "Survecu"))) +
guides(fill=guide_legend(title=NULL)) +
ylab(NULL) +
xlab(NULL)
La plupart des passagers ayant choisi la première classe ont survecu, ce qui n’est pas le cas dans les classes 2 et 3.
Réponse à la question 1: le pourcentage des passagers survecus par classe a été le plus élevé dans la première classe. Mais attention, la plupart des personnes survecues n’étaient pas dans la première classe.
#survivants de la première classe:
nrow(subset(survived,Pclass==1))
## [1] 168
#survivants des autres classes:
nrow(subset(survived,Pclass>1))
## [1] 247
ggplot(survived, aes(x=Sex, fill=Survived))+geom_bar(aes(y = (..count..)/sum(..count..)*100))+labs(y= "% des survivants")
ggplot(titanic, aes(x = Sex)) + geom_bar(aes(y = (..count..)/sum(..count..)*100))+labs(y= "% de passagers")
ggbar <- ggplot(titanic) + geom_bar(stat = "count", )
ggbar + aes(x = factor(Sex, labels = c("Femmes", "Hommes")),
fill = factor(Survived, labels = c("Décédé", "Survecu"))) +
guides(fill=guide_legend(title=NULL)) +
ylab(NULL) +
xlab(NULL)
Réponse à la question 2, 3: ce sont les femmes qui ont le plus survecu, tant en pourcentage qu’en nombre absolu de personnes.
survived %>% group_by(Sex) %>% count()
## # A tibble: 2 x 2
## # Groups: Sex [2]
## Sex n
## <fct> <int>
## 1 female 322
## 2 male 93
titanic.numVarsExceptPassengerId <- titanic %>% dplyr::select_if(., is.numeric)%>% dplyr::select(-PassengerId)
correlation <- titanic.numVarsExceptPassengerId %>% cor()
kable(correlation,digits=3)
| Survived | Pclass | Age | SibSp | Parch | Fare | |
|---|---|---|---|---|---|---|
| Survived | 1.000 | -0.279 | -0.056 | 0.012 | 0.116 | 0.238 |
| Pclass | -0.279 | 1.000 | -0.409 | 0.046 | 0.016 | -0.565 |
| Age | -0.056 | -0.409 | 1.000 | -0.242 | -0.149 | 0.177 |
| SibSp | 0.012 | 0.046 | -0.242 | 1.000 | 0.374 | 0.142 |
| Parch | 0.116 | 0.016 | -0.149 | 0.374 | 1.000 | 0.218 |
| Fare | 0.238 | -0.565 | 0.177 | 0.142 | 0.218 | 1.000 |
#Diagramme de corrélations
correlation %>% corrplot
Réponse à la question 2 (suite): le fait d’être riche (ou, strictement parlant, d’avoir payé un tarif plus élevé) est positivement corrélé avec la survie.
Réponse à la question 4: la corrélation inverse entre la classe et le prix du ticket est forte.
Réponse à la question 5: les personnes accompagnées d’au moins un parent ont eu plus de chances de survivre.
NB: La corrélation n’implique pas la causalité.
Les variables ne sont pas de même nature et ont des variances différentes. On va faire une ACP normée.
res.pca <-PCA(titanic.numVarsExceptPassengerId,scale.unit = TRUE,ncp = 10,graph=FALSE)
fviz_eig(res.pca, addlabels = TRUE)
On pousse jusqu’à 3-4 axes car si on en garde que 1-2 (en application du critère de coude) on a la variable Survived qui n’est pas bien représentée sur les axes 1-2.
res.pca=PCA(titanic.numVarsExceptPassengerId,scale.unit = TRUE,ncp = 4 ,graph=FALSE)
fviz_pca_var(res.pca,axes=c(1,2),col.var="cos2")
Ce sercle confirme la corrélation positive entre la survie (Survived) et le prix de ticket (Fare) malgré le fait que la variable de survie soit mal représentée car son cos est inférieur à 0.4.
fviz_pca_var(res.pca,axes=c(3,4),col.var="cos2")
fviz_pca_ind(res.pca,col.ind = as.factor(titanic$Sex),axes=1:2, legend.title = "Sexe", geom = "point")
fviz_pca_ind(res.pca,col.ind = as.factor(titanic$Sex),axes=3:4, legend.title = "Sexe", geom = "point")
fviz_pca_biplot(res.pca,col.ind = as.factor(titanic$Sex),legend.title = "Sexe",axes=c(1,2),gradient.cols =c("#00AFBB", "#E7B800", "#FC4E07"),repel = TRUE, geom = "point")
Réponse à la question 6: les femmes étaient plus représentées dans la première classe (et on voit aussi qu’elles ont payé un tarif plus élevé).
fviz_pca_biplot(res.pca,col.ind = as.factor(titanic$Sex),legend.title = "Sexe",axes=c(3,4),gradient.cols =c("#00AFBB", "#E7B800", "#FC4E07"),repel = TRUE, geom = "point")
Réponse à la question 7: les femmes ont été plus souvent accompagnées que les hommes.
titanic.cr <- scale(t(titanic.numVarsExceptPassengerId), center =T, scale = T )
d.titanic <- dist(titanic.cr,method = "euclidean")
titanic.ward <- hclust(d.titanic,method="ward.D2")
plot(titanic.ward)
fviz_dend(titanic.ward,k=6,palette="jco",rect = TRUE, rect_fill = TRUE,# Rectangle autour des groupes
rect_border = "jco",labels_track_height = 30)
Réponse à la question 8: on voit que:
l’age est dans le même groupe des facteurs que le tarif (plus on est âgé, plus on paie cher) ;
le tarif est diamétralement opposé à la classe ;
l’accompagnement par un conjoint est opposé à l’accompagnement par des parents, mais les deux sont associés à la survie.