{
"cells": [
{
"cell_type": "markdown",
"id": "hindu-assistant",
"metadata": {},
"source": [
"# Identificación, tratamiento y manejo de Valores faltantes o Missing Values\n",
""
]
},
{
"cell_type": "markdown",
"id": "graduate-trigger",
"metadata": {},
"source": [
"## En este notebook aprenderás a:\n",
"
\n",
"
\n",
"
Leer un DataFrame con missing values
\n",
"
Inspeccionar un conjunto de datos en busca de Missing values
\n",
"
Visualizar los missing values
\n",
"
Construir tu función para visualizar el porcentaje de Missing Values a lo largo de una fila
\n",
"
Manejar los missing values de forma aislada
\n",
"
Manejar los missing values teniendo en cuenta el contexto que los rodea
\n",
"
\n",
"
"
]
},
{
"cell_type": "markdown",
"id": "hired-royalty",
"metadata": {},
"source": [
"## Antes de empezar"
]
},
{
"cell_type": "markdown",
"id": "noted-herald",
"metadata": {},
"source": [
"En este notebook se han utilizado los siguientes paquetes que puedes instalar utilizando las líneas de código anexas en la siguiente celda:\n",
"- pandas\n",
"- numpy\n",
"- missingno\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "cross-savannah",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:30.987265Z",
"start_time": "2022-02-16T20:11:30.983293Z"
}
},
"outputs": [],
"source": [
"# !pip install pandas --user\n",
"# !pip install numpy --user\n",
"# !pip install scikit-learn --user\n",
"# !pip install missingno --user"
]
},
{
"cell_type": "markdown",
"id": "returning-retention",
"metadata": {},
"source": [
"# Ejemplo 1"
]
},
{
"cell_type": "markdown",
"id": "skilled-relaxation",
"metadata": {},
"source": [
"## Leyendo el DataFrame\n",
"\n",
"Comentábamos en la parte de teoría que en ocasiones los Missing Values nos pueden venir dados como:\n",
"- Un valor ausente en la tabla\n",
"- Un valor por defecto que quiere indicar Missing Value\n",
"\n",
"🎁 Te dejo por aquí una lista de valores frequentes *(treat_NaNs)* que por defecto podrían representar valores faltantes"
]
},
{
"cell_type": "markdown",
"id": "economic-course",
"metadata": {},
"source": [
"Si leemos la primera hoja de cálculo del archivo excel con nombre \"dataset_notebook_demo.xlsx\" sin utilizar esa lista observa lo que sucede:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "tamil-wilderness",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:32.145321Z",
"start_time": "2022-02-16T20:11:30.998262Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
" Año Género Número Ventas\n",
"0 2014.0 Aventuras 400.0\n",
"1 NaN Bélico 80.0\n",
"2 NaN Biografías 200.0\n",
"3 NaN Novela Romántica 350.0\n",
"4 NaN Poesía 80.0"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "markdown",
"id": "genuine-minimum",
"metadata": {},
"source": [
"comprobamos como ahora el caracter \"-\" es reconocido como un valor NaN"
]
},
{
"cell_type": "markdown",
"id": "further-facing",
"metadata": {},
"source": [
"## Describiendo el DataFrame\n",
"Uno de los primeros pasos cuando llega a nuestras manos un set de datos es **explorarlo**.\n",
"\n",
"Y digo uno de los primeros porque el más importante es conseguir abrir el archivo. Ese aspecto daría para\n",
"otra tarea completa dedicada a a la correcta conexión y lectura de información proveniente de diferentes orígenes de datos.\n",
"\n",
"No obstante, para poder empezar a trabajar con un conjunto de datos cualesquiera es importante **analizarlos previamente**.\n",
"\n",
"Los pasos más habituales suelen ser:\n",
"- Ver las primeras y últimas filas de nuestro DataFrame\n",
"- Intentar realizar una descripción rápida\n",
"- Ver valores únicos, tipos de datos de los campos, y analizar los missing values\n",
"\n",
"Vamos allá❗"
]
},
{
"cell_type": "markdown",
"id": "adequate-harvard",
"metadata": {},
"source": [
"🔵 Este dataset representa el número de libros vendidos por género y por año por un comercio local."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "blank-indicator",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:32.240266Z",
"start_time": "2022-02-16T20:11:32.227272Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Año
\n",
"
Género
\n",
"
Número Ventas
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
2014.0
\n",
"
Aventuras
\n",
"
400.0
\n",
"
\n",
"
\n",
"
1
\n",
"
NaN
\n",
"
Bélico
\n",
"
80.0
\n",
"
\n",
"
\n",
"
2
\n",
"
NaN
\n",
"
Biografías
\n",
"
200.0
\n",
"
\n",
"
\n",
"
3
\n",
"
NaN
\n",
"
Novela Romántica
\n",
"
350.0
\n",
"
\n",
"
\n",
"
4
\n",
"
NaN
\n",
"
Poesía
\n",
"
80.0
\n",
"
\n",
"
\n",
"
5
\n",
"
2015.0
\n",
"
Aventuras
\n",
"
500.0
\n",
"
\n",
"
\n",
"
6
\n",
"
NaN
\n",
"
Bélico
\n",
"
150.0
\n",
"
\n",
"
\n",
"
7
\n",
"
NaN
\n",
"
Biografías
\n",
"
200.0
\n",
"
\n",
"
\n",
"
8
\n",
"
NaN
\n",
"
Novela Romántica
\n",
"
300.0
\n",
"
\n",
"
\n",
"
9
\n",
"
NaN
\n",
"
Poesía
\n",
"
120.0
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Año Género Número Ventas\n",
"0 2014.0 Aventuras 400.0\n",
"1 NaN Bélico 80.0\n",
"2 NaN Biografías 200.0\n",
"3 NaN Novela Romántica 350.0\n",
"4 NaN Poesía 80.0\n",
"5 2015.0 Aventuras 500.0\n",
"6 NaN Bélico 150.0\n",
"7 NaN Biografías 200.0\n",
"8 NaN Novela Romántica 300.0\n",
"9 NaN Poesía 120.0"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# visualizando las n primeras filas del dataset\n",
"df.head(10)\n",
"\n",
"# visualizando las n últimas filas del dataset\n",
"# df.tail(2)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "atlantic-shuttle",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:32.254265Z",
"start_time": "2022-02-16T20:11:32.243280Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"RangeIndex: 40 entries, 0 to 39\n",
"Data columns (total 3 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Año 8 non-null float64\n",
" 1 Género 40 non-null object \n",
" 2 Número Ventas 38 non-null float64\n",
"dtypes: float64(2), object(1)\n",
"memory usage: 4.1 KB\n"
]
}
],
"source": [
"# el método info nos da información inicial sobre el dataset, representando las columnas, \n",
"# el número de valores NO MISSSING y el tipo de columna. \n",
"df.info(memory_usage='deep') #deep nos indica cuánto ocupa el dataset en memoria"
]
},
{
"cell_type": "markdown",
"id": "rising-tennis",
"metadata": {},
"source": [
"Personalmente, creo que puede estar bien para hacerse una idea de la cantidad de valores existentes siempre y cuando sepamos la forma del dataset *(df.shape)*. Pero yo no lo utilizo mucho 😉"
]
},
{
"cell_type": "markdown",
"id": "negative-heating",
"metadata": {},
"source": [
"A la hora de obtener un *overview* de la cantidad de valores faltantes que tiene nuestro conjunto de datos, podemos utilizar indistintamente los métodos `.isna()` o `.isnull()`"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "behavioral-angle",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:32.281268Z",
"start_time": "2022-02-16T20:11:32.263262Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Año
\n",
"
Género
\n",
"
Número Ventas
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
False
\n",
"
False
\n",
"
False
\n",
"
\n",
"
\n",
"
1
\n",
"
True
\n",
"
False
\n",
"
False
\n",
"
\n",
"
\n",
"
2
\n",
"
True
\n",
"
False
\n",
"
False
\n",
"
\n",
"
\n",
"
3
\n",
"
True
\n",
"
False
\n",
"
False
\n",
"
\n",
"
\n",
"
4
\n",
"
True
\n",
"
False
\n",
"
False
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Año Género Número Ventas\n",
"0 False False False\n",
"1 True False False\n",
"2 True False False\n",
"3 True False False\n",
"4 True False False"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isna().head()"
]
},
{
"cell_type": "markdown",
"id": "quiet-dragon",
"metadata": {},
"source": [
"Estarás de acuerdo conmigo en que esto no es muy intuitivo, ¿verdad?. 🤔🤔\n",
"Si utilizamos los métodos `df.isna().sum()` o `df.isnull().sum()` obtendremos un recuento de los valores faltantes que tenemos por cada columna.\n",
"\n",
"💭 Si me preguntas por mis preferencias, personalmente tengo tendencia a utilizar el segundo método."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "soviet-argentina",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:32.295309Z",
"start_time": "2022-02-16T20:11:32.284262Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Año 32\n",
"Género 0\n",
"Número Ventas 2\n",
"dtype: int64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isnull().sum()"
]
},
{
"cell_type": "markdown",
"id": "purple-support",
"metadata": {},
"source": [
"Si quieres ver el número de Missing Values por cada fila:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "vocational-madonna",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:32.308268Z",
"start_time": "2022-02-16T20:11:32.297268Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"0 0\n",
"1 1\n",
"2 1\n",
"3 1\n",
"4 1\n",
"dtype: int64"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isnull().sum(axis=1).head()"
]
},
{
"cell_type": "markdown",
"id": "double-funds",
"metadata": {},
"source": [
"¡Ya empezamos a hacernos una idea de cómo de completo está nuestro conjunto de datos!\n",
"Pero podemos ir un pasito más allá y ver qué porcentaje del total suponen esos valores faltantes para cada columna.\n",
"Te dejo por aquí una función que puedes reutilizar en tu día a día 😊\n",
"\n",
"🔥 Te animo a que construyas tu propia función para obtener el porcentaje de completitud de cada fila."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "occupational-variation",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:32.317264Z",
"start_time": "2022-02-16T20:11:32.312266Z"
}
},
"outputs": [],
"source": [
"def porcentaje_missings(data):\n",
" m_per = data.isnull().sum() * 100 / len(data)\n",
" percent_missing = round(m_per,2)\n",
" missing_value_df = pd.DataFrame({'percent_missing (%)': percent_missing})\n",
" return missing_value_df "
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "private-swaziland",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:32.325268Z",
"start_time": "2022-02-16T20:11:32.320293Z"
}
},
"outputs": [],
"source": [
"#El huequecito para tu función :P"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "saving-tonight",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:34.438458Z",
"start_time": "2022-02-16T20:11:32.327273Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Borja\\Anaconda3\\lib\\site-packages\\pandas\\compat\\_optional.py:123: UserWarning: Pandas requires version '2.6.8' or newer of 'numexpr' (version '2.6.2' currently installed).\n",
" warnings.warn(msg, UserWarning)\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
percent_missing (%)
\n",
"
\n",
" \n",
" \n",
"
\n",
"
Año
\n",
"
80.0
\n",
"
\n",
"
\n",
"
Género
\n",
"
0.0
\n",
"
\n",
"
\n",
"
Número Ventas
\n",
"
5.0
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" percent_missing (%)\n",
"Año 80.0\n",
"Género 0.0\n",
"Número Ventas 5.0"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"porcentaje_missings(df)"
]
},
{
"cell_type": "markdown",
"id": "spiritual-prague",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-13T18:41:03.082025Z",
"start_time": "2022-02-13T18:41:03.076043Z"
}
},
"source": [
"Si todavía te quedas con ganas de obtener una visualización gráfica sobre la cantidad de missings que tienen tus datos,\n",
"\n",
"¡Échale un vistazo a las siguientes líneas de código!"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "previous-artist",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:35.214508Z",
"start_time": "2022-02-16T20:11:34.441463Z"
}
},
"outputs": [],
"source": [
"import missingno as msno"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "handed-administrator",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:35.712485Z",
"start_time": "2022-02-16T20:11:35.216457Z"
}
},
"outputs": [
{
"data": {
"image/png": "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HBIRU2ufv5iZ48qqL0nSB1GZc+xbAV/r9NjHax8ATwAGuyRJXai0S/GZeVpmxlI+PlpWbUmSPqicY5ckqUIMdkmSKsRglySpQgx2SZIqxGCXJKlCDHZJkirEYJckqUIMdkmSKsRglySpQgx2SZIqxGCXJKlCDHZJkirEYJckqUIMdkmSKsRglySpJHPnzq17TYNdkqQu1q9fP7beemuuuuoqXnjhhbrWNtglSSrB2LFjWbRoEWeddRaZWbe6BrskSSVYb731GDlyJHfccQe333573eoa7JIklWTEiBFsvPHGnH322XWbbzfYJUkqSVNTE+PGjePVV1/l/PPPr0tNg12SpBJtsskm7L///txwww3cd999pdfrXXqF92no0KGNbkHdzOTJkxvdgiS9J4cddhg333wzF1xwARdccEGptRyxS5JUskceeYSXXnqJLbbYovRaBrskSSVauHAh48ePZ5111uHwww8vvZ7BLklSiS677DKefPJJxowZQ9++fUuvZ7BLklSSxx9/nJ/+9KfsscceDB48uC41DXZJkkrQ1tbGmWeeySqrrMJxxx1Xt7oGuyRJJbjmmmt46KGHOO6441h99dXrVrfb3+42ffr0Rregbqi1tbXRLUjSu1q4cCEXXXQRn/70p9l9993rWtsRuyRJXWzhwoXMmzePwYMHExF1rW2wS5JUIQa7JEkVYrBLklQhBrskSRVisEuSVCEGuyRJFWKwS5JUIQa7JEkVYrBLklQhBrskSRVisEuSVCEGuyRJFWKwS5JUIQa7JEkVYrBLklQhBrskSRVisEuSVCEGuyRJFWKwS5JUIQa7JEldrKmpCYA5c+bUvbbBLklSF+vbty+77bYb11xzDY8//nhdaxvskiSV4Pjjj2fllVdm/PjxtLW11a2uwS5JUgnWWGMNjj/+eB588EGuvfbautU12CVJKsnuu+/Opz/9aS688MK6zbcb7JIklSQiGDNmDACTJk0iM0uv2bv0Cu/T0KFDG92CupnJkyc3ugVJWm4DBgzg8MMPZ8qUKdx6663stttupdZzxC5JUsmGDRvGWmutxaWXXlp6LYNdkqSS3XHHHbz44ot87nOfK72WwS5JUoneeOMNzjrrLAYOHMiIESNKr2ewS5JUovPPP59XX32Vk046id69y1/aZrBLklSS+++/n+uvv54RI0awySab1KWmwS5JUgkWLFjAhAkTWHfddTnssMPqVrfb3+42ffr0Rregbqi1tbXRLUjSUk2bNo2nn36aCRMm0NLSUre6jtglSepiCxYs4PLLL2ePPfZgm222qWttg12SpC62aNEi2tra6jav3pHBLklShRjskiRViMEuSVKFGOySJFWIwS5JUoUY7JIkVYjBLklShRjskiRViMEuSVKFGOySJFWIwS5JUoUY7JIkVYjBLklShRjskiRViMEuSVKFGOySJFWIwS5JUoUY7JIkVYjBLklShRjskiR1sd69e9OrVy8ee+yxutc22CVJ6mItLS2MGDGCG2+8kdbW1rrWNtglSSrBYYcdxrrrrsuECRNYsGBB3eoa7JIklaClpYUxY8bw1FNPMW3atLrVNdglSSrJtttuy1577cXPfvYzZs+eXZeavetS5X0YOnRoo1tQNzN58uRGtyBJy+3YY49lxowZjB8/nilTptDU1FRqPUfskiSVaLXVVuOEE05g1qxZXHXVVaXXM9glSSrZLrvswlprrcWvf/3r0msZ7JIklezaa6/lxRdf5MADDyy9lsEuSVKJnn/+eS688EK222479thjj9LrGeySJJUkM5k0aRKZydixY4mI0msa7JIkleS2227j7rvv5vDDD2fAgAF1qdntb3ebPn16o1tQN1TvLRol6b167bXXOOecc9hss80YNmxY3eo6YpckqQTnnXcec+fOZdy4caXfu96RwS5JUhe75557uOmmmzjwwAPZaKON6lrbYJckqQvNmzePiRMnssEGG3DIIYfUvX63n2OXJKknufjii3nuuec466yzaG5urnt9R+ySJHWRhx9+mKuuuor99tuPLbfcsiE9GOySJHWBxYsXc+aZZ7Lmmmty5JFHNqwPL8VLqoytttrKW2TVMJdffjl//etfOf300+nXr1/D+nDELknS+/T3v/+dSy65hF122YUdd9yxob0Y7JIkvU933XUXixYtYu+99250Kwa7JEnv1957703//v258MILWbx4cUN7MdglSXqf+vXrx6hRo5g9ezZXXHFFQ3sx2CVJ6gI77bQTO++8M1OnTuWpp55qWB+uipdUGa2trYwaNarRbagbqtfdEieeeCL33Xcf48ePZ+LEifTqVf/xsyN2SZK6SP/+/TnmmGP44x//yA033NCQHgx2SZK60N57783WW2/N+eefz4svvlj3+ga7JEldKCI44YQTePPNN/nd735X9/oGuyRJXWzttdcGoK2tre61DXZJkirEYJckqUIMdkmSKsRglySpQgx2SZIqxGCXJKmLNTc309LSwr333ktm1rW2wS5JUhdrbm5m5MiR3H333XXbzradwS5JUgm+/OUvs+mmm3LOOefw2muv1a2uwS5JUgmampoYN24cr7/+Oueff37d6nb7092GDh3a6BbUzUyePLnRLUjSchk4cCAHHHAAl112Gbvvvjvbbrtt6TUdsUuSVKJDDz2UDTbYgAkTJjB//vzS6xnskiSVqLm5mTFjxvDss88yderU0usZ7JIklWzQoEH079+f++67r/RaBrskSSWbNm0aL730EkcddVTptQx2SZJKNHv2bH72s5+x5557st1225Vez2CXJKkkbW1tjB8/nlVXXZVjjz22LjW7/e1u9d6xRz1Da2tro1uQpGW6+uqrmTVrFqeeeiqrr756XWo6YpckqQTPPvssP/nJTxgyZAi77rpr3eoa7JIklWDixIlEBKNGjSIi6lbXYJckqYu9+eab/OEPf2D48OF8+MMfrmttg12SpC7WflTraqutVvfaBrskSRVisEuSVCEGuyRJFWKwS5JUIQa7JEkVYrBLklQhBrskSRVisEuSVCEGuyRJFWKwS5JUIQa7JEkVYrBLklQhBrskSRVisEuSVCEGuyRJFWKwS5JUIQa7JEkVYrBLklQhBrskSSXJzLrXNNglSepiLS0trLHGGtx66620tbXVtbbBLklSF+vduzfHH388Dz/8ML/4xS/qWttglySpBJ/97GfZfvvtueiii3juuefqVrd33SqtoKFDhza6BXUzkydPbnQLkrRMEcHo0aMZOXIkEydO5Ec/+hERUXpdR+ySJJVknXXW4cgjj+See+7h5ptvrktNg12SpBLtt99+fOITn2DKlCm88sorpdcz2CVJKlFTUxNjx47lrbfe4rzzziu9nsEuSVLJ+vfvzyqrrMKcOXNKr2WwS5JUsvPOO4+5c+dywgknlF7LYJckqUT33nsvN954IwcccAADBw4svV63v91t+vTpjW5B3VBra2ujW5CkZZo/fz4TJ05k/fXX59BDD61LzW4f7JIk9VRTp07lmWeeYdKkSay00kp1qemleEmSSjBr1iyuvPJK9tlnH7baaqu61TXYJUnqYpnJhAkT+NCHPsQxxxxT19oGuyRJXezNN9/k0UcfZdiwYfTr16+utQ12SZJKUq959Y4MdkmSKsRglySpQgx2SZIqxGCXJKlCDHZJkirEYJckqUIMdkmSKsRglySpQgx2SZIqxGCXJKlCDHZJkirEYJckqUIMdkmSKsRglySpQgx2SZIqxGCXJKlCDHZJkirEYJckqUIMdkmSStLW1lb3mga7JEldbOWVV2a99dbjuuuuY/78+XWtbbBLktTFevXqxdixY3nmmWe45JJL6lq7d12rrYChQ4c2ugV1M5MnT250C5K0TFtvvTX77LMPV1xxBbvuuiubbLJJXeo6YpckqSRHH300a6yxBuPHj6/bfLvBLklSSVZddVVOPPFEHn30Ua644oq61DTYJUkq0c4778xOO+3E1KlTefrpp0uvZ7BLklSiiOAb3/gGffr04eyzzy69nsEuSVLJFi9eTFtbG3369Cm9lsEuSVKJMpOJEycCcPzxx5der9vf7jZ9+vRGt6BuqLW1tdEtSNJyueWWW7jnnns44YQTGDBgQOn1HLFLklSSV199lXPPPZdBgwbxhS98oS41DXZJkkoyZcoU3nrrLcaNG0dTU1NdahrskiSVYMaMGdxyyy0cdNBBfOxjH6tbXYNdkqQu1tbWxqRJk/jIRz7CV7/61brWNtglSepi8+bNY86cOey99940NzfXtbbBLklSSXr1qn/MGuySJFWIwS5JUoUY7JIkVYjBLklShRjskiR1sYULFzastsEuSVIXmzZtGr169WLLLbese+1ufwiMJC2vrbbayoOj1HAPPPAA1157LcOHD2eTTTape31H7JIkARGxc0RcFxFPR0RGxGHv9WssXLiQ8ePHM2DAAL7+9a+X0OWyGeySJBX6AX8GvgHMW5EvcOmll/Lkk08yevRo+vbt26XNLS8vxUuSBGTmDcANABExdXnf19bWxsyZM5k5cybXXXcdu+++O4MHDy6rzWUy2CVJWkFtbW2cfPLJPPTQQ8ybVwzyn3/+edra2up2TGtnXoqXJGkFzZw58x2hDvDII48wc+bMhvVksEuStIIeffRR5s+f/47HFixYwOzZsxvUkZfiJVVIa2sro0aNanQb6obKug1y4403pqWl5R0j9ubmZgYOHFhKveXhiF2SpBU0ePBgNt98c1paWogIAJqamth2220b1pMjdkmSgIjoB7QPtXsBG0bEVsDLmbnE9zQ1NXHGGWcwc+ZMZs+ezdy5c7nyyiv51a9+xZe+9KX6NN6JwS5JUmE74LYOf/9u7eOSpb2pqamJIUOGMGTIEDKTJ554ggsvvJAdd9yRddZZp8x+l8hL8ZIkAZk5PTNjCR+HLe/XiAhGjx4NwKRJk3i3kX6ZDHZJkrrQgAEDOPzww5kxYwa/+c1v6l7fYJckqYsNGzaMzTbbjHPPPZfXXnutrrW7/Rz70KFDG92CupnJkyc3ugVJWqqmpiZOOukkjjrqKKZMmcI3v/nNutV2xC5JUgk+/vGPc9BBB3HzzTe/553oIuK4iPhTRLxe+7grIvZZnvca7JIkleTggw9mww03ZOLEie/YxGY5PAWcAmxDsVr/VuCaiNhyWW802CVJKklzczPjxo1jzpw5nH766UybNo277rqLtra2pb4vM6/NzF9n5uzMfCQzvwXMBYYsq2a3n2OXJKknGzRoEGuttRZ33nknd955J3379mXzzTfnjDPOWK4T4CKiCRhBcV78nct6vSN2SZJKNHPmTN54441//H3evHk8+OCDy5x3j4gtIuINYAFwPjAsMx9YVj2DXZKkEr2PE+BmAVsB2wPnAZdExCeX9aZufym+rBN51LO1trY2ugVJWi4bbbQREfGOXehWWmmlZZ4Al5kLgfb0vzciPg2MBg5f2vscsUuSVKInnniCzKS5uZmIoKWlhUGDBjF48OD3+qV6ASst60XdfsQuSVJP9fTTT3PJJZewww47sM8++/DYY48xcOBABg8evNSFcxHxQ+B64O/AqsBBwFBgmfeyG+ySJJUgM5kwYQJ9+vRh1KhRrL322uywww7L+/YBwKW1P18D/gR8PjNvWtYbDXZJkkpw4403cv/99zN69GjWXnvt9/Te93KiXGfOsUuS1MUWLVrEeeedx5Zbbsm+++5b19oGuyRJXWzBggXMnTuXnXbaiV696hu1BrskSSWJiLrXNNglSaoQg12SpAox2CVJqhCDXZKkCjHYJUmqEINdkqQKMdglSaoQg12SpAox2CVJqhCDXZKkClnhYI+IgyMiax9HvMtr9o2I6RHxWkS8EREzIuJrK96uJElamhUK9ojYADgXeGMprzke+CXwSYozZS8E1gWmRsT4FakrSZKW7j0HexQ72l8MvASc/y6v+SgwHngZ2C4zj8vM0cCWwGPA2IgYsqJNS5KkJVuREfuJwGeBkcCb7/KarwMrAedm5t/aH8zMV4Dv1/56zArUliRJS/Gegj0iNgd+CJyVmbcv5aWfrf154xKe+3Wn10iSpC6y3MEeEb2B/wKeBL65jJdvWvvzkc5PZOazFCP99SNi5eWtL0mSlq33e3jtvwFbAztl5rxlvHb12p+vvcvzrwGr1F731nvoQZIkLcVyjdgjYnuKUfqEzLyr3JYkSdKKWmaw1y7BT6O4rH7qcn7d9pH66u/y/LJG9JIkaQVEZi79BRFrAK8s59c7KzNHRcTvgR2BHTqP8CPin4BngKcyc4P33rIkSXo3yzPHvgC46F2e24Zi3v33wCygPcRvpQj2vTo81u7zHV4jSZK60DJH7Et9c8RpwHeAIzPzxx0e/xjwEMXq923b72WPiA8B9wAbsYTRvCRJen/ey6r45ZaZj0fEScDZwB8i4nJgITAcWB8X4UmSVIpSgh0gM8+JiL8B44BDKRbqPQh8OzMvKauuJEkfZO/rUrwkSepePI9dkqQKMdglSaoQg12SpAox2CVJqhCDXZKkCjHYJUmqEINdkqQKMdglSaoQg12SpAr5/8Z8rlM7jUQYAAAAAElFTkSuQmCC\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"msno.matrix(df,figsize=(8,5), fontsize=12); #en blanco, cada missing value\n",
"msno.bar(df, figsize=(8,5), fontsize=12); "
]
},