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 :
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)
Les 8 premiers résultats devraient être ceux-là :
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)
Question
Générez la liste des personnes par compréhension...
Indice
Le cours est disponible sur cette page !
Solution
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.
def survivantsClasse(classe):
"""
classe -- '1' , '2' ou '3'
renvoie la proportion de survivants de la classe classe.
"""
Indice
Une proportion nécessite d'avoir le nombre total de personnes dans la 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)}.")