Exploitation des données du Titanic...

Fichier utilisé

On utiliser le fichier titanic.csv suivant que l'on avait également utilisé lors de l'étude des dictionnaires. Celui-ci est une version allégée.

Attention, le séparateur de données est la tabulation, ne pas sélectionner la virgule comme séparateur à l'ouverture avec un tableur.

Légende

Signification des différentes colonnes du fichier :

  • PassengerId : identifiant du passager (on peut considérer par exemple qu'il s'agit de son numéro d'enregistrement, chaque passager a ainsi un identifiant différent de celui des autres passagers).

  • Survived : 0 signifie que le passager n'a pas survécu à l'accident, 1 qu'il a survécu.

  • Pclass : 1, 2 ou 3 (première classe, seconde classe ou troisième classe).

  • Name : nom du passager.

  • Sex.

  • Age.

  • SibSp : nombre de frères, soeurs (et conjoints) sur le bateau.

  • Parch : nombre de parents et enfants sur le bateau.

  • Ticket : numéro (code) du ticket passager.

  • Fare : prix du ticket.

  • Cabin : numéro de cabine.

  • Embarked : Port d'embarcation (C = Cherbourg, Q = Queenstown, S = Southampton).

Sélection multi-critères

Question

Écrire un script créant la liste des femmes de plus de 30 ans ayant survécu.

Indice

Pour faire des comparaisons, il faut transformer en entiers...

Solution

Une solution possible :

1
import csv
2
3
# ouverture en lecture du fichier csv
4
with open('titanic.csv', newline='') as fichier:
5
    # on crée un objet DictReader
6
    lecture = csv.DictReader(fichier, delimiter='\t')
7
    # transfo en liste
8
    lignes = list(lecture)
9
10
# on transforme en entiers les champs correspondants à des entiers
11
for personne in lignes:
12
    personne['Age'] = int(personne['Age'])
13
    personne['SibSp'] = int(personne['SibSp'])
14
    # et flottant:
15
    personne['Fare'] = float(personne['Fare'])
16
17
liste = []
18
for personne in lignes:
19
    if personne['Sex'] == 'female' and personne['Age'] > 30 and personne['Survived'] == '1':
20
        liste.append(personne['Name'])
21
22
# affichage
23
for personne in liste:
24
    print(personne)

Les 8 premiers résultats devraient être ceux-là :

1
Cumings, Mrs. John Bradley (Florence Briggs Thayer)
2
Futrelle, Mrs. Jacques Heath (Lily May Peel)
3
Bonnell, Miss. Elizabeth
4
Hewlett, Mrs. (Mary D Kingcome) 
5
Masselmani, Mrs. Fatima
6
Asplund, Mrs. Carl Oscar (Selma Augusta Emilia Johansson)
7
O'Dwyer, Miss. Ellen "Nellie"
8
Spencer, Mrs. William Augustus (Marie Eugenie)

Question

Générez la liste des personnes par compréhension...

Indice

Le cours est disponible sur cette page !

Solution

1
liste = [personne['Name'] for personne in lignes if personne['Sex'] == 'female' and personne['Age'] > 30 and personne['Survived'] == '1']

Calculs de statistiques

Avec Python, il est donc facile de faire des traitements et des statistiques...

Question

Écrire un code possible pour le corps de la fonction suivante qui renvoie donc la proportion de survivants de la classe classe.

1
def survivantsClasse(classe):
2
    """
3
    classe -- '1' , '2' ou '3'
4
5
    renvoie la proportion de survivants de la classe classe.
6
    """

Indice

Une proportion nécessite d'avoir le nombre total de personnes dans la classe...

Solution

1
import csv
2
3
# ouverture en lecture du fichier csv
4
with open('titanic.csv', newline='') as fichier:
5
    # on crée un objet DictReader
6
    lecture = csv.DictReader(fichier, delimiter='\t')
7
    # transfo en liste
8
    lignes = list(lecture)
9
10
# on transforme en entiers les champs entiers
11
for personne in lignes:
12
    personne['Age'] = int(personne['Age'])
13
    personne['SibSp'] = int(personne['SibSp'])
14
    # et flottant:
15
    personne['Fare'] = float(personne['Fare'])
16
17
def survivantsClasse(classe):
18
    """
19
    classe -- '1' , '2' ou '3'
20
21
    renvoie la proportion de survivants de la classe classe.
22
    """
23
    compteurClasse = 0
24
    compteurSurvivant = 0
25
    for personne in lignes:
26
        if personne['Pclass'] == classe:  
27
            compteurClasse += 1
28
            if personne['Survived'] == '1': compteurSurvivant += 1
29
    return compteurSurvivant/compteurClasse
30
31
for classe in ('1', '2', '3'):
32
    print(f"La proportion de survivants de la classe {classe}: {survivantsClasse(classe)}.")