
{
"cell_type": "markdown",
"id": "equal-saudi",
"metadata": {},
"source": [
"Finalmente, si quieres ver el número total de Missing Values que hay repartidos por todo tu dataset..."
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "external-watershed",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:35.723490Z",
"start_time": "2022-02-16T20:11:35.714460Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"34"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isnull().sum().sum() \n",
"#la primera expresión sum() suma a lo largo de cada columna y como lo que \n",
"#obtenemos es una pd.Series, al aplicar el segundo sum() vuelve a sumar sobre la columna\n",
"#que contiene el número total de missing values por columna representando, ahora sí,\n",
"#el número total de missing values del dataset."
]
},
{
"cell_type": "markdown",
"id": "thousand-spyware",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-13T19:27:16.505889Z",
"start_time": "2022-02-13T19:27:16.501890Z"
}
},
"source": [
"## Empecemos a rellenar missing Values"
]
},
{
"cell_type": "markdown",
"id": "experimental-cotton",
"metadata": {},
"source": [
"Analizando un poco el dataset, vemos que se trata de un conjunto de datos donde la columna *Año* solo indica el valor al lado del primer género.\n",
"Existe un método habitualmente utilizado y que no se suele mencionar como una estrategia disponible, pero que en este caso es realmente útil: `.ffill()`"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "amazing-comment",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:35.731461Z",
"start_time": "2022-02-16T20:11:35.726459Z"
}
},
"outputs": [],
"source": [
"df[\"Año\"] = df[\"Año\"].ffill() #de manera análoga también existe el método .bfill()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "secondary-editing",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:35.750491Z",
"start_time": "2022-02-16T20:11:35.733458Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Año
\n",
"
Género
\n",
"
Número Ventas
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
2014.0
\n",
"
Aventuras
\n",
"
400.0
\n",
"
\n",
"
\n",
"
1
\n",
"
2014.0
\n",
"
Bélico
\n",
"
80.0
\n",
"
\n",
"
\n",
"
2
\n",
"
2014.0
\n",
"
Biografías
\n",
"
200.0
\n",
"
\n",
"
\n",
"
3
\n",
"
2014.0
\n",
"
Novela Romántica
\n",
"
350.0
\n",
"
\n",
"
\n",
"
4
\n",
"
2014.0
\n",
"
Poesía
\n",
"
80.0
\n",
"
\n",
"
\n",
"
5
\n",
"
2015.0
\n",
"
Aventuras
\n",
"
500.0
\n",
"
\n",
"
\n",
"
6
\n",
"
2015.0
\n",
"
Bélico
\n",
"
150.0
\n",
"
\n",
"
\n",
"
7
\n",
"
2015.0
\n",
"
Biografías
\n",
"
200.0
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Año Género Número Ventas\n",
"0 2014.0 Aventuras 400.0\n",
"1 2014.0 Bélico 80.0\n",
"2 2014.0 Biografías 200.0\n",
"3 2014.0 Novela Romántica 350.0\n",
"4 2014.0 Poesía 80.0\n",
"5 2015.0 Aventuras 500.0\n",
"6 2015.0 Bélico 150.0\n",
"7 2015.0 Biografías 200.0"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head(8)"
]
},
{
"cell_type": "markdown",
"id": "frequent-replication",
"metadata": {},
"source": [
"Como puedes apreciar, hasta que no encuentra otro valor rellena todas las filas hacia adelante con el primer valor encontrado."
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "unique-court",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:35.763492Z",
"start_time": "2022-02-16T20:11:35.753459Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Año 0\n",
"Género 0\n",
"Número Ventas 2\n",
"dtype: int64"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isnull().sum() "
]
},
{
"cell_type": "markdown",
"id": "julian-blanket",
"metadata": {},
"source": [
"En estos momentos nos quedan dos Missings. ¿Cómo podemos localizarlos y únicamente ver los registros que corresponden a las observaciones que contienen valores missing en el campo *Número Ventas*?\n",
"\n",
"Utilizando la máscara *booleana* que se crea con el método `pd.isnull()`"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "guilty-truck",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:35.781486Z",
"start_time": "2022-02-16T20:11:35.766459Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Año
\n",
"
Género
\n",
"
Número Ventas
\n",
"
\n",
" \n",
" \n",
"
\n",
"
17
\n",
"
2017.0
\n",
"
Biografías
\n",
"
NaN
\n",
"
\n",
"
\n",
"
33
\n",
"
2020.0
\n",
"
Novela Romántica
\n",
"
NaN
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Año Género Número Ventas\n",
"17 2017.0 Biografías NaN\n",
"33 2020.0 Novela Romántica NaN"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[pd.isnull(df[\"Número Ventas\"])]"
]
},
{
"cell_type": "markdown",
"id": "annual-alpha",
"metadata": {},
"source": [
"Vemos que, por el motivo que fuera, no hay dato para el género de Biografías en 2017 y tampoco para el género Novela Romántica en 2020.\n",
"\n",
"En este momento, podríamos ver alguna medida estadística que nos de información sobre la columna *Número Ventas*."
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "reasonable-breakdown",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:35.798459Z",
"start_time": "2022-02-16T20:11:35.784461Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"count 38.000000\n",
"mean 305.657895\n",
"std 237.964826\n",
"min 80.000000\n",
"25% 150.000000\n",
"50% 200.000000\n",
"75% 350.000000\n",
"max 1000.000000\n",
"Name: Número Ventas, dtype: float64"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"Número Ventas\"].describe()"
]
},
{
"cell_type": "markdown",
"id": "arbitrary-interview",
"metadata": {},
"source": [
"Ahora podríamos asumir la media como un valor para rellenar los valores faltantes y ya tendríamos todos nuestro set de datos completo."
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "similar-omaha",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:35.807479Z",
"start_time": "2022-02-16T20:11:35.800457Z"
}
},
"outputs": [],
"source": [
"#Voy a hacer una copia del dataset solo para ver cómo aplicamos esa estrategia.\n",
"df_estrategia = df.copy()\n",
"df_estrategia[\"Número Ventas\"] = df_estrategia[\"Número Ventas\"].fillna(df_estrategia[\"Número Ventas\"].mean())"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "sexual-active",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:35.819464Z",
"start_time": "2022-02-16T20:11:35.810457Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Año 0\n",
"Género 0\n",
"Número Ventas 0\n",
"dtype: int64"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_estrategia.isnull().sum() "
]
},
{
"cell_type": "markdown",
"id": "ruled-witch",
"metadata": {},
"source": [
"En lugar de la **media**, podríamos haber imputado la **mediana** (que siempre es más conservadora) o **un valor aleatorio escogido entre el mínimo de libros vendidos y el máximo**. En fin, muchas estragias diferentes con las que ya tendríamos un dataset completo y sin valores faltantes. \n",
"\n",
"No obstante, en este caso, **podemos aprovecharnos del contexto que rodea a los datos** para imputar los valores faltantes, yendo por dos caminos diferentes:\n",
"\n",
"- Podemos utilizar algún método de imputación teniendo en cuenta el número de ventas pero por Género\n",
"- Podemos ver qué sucede cada año y tomar una decisión.\n",
"\n",
"Voy a coger el dataset original y voy a analizar cuántos libros se han vendido cada año (Sin tener en cuenta el género)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "pursuant-suite",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:35.842459Z",
"start_time": "2022-02-16T20:11:35.821459Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"El número total de libros vendidos en 2014.0 es: 1110.0\n",
"El número total de libros vendidos en 2015.0 es: 1270.0\n",
"El número total de libros vendidos en 2016.0 es: 1550.0\n",
"El número total de libros vendidos en 2017.0 es: 1350.0\n",
"El número total de libros vendidos en 2018.0 es: 1445.0\n",
"El número total de libros vendidos en 2019.0 es: 940.0\n",
"El número total de libros vendidos en 2020.0 es: 2150.0\n",
"El número total de libros vendidos en 2021.0 es: 1800.0\n"
]
}
],
"source": [
"for anio in df[\"Año\"].unique():\n",
" n_ventas = df[df[\"Año\"] == anio][\"Número Ventas\"].sum()\n",
" print(f\"El número total de libros vendidos en {anio} es: {n_ventas}\")"
]
},
{
"cell_type": "markdown",
"id": "collect-avatar",
"metadata": {},
"source": [
"A través del análisis anterior lo que vemos es que, en 2020 (año de de confinamiento), se vendieron más libros que el resto de años. Pero no obtenemos mucha más información."
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "continental-restriction",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:35.853457Z",
"start_time": "2022-02-16T20:11:35.845485Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\t El número mínimo: 350.0\n",
"\t El número máximo: 1000.0\n"
]
}
],
"source": [
"n_min = df[df[\"Año\"] == 2020][\"Número Ventas\"].min()\n",
"n_max = df[df[\"Año\"] == 2020][\"Número Ventas\"].max() \n",
"print(f\"\\t El número mínimo: {n_min}\")\n",
"print(f\"\\t El número máximo: {n_max}\")"
]
},
{
"cell_type": "markdown",
"id": "labeled-cambodia",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-13T20:16:22.032258Z",
"start_time": "2022-02-13T20:16:22.025247Z"
}
},
"source": [
"Además, si vemos el valor mínimo y el valor máximo de números vendidos para 2020, vemos que hay bastante diferencia.\n",
"\n",
"Veamos si podemos hacer algo teniendo en cuenta el número de libros vendidos por año y género:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "educated-private",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:35.895459Z",
"start_time": "2022-02-16T20:11:35.855459Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"El número total de libros vendidos para el género Biografías es:\n",
"\tEn 2014.0 : 200.0\n",
"\tEn 2015.0 : 200.0\n",
"\tEn 2016.0 : 200.0\n",
"\tEn 2017.0 : 0.0\n",
"\tEn 2018.0 : 190.0\n",
"\tEn 2019.0 : 300.0\n",
"\tEn 2020.0 : 350.0\n",
"\tEn 2021.0 : 250.0\n",
"La media de libros de Biografías vendidos por año es: 241.42857142857142\n",
"La mediana de libros de Biografías vendidos por año es: 200.0\n",
"********************\n",
"\n",
"El número total de libros vendidos para el género Novela Romántica es:\n",
"\tEn 2014.0 : 350.0\n",
"\tEn 2015.0 : 300.0\n",
"\tEn 2016.0 : 300.0\n",
"\tEn 2017.0 : 350.0\n",
"\tEn 2018.0 : 100.0\n",
"\tEn 2019.0 : 120.0\n",
"\tEn 2020.0 : 0.0\n",
"\tEn 2021.0 : 200.0\n",
"La media de libros de Novela Romántica vendidos por año es: 245.71428571428572\n",
"La mediana de libros de Novela Romántica vendidos por año es: 300.0\n",
"********************\n",
"\n"
]
}
],
"source": [
"generos = [\"Biografías\", \"Novela Romántica\"]\n",
"for genero in generos: \n",
" print(f\"El número total de libros vendidos para el género {genero} es:\")\n",
" for anio in df[\"Año\"].unique():\n",
" n_ventas = df[(df[\"Año\"] == anio) & (df[\"Género\"] == genero)][\"Número Ventas\"].sum()\n",
" print(f\"\\tEn {anio} : {n_ventas}\")\n",
" print(f\"La media de libros de {genero} vendidos por año es: \" , df[df[\"Género\"] == genero][\"Número Ventas\"].mean());\n",
" print(f\"La mediana de libros de {genero} vendidos por año es: \" , df[df[\"Género\"] == genero][\"Número Ventas\"].median());\n",
" print(\"*\"*20)\n",
" print()"
]
},
{
"cell_type": "markdown",
"id": "crazy-webcam",
"metadata": {},
"source": [
"En este caso no encuentro un criterio claro para imputar en ningún caso.\n",
"Por buscar algún razonamiento, imputaremos la mediana para los libros de Biografías ya que en 2018 baja el número de ventas.\n",
"\n",
"🛑 **¡Un momento! Me acaba de llamar José, el responsable de la tienda, diciéndome que antes de perder los datos para el número de libros vendidos del género de Novela Romántica, recuerda que en 2020 se vendieron 310 Novelas Románticas.**\n",
"\n",
"¡Bueno!¡Pues algo es algo! Imputemos ambos valores."
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "korean-transformation",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:35.905488Z",
"start_time": "2022-02-16T20:11:35.898462Z"
}
},
"outputs": [],
"source": [
"condicion = (pd.isnull(df[\"Número Ventas\"])) & (df[\"Género\"]==\"Biografías\")\n",
"\n",
"df.loc[condicion, \"Número Ventas\" ] = df[df[\"Género\"] == \"Biografías\"][\"Número Ventas\"].median()"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "portable-karma",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:35.915491Z",
"start_time": "2022-02-16T20:11:35.908458Z"
}
},
"outputs": [],
"source": [
"#como ya solo queda un missing utilizaré el método fillna, solo para que\n",
"#veas casos donde no me apetece \"comerme la cabeza\" filtrando el dataset\n",
"#y aprovecho lo que sé que hace cada método a mi favor.\n",
"\n",
"df[\"Número Ventas\"] = df[\"Número Ventas\"].fillna(310)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "useful-admission",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:35.932479Z",
"start_time": "2022-02-16T20:11:35.925485Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Año 0\n",
"Género 0\n",
"Número Ventas 0\n",
"dtype: int64"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isnull().sum()"
]
},
{
"cell_type": "markdown",
"id": "behavioral-judges",
"metadata": {},
"source": [
"**¡Reto conseguido!** En este punto ya tendríamos un dataset preparado para el análisis."
]
},
{
"cell_type": "markdown",
"id": "collective-tuition",
"metadata": {},
"source": [
"# Ejemplo 2\n",
"\n",
"> Este dataset contiene información personal de personas ficticias como el nombre, apellidos, edad, estado civil o si se ha vacunado o no."
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "geological-latin",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.011458Z",
"start_time": "2022-02-16T20:11:35.936458Z"
}
},
"outputs": [],
"source": [
"#leemos el dataset\n",
"\n",
"ruta_dataset = \"dataset_notebook_demo.xlsx\"\n",
"df2 = pd.read_excel(ruta_dataset, na_values=treat_NaNs, sheet_name=\"ej2\")"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "incident-exposure",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.020459Z",
"start_time": "2022-02-16T20:11:36.013458Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(69, 12)"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2.shape #miramos su forma"
]
},
{
"cell_type": "markdown",
"id": "black-redhead",
"metadata": {},
"source": [
"Podemos utilizar la siguiente expresión para simplemente saber si tenemos valores faltantes en cada columna.\n",
"Es otro recurso que puedes utilizar. Dependiendo de lo que en el momento te venga a la cabeza o te apetezca aplicar.\n",
"\n",
"Permíteme anticiparme y comentarte que el método `df.isnull().sum()` será tu gran aliado en la mayoría de ocasiones."
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "aware-boxing",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.033462Z",
"start_time": "2022-02-16T20:11:36.022459Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Nombre True\n",
"Apellido 1 True\n",
"Apellido 2 True\n",
"Sexo True\n",
"Municipio True\n",
"Provincia True\n",
"NIF True\n",
"Edad True\n",
"Hijos True\n",
"Ingresos True\n",
"Estado Civil True\n",
"Vacunadx True\n",
"dtype: bool"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2.isna().any() #todas las columnas tienen al menos un NaN. Mala suerte XD!"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "editorial-productivity",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.052458Z",
"start_time": "2022-02-16T20:11:36.036463Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
percent_missing (%)
\n",
"
\n",
" \n",
" \n",
"
\n",
"
Nombre
\n",
"
1.45
\n",
"
\n",
"
\n",
"
Apellido 1
\n",
"
8.70
\n",
"
\n",
"
\n",
"
Apellido 2
\n",
"
5.80
\n",
"
\n",
"
\n",
"
Sexo
\n",
"
10.14
\n",
"
\n",
"
\n",
"
Municipio
\n",
"
10.14
\n",
"
\n",
"
\n",
"
Provincia
\n",
"
8.70
\n",
"
\n",
"
\n",
"
NIF
\n",
"
66.67
\n",
"
\n",
"
\n",
"
Edad
\n",
"
5.80
\n",
"
\n",
"
\n",
"
Hijos
\n",
"
8.70
\n",
"
\n",
"
\n",
"
Ingresos
\n",
"
11.59
\n",
"
\n",
"
\n",
"
Estado Civil
\n",
"
7.25
\n",
"
\n",
"
\n",
"
Vacunadx
\n",
"
5.80
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" percent_missing (%)\n",
"Nombre 1.45\n",
"Apellido 1 8.70\n",
"Apellido 2 5.80\n",
"Sexo 10.14\n",
"Municipio 10.14\n",
"Provincia 8.70\n",
"NIF 66.67\n",
"Edad 5.80\n",
"Hijos 8.70\n",
"Ingresos 11.59\n",
"Estado Civil 7.25\n",
"Vacunadx 5.80"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"porcentaje_missings(df2) #reutilizamos la función del primer ejemplo para\n",
"#sacar el porcentaje de missings por columna"
]
},
{
"cell_type": "markdown",
"id": "instant-connection",
"metadata": {},
"source": [
"Observamos que la columna del NIF contiene un alto porcentaje de valores faltantes. \n",
"\n",
"Dado que no hemos definido ningún objetivo de análisis para este conjunto de datos y puesto que nuestra meta principal es aprender a tratar los valores faltantes, eliminaremos esta columna utilizando el método `.drop()`"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "featured-mountain",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.060476Z",
"start_time": "2022-02-16T20:11:36.054465Z"
}
},
"outputs": [],
"source": [
"df2 = df2.drop(columns=[\"NIF\"])"
]
},
{
"cell_type": "markdown",
"id": "united-jesus",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-14T19:19:36.650465Z",
"start_time": "2022-02-14T19:19:36.642487Z"
}
},
"source": [
"En estos momentos voy a hacer una copia del dataset `df2` que llamaré `df2Copia` y que utilizaremos más adelante."
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "searching-northern",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.069460Z",
"start_time": "2022-02-16T20:11:36.062461Z"
}
},
"outputs": [],
"source": [
"df2Copia = df2.copy()"
]
},
{
"cell_type": "markdown",
"id": "beautiful-disclosure",
"metadata": {},
"source": [
"Vamos a construir una función que analice de manera rápida (no muy estética, pero práctica) cuáles son las proporciones de las columnas categóricas:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "qualified-flood",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.079486Z",
"start_time": "2022-02-16T20:11:36.071460Z"
},
"scrolled": true
},
"outputs": [],
"source": [
"def proporciones(data):\n",
" columns = [\"Sexo\", \"Hijos\",\"Estado Civil\", \"Vacunadx\"]\n",
" for col in columns:\n",
" print(f\"La columna {col} tiene las siguientes proporciones: \")\n",
" print(dict(round(data[col].value_counts(normalize=True)*100,2)))"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "appreciated-demand",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.098458Z",
"start_time": "2022-02-16T20:11:36.081457Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"La columna Sexo tiene las siguientes proporciones: \n",
"{'H': 50.0, 'M': 50.0}\n",
"La columna Hijos tiene las siguientes proporciones: \n",
"{'NO': 58.73, 'SÍ': 41.27}\n",
"La columna Estado Civil tiene las siguientes proporciones: \n",
"{'Solter/x': 65.62, 'Casad/x': 20.31, 'Divorciad/x': 14.06}\n",
"La columna Vacunadx tiene las siguientes proporciones: \n",
"{'No': 64.62, 'SI': 35.38}\n"
]
}
],
"source": [
"proporciones(df2)"
]
},
{
"cell_type": "markdown",
"id": "encouraging-sleeping",
"metadata": {},
"source": [
"> **Atención**❗ : Más tarde haremos referencia a estas proporciones obtenidas, con el dataset `df2Copia`"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "abroad-victory",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.354467Z",
"start_time": "2022-02-16T20:11:36.100474Z"
}
},
"outputs": [
{
"data": {
"image/png": "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e/iNQTbHl3oUERGRMkutxh9CeLTwvZlt8N8ZNWpUxUw7GD9+PABjx44taxxJlRZTpcUDlRdTpcUDimldVFo8UHkxVVo8SVOnTt3wRORKnoveeecdxo4dywcffMCtt95Kq1atCj/a2FjXKs2mfhEREWnE+++/z1lnncVbb73FuHHjkkk/dUr8IiIiGfrwww85++yzee2117j00ksZMGBApsdX4hcREcnI8uXLOeecc3j++ee56KKLGDx4cOYxKPFLKqZOnVruED6lEmMSkXyZMWMGTz/9NGPGjKG2trYsMWgBHxERkYwMGzaMIUOGcO+99/Lwww+XJQYlfhERkYw0b96cCy+8kF133ZVLL72U6dOnZx6DEr+IiEiGWrRowSWXXEKfPn248MILmTVrVqbHVx+/pGLUqFHlDqFepc0tLsQjIvnVunVrLr/8co499liuvfZa9thjj8yOnVriN7ODgYPj023i11ozuzF+/3YI4cy0ji8iIlLJ3nzzTd59910OPfTQTI+bZo1/IHB80bZu8QHwCqDELyIiuTRhwgTatGnDwQcfnOlxU+vjDyH8JIRga3nslNaxRUREKtkrr7zCtGnTOPjgg2nbtm2mx1Yfv6Si0ubMz58/v9whiIjUmzNnDiEE9t5778yPrVH9IiIiGdtrr72oqqrigQceyPzYSvwiIiIZ23bbbfnSl77Efffdx7vvvpvpsZX4RUREyuDoo4/mo48+4o9//GOmx1Ufv6SiEufxi4hUkq5du9KtWzdmzZrFCSeckNlxVeMXEREpg2effZYXXniBESNGZHpcJX4REZEy2OTm8YuIiMinhRBYsGAB06dP55BDDtE8fpG8qLS1DkQkPe+88w5z586tfyxZsoQ2bdpw2GGHZR6LEr+IiEiJffjhh8yfP78+0b/yyisAtG3blkGDBnHEEUew5557ssUWW2QemxK/iIjIRvroo4+oq6urT/TPPvssq1evpkWLFgwYMIAvf/nL7LbbbvTo0YPq6uqyxqrELyIisgFef/11HnnkEebOncszzzzDJ598QnV1NX379uWYY45h0KBB9OvXj+bNm5c71DVYCKHcMXyeig9QRKScKmXdjMKaGWPHji1rHI2ZOnWqbeSf+FQuOuOMM5g3b1798/79+3P00UczaNAgWrVqtTHH2thY10o1fhERkQ1w/vnnM3v2bOrq6nj66ad55plnOPfcc6murqZnz57U1NTUP7baaqtyh1tPiV9ERGQDbLnllowePZrRo0cD8MEHH/DMM8/w9NNPU1dXx8SJE7nzzjsB2G677ejfvz8DBgygpqaGrl27UlVVnhn1SvwiIiIl0K5dO4YOHcrQoUMB+OSTT3juueeoq6ujrq6OOXPm8NBDD9Xv279/f2pqathrr73YaaedMouz4hN/pfRdQWX2X1VaTJUWD1ReTJUWDyimdVFp8YDuQ1HpNttsM/r160e/fv04/PDDCSHw+uuv13cN1NXVMXPmTO6//34mTJiQWVwVn/hFREQ2BWbGDjvswA477MBXvvIVAMaNG8ecOXMyjUNL9oqIiJRJOfr5lfhFRERyRIlfREQkR5T4RUREckSJX0REJEeU+EVERHJEiV9ERKRM3nzzTVq0aJHpMZX4RUREymDx4sXMnTuX/fbbL9PjKvGLiIiUwYQJE2jbti0HHXRQpsfVyn0iIuth6tSp5Q5BNgEvv/wy06dP59hjj6VNmzaZHls1fhERkYw9+eSTAIwcOTLzYyvxi4iIZGzYsGFUV1dz//33Z35sJX4REZGMbbPNNuy7775MmjSJpUuXZnps9fGLiKyHSrxVuDRNRx11FJMnT+bOO+/kxBNPzOy4qvGLiIiUwY477khtbS2PPPJIpsdV4hcRESmT9u3bs3LlykyPqcQvIiKSI0r8IiIiOaLELyIiUiZvvPEGLVu2zPSYSvwiIiJlsGjRIubNm6e1+kVERPKgsFb/mDFjMj2u5vGLiKwHrdUvpfDSSy/x2GOPcdxxx2mtfhERkU3dX//6VwBGjBiR+bGV+EVERDI2fPhwqqurmTRpUubHVuIXERHJWOfOnRk9ejSTJk3inXfeyfTY6uMXEVkPWqtfSiW5Vv9JJ52U2XFV4xcRESmDLl26MHToUK3VLyIikhft27dn1apVmR5TiV9ERCRHlPhFRERyRIlfREQkR5T4RUREckSJX0REJEeU+EVERMpg1apVLFu2LPPjagEfERGRDPz73/9mwYIF1NXV8fTTT7Nw4UJWrFhB165dM41DiV9ERCQFS5Ysoa6urj7Rv/TSS6xevZqqqiq6d+/OV7/6VWpqahg8eHCmcSnxi4iIbKRVq1bx4osv1if6uro6/vnPfwLQqlUr+vXrx3HHHUdNTQ19+/aldevWZYvVQghlO/i6GDVqVMUEWFgXe+DAgWWNQ0SkklXS/QwKpk6dahv5Jz6Vi1599VUeffRR6urqWLBgQX1/fceOHRkwYAA1NTUMGDCAbt26UV1dvT7H2thY10o1fhERkQ0wfvx45s2bV/98u+2244gjjmCfffahbdu2ZYxs7ZT4RURENsAFF1zA3Llz65v2n332Wa666irGjx/PTjvtVF/rr6mpYZtttsEs1Yr8OlPiFxER2QDt2rVj5MiRjBw5EoDly5ezaNGi+sF8U6ZMYeLEiYA3//fv37++MNCjR4/1bf4vGSX+DVBJ/VeFcQdjx44taxwFlRYPVF5MlRYPKKZ1UWnxQOXFVIgnr1q1asWgQYMYNGgQ4AP+Xn75ZZ5++un6VoG//OUvALRs2ZJ+/fpRU1PD8OHD6dGjR2ZxKvGLiIikoLq6mu7du9O9e3cOPvhgAN566601CgK33HILDz30ELfeemtmcSnxi4iIZGTrrbdmn332YZ999gHgiiuuYPbs2ZnGoCV7RUREyqQcA/6U+EVERHJEiV9ERCRHlPhFRERyRIlfREQkR5T4RUREckSJX0REJEeU+EVERHJEiV9ERCRHlPhFRERyRIlfREQkR5T4RUREckSJX0REJEeU+EVERHJEiV9ERCRHlPhFRERyRIlfREQkR5T4RUREckSJX0REJEeU+EVERHJEiV9ERCRHlPhFRERyRIlfREQkR5T4RUREckSJX0REJEeU+EVERMpk1apVmR+zWeZHFBERybFVq1bx+OOPc8899zB37lx23nnnTI+vxC8iIpKBd955h0mTJnHvvffy1ltv0alTJ0444QQOOOCATONQ4t8AU6dOLXcIn1JpMVVaPFB5MVVaPCJSeiEE6urquPvuu5k2bRorV65k991357TTTqO2tpbq6urMY1LiFxERKbEQApMnT+aOO+7gxRdfpE2bNhx00EGMGTOGHXfcsayxKfGLiIiU2NKlS7niiitYvXo1HTp04Mc//jG77LJLucMCNKpfRESk5Dp06MB1113HAQccwLJlyzj99NP5r//6Lx566CE+/vjjssamGv8GGDVqVLlDqDd+/HgAxo4dW9Y4CiotHqi8mCotHmiISURKp1u3bnz/+9/n5JNP5oEHHmDixIn89Kc/5ZprrmH//ffnwAMPZJtttsk8LiV+ERGRFLVt25bDDjuMr33ta8ybN4+7776b22+/ndtvv52hQ4dy1FFHUVNTk1k8SvwiIiIZqKqqYvDgwQwePJglS5Zw3333MXHiRC655BJuu+227OLI7EgiIiICQOfOnTnhhBMYPnw4K1euzPTYSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOaLELyIiApjZCDObaGavm1kws2+kdawQAkuWLOHtt99O6xCfqVnmRxQREalMbYE64Kb4KJn33nuPxYsXs3DhQhYvXsyiRYtYunQpAH379i3loT6XhRAyPeD6GjVqVMUEOH78eAAGDhxY1jhERGS92XrtbPYh8J0Qwo1xUwBYtWoVs2fP5rnnnqNnz54MGTKE6urqNX53+fLlPPfccyxatKj+8eabbxb+LjvuuCO9e/emT58+9OnTh+7du9O8efMNjnV9qcYvIiKyDlatWsXZZ5/NwoULWbFiBS1btqRPnz6cdNJJPPvssyxatIjFixfz8ssvs3r1agA6d+5M7969OfDAA+nTpw+9evWiTZs2Zf0/lPhFRETWwezZs1m4cCHLly8HvGY/b948Tj31VAA233xz+vTpw7Bhw+jTpw+9e/emQ4cO5Qy5UUr8IiIi6+C5555jxYoVn9peVVXF3nvvzahRo+jTpw8dO3YsQ3TrTol/A4waNarcIdQrjDsYO3ZsWeMoqLR4oPJiqrR4QDGti0qLByovpkqLJ2nq1Kkb/Td69uxJy5Yt62v8ANXV1XTq1IlHH32UKVOmANCxY8f6Gn/fvn3p3bs3bdu23ejjl4oSv4iIyDoYMmQIffv2ZcGCBXz00Ue0aNGCfv36MW7cOD755BOef/75+n7+RYsW8dhjj9X/bpcuXejdu3d9YaBHjx60aNGiLP+HEr+IiAhgZm2BHvFpFbCjmQ0E3gkhUF1dzbhx45g9ezbPP/88PXr0qB/VX11dTU1NDTU1NfV/74MPPqgvBCxevJj58+fz8MMPA95SsPPOO9OnTx9GjhzJ7rvvntn/qcQvIiLidgceTTy/ID5+V9hQXV1NbW0ttbW1n/vH2rVrx+67775GUn/77bfrp/gtXryYKVOmMGfOHG6//fbS/RefQ4lfREQECCFM5bPn0B9fimN07NiRYcOGMWzYMACuvPJKZs2aVYo/vc60ZK+IiEiOKPGLiIjkiBK/iIhIjijxi4iI5IgSv4iISI4o8YuIiOSIEr+IiEiOKPGLiIjkiBK/iIhIjijxi4iI5IgSv4iISI4o8YuIiOSIEr+IiEiOKPGLiIjkiBK/iIhIjijxi4iI5IgSv4iISI4o8YuIiJTBihUrWLp0aebHbZb5EUXKYODAgUydOrXcYayh0uIBxbQuKi0eqLyYKi2eSrJkyRJmzpzJjBkzmDdvHh9//DH9+/fPNAYlfhERkZSsXr2aRYsWMWPGDGbMmMELL7wAwHbbbceYMWMYOnQou+yyS6YxKfGLiIiU0LJly5gzZw4zZ85k1qxZLF26lKqqKmpqajjllFOora2lS5cumFlZ4lPiFxERKYGHH36YyZMnM3/+fFauXEnbtm0ZMmQItbW1DBkyhM0337zcIQJK/JIT8+fPZ+zYseUOA4Dx48cDVEw8oJjWRaXFA5UXU6XFk5TFuIMbbriBN954A4DOnTtz7LHHsueee9K+ffvUj70+lPhFRERK4Prrr2fu3LnMmDGDmTNncuWVV2Jm9O3bl9raWmpra+nWrVvZmvgLlPhFRERKoGXLluy5557sueeehBB47rnn6gsB119/Pddffz2dOnVi6NCh7LnnngwaNIjmzZtnHqcSv4iISImZGb169aJXr14cf/zx/Otf/2LmzJnMnDmTBx98kIkTJ9KyZUt22203xowZwx577JFZbEr8G6DS5qjOnz+/3CF8SqW9RlCZMcnaaf2FdVNpMVVaPJVgq622Yv/992fw4MFMmzaNCRMm8P777/PEE0/w0UcfKfGLiIhsClatWsWiRYt44oknmDlzJi+++CIA22+/PaNHj6a2tpYBAwZkGpMSv4iISAn9+9//5sknn+SJJ55g1qxZvPfee1RVVbHLLrtw6qmn1s/jLxclfhERkRJ45JFHmDRpEk899RQrV66kXbt27LHHHvXz+Nu2bVvuEAElfknJqFGjyh1CvUqbW1yIR0Q2Lddeey1Llixh33335cADD6Rfv35UV1eXO6xP0d35RERESuCCCy6gTZs2LFq0iO23374ikz4o8YuIiJRE7969ufTSS3nrrbc488wzee+998odUqOU+EVEREpkwIABXHzxxfz973/nrLPO4tVXXy13SJ+iPv4NUIn91yKbIt1jYe0qLaZKiycpy7UFBg8ezIUXXsj555/P8ccfz+DBgzn44IOpra2tiOZ/1fhFRERKbOjQodx+++2ccMIJvPrqq5x33nkcffTR3HLLLSxdurSssSnxi4iIpKBDhw4cc8wx3HbbbVx44YV06dKF66+/nsMPP5yLL76Yuro6QgiZx6WmfhERkRRVV1czfPhwhg8fzquvvso999zD5MmTmTJlCj169OC4445j+PDhmcWjGr+IiEhGdtxxR7773e9yxx13cMYZZ/DBBx/wy1/+MtMY1jvxm9kXzewuM/uHmX1kZm+Y2WQz269ov3ZmdomZLTKzFWa2NO73xdKFLyIi0vS0atWKAw88kN13353Vq1dneuz1SvxmNg54GNgdmAj8DJgEbA2MSuzXHpgJnAOsBH4N/BHYDXjYzE4oQewiIiKynta5j9/MTgTOAn4HnBRC+Ljo55slnv4E6Af8CTgihLAy7nMO8CRwtZlNDiH8fePCFxER2TSZ2QjgTGAwsB3wzRDCjYmffw04Ga9UdwT2DiFM/by/u041fjNrAVwCvEojSR8ghPBJ4ukh8ev5haQf9/kn8HOgFfCtdTm2iIhITrUF6oDTgeWN/LwN8ARwxvr80XWt8e+LN+ePB1ab2f5ADbACmB1CmFG0/zbx64uN/K3Cti8CF65PsCIiIpuKVatWsWTJEpYtW8aMGTMYMmTIGgv8hBDuB+4HMLMbi38/hHBz/FnH9Tnuuib+L8SvK4B5eNKvZ2bTgMNCCG/FTW8D2wI7AwuK/la3+LX3+gQqIiKyqVi1ahVnn302f/vb31i1ahUXXXQRffv2Zdy4camv7reug/s6xa9nAQEYDrQDdgEeBEYAdyT2nxS/XmBm9f+BmW0NfC8+bb+BMYuIiDRps2fPZuHChaxatQqA5cuXs2DBAmbPnp36sW1dVg0ys98AJwEfAX1CCC8nftYaWAzsAOwZQphhZtsCs4AueP/EFLwv4iDgdWAgsCKE0KqU/4yIiEhTsPfee5+HD4RPVsBXAz9+9NFHLy7e38w+BL6THNyX+FlH4C3WcXDfujb1vxu/zksmfYAQwjIzmwycAAwBZoQQ3jSzLwDnAQcA/4k3//8e+AXwHPDPdTy2iIjIJuXRRx+9CLioHMde18S/OH599zN+XrjjQH0NPoSwBPhOfNQzs33it3PW8dgiIiJSIuua+Kfgffv9zKwqhFC8zFBhsN9L6/C3jotfb13HY4uIiOSOmbUFesSnVcCOZjYQeCeE8KqZdQB2BLaM+/Qws3eBf4QQ/vGZf3dd7wxkZvcAY4AzQghXJbaPBh4A3gN2CiG8Z2ZVQOsQwodFf+NYfAGgGcDwRgoQIiIiApjZKODRRn70uxDCN8zsG8ANjfz8ghDCTz7z765H4t8BXyigC94CMA+frncw3hpwZAjhj3HftsAS4CHgBXzAwl5ALbAQ+FII4Y11OrCIiIiUzDonfqifjnc+XvPfFngfmA5cGkKYndhvM3x9/mH4aH/wAX1/AMaHEJaVJHoRERFZL+uV+EVERKRpW+/b8oqIiEjTpcQvIiKSI0r8IiIiOaLELyIikiNK/CIiIjmixC8iIpIjSvwiIiI5osQvIiKSI0r8IiIiOfL/+6z20OawhusAAAAASUVORK5CYII=\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"msno.matrix(df2,figsize=(8,5), fontsize=12); #en blanco, cada missing value"
]
},
{
"cell_type": "markdown",
"id": "heated-geology",
"metadata": {},
"source": [
"Vemos que tenemos algunas filas con valores faltantes.\n",
"\n",
"Consideraremos que si un registro no contiene sus dos apellidos no es un registro válido."
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "greek-lucas",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.365473Z",
"start_time": "2022-02-16T20:11:36.358461Z"
}
},
"outputs": [],
"source": [
"df2 = df2[(pd.notnull(df2[\"Apellido 1\"])) & (pd.notnull(df2[\"Apellido 2\"]))]"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "aboriginal-organization",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.616459Z",
"start_time": "2022-02-16T20:11:36.368459Z"
}
},
"outputs": [
{
"data": {
"image/png": "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e/vtt7n33nvZbrvtCnl+JX8REZGcjRkzhoULF3LMMccU8vxK/iIiIjmaPXs2EydOZL/99qNLly6FxKAL+4iILINJkyYVHYK0cFdddRUrr7wyhx56aGExqOYvIiKSozlz5tCxY0fatGlTWAxK/iIiIjk6/PDDefXVV7nrrrsKi0HJX0REJEdf//rX6du3L2PHjuXDDz8sJAb1+YuILIPBgwcXHcIio0aNKjoE+RLMjGHDhjF06FBuvPHGQkb8q+YvIiKSs549ezJo0CDGjx9fyPMr+YuIiBRg3XXX5ZNPPinkuZX8RURESkbJX0REpGSU/EVERApQVJM/KPmLiIjkbu7cuUycOJHNN9+8kOdX8hcREcnZ9ddfzwcffMDQoUMLeX4lfxERkRz9+9//5rbbbmO33Xaje/fuhcSgRX5ERJaBLuwjy+vqq6+mrq6Oo446qrAYVPMXERHJ0fPPP896661Hp06dCotByV9ERCRHBx54IM8//zyTJ08uLAYlfxERkRztvvvubLjhhowePbqw6X7q8xcRWQa6sI8sr/r6eoYOHcrIkSMZP348Bx54YO4xqOYvIiKSs/79+7PVVltx0003FfL8Sv4iIiIF6NmzJ3Pnzi3kuZX8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFREQKEEIo7LkbCntmkRz169ePSZMmFR3G59RaTLUWD9ReTLUWDyimLJjZScBZwGUhhGOr8T/nzZvH008/zZNPPsm0adN47rnnaNu2bTX+9TJT8hcREUkxs22A7wNPLc//+fjjj3n22WeZPn06Tz75JLNmzWLBggU0NDTQu3dvDj/8cLbddtvqBL2MlPxFREQiM+sI3AAcBZzW3D4LFixg6tSpzJ49mx49etC/f3/q6+v57LPPmDlzJtOnT2fatGk888wzfPrpp9TV1dGzZ08OOuggttxyS/r06UObNm1yfV2VlPxFREQajQZuDSE8aGafS/4LFixgxIgRzJw5k/nz59OqVSs6derEOuusw9NPP838+fMB6N69O0OGDGGLLbZg8803p3379nm/jiVS8hcREQHM7BigO3Do4vaZOnUqM2fOZN68eYA37b/++uvMmzeP3XffnS222IK+ffvSsWPHnKL+cpT8pRSmT5/O8OHDiw5jkVGjRgHUTEy1Fg/UXky1Fg8opmXxRQMQzawnPsBvuxDCp4vbb/bs2Ytq92lz5szh5ZdfZo011mD11Venffv2NDTUboqt3chERETyMwDoBDxrZsm2emCgmQ2dP38+rVu3pkePHrRp02ZRzR+gVatWbL311rz11luMGTMGgDZt2tC3b1+22GIL+vXrR/fu3amvr8/5JS2ekr+IiAjcDjxese0aYDZwVqtWrZ4G6N+/P5tuuikzZszg448/pnXr1vTu3ZvTTz+d+vp65syZs2jA37Rp05gyZQoAHTp0oF+/fvTr148tt9ySbt26kSpk5E7JX0RESi+E8D/gf+ltZvYh8N8QwjPJtvr6es477zymTp3Kc889R/fu3ReN9gfo2LEjgwYNYtCgQQC88847TQoDDz/8MACrrbYa/fr1Y4cddmD77bfP5TWmKfmLiIgsg/r6egYMGMCAAQO+cN9OnTqx8847s/POOwPw5ptvLioITJ06lUcffZQJEyZkHfLnaHlfERGRZoQQBldrdb9Ely5d2GOPPTj55JPZa6+9WLBgQTX//VJT8hcRESkZJX8REZGSUfIXEREpmWVO/ma2k5mNM7M3zexjM3vDzO41sz1T+6xvZr8zsykV+z1kZt81s5Wq+zJERERkaS1T8jez84C/AlsDdwAXAncBawKDU7tuDHwHmIPPnbwQuBPoCvweuNfMNNNARESkAEudgOOaxycCfwC+H0L4pOLxdG3+78BqIYSFzewzEdgB2A+4+UvGLSIiIl/SUtX8zaw18GvgFZpJ/ADptZBDCJ9UJv7UPrfHuz2+TMAiIiJlYGYDzewOM3vdzIKZHVnx+H6x2/3t+Pjgpf3fS9vsvwvetH8bsNDM9jKzkWZ2vJl98SoHjYHWA8nYgKeW9u9ERERKqAPwDHA8MK+Zx9vjLe0nLOs/Xtpm/6/Gn/OBacBm6QfNbDJwQAjh7YrtnYBjAcMLD7vgl0u8MYRw57IGKyIisiJYsGABr7/+OgsWLODRRx9tskRwIoRwN3A3gJmNrfwfIYTr4mOdlvX5l7bmv1b8eSIQgO2BlYHN8T78gcAtzfxdJ+A04FRgGD4Q8ALgyGUNVEREZEWwYMECRowYwSOPPMLChQs544wzGDFiRK6r/S1t8k/2+wzYJ4TwcAhhbgjhaWBf4DVgUGUXQAhhVgjB8BaGrsCPge8Dk81s9aq8AhERkRZk6tSpzJw5k88++wyAefPmMWPGDKZOnZpbDBZC+OKdzM4FRgD/CCF8ro/fzK4GvgcMDyFc9AX/62DgJuCyaq+ZLCIiUut22GGHXwC/pGkFfCFw2oMPPnhmc39jZnOBY0MIY5t5rBPwNrBDCGHS0sSwtH3+/xd//m8xj78Xf7Zdiv+VXL5o8FI+t4iIyArjwQcfPAM4o8gYlrbZ/368r7+3mTX3N8kAwBeX4n+tG39+tpTPLSIiIlW0VMk/hPAyvkLfBviUg0XMbFdgN7xV4J64bcs4rY+KfTsASbfAXV86ahERkRWcmXUws35m1g/P1xvE+xvEx1ePjyUV8O7x8S5f+L+Xps8/Psl6+HzC9fGWgGnAhsAQvFXg4BDCn+O+twPbxv1fAT6Kf7cHsGrcvlsIYe5SPbmIiEjJxEV7HmzmoT+EEI6Mi/5c08zjvwoh/HKJ/3tpk38MZE182t4+wNrA+8BDwNkhhKmp/fYCDgH6A52Bdvi4gKfwJX1/H0JQs7+IiEgBlin5i4iISMu3zJf0FRERkZZNyV9ERKRklPxFRERKRslfRESkZJT8RURESkbJX0REpGSU/EVEREpGyV9ERKRklPxFRERKRslfRESkZP4/miUOGPjH8AgAAAAASUVORK5CYII=\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"msno.matrix(df2,figsize=(8,5), fontsize=12); #en blanco, cada missing value"
]
},
{
"cell_type": "markdown",
"id": "respected-programmer",
"metadata": {},
"source": [
"Filtremos nuestros datos para ver qué pinta tienen las filas que al menos contienen un valor faltante:"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "unauthorized-landscape",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.642459Z",
"start_time": "2022-02-16T20:11:36.619459Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Nombre
\n",
"
Apellido 1
\n",
"
Apellido 2
\n",
"
Sexo
\n",
"
Municipio
\n",
"
Provincia
\n",
"
Edad
\n",
"
Hijos
\n",
"
Ingresos
\n",
"
Estado Civil
\n",
"
Vacunadx
\n",
"
\n",
" \n",
" \n",
"
\n",
"
1
\n",
"
Ana Belén
\n",
"
Carrasco
\n",
"
Dimitrova
\n",
"
NaN
\n",
"
NaN
\n",
"
Zaragoza
\n",
"
22.0
\n",
"
NO
\n",
"
1000.0
\n",
"
Solter/x
\n",
"
SI
\n",
"
\n",
"
\n",
"
3
\n",
"
María
\n",
"
Gallego
\n",
"
Martínez
\n",
"
NaN
\n",
"
Sevilla
\n",
"
Sevilla
\n",
"
45.0
\n",
"
NO
\n",
"
1500.0
\n",
"
Solter/x
\n",
"
No
\n",
"
\n",
"
\n",
"
5
\n",
"
Manuel
\n",
"
García
\n",
"
Muñoz
\n",
"
H
\n",
"
Madrid
\n",
"
NaN
\n",
"
59.0
\n",
"
SÍ
\n",
"
1825.0
\n",
"
Divorciad/x
\n",
"
No
\n",
"
\n",
"
\n",
"
10
\n",
"
Juan
\n",
"
Sanz
\n",
"
Hernández
\n",
"
H
\n",
"
Rentería
\n",
"
Guipúzcoa
\n",
"
22.0
\n",
"
SÍ
\n",
"
NaN
\n",
"
Solter/x
\n",
"
SI
\n",
"
\n",
"
\n",
"
13
\n",
"
José Luis
\n",
"
Romero
\n",
"
Busto
\n",
"
H
\n",
"
San Sebastián
\n",
"
Guipúzcoa
\n",
"
45.0
\n",
"
SÍ
\n",
"
NaN
\n",
"
Solter/x
\n",
"
No
\n",
"
\n",
"
\n",
"
62
\n",
"
María Carmen
\n",
"
Romano
\n",
"
Abellán
\n",
"
M
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Nombre Apellido 1 Apellido 2 Sexo Municipio Provincia Edad \\\n",
"1 Ana Belén Carrasco Dimitrova NaN NaN Zaragoza 22.0 \n",
"3 María Gallego Martínez NaN Sevilla Sevilla 45.0 \n",
"5 Manuel García Muñoz H Madrid NaN 59.0 \n",
"10 Juan Sanz Hernández H Rentería Guipúzcoa 22.0 \n",
"13 José Luis Romero Busto H San Sebastián Guipúzcoa 45.0 \n",
"62 María Carmen Romano Abellán M NaN NaN NaN \n",
"\n",
" Hijos Ingresos Estado Civil Vacunadx \n",
"1 NO 1000.0 Solter/x SI \n",
"3 NO 1500.0 Solter/x No \n",
"5 SÍ 1825.0 Divorciad/x No \n",
"10 SÍ NaN Solter/x SI \n",
"13 SÍ NaN Solter/x No \n",
"62 NaN NaN NaN NaN "
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2[df2.isnull().any(axis=\"columns\")]"
]
},
{
"cell_type": "markdown",
"id": "other-application",
"metadata": {},
"source": [
"Dado que la columna Sexo contiene 2 NaN:"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "ceramic-virus",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.654456Z",
"start_time": "2022-02-16T20:11:36.645459Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2[\"Sexo\"].isnull().sum()"
]
},
{
"cell_type": "markdown",
"id": "instant-escape",
"metadata": {},
"source": [
"Y analizando los datos asumimos que Ana Belén y María son de género Femenino, imputaremos la categoría \"M\" en la columna Sexo sin necesidad de hacerlo seleccionando los índices. Para ello, utilizaremos en esta ocasión el método `.fillna()`"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "beautiful-editor",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.663459Z",
"start_time": "2022-02-16T20:11:36.657460Z"
}
},
"outputs": [],
"source": [
"df2[\"Sexo\"] = df2[\"Sexo\"].fillna(\"M\")"
]
},
{
"cell_type": "markdown",
"id": "alpha-preliminary",
"metadata": {},
"source": [
"Otro registro que podemos eliminar por completo es el que tiene índice 62 por contar con demasiados Missing Values. Asumiremos ese riesgo! 😋\n",
"\n",
"La siguiente operación funcionará porque pandas no pierde el índice hasta que no lo reseteemos nosotrxs."
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "personalized-emerald",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.673458Z",
"start_time": "2022-02-16T20:11:36.666472Z"
}
},
"outputs": [],
"source": [
"df2 = df2.drop(62)"
]
},
{
"cell_type": "markdown",
"id": "oriented-olympus",
"metadata": {},
"source": [
"Para poder disponer del registro 1 (Ana Belén Carrasco) imputaremos Zaragoza al municipio.\n",
"\n",
"De forma análoga, para disponer del registro 5 (Manuel García) imputaremos Madrid a la provincia (Madrid = CC.AA. uniprovincial)"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "legislative-malta",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.684466Z",
"start_time": "2022-02-16T20:11:36.677463Z"
}
},
"outputs": [],
"source": [
"df2.loc[1,\"Municipio\"] = \"Zaragoza\"\n",
"df2.loc[5,\"Provincia\"] = \"Madrid\""
]
},