3. Dades d’un naufragi

El fitxer titanic.csv conté les dades dels passatgers del Titanic, el famós vaixell transatlàntic que l’any 1912 es va enfonsar en el seu viatge inaugural en xocar amb un iceberg. Si llegim aquest fitxer mitjançant la següent comanda de pandas, obtenim un pandas.DataFrame com aquest:

>>> import pandas as pd
>>> df = pd.read_csv('titanic.csv').set_index('PassengerId')
>>> df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 891 entries, 1 to 891
Data columns (total 8 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   Survived  891 non-null    bool   
 1   Pclass    891 non-null    int64  
 2   Name      891 non-null    object 
 3   Sex       891 non-null    object 
 4   Age       714 non-null    float64
 5   Ticket    891 non-null    object 
 6   Fare      891 non-null    float64
 7   Cabin     204 non-null    object 
dtypes: bool(1), float64(2), int64(1), object(4)
memory usage: 56.6+ KB

Descarregueu-vos el fitxer titanic.csv, proveu de llegir-lo en l’intèrpret de Python tal com s’indica en l’exemple de més amunt i examineu les columnes que conté. Observeu que les columnes Age i Cabin contenen valors desconeguts. La columna Pclass conté un nombre entre 1 i 3 que indica la classe en la qual viatjaven els passatgers i la columna Fare conté el preu del bitllet.

Les funcions que es demanen a continuació han de treballar amb un DataFrame qualsevol amb la mateixa estructura (índex numèric ordenat i columnes), però no necessàriament el mateix de l’exemple, poden correspondre a les dades dels passatgers de qualsevol vaixell.

3.1. Funció preu_max (2 punts)

Al mòdul naufragi (fitxer naufragi.py), implementeu-hi la funció següent:

naufragi.preu_max(df, pclass)
Paràmetres:
  • df (DataFrame) – Dataframe amb les dades d’un accident marítim com el descrit

  • pclass (int) – Valor d’una classe dels passatgers (1, 2 o 3)

Retorna:

Tupla amb el nom i el preu del bitllet del passatger que més va pagar viatjant en la classe pclass.

Per exemple,


>>> df = pd.read_csv('titanic.csv').set_index('PassengerId')
>>> preu_max(df, 1)
('Ward, Miss. Anna', 512.3292)
>>> preu_max(df, 2)
('Hood, Mr. Ambrose Jr', 73.5)
>>> preu_max(df, 3)
('Sage, Master. Thomas Henry', 69.55)
 

Disposeu de més jocs de proves al fitxer tests-preumax.txt.

3.2. Funció supervivencia (1.5 punts)

Al mateix mòdul naufragi (fitxer naufragi.py), implementeu-hi la funció següent:

naufragi.supervivencia(df, sex, pclass, edat1, edat2)
Paràmetres:
  • df (DataFrame) – Dataframe amb les dades d’un accident marítim com el descrit

  • sex (str) – Sexe dels passatgers ('male' o 'female')

  • pclass (int) – Classe dels passatgers (1, 2 o 3)

  • edat1 (int) – Edat mínima dels passatgers

  • edat2 (int) – Edat màxima dels passatgers

Retorna:

Tupla amb tres enters:

  • nombre de passatgers del sexe sex, classe pclass i edat compresa entre edat1 i edat2 (ambdues incloses)

  • total de supervivents d’aquestes característiques

  • nombre de passatgers d’aquestes característiques que no van sobreviure

Com deveu haver observat, pot haver-hi passatgers de qui se’n desconegui l’edat. En previsió, en el cas que edat1 sigui un nombre negatiu, aquesta funció retornarà aquests tres valors (nombre total de passatgers, supervivents i morts) del sexe i classe indicats però d’edat desconeguda.

Per exemple,


>>> df = pd.read_csv('titanic.csv').set_index('PassengerId')
>>> supervivencia(df, 'female', 1, 20, 50)
(58, 56, 2)
>>> supervivencia(df, 'male', 3, 30, 61)
(85, 10, 75)
>>> supervivencia(df, 'female', 3, -1, 0)
(42, 25, 17)
 

Disposeu de més jocs de proves al fitxer tests-supervivencia.txt.