Projet : La famille Fourlègnie aurait-elle survécu au naufrage du Titanic ?




Présentation du projet :

Vous allez travailler sur le jeu de données suivant (à télécharger): titanic.csv

Ce jeu de données contient des informations sur une partie des passagers (plus exactement sur 891 passagers) du Titanic. Pour un petit rappel historique, vous pouvez consulter la page Wikipédia consacrée à ce paquebot : ici



Ouvrez le fichier "titanic.csv" à l'aide d'un tableur.

Vous devriez obtenir quelque chose qui ressemble à ceci :

Trouvez la signification des différents descripteurs : "PassengerId", "Survived", "Pclass"... Aide : lien

L'objectif de ce projet est d'utiliser l'algorithme des k plus proches voisins afin de déterminer si les passagers ci-dessous auraient survécus au naufrage du Titanic.

Pclass Name Sex Age SibSp Parch Ticket Fare Embarked
2 Mr. Fourlegnie B. male 37 1 4 244377 21.075 C
2 Mrs. Fourlegnie C. female 36 1 4 244379 20.2175 C
2 Mrs. Fourlegnie M. female 11 3 2 244382 15.045 C
2 Mr. Fourlegnie R. male 8 3 2 244383 12.945 C
2 Mr. Fourlegnie M. male 4 3 2 137383 10.17 C
2 Mr. Fourlegnie G. male 1 3 2 3738 11.13 C

PARTIE 1 : Analyse des données (Data scientist)

Un travail de préparation des données va être nécessaire , vous allez donc devoir passer par quelques étapes que voici :

- Pour ceux qui ne souhaitent pas poursuivre la spécialité N.S.I vous pouvez opérer les changements directement avec le tableur.

- Pour ceux qui souhaitent poursuivre la spécialité N.S.I vous devez opérer les changements directement avec python.
(Ce script - lien - vous aidera faire les manipulations nécessaires)

  • Toutes les colonnes ne vont pas forcement être pertinentes, par exemple, d'après vous, lors du naufrage, le nom du passager a-t-il eu une quelconque importance sur le fait qu'il ait ou non survécu ? (nous ne tiendrons pas compte du fait que certaines personnes aient pu être privilégié au vu de leur nom de famille, sur les 891 passagers présents dans le fichier titanic.csv, ce phénomène est négligeable).


  • En analysant le contenu du fichier titanic.csv (par exemple à l'aide d'un tableur), choisissez les descripteurs ( c'est à dire les colonnes) qui vous paraissent les plus pertinents. Vous effacerez les colonnes qui vous semblent inutiles directement dans le tableur ou avec python pour obtenir un nouveau fichier titanic_V2.csv


    Indiquer ci-dessous le nom des descripteurs retenus et pour ceux qui poursuivre N.S.I écrire le code python utilisé.
    Mettre un lien vers le nouveau fichier titanic_V1.csv
    Pour ceux qui poursuivre N.S.I écrire le code python utilisé pour obtenir directement titanic_V1.csv à partir de titanic.csv

  • Pour certains passagers, il manque des données. Par exemple, l'âge de certains passagers n'est pas renseigné. Une solution est de supprimer du fichier les passagers ayant des données incomplètes.


  • Supprimer du fichier les passagers ayant des données incomplètes pour obtenir un nouveau fichier titanic_V2.csv


    Mettre un lien vers le nouveau fichier titanic_V2.csv
    Pour ceux qui poursuivre N.S.I écrire le code python utilisé pour obtenir directement titanic_V2.csv à partir de titanic_V1.csv

  • L'utilisation de l'algorithme des k plus proches voisins nous oblige à proscrire les données non numériques.
    Par exemple, la colonne "Sex" ne peut pas être utilisée telle quelle, l'algorithme n'est pas capable de traiter les "male" et "female".


  • Proposer une alternative pour remplacer les chaines de caracteres "male" et "female".
    Modifier certaines colonnes directement dans le tableur ou avec un script python pour obtenir un nouveau fichier titanic_V3.csv


    Mettre un lien vers le nouveau fichier titanic_V3.csv
    Pour ceux qui poursuivre N.S.I écrire le code python utilisé pour obtenir directement titanic_V3.csv à partir de titanic_V2.csv

  • Avec l'algorithme des k plus proches voisins nous sommes amenés à calculer des distances.
    Comparer l'amplitude des valeurs de la colonne Pclass avec l'amplitude des valeurs de la colonne Age.


  • Amplitude des valeurs de la colonne Pclass :
    Amplitude des valeurs de la colonne Age :


    Code python pour obtenir cette amplitude à partir de titanic_V3.csv :
    ...
  • Une des conséquence de l'observation précédente est que le calcul de la distance ne va pas traiter de facon égalitaire les colonnes.
    Pour rétablir l'équité nous allons procéder ainsi :
    Pour chaque colonne :
    1. On repère la valeur minimale (v_min) et la valeur maximale ( v_max)
    2. On va diviser chacune des valeurs de la colonne par la diffrence v_max-v_min
      Exemple : Si une colonne contient les valeurs [5,4,1,11,7]
      v_min=1 et v_max=11
      Alors on divise toutes les valeurs par 8 ce qui donne [0.5,0.4,0.1,1.1,0.7]
    Remarque :
    Toutes les valeurs de toutes les colonnes seront comprises entre 0 et 1.
    Cela nous garantie un traitement équitable entre les colonnes.


  • Faire les modifications nécessaires au fichier titanic_V3.csv pour garantir un équitable entre les colonnes. On nomera titanic_V4.csv le noveau fichier obtenu.


    Mettre un lien vers le nouveau fichier titanic_V4.csv Pour ceux qui poursuivre N.S.I écrire le code python utilisé pour obtenir directement titanic_V4.csv à partir de titanic_V3.csv


    A l'aide du TP sur les k plus proches voisins, (avec k=5) prédire quel(s) membre(s) de la famille Fourlegnie aurait(ent) survécu(s) au naufrage du Titanic ?


    Code python :
    ...
    ...
    ...
    ...
    ...
    Survivants : ...

    Efficacité de l'algorithme

    Pour déterminer la valeur de k qui provoque en moyenne le moins d'erreurs. On va procéder ainsi :
    Data=read_csv("titanic_V4.csv")
    
    1. On supprime le premier passager de Data (voir code ci-dessous)
    2. On recherche les k plus proches voisins du passager supprimé.
    3. On gagne un point si la prédiction est correcteet 0 sinon.

    On répéte le principe ci-dessus pour tous les passagers de Data en comptant le nombre de bonnes réponses.

    Remarque : Ce type d'algorithme est qualifié d' algorithme d'apprentissage.
    def supprimer(Data,eleve):
    	'''
    	param :  Data  est une list contenant des dictionnaires (caracteristiques des passagers)
    			passager un dictionnaire qui appartient à Data .
    	result : On supprime le dictionnaire  eleve  de Data et on renvoit la liste
        L=[]
        for element in Data:
            if element!=eleve:
                L.append(element)
        return L
    

    1. Compléter le tableau ci-dessous :
      Valeur de k Nombre de bonnes réponses
      1
      3
      5
      7
      9
      11
      13
      15
      17
      19
    2. Quel est le meilleur choix pour k ?
    3. Prédire quel(s) membre(s) de la famille Fourlegnie aurait(ent) survécu(s) au naufrage du Titanic en indiquant la fiabilité de votre prédiction.

    ...