
{
"cell_type": "markdown",
"id": "posted-gazette",
"metadata": {},
"source": [
"Nos queda trabajar con los valores faltantes correspondientes a ingresos:"
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "uniform-bobby",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.712457Z",
"start_time": "2022-02-16T20:11:36.686458Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Nombre
\n",
"
Apellido 1
\n",
"
Apellido 2
\n",
"
Sexo
\n",
"
Municipio
\n",
"
Provincia
\n",
"
Edad
\n",
"
Hijos
\n",
"
Ingresos
\n",
"
Estado Civil
\n",
"
Vacunadx
\n",
"
\n",
" \n",
" \n",
"
\n",
"
10
\n",
"
Juan
\n",
"
Sanz
\n",
"
Hernández
\n",
"
H
\n",
"
Rentería
\n",
"
Guipúzcoa
\n",
"
22.0
\n",
"
SÍ
\n",
"
NaN
\n",
"
Solter/x
\n",
"
SI
\n",
"
\n",
"
\n",
"
13
\n",
"
José Luis
\n",
"
Romero
\n",
"
Busto
\n",
"
H
\n",
"
San Sebastián
\n",
"
Guipúzcoa
\n",
"
45.0
\n",
"
SÍ
\n",
"
NaN
\n",
"
Solter/x
\n",
"
No
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Nombre Apellido 1 Apellido 2 Sexo Municipio Provincia Edad \\\n",
"10 Juan Sanz Hernández H Rentería Guipúzcoa 22.0 \n",
"13 José Luis Romero Busto H San Sebastián Guipúzcoa 45.0 \n",
"\n",
" Hijos Ingresos Estado Civil Vacunadx \n",
"10 SÍ NaN Solter/x SI \n",
"13 SÍ NaN Solter/x No "
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2[df2.isnull().any(axis=\"columns\")]"
]
},
{
"cell_type": "markdown",
"id": "focused-brass",
"metadata": {},
"source": [
"En este caso imputaremos el valor más habitual de Ingresos para las personas de 22 años."
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "timely-privacy",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.725463Z",
"start_time": "2022-02-16T20:11:36.715459Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"El valor más frecuente de ingresos para una persona de 22 años es: 1000.0\n"
]
}
],
"source": [
"#extremos la moda de los ingresos de todos los registros donde la persona tenga 22 años\n",
"val = df2[df2[\"Edad\"]==22][\"Ingresos\"].mode()[0]\n",
"print(f\"El valor más frecuente de ingresos para una persona de 22 años es: {val}\")\n",
"\n",
"#imputamos ese valor al registro 10.\n",
"df2.loc[10,\"Ingresos\"] = val"
]
},
{
"cell_type": "markdown",
"id": "civil-journal",
"metadata": {},
"source": [
"Finalmente, para la persona de 45 años imputaremos la mediana en su rango de edad."
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "secondary-visibility",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.738456Z",
"start_time": "2022-02-16T20:11:36.729461Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"El valor más frecuente de ingresos para una persona de 45 años es: 1500.0\n"
]
}
],
"source": [
"#extremos la mediana de los ingresos de todos los registros donde la persona tenga 45 años\n",
"val = df2[df2[\"Edad\"]==45][\"Ingresos\"].median()\n",
"print(f\"El valor más frecuente de ingresos para una persona de 45 años es: {val}\")\n",
"\n",
"#imputamos ese valor al registro 13.\n",
"df2.loc[13,\"Ingresos\"] = val"
]
},
{
"cell_type": "markdown",
"id": "appointed-middle",
"metadata": {},
"source": [
"En estos momentos ya dispondríamos de un dataset apto para el análisis y modelado."
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "weighted-reggae",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.750459Z",
"start_time": "2022-02-16T20:11:36.741460Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Nombre 0\n",
"Apellido 1 0\n",
"Apellido 2 0\n",
"Sexo 0\n",
"Municipio 0\n",
"Provincia 0\n",
"Edad 0\n",
"Hijos 0\n",
"Ingresos 0\n",
"Estado Civil 0\n",
"Vacunadx 0\n",
"dtype: int64"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2.isnull().sum()"
]
},
{
"cell_type": "markdown",
"id": "minor-talent",
"metadata": {},
"source": [
"Recuperando la copia del dataset `df2` llamada `df2Copia` como dataset de referencia ahora, también podríamos haber optado por eliminar todas las filas que contengan algún valor nulo con el método `.dropna(axis=1)`\n",
"- `df.dropna(axis=\"index\")` elimina todas las filas que tengan como mínimo un missing value\n",
"\n",
"Para las columnas:\n",
"- `df.dropna(axis=\"columns\")` elimina todas las columnas que tengan como mínimo un missing value\n"
]
},
{
"cell_type": "code",
"execution_count": 49,
"id": "anonymous-cooling",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.767459Z",
"start_time": "2022-02-16T20:11:36.754466Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Nombre 0\n",
"Apellido 1 0\n",
"Apellido 2 0\n",
"Sexo 0\n",
"Municipio 0\n",
"Provincia 0\n",
"Edad 0\n",
"Hijos 0\n",
"Ingresos 0\n",
"Estado Civil 0\n",
"Vacunadx 0\n",
"dtype: int64"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2Copia = df2Copia.dropna(axis=\"index\")\n",
"df2Copia.isnull().sum()"
]
},
{
"cell_type": "markdown",
"id": "fiscal-criminal",
"metadata": {},
"source": [
"Podemos analizar si para las columnas categóricas, el hecho de haber eliminado las filas sin ton ni son afecta a las proporciones de las mismas:"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "satellite-albany",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:36.784465Z",
"start_time": "2022-02-16T20:11:36.770469Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"La columna Sexo tiene las siguientes proporciones: \n",
"{'M': 52.63, 'H': 47.37}\n",
"La columna Hijos tiene las siguientes proporciones: \n",
"{'NO': 59.65, 'SÍ': 40.35}\n",
"La columna Estado Civil tiene las siguientes proporciones: \n",
"{'Solter/x': 64.91, 'Casad/x': 22.81, 'Divorciad/x': 12.28}\n",
"La columna Vacunadx tiene las siguientes proporciones: \n",
"{'No': 63.16, 'SI': 36.84}\n"
]
}
],
"source": [
"proporciones(df2Copia)"
]
},
{
"cell_type": "markdown",
"id": "invisible-oregon",
"metadata": {},
"source": [
"Si comparamos con las proporciones originales, vemos que en ocasiones podemos sacrificar unos cuantos registros para ganar tiempo, sin que ello perjudique gravemente la muestra de datos con la que contamos para el análisis/entrenamiento del modelo."
]
},
{
"cell_type": "markdown",
"id": "concrete-vessel",
"metadata": {},
"source": [
"
Bonus!
"
]
},
{
"cell_type": "markdown",
"id": "entitled-extra",
"metadata": {},
"source": [
"También me gustaría dejarte por aquí algunas otras píldoras que pueden servirte de gran ayuda.\n",
"\n",
"\n",
"
1- Puedes hacer que pandas interprete los valores infinitos `np.inf` como `np.nan`
"
],
"text/plain": [
" Año Género Número Ventas\n",
"0 2014.0 NaN 400.0\n",
"1 2014.0 Bélico 80.0"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"#coloco a propósito un valor infinito en la primera celda del campo Género.\n",
"\n",
"df.iloc[0,1] = np.inf \n",
"df.head(2) #como puedes ver lo interpreta como NaN"
]
},
{
"cell_type": "markdown",
"id": "unsigned-rider",
"metadata": {},
"source": [
"\n",
"
2- También puedes utilizar la función .replace() para reemplazar un valor cualquiera (también un missing value) por el valor que desees.
4- utilizar las componentes de estacionalidad y tendencia en una serie temporal con Missing Values para interpolar y reemplazar los valores faltantes.\n",
"
\n",
"\n",
"> 🔵 Puedes volver aquí cuando quieras, si aún no tienes los conocimientos sobre Time Series."
]
},
{
"cell_type": "markdown",
"id": "demanding-sailing",
"metadata": {},
"source": [
"🔵 El conjunto de datos AirPassengers proporciona el recuento mensual de los pasajeros de una aerolínea estadounidense, desde 1949 hasta 1960."
]
},
{
"cell_type": "code",
"execution_count": 58,
"id": "irish-verse",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:37.710494Z",
"start_time": "2022-02-16T20:11:37.653462Z"
}
},
"outputs": [],
"source": [
"ruta_dataset = \"dataset_notebook_demo.xlsx\"\n",
"df4 = pd.read_excel(ruta_dataset, na_values=treat_NaNs, sheet_name=\"ejAirPassengers\")"
]
},
{
"cell_type": "code",
"execution_count": 59,
"id": "proved-contrast",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:37.780502Z",
"start_time": "2022-02-16T20:11:37.713474Z"
}
},
"outputs": [],
"source": [
"from statsmodels.tsa.seasonal import seasonal_decompose\n",
"\n",
"df4[\"Month\"] = pd.to_datetime(df4[\"Month\"]) #convertimos a tipo fecha la variable Month.\n",
"df4.set_index('Month', inplace=True) #la colocamos como índice del dataset.\n",
"index = df4[pd.isnull(df4[\"#Passengers\"])].index #creamos una máscara con los índices donde #Passengers es null.\n",
"#para poder detectar la estacionalidad de la serie y la tendencia tomamos la decisión\n",
"#de interpolar linealmente la serie temporal.\n",
"df4['#Passengers1']= df4['#Passengers'].interpolate()"
]
},
{
"cell_type": "code",
"execution_count": 60,
"id": "ethical-reach",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:38.237461Z",
"start_time": "2022-02-16T20:11:37.782458Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"analysis = df4[['#Passengers1']].copy()\n",
"\n",
"#descomponemos la serie en tendencia, estacionalidad y residuo\n",
"decompose_result_mult = seasonal_decompose(analysis, model=\"multiplicative\")\n",
"\n",
"trend = decompose_result_mult.trend\n",
"seasonal = decompose_result_mult.seasonal\n",
"residual = decompose_result_mult.resid\n",
"\n",
"decompose_result_mult.plot();"
]
},
{
"cell_type": "code",
"execution_count": 61,
"id": "valid-notification",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:38.248463Z",
"start_time": "2022-02-16T20:11:38.240462Z"
}
},
"outputs": [],
"source": [
"#dado que tenemos delante una serie temporal con tendencia ascendente\n",
"#y una estacionalidad marcada, podemos interpolar de la siguiente manera:\n",
"df4.loc[index, \"#Passengers\"] = trend.loc[index]*seasonal.loc[index]"
]
},
{
"cell_type": "code",
"execution_count": 62,
"id": "sought-fashion",
"metadata": {
"ExecuteTime": {
"end_time": "2022-02-16T20:11:38.471495Z",
"start_time": "2022-02-16T20:11:38.251456Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df4[\"#Passengers\"].plot(figsize = (10,6)); #Señal ajustada\n",
"df4[\"#Passengers1\"].plot(figsize = (10,6)); #Señal interpolada linealmente"
]
},
{
"cell_type": "markdown",
"id": "smaller-flush",
"metadata": {},
"source": [
"Nada mal, ¿Verdad?😊"
]
},
{
"cell_type": "markdown",
"id": "protecting-dallas",
"metadata": {},
"source": [
"\n",
"
5- No te ciñas a pandas y explora otros métodos de imputación pertenecientes a otras librerías como scikit-learn, fancyimpute, miceforest,etc.)
\n",
" \n",
"Te dejo un par de enlaces que considero que explican bastante bien la imputación múltiple iterativa e imputación KNN:\n",
"- Imputación KNN\n",
"- Imputación Iterativa\n"
]
},
{
"cell_type": "markdown",
"id": "clinical-watts",
"metadata": {},
"source": [
"
\n",
"¡Hasta la próxima pequeñx gran Egger! 🐣 Ya estás un pasito más cerca de lograr tus metas!\n",
"