# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# + [markdown] deletable=true editable=true slideshow={"slide_type": "slide"}
# <img src="https://cdn.shortpixel.ai/spai/w_600+q_lossy+ret_img+to_webp/https://www.numfocus.org/wp-content/uploads/2016/07/pandas-logo-300.png" />
#
#
# ## Continuación del tutorial pandas
# <div style="text-align: right">
#     Autores: <NAME>, <NAME>, <NAME>, <NAME>
# </div>

# + deletable=true editable=true jupyter={"outputs_hidden": true} slideshow={"slide_type": "slide"}
# Para usarlo primero hay que importarlo
from pandas import Series, DataFrame
import pandas as pd

# + [markdown] deletable=true editable=true
# ### Solución al ejercicio 1
#     - Leer datos desde el archivo `DATOS_Ej.csv`.
#     - Muestren los primeros 10
#     - Muestren los últimos 10
#     - Muestren solo los nombres de los propietarios
#     - Agregar una columna de Edad
#     - Asignar una edad a cada registro (como prefieran)
#     - Agregar 10 registros, uno por cada compañero de clase (puede inventar los datos, excepto el nombre)
#     - Cuenten cuántas casas y departamentos hay (tipo de bien) en la BD
#     - Indiquen cuantos Juan son propietarios
#     - Llenar los missing data con el valor predominante en cada columna
#     - Contar cuantos elementos hay de cada columna
#     - Copien la BD a otro Dataframe
#     - En el nuevo Dataframe
#         - Borrar todos los registros de localidad Laraquete
#         - Borrar las fichas con valore entre 30 y 60.
#     

# + [markdown] deletable=true editable=true slideshow={"slide_type": "slide"}
# - Leer datos desde archivo.
#

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
Datos=pd.read_csv("DATOS_Ej.csv", index_col=0)
Datos

# + [markdown] deletable=true editable=true slideshow={"slide_type": "slide"}
# ### Ejercicio con pandas
# - Leer datos desde archivo.
# - Llenar los missing data con el valor predominante en cada columna
# - Muestren los primeros 10
# - Muestren los últimos 10
# - Muestren solo los nombres de los propietarios
# - Agregar una columna de Edad
# - Asignar una edad a cada registro (como prefieran)
# - Agregar 10 registros, uno por cada compañero de clase (puede inventar los datos, excepto el nombre)
# - Cuenten cuántas casas y departamentos hay (tipo de bien) en la BD
# - Me digan cuantos Juan son propietarios
# - Copien la BD a otro Dataframe
# - En el nuevo Dataframe
#     - Borrar todos los registros de localidad Laraquete
#     - Borrar las fichas con valore entre 30 y 60.
#     

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
#Muestren los primeros 10
Datos.head(10)

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
#Muestren los últimos 10
Datos.tail(10)

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
#Muestren solo los nombres de los propietarios
Datos.PROPIETARIO
Datos['PROPIETARIO']

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
#Si lo queremos ir accediendo como lista hacemos
L=list(Datos['PROPIETARIO'])
L[0]

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
#Agregar una columna de Edad
n_datos=Datos.reindex(index=list(Datos.index),
                      columns=list(Datos.columns)+['Edad'])
n_datos

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
#Agregar una columna de Edad (otra forma)
n_datos['Edad']=10
n_datos

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
#ASIGNAR EDAD RANDOM
import random
for index, row in n_datos.iterrows():
    v=random.randint(18,90)
    n_datos.loc[n_datos.index==index,"Edad"] = v
n_datos.head()

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
n_datos.tail()

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
'''Agregar 10 registros, uno por cada compañero de clase 
(puede inventar los datos, excepto el nombre)
'''
import random
import numpy as np
d_temp=DataFrame(columns=n_datos.columns)

Alumnos=["Manuel","Santiago","Hugo","Briana","Olivia","Axel","Rodrigo",
         "Daniel","Dulce","Hector"]

for i in range(0,10):
    d_temp.loc[i,"COMUNA"] = random.choice(["Arauco",np.nan])
    d_temp.loc[i,"LOCALIDAD"]= random.choice(["Arauco","Carampangue",
                                              "Laraquete",np.nan])
    d_temp.loc[i,"TIPO DE BIEN"]= random.choice(["departamento",
                                                 "Casa",np.nan])
    d_temp.loc[i,"NORMATIVA"]= random.choice(["Urbana",
                                              "Rural",np.nan])
    d_temp.loc[i,"PROPIETARIO"]= Alumnos[i]
    d_temp.loc[i,"Edad"]= random.randint(20,25)
    
d_temp

# + deletable=true editable=true jupyter={"outputs_hidden": true} slideshow={"slide_type": "slide"}
n_datos=n_datos.append(d_temp, ignore_index=True)

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
n_datos.tail(11)

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
'''Cuenten cuántas casas y departamentos hay (tipo de bien) en la BD
'''
casas=n_datos["TIPO DE BIEN"]=="Casa"
sum(casas)

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
casas=n_datos.loc[n_datos["TIPO DE BIEN"]=="Casa",].count()
casas

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
casas["TIPO DE BIEN"]

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
'''Cuenten cuántas casas y departamentos hay (tipo de bien) en la BD
'''
departamentos=n_datos["TIPO DE BIEN"]=="departamento"
sum(departamentos)

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
departamentos=n_datos.loc[n_datos["TIPO DE BIEN"]
                          =="departamento",].count()
departamentos["TIPO DE BIEN"]

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
'''Me digan cuantos Juan son propietarios
'''
juanes=n_datos.PROPIETARIO=="Juan"
sum(juanes)

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
'''Llenar los missing data con el valor predominante en cada columna
'''
Predominantes=[]
def F_predominantes(p):
    
    for c in n_datos.columns:
        t=n_datos.xs(c, axis=1).mode()
        p.append(t.values[0])
    return p

Predominantes=F_predominantes(Predominantes)  
Predominantes

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
t=n_datos.xs("Edad", axis=1).mode()
t

# + deletable=true editable=true jupyter={"outputs_hidden": true} slideshow={"slide_type": "slide"}
x=0
datos_nonan=n_datos.copy()
columnas = datos_nonan.columns

for c in columnas:
    datos_nonan[c].fillna(Predominantes[x], inplace=True)
    x = x + 1

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
datos_nonan.tail(11)

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
n_datos.tail(11)

# + deletable=true editable=true jupyter={"outputs_hidden": true} slideshow={"slide_type": "slide"}
#Contar cuantos elementos hay de cada columna
columnas = datos_nonan.columns
e_columas = []

for c in columnas:
    x = datos_nonan[c].value_counts()
    e_columas.append(x)

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
x = datos_nonan['Edad'].value_counts()
x

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
#En e_columnas se almacenan los elementos únicos en cada columna.
len(e_columas[5])

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
i=0
for c in columnas:
    print("En la Columna",c,"Hay ", len(e_columas[i]),
          " elementos diferentes ")
    i+=1

# + deletable=true editable=true jupyter={"outputs_hidden": true} slideshow={"slide_type": "slide"}
borrar_DF = n_datos.copy()

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
#Borrar todos los registros de localidad Laraquete
borrar_DF.drop(borrar_DF.index[borrar_DF.LOCALIDAD == "Laraquete"],
               inplace=True)
borrar_DF

# + deletable=true editable=true jupyter={"outputs_hidden": true} slideshow={"slide_type": "slide"}
#Borrar todos los registros de localidad Laraquete
borrar_DF = borrar_DF[borrar_DF.LOCALIDAD != "Laraquete"]

# + deletable=true editable=true jupyter={"outputs_hidden": false} slideshow={"slide_type": "slide"}
#Borrar indices entre 30 y 60
borrar_DF = borrar_DF[(borrar_DF.index < 30) | (borrar_DF.index > 60)]
borrar_DF.head(40)

StarcoderdataJupyterScriptsDedupFiltered