Voici les questions auxquelles on devrait répondre :

  1. Est-ce que ce sont les passagers de la première classe qui ont le plus survécu ?
  2. Est-ce que les gens qui ont survécu sont plus:
    • des femmes ?
    • des enfants ?
    • des hommes ?
    • des riches ?
  3. Est-ce que le nombre de passagers femmes survécus est plus grand que le nombre des hommes ?
  4. Est ce qu’il y a une corrélation entre les Pclass et le prix de ticket ?
  5. Y a-t-il une corrélation entre la survie et le fait d’avoir à bord:
    • les parents ?
    • les conjoints ?
  6. Les femmes, ont-elles été plus représentées dans la première classe ?
  7. Les femmes, ont-elles été plus souvent accompagnées que les hommmes ?
  8. Comment peut-on clasteriser les facteurs qui varient ensemble ?

Importation des données

On importe les données.

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

Nettoyage des données

On retire la variable Cabin car elle n’est pas très utile pour répondre aux questions et contient beaucoup de données manquantes.

titanic<-titanic%>%dplyr::select(-Cabin)

On retire les valeurs manquantes:

titanic <- titanic %>% na.omit()

Il reste donc 1043 observations, comme indiqué dans l’énoncé.

nrow(titanic)
## [1] 1043

Evacuons les survivants…

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.

Classe et survie

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")

Les déces et les survies en fonction de la classe.

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

Sexe et survie

  • Sans prendre en compte Pclass, on a plus de femmes survécues que les hommes.
ggplot(survived, aes(x=Sex, fill=Survived))+geom_bar(aes(y = (..count..)/sum(..count..)*100))+labs(y= "% des survivants")

  • Sachant qu’on avait beaucoup plus d’hommes à bord du paquebot.
ggplot(titanic, aes(x = Sex)) + geom_bar(aes(y = (..count..)/sum(..count..)*100))+labs(y= "% de passagers")

Les déces et les survies en fonction du sexe.

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

Corrélations.

On sélectionne les variables numériques sauf l’identifiant du passager.
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

  • Les variables positivement corrélées avec la survie sont: le tarif payé (0.238) et la présence des parents à bord (0.116).
  • Les variables anticorrélées avec la survie sont: le numéro de classe (-0.279) et l’âge (-0.056).
  • Il n’y a quasiment pas de corrélation entre la survie et la présence d’époux (0.012).

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é.

ACP

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.

  • L’axe 1 oppose le prix de ticket (Fare) et la classe des passager à bord (Pclass).
  • L’axe 2 correspond au nombre d’époux, parents, frères ou de soeurs à bord.
fviz_pca_var(res.pca,axes=c(3,4),col.var="cos2")

  • L’axe 3 oppose les survivants.
  • L’axe 4 oppose la présence des parents et la présence des époux présents à bord.

Graphe des individus

Dimensions 1 et 2

fviz_pca_ind(res.pca,col.ind = as.factor(titanic$Sex),axes=1:2, legend.title = "Sexe", geom = "point")

Dimensions 3 et 4

fviz_pca_ind(res.pca,col.ind = as.factor(titanic$Sex),axes=3:4, legend.title = "Sexe", geom = "point")

Le biplot: une aide à l’interprétation

Dimension 1 et 2

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é).

Dimension 3 et 4

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.

Classification.

Centrage réduction des données pour éviter que les variables à forte variance pèsent indûment sur les résultats
titanic.cr <- scale(t(titanic.numVarsExceptPassengerId), center =T, scale = T )
Matrice des distances entre individus
d.titanic <- dist(titanic.cr,method = "euclidean")
Critère de Ward
titanic.ward <- hclust(d.titanic,method="ward.D2")
Affichage de dendrogramme
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.