Aller au contenu

Exercices sur la base titanic

On utilise ici ce fichier titanic.csv.

Commencez par lire le descriptif de ce fichier dans cette page avant de chercher à répondre aux questions.

Sélection multi-critères

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

Solution
import csv




# ouverture en lecture du fichier csv
with open('titanic.csv', newline='') as fichier:
    # on crée un objet DictReader
    lecture = csv.DictReader(fichier, delimiter='\t')
    # transfo en liste
    lignes = list(lecture)



# on transforme en entiers les champs correspondants à des entiers
for personne in lignes:
    personne['Age'] = int(personne['Age'])
    personne['SibSp'] = int(personne['SibSp'])
    # et flottant:
    personne['Fare'] = float(personne['Fare'])





liste = []
for personne in lignes:
    if personne['Sex'] == 'female' and personne['Age'] > 30 and personne['Survived'] == '1':
        liste.append(personne['Name'])




# affichage
for personne in liste:
    print(personne)

Remarque:
la liste peut être générée en une ligne (par compréhension):

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

On obtient:

Cumings, Mrs. John Bradley (Florence Briggs Thayer)
Futrelle, Mrs. Jacques Heath (Lily May Peel)
Bonnell, Miss. Elizabeth
Hewlett, Mrs. (Mary D Kingcome) 
Masselmani, Mrs. Fatima
Asplund, Mrs. Carl Oscar (Selma Augusta Emilia Johansson)
O'Dwyer, Miss. Ellen "Nellie"
Spencer, Mrs. William Augustus (Marie Eugenie)
Glynn, Miss. Mary Agatha
O'Driscoll, Miss. Bridget
Harper, Mrs. Henry Sleeper (Myna Haxtun)
Icard, Miss. Amelie
McDermott, Miss. Brigdet Delia
Backstrom, Mrs. Karl Alfred (Maria Mathilda Gustafsson)
Doling, Mrs. John T (Ada Julia Bone)
Moran, Miss. Bertha
Webber, Miss. Susan
Peter, Miss. Anna

Calculs de statistiques

Écrire un code possible pour le corps de la fonction suivante:

def survivantsClasse(classe):
    """
    classe -- '1' , '2' ou '3'

    renvoie la proportion de survivants de la classe classe.
    """
Solution
import csv




# ouverture en lecture du fichier csv
with open('titanic.csv', newline='') as fichier:
    # on crée un objet DictReader
    lecture = csv.DictReader(fichier, delimiter='\t')
    # transfo en liste
    lignes = list(lecture)



# on transforme en entiers les champs entiers
for personne in lignes:
    personne['Age'] = int(personne['Age'])
    personne['SibSp'] = int(personne['SibSp'])
    # et flottant:
    personne['Fare'] = float(personne['Fare'])



def survivantsClasse(classe):
    """
    classe -- '1' , '2' ou '3'

    renvoie la proportion de survivants de la classe classe.
    """
    compteurClasse = 0
    compteurSurvivant = 0
    for personne in lignes:
        if personne['Pclass'] == classe:  
            compteurClasse += 1
            if personne['Survived'] == '1': compteurSurvivant += 1
    return compteurSurvivant/compteurClasse



for classe in ('1', '2', '3'):
    print(f"La proportion de survivants de la classe {classe}: {survivantsClasse(classe)}.")