<jupyter_start><jupyter_text>Programación para *Data Science*  Unidad 6: Preprocesamiento de datos en PythonEjercicios para practicar  IntroducciónEn este Notebook encontraréisun primer conjunto de **ejercicios para practicar**, éstos no puntúan para la PEC, pero os recomendamos que los intentéis resolver como parte del proceso de aprendizaje. Encontraréis ejemplos de posibles soluciones a los ejercicios al propio notebook, pero es importante que intentéis resolverlos vosotros antes de consultar las soluciones. Las soluciones os permitirán validar vuestras respuestas, así como ver alternativas de resolución de las actividades. También os animamos a preguntar cualquier duda que surja sobre la resolución de los **ejercicios para practicar** en el foro del aula.  Ejercicios para practicar**Los siguientes 3 ejercicios no puntúan para la PEC**, pero os recomendamos que los intentéis resolver antes de pasar a los ejercicios propios de la PEC. También encontraréis las soluciones a estos ejercicios al final del Notebook.  Ejercicio 1Cargue los datos del fichero `bank_edited.csv` en un dataframe. Este conjunto de datos recoge información respecto a una campaña de marketing de un banco portugués. El conjunto original se puede encontrar en el [repositorio de datos de Machine Learning de la UC Irvine] (http://archive.ics.uci.edu/ml/datasets/Bank+Marketing), pero el conjunto que utilizaremos tiene alguna modificación .Observación: revise la documentación de la función [ `read_csv`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html) para ver qué parámetro disponemos para ajustar el proceso de cargar de datos.Los valores del estado civil (atributo `marital`) contienen errores tipográficos y incluyen el uso de diferentes nomenclaturas. En este ejercicio unificaremos la nomenclatura de los valores de esta variables.NM a) ¿Cuantos valors diferentes tiene el atributo `marital` en el conjunto de datos? Mostrad estos valores.<jupyter_code># Respuesta<jupyter_output><empty_output><jupyter_text>b) Unificad los atributos `marital` en los valores: "single", "married" o "divorced".<jupyter_code># Respuesta<jupyter_output><empty_output><jupyter_text>c) ¿Qué columnas contienen valores perdidos?<jupyter_code># Respuesta<jupyter_output><empty_output><jupyter_text>d) Calculad el primer y el tercer cuartil del atributo "balance".<jupyter_code># Respuesta<jupyter_output><empty_output><jupyter_text>Ejercicio 2 El atributo `poutcome` contiene información sobre si el cliente del banco contractó un deposito. Calula la correlacióm entre el atributo `poutcome` y el resto de atributos (usa la función ['corr'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.corr.html)). ¿Qué variable presenta mayor correlación con `poutcome`?NM<jupyter_code># Respuesta<jupyter_output><empty_output><jupyter_text>Ejercicio 3 El módulo sklearn incluye varios datasets de ejemplo, dentro del módulo `sklearn.datasets`. Estos datasets se almacenan en formato `Bunch`, propio de sklearn. Un `Bunch` es un objeto tipo diccionario, los atributos interesantes son: `data`, con los datos en crudo, `target`, con generalmente las etiquetas de clasificación o etiquetas objetivo, `target_names`, el significado de las etiquetas, `feature_names`, el significado de las características o atributos, `DESCR` , la descripción completa del conjunto de datos. Importa el dataset `iris` de `sklearn`. Almacena los datos este dataset como un objeto `pandas`, con los correpondientres nombres de variables. Añade la variable `target` en el dataframe con el nombre de atributo `Species` y los valors con el tipo de especie de cada muestra.EG<jupyter_code># Respuesta<jupyter_output><empty_output><jupyter_text>A continuación, los **ejercicios y preguntas teóricas que debe completar en esta PEC** y que forman parte de la evaluación de esta unidad.  Soluciones a los ejercicios para practicar  Ejercicio 1 a) ¿Cuantos valores diferentes tiene el atributo `marital` en el conjunto de datos? Mostrad estos valores.<jupyter_code>import pandas as pd
import numpy as np

data = pd.read_csv("data/bank_edited.csv", sep=";", dtype={"balance":np.float})

import numpy as np

# Con unique podemos encotrar los valors únicos

v = data.marital.unique()

print("There are {} different values in marital:\n{}".format(len(v), v))<jupyter_output>There are 11 different values in marital:
['married' 'single' 'marrid' 'divorced' 'maried' 'sing' 'Married'
 'MARRIED' 'DIVORCED' 'Single' 'SINGLE']<jupyter_text>b) Unificad los atributos `marital` en los valores: "single", "married" o "divorced".<jupyter_code>data.loc[(data.marital == "Married") | (data.marital == "maried") | (data.marital == "MARRIED") | 
         (data.marital == "marrid"), "marital"] = "married"
data.loc[(data.marital == "Single") | (data.marital == "SINGLE") | (data.marital == "sing"), "marital"] = "single"
data.loc[(data.marital == "DIVORCED"), "marital"] = "divorced"

# Comprobación

v = data.marital.unique()
print("There are {} different values in marital:\n{}".format(len(v), v))<jupyter_output>There are 3 different values in marital:
['married' 'single' 'divorced']<jupyter_text>c) Qué columnas contienen valores perdidos?<jupyter_code># Para esto usamos la función  any_isna a cada columna del dataframe 
print(data.isna().any())<jupyter_output>age          False
job          False
marital      False
education    False
default      False
balance       True
housing      False
loan         False
contact      False
day           True
month        False
duration      True
campaign     False
pdays        False
previous     False
poutcome     False
y            False
dtype: bool<jupyter_text>d) Calculad el primer y el tercer cuartil del atributo `balance`.<jupyter_code>print((data['balance'].quantile(0.25)))
print(data['balance'].quantile(0.75))<jupyter_output>68.0
1476.0<jupyter_text>Ejercicio 2 El atributo `poutcome` contiene información sobre si el cliente del banco contractó un deposito. Calula la correlacióm entre el atributo `poutcome` y el resto de atributos (usa la función `corr'). Qué variable presenta mayor correlación con 'poutcome'?<jupyter_code># Visualizamos los valores de la columna poutcome
import pandas as pd
import numpy as np
import warnings

warnings.filterwarnings('ignore')

data.poutcome.unique()
# Seleccionamos únicamente la muestras que contienen  informacióno precisa sobre el ciente contrató o no el depósito

data_pout = data[data.poutcome.isin(("failure","success"))]

# Discretizamos la columna poutcome para poder calcular la correlación 

data_pout['poutcome_cat'] = data_pout.poutcome.astype("category").cat.codes

# Calculamos la correlación con el resto de columnas 

data_pout.corr()["poutcome_cat"]<jupyter_output><empty_output><jupyter_text>Observad que la columna `pdays` muestra tenir mayor correlació en valor absoluto con  poutcome_cat.  Tened en cuenta que hemos asignado un 0/1 a "failure"/"succes" de manera arbitraria, así que el signo no es significtivo en este caso.  Ejercicio 3El módulo sklearn incluye varios datasets de ejemplo, dentro del módulo `sklearn.datasets`. Estos datasets se almacenan en formato `Bunch`, propio de sklearn. Un `Bunch` es un objeto tipo diccionario, los atributos interesantes son: `data`, con los datos en crudo, `target`, con generalmente las etiquetas de clasificación o etiquetas objetivo, `target_names`, el significado de las etiquetas, `feature_names`, el significado de las características o atributos, `DESCR` , la descripción completa del conjunto de datos.Importa el dataset `iris` de `sklearn`. Almacena los datos este dataset como un objeto `pandas`, con los correpondientres nombres de variables. Añade la variable `target` en el dataframe con el nombre de atributo `Species` y los valors con el tipo de especie de cada muestra.<jupyter_code>from sklearn import datasets
import pandas as pd
iris_bunch = datasets.load_iris()
iris_pandas = pd.DataFrame(iris_bunch['data'],columns=iris_bunch['feature_names'])
iris_pandas['Species'] = iris_bunch['target_names'][iris_bunch['target']]

iris_pandas.head()
iris_pandas.tail()
iris_pandas.describe()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08362923962287254, 'fraction_numerical': 0.0033059875107138486, 'mean_word_length': 5.700574241181296, 'pattern_counts': {'":': 1, '<': 45, '<?xml version=': 0, '>': 45, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '12', 'dir': 'jupyter-structured-clean-dedup', 'id': '279823', 'license': 'MIT', 'n_tokens_mistral': 2728, 'n_tokens_neox': 2705, 'n_words': 919, 'path': 'uoc_semestre1/22.401 - Programming Fundamentals/prog_datasci_6-master/prog_datasci_6_preproc_EjerciciosResueltos.ipynb', 'repo_name': 'xaviuniversityuoc/uoc_BS_dataScience', 'size': '8167'}