Ejercicio

El fichero titanic.csv contiene información sobre los pasajeros del Titanic. Escribir un programa con los siguientes requisitos:

  1. Generar un DataFrame con los datos del fichero.
  2. Mostrar por pantalla las dimensiones del DataFrame, el número de datos que contiene, los nombres de sus columnas y filas, los tipos de datos de las columnas, las 10 primeras filas y las 10 últimas filas.
  3. Mostrar por pantalla los datos del pasajero con identificador 148.
  4. Mostrar por pantalla las filas pares del DataFrame.
  5. Mostrar por pantalla los nombres de las personas que iban en primera clase ordenadas alfabéticamente.
  6. Mostrar por pantalla el porcentaje de personas que sobrevivieron y murieron.
  7. Mostrar por pantalla el porcentaje de personas que sobrevivieron en cada clase.
  8. Eliminar del DataFrame los pasajeros con edad desconocida.
  9. Mostrar por pantalla la edad media de las mujeres que viajaban en cada clase.
  10. Añadir una nueva columna booleana para ver si el pasajero era menor de edad o no.
  11. Mostrar por pantalla el porcentaje de menores y mayores de edad que sobrevivieron en cada clase.

Solución


In [1]:
import pandas as pd

# Generar un DataFrame con los datos del fichero.
titanic = pd.read_csv('https://raw.githubusercontent.com/asalber/asalber.github.io/master/python/ejercicios/soluciones/pandas/titanic.csv', index_col=0)

print(titanic)


Survived  Pclass  \
PassengerId                     
1                   0       3   
2                   1       1   
3                   1       3   
4                   1       1   
5                   0       3   
...               ...     ...   
887                 0       2   
888                 1       1   
889                 0       3   
890                 1       1   
891                 0       3   

                                                          Name     Sex   Age  \
PassengerId                                                                    
1                                      Braund, Mr. Owen Harris    male  22.0   
2            Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0   
3                                       Heikkinen, Miss. Laina  female  26.0   
4                 Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0   
5                                     Allen, Mr. William Henry    male  35.0   
...                                                        ...     ...   ...   
887                                      Montvila, Rev. Juozas    male  27.0   
888                               Graham, Miss. Margaret Edith  female  19.0   
889                   Johnston, Miss. Catherine Helen "Carrie"  female   NaN   
890                                      Behr, Mr. Karl Howell    male  26.0   
891                                        Dooley, Mr. Patrick    male  32.0   

             SibSp  Parch            Ticket     Fare Cabin Embarked  
PassengerId                                                          
1                1      0         A/5 21171   7.2500   NaN        S  
2                1      0          PC 17599  71.2833   C85        C  
3                0      0  STON/O2. 3101282   7.9250   NaN        S  
4                1      0            113803  53.1000  C123        S  
5                0      0            373450   8.0500   NaN        S  
...            ...    ...               ...      ...   ...      ...  
887              0      0            211536  13.0000   NaN        S  
888              0      0            112053  30.0000   B42        S  
889              1      2        W./C. 6607  23.4500   NaN        S  
890              0      0            111369  30.0000  C148        C  
891              0      0            370376   7.7500   NaN        Q  

[891 rows x 11 columns]

In [2]:
# Mostrar por pantalla las dimensiones del DataFrame, el número de datos que contiene, los nombres de sus columnas y filas, los tipos de datos de las columnas, las 10 primeras filas y las 10 últimas filas.
print('Dimensiones:', titanic.shape)
print('Número de elemntos:', titanic.size)
print('Nombres de columnas:', titanic.columns)
print('Nombres de filas:', titanic.index)
print('Tipos de datos:\n', titanic.dtypes)
print('Primeras 10 filas:\n', titanic.head(10))
print('Últimas 10 filas:\n', titanic.tail(10))


Dimensiones: (891, 11)
Número de elemntos: 9801
Nombres de columnas: Index(['Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket',
       'Fare', 'Cabin', 'Embarked'],
      dtype='object')
Nombres de filas: Int64Index([  1,   2,   3,   4,   5,   6,   7,   8,   9,  10,
            ...
            882, 883, 884, 885, 886, 887, 888, 889, 890, 891],
           dtype='int64', name='PassengerId', length=891)
Tipos de datos:
 Survived      int64
Pclass        int64
Name         object
Sex          object
Age         float64
SibSp         int64
Parch         int64
Ticket       object
Fare        float64
Cabin        object
Embarked     object
dtype: object
Primeras 10 filas:
              Survived  Pclass  \
