Publicado el: 13 de Diciembre del 2020 - Jhonatan Montilla
La librería de análisis de datos más popular. Pandas es una de las librerías de ciencia de datos más populares, sin ningún tipo de duda. Ha existido desde hace bastante tiempo e incluye muchas funciones para ahorrar bastante tiempo.
En este artículo se utilizarán tres de estos. Primeramente se importa la librería a continuación y posteriormente se cargará el conjunto de datos. Para su descarga hacer clic en el enlace al repositorio.
import pandas as pd # Carga la librería
df = pd.read_csv("titanic.csv") # Carga el conjunto de datos
df.head()
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22.0 | 1 | 0 | A/5 21171 | 7.2500 | NaN | S |
1 | 2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38.0 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
2 | 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26.0 | 0 | 0 | STON/O2. 3101282 | 7.9250 | NaN | S |
3 | 4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35.0 | 1 | 0 | 113803 | 53.1000 | C123 | S |
4 | 5 | 0 | 3 | Allen, Mr. William Henry | male | 35.0 | 0 | 0 | 373450 | 8.0500 | NaN | S |
La función apply() permite aplicar una función predefinida o anónima a una columna en particular. Las funciones anónimas, también llamadas, Lambda son ideales cuando no existe una gran cantidad de lógica a ejecutar, debido a que las funciones lambda pueden tornarse desordenadas muy rápido sin la atención adecuada.
Se requiere extraer el título de la persona desde la columna Nombre. El título se puede encontrar después de la primera coma y antes del primer punto. A continuación, se construye una función personalizada para dicha tarea:
def extract_title(string):
string = string.split(',')[-1]
string = string.strip()
string = string.split('.')[0]
return string
titles = df['Name'].apply(extract_title)
Se puede observar lo ordenado del código anterior, este es un método más extenso sin embargo, el código es comprensible para muchos sin hacer ningún comentario indicando la rutina de cada línea. A continuación se procede a realizar el mismo procedimiento a través de una función anónima, el procedimiento requiere de una sola línea.
titles = df['Name'].apply(lambda x: x.split(',')[-1].strip().split('.')[0])
titles.head()
0 Mr 1 Mrs 2 Miss 3 Mrs 4 Mr Name: Name, dtype: object
Este método es mucho más corto, sin embargo, si se tuviesen que efectuar un par de divisiones adicionales, elegir el uso de una función lambda no sería una elección adecuada.
El propósito de la función value_counts() es contar las distintas ocurrencias de valores en una columna específica. Es de gran utilidad después del uso de la función apply() utilizada anteriormente.
titles.value_counts()
Mr 517 Miss 182 Mrs 125 Master 40 Dr 7 Rev 6 Col 2 Major 2 Mlle 2 Capt 1 Ms 1 Mme 1 the Countess 1 Don 1 Sir 1 Lady 1 Jonkheer 1 Name: Name, dtype: int64
También se pueden crear datos de manera binarios con el valor 1 si el título es poco común (digamos Dr, Rev, Mlle y otros) y 0 en caso contrario (Mr, Miss, Mrs) y de esta manera realizar un análisis más detallado, representado en porcentajes en lugar de números. El procedimiento es el siguiente.
titles.value_counts(normalize=True) * 100
Mr 58.024691 Miss 20.426487 Mrs 14.029181 Master 4.489338 Dr 0.785634 Rev 0.673401 Col 0.224467 Major 0.224467 Mlle 0.224467 Capt 0.112233 Ms 0.112233 Mme 0.112233 the Countess 0.112233 Don 0.112233 Sir 0.112233 Lady 0.112233 Jonkheer 0.112233 Name: Name, dtype: float64
La función get_dummies () se utiliza para convertir columnas categóricas en variables ficticias: 0 o 1. Eso bastante útil porque no se pueden introducir categorías o cadenas de caracteres en un modelo de aprendizaje automático, pues los valores deben ser numéricos.
Esta función será utilizada en la columna Embarcado, la cual contiene 3 valores indicando en cual puerto se embarcó el pasajero en el barco.
emb = pd.get_dummies(df['Embarked'])
print(emb)
C Q S 0 0 0 1 1 1 0 0 2 0 0 1 3 0 0 1 4 0 0 1 .. .. .. .. 886 0 0 1 887 0 0 1 888 0 0 1 889 1 0 0 890 0 1 0 [891 rows x 3 columns]
emb = pd.get_dummies(df['Embarked'], prefix='Embarcado')
print(emb)
Embarcado_C Embarcado_Q Embarcado_S 0 0 0 1 1 1 0 0 2 0 0 1 3 0 0 1 4 0 0 1 .. ... ... ... 886 0 0 1 887 0 0 1 888 0 0 1 889 1 0 0 890 0 1 0 [891 rows x 3 columns]
emb = pd.get_dummies(df['Embarked'], prefix='Embarcado', drop_first=True)
print(emb)
Embarcado_Q Embarcado_S 0 0 1 1 0 0 2 0 1 3 0 1 4 0 1 .. ... ... 886 0 1 887 0 1 888 0 1 889 0 0 890 1 0 [891 rows x 2 columns]
Especificar el valor drop_first = True resuelve un inconveniente de colinealidad comentada anteriormente, como paso final se debe proceder a concatenar este DataFrame al original para continuar con su Análisis Exploratorio de Datos (EDA).
De esta manera damos por concluído este artículo, esperamos que estas tres funciones incluidas en la librería de Pandas les sea de utilidad para el pre-procesado de datos.