#!/usr/bin/env python
# coding: utf-8

# # Calidad del dato 2

# ## Caso titanic

# In[1]:


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

import warnings
warnings.filterwarnings('ignore')

pd.options.display.float_format = '{:.2f}'.format #Desactivar notación científica en pandas:
np.set_printoptions(suppress=True) #Desactivar notación científica en numpy:
pd.set_option('display.max_columns', None) #comando para mostrar todas las columnas


# In[57]:


df1 = pd.read_csv("./datos/calidad_2.csv", sep=";", decimal=".", encoding="WINDOWS-1252")


# In[5]:


df1.head()


# In[6]:


df1.info()


# In[7]:


df1.describe()


# In[10]:


# ¿Cuántos valores nulos tenemos por columna?
df1.isnull().sum()


# Se observan 177 NAs (valores perdidos) en la variable "age"
# La variable "Survived" esta como variable continua, pero debería ser una categoría igual que Pclass

# In[11]:


# Comprobamos las variables Cabin y Embarked
df1.Cabin.value_counts()


# In[33]:


# Como no vemos todos los elementos, modificamos la configuración.
pd.set_option('display.max_rows', 150)
df1.Cabin.values


# In[35]:


df1.Embarked.values


# Acordaros de que podíamos completar los NAN con .fillna('nuevo valor')

# In[36]:


import sweetviz
informeTitanic = sweetviz.analyze(df1)


# In[30]:


informeTitanic.show_html()


# In[58]:


# Tenemos varios elementos en Cabin y Embarked que aparecen como nan.  
# Modificamos la categoría Sex y la traducimos
df1.Sex [df1.Sex == "female"] = 'Mujer'
df1.Sex [df1.Sex == "male"] = 'Hombre'


# In[38]:


df1.Sex.value_counts()


# In[39]:


# Dividimos el nombre en nombre y apellidos.
df1.Name.head()


# In[59]:


df1['Apellido'] = df1.Name.str.split(",", expand=True)[0]
df1.Apellido


# In[60]:


# Dividimos el nombre para extraer el título
df1['Titulo'] = df1.Name.str.split(",", expand=True)[1].str.split(".", expand=True)[0]
df1['Nombre'] = df1.Name.str.split(",", expand=True)[1].str.split(".", expand=True)[1]


# In[55]:


df1.head()


# In[63]:


# Tenemos varias variables que no aportan.  Las borramos.
del df1['PassengerId']
df1.drop('Name', axis=1, inplace=True)


# Ahora estan los datos organizados y limpios para poder aplicar tecnicas de reemplazo de valores perdidos.
# Tambien, podemos utilizar graficos para ver la distribucion de las variables

# In[67]:


import seaborn as sns
import matplotlib.pyplot as plt
histograma = sns.histplot(df1.Age)
histograma.set_title("Distribución edad")
histograma.set_ylabel("Frecuencia")
histograma.set_xlabel("Edad")
plt.show()


# In[74]:


# La variable Sex es una variable categórica,la tipamos como tal
df1['Sex'] = df1.Sex.astype('category')


# In[77]:


# Otra forma de pintar los datos
distSex = df1.Sex.value_counts().plot(kind='bar')
distSex.set_title("Distribución sexo")


# In[80]:


# O con seaborn
sns.countplot(df1.Sex)


# In[92]:


#También podríamos hacer subsets de los datos, en vez de hacer imputaciones.
#Nos quedamos con aquellos datos, donde la edad no es NA
df2 = df1 [df1.Sex.notnull()]


# In[97]:


df2.Sex.isnull().sum()


# In[98]:


df2.Embarked.isnull().sum()


# In[99]:


df3 = df2 [df2.Embarked.notnull()]
df3.Embarked.isnull().sum()