PassengerId                     
1                   0       3   
2                   1       1   
3                   1       3   
4                   1       1   
5                   0       3   
6                   0       3   
7                   0       1   
8                   0       3   
9                   1       3   
10                  1       2   

                                                          Name     Sex   Age  \
PassengerId                                                                    
1                                      Braund, Mr. Owen Harris    male  22.0   
2            Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0   
3                                       Heikkinen, Miss. Laina  female  26.0   
4                 Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0   
5                                     Allen, Mr. William Henry    male  35.0   
6                                             Moran, Mr. James    male   NaN   
7                                      McCarthy, Mr. Timothy J    male  54.0   
8                               Palsson, Master. Gosta Leonard    male   2.0   
9            Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)  female  27.0   
10                         Nasser, Mrs. Nicholas (Adele Achem)  female  14.0   

             SibSp  Parch            Ticket     Fare Cabin Embarked  
PassengerId                                                          
1                1      0         A/5 21171   7.2500   NaN        S  
2                1      0          PC 17599  71.2833   C85        C  
3                0      0  STON/O2. 3101282   7.9250   NaN        S  
4                1      0            113803  53.1000  C123        S  
5                0      0            373450   8.0500   NaN        S  
6                0      0            330877   8.4583   NaN        Q  
7                0      0             17463  51.8625   E46        S  
8                3      1            349909  21.0750   NaN        S  
9                0      2            347742  11.1333   NaN        S  
10               1      0            237736  30.0708   NaN        C  
Últimas 10 filas:
              Survived  Pclass                                      Name  \
PassengerId                                                               
882                 0       3                        Markun, Mr. Johann   
883                 0       3              Dahlberg, Miss. Gerda Ulrika   
884                 0       2             Banfield, Mr. Frederick James   
885                 0       3                    Sutehall, Mr. Henry Jr   
886                 0       3      Rice, Mrs. William (Margaret Norton)   
887                 0       2                     Montvila, Rev. Juozas   
888                 1       1              Graham, Miss. Margaret Edith   
889                 0       3  Johnston, Miss. Catherine Helen "Carrie"   
890                 1       1                     Behr, Mr. Karl Howell   
891                 0       3                       Dooley, Mr. Patrick   

                Sex   Age  SibSp  Parch            Ticket     Fare Cabin  \
PassengerId                                                                
882            male  33.0      0      0            349257   7.8958   NaN   
883          female  22.0      0      0              7552  10.5167   NaN   
884            male  28.0      0      0  C.A./SOTON 34068  10.5000   NaN   
885            male  25.0      0      0   SOTON/OQ 392076   7.0500   NaN   
886          female  39.0      0      5            382652  29.1250   NaN   
887            male  27.0      0      0            211536  13.0000   NaN   
888          female  19.0      0      0            112053  30.0000   B42   
889          female   NaN      1      2        W./C. 6607  23.4500   NaN   
890            male  26.0      0      0            111369  30.0000  C148   
891            male  32.0      0      0            370376   7.7500   NaN   

            Embarked  
PassengerId           
882                S  
883                S  
884                S  
885                S  
886                Q  
887                S  
888                S  
889                S  
890                C  
891                Q  

In [4]:
# Mostrar por pantalla los datos del pasajero con identificador 148
print(titanic.loc[148])


Survived                                   0
Pclass                                     3
Name        Ford, Miss. Robina Maggie "Ruby"
Sex                                   female
Age                                        9
SibSp                                      2
Parch                                      2
Ticket                            W./C. 6608
Fare                                  34.375
Cabin                                    NaN
Embarked                                   S
Name: 148, dtype: object

In [5]:
# Mostrar por pantalla las filas pares del DataFrame.
print(titanic.iloc[range(0,titanic.shape[0],2)])


Survived  Pclass  \
PassengerId                     
1                   0       3   
3                   1       3   
5                   0       3   
7                   0       1   
9                   1       3   
...               ...     ...   
883                 0       3   
885                 0       3   
887                 0       2   
889                 0       3   
891                 0       3   

                                                          Name     Sex   Age  \
PassengerId                                                                    
1                                      Braund, Mr. Owen Harris    male  22.0   
3                                       Heikkinen, Miss. Laina  female  26.0   
5                                     Allen, Mr. William Henry    male  35.0   
7                                      McCarthy, Mr. Timothy J    male  54.0   
9            Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)  female  27.0   
...                                                        ...     ...   ...   
883                               Dahlberg, Miss. Gerda Ulrika  female  22.0   
885                                     Sutehall, Mr. Henry Jr    male  25.0   
887                                      Montvila, Rev. Juozas    male  27.0   
889                   Johnston, Miss. Catherine Helen "Carrie"  female   NaN   
891                                        Dooley, Mr. Patrick    male  32.0   

             SibSp  Parch            Ticket     Fare Cabin Embarked  
PassengerId                                                          
1                1      0         A/5 21171   7.2500   NaN        S  
3                0      0  STON/O2. 3101282   7.9250   NaN        S  
5                0      0            373450   8.0500   NaN        S  
7                0      0             17463  51.8625   E46        S  
9                0      2            347742  11.1333   NaN        S  
...            ...    ...               ...      ...   ...      ...  
883              0      0              7552  10.5167   NaN        S  
885              0      0   SOTON/OQ 392076   7.0500   NaN        S  
887              0      0            211536  13.0000   NaN        S  
889              1      2        W./C. 6607  23.4500   NaN        S  
891              0      0            370376   7.7500   NaN        Q  

[446 rows x 11 columns]

In [12]:
# Mostrar los nombres de las personas que iban en primera clase ordenadas alfabéticamente.
print(titanic[titanic["Pclass"]==1]['Name'].sort_values())


PassengerId
731                      Allen, Miss. Elisabeth Walton
306                     Allison, Master. Hudson Trevor
298                       Allison, Miss. Helen Loraine
499    Allison, Mrs. Hudson J C (Bessie Waldo Daniels)
461                                Anderson, Mr. Harry
                            ...                       
156                        Williams, Mr. Charles Duane
352             Williams-Lambert, Mr. Fletcher Fellows
56                                   Woolner, Mr. Hugh
556                                 Wright, Mr. George
326                           Young, Miss. Marie Grice
Name: Name, Length: 216, dtype: object

In [48]:
# Mostrar por pantalla el porcentaje de personas que sobrevivieron y murieron
print(titanic['Survived'].value_counts()/titanic['Survived'].count() * 100)

# Alternativa
print(titanic['Survived'].value_counts(normalize=True) * 100)


0    61.616162
1    38.383838
Name: Survived, dtype: float64
0    61.616162
1    38.383838
Name: Survived, dtype: float64

In [49]:
#Mostrar por pantalla el porcentaje de personas que sobrevivieron en cada clase
print(titanic.groupby('Pclass')['Survived'].value_counts(normalize=True))


Pclass  Survived
1       1           0.629630
        0           0.370370
2       0           0.527174
        1           0.472826
3       0           0.757637
        1           0.242363
Name: Survived, dtype: float64

In [60]:
# Eliminar del DataFrame los pasajeros con edad desconocida.
titanic.dropna(subset=['Age'])

# Alternativa 
# titanic = titanic[titanic['Age'].notna()]


Out[60]:
Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
PassengerId
1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
... ... ... ... ... ... ... ... ... ... ... ...
886 0 3 Rice, Mrs. William (Margaret Norton) female 39.0 0 5 382652 29.1250 NaN Q
887 0 2 Montvila, Rev. Juozas male 27.0 0 0 211536 13.0000 NaN S
888 1 1 Graham, Miss. Margaret Edith female 19.0 0 0 112053 30.0000 B42 S
890 1 1 Behr, Mr. Karl Howell male 26.0 0 0 111369 30.0000 C148 C
891 0 3 Dooley, Mr. Patrick male 32.0 0 0 370376 7.7500 NaN Q

714 rows × 11 columns


In [81]:
# Mostrar la edad media de las mujeres que viajaban en cada clase.
print(titanic.groupby(['Pclass','Sex'])['Age'].mean().unstack()['female'])


Pclass
1    34.611765
2    28.722973
3    21.750000
Name: female, dtype: float64

In [85]:
# Añadir una nueva columna booleana para ver si el pasajero era menor de edad o no.
titanic['Young'] = titanic['Age'] < 18

In [91]:
# Mostrar el porcentaje de menores y mayores de edad que sobrevivieron en cada clase.
print(titanic.groupby(['Pclass', 'Young'])['Survived'].value_counts(normalize = True) * 100)


Pclass  Young  Survived
1       False  1           61.274510
               0           38.725490
        True   1           91.666667
               0            8.333333
2       False  0           59.006211
               1           40.993789
        True   1           91.304348
               0            8.695652
3       False  0           78.208232
               1           21.791768
        True   0           62.820513
               1           37.179487
Name: Survived, dtype: float64

In [ ]: