0% encontró este documento útil (0 votos)
273 vistas24 páginas

Acin215 - Grupo8.Ipynb - Colab

Analitica

Cargado por

bsand
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
273 vistas24 páginas

Acin215 - Grupo8.Ipynb - Colab

Analitica

Cargado por

bsand
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 24

TRABAJO GRUPAL SEMANA 4

Grupo N°8
NRC1753

1. ANDRÉS BARRERA SOTO


2. CAROL VALDEBENITO CUEVAS
3. JUAN GARRIDO FUHROP
4. MARCO MENDOZA CIFUENTES
5. NIDIA ALUCEMA CAMPILLAY

Universidad
AndrésBello®
Conectar•Innovar•Liderar

 1. PROBLEMA

 1.1. Contexto
Dataset:

El conjunto de datos 'clientes.xlxs' fue descargado de una base de datos de ventas que contiene
todas las facturas realizadas por una empresa el año 2022.

Objetivo:

La empresa bancaria tiene como objetivo realizar un análisis del comportamiento


de sus clientes, pero sus datos están corruptos y nesecitan corregir todos los
errores para poder realizar el análisis..

Desarrollo:

Tomando el dataset de la empresa “clientes.xlsx”, utilice lenguaje Python, para realizar


preprocesamiento de los datos que cumpla con los siguientes puntos:

1. Identibque errores de registro, datos faltantes y datos atípicos en la base de datos de la


empresa. Explique un resumen de los casos encontrados.
2. Corrija los errores a través de una rutina de limpieza, transformación e imputación de datos
para cada caso. Fundamente su elección.
3. Realice un breve resumen estadístico donde corrobore las correcciones realizadas,
interpretando los resultados de todos los estadísticos, grábcos y tablas.
4. Realice una transformación de variables categóricas a numéricas a través del método de
encoding, donde muestre qué número se le asignó a cada clase.

 1.2. Librerías
# OPERACIONES CON ARREGLOS (MATRICES Y VECTORES)
import numpy as np

# ESTRUCTURA Y MANIPULACIÓN DE DATOS


import pandas as pd

# VISUALIZACIÓN
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

import seaborn as sb
from seaborn import kdeplot
from seaborn import lmplot
from seaborn import boxplot
# Configura el estilo de seaborn para desactivar la notación científica
sb.set(style="ticks", rc={'axes.formatter.limits': (-2, 10)})

# ADVERTENCIAS
import warnings
warnings.filterwarnings('ignore')

1.3. Carga de datos


[ ] ↳ 5 celdas ocultas

2. CONJUNTO DE DATOS

[ ] ↳ 29 celdas ocultas

 3. PREPROCESAMIENTO

 3.1. Errores de registro


# Unificar clases de la columna 'Educación'
df['Educacion'] = df['Educacion'].replace({'Técnico': 'Tecnico'})
df['Educacion'].unique()

array(['Tecnico', nan, 'Media', 'Universitario', 0, 'Magister',


'Doctorado'], dtype=object)

# Unificar clases de la columna 'Medio_pago'


#df['Medio_pago'] = df['Medio_pago'].replace({'Crédito': 'Credito', 'Débito': 'Debito'
#df['Medio_pago'].unique()

# Unificar clases de la columna 'Region'


df['Educacion'] = df['Educacion'].replace({'Tecinoc': 'Tecnico'})
df['Educacion'].unique()

array(['Tecnico', nan, 'Media', 'Universitario', 0, 'Magister',


'Doctorado'], dtype=object)

#Cantidad de Nivel de Educación


df['Educacion'].value_counts()

count

Educacion

Tecnico 89680

Universitario 53792

Media 25208

Magister 21752

Doctorado 9512

0 112

dtype: int64

 3.2. Limpieza

Se eliminan todos los registros que no aportan al estudio:


# Filtrar filas distintas de 0
df = df[df['Seguro'] != 0]

text_columns = df.select_dtypes(include=['object']).columns

for column in text_columns:


# Detectar valores no numéricos
errores = df[column].apply(pd.to_numeric, errors='coerce').isna()
# Mostrar conteo de valores no numéricos
if errores.any():
print(f"Valores no numéricos en la columna {column}:\n", df.loc[errores, colum

Valores no numéricos en la columna Seguro:


Seguro
Automotriz 62998
Salud 41824
Desgravamen 33818
Vida 23168
Viaje 13208
Accidente 12778
Robo 12440
Name: count, dtype: int64
Valores no numéricos en la columna Genero:
Genero
Femenino 101248
Masculino 98824
$ 24
Name: count, dtype: int64
Valores no numéricos en la columna Ciudad:
Ciudad
Santiago 78384
Concepción 21848
Rancagua 17328
Valparaíso 16144
Chillán 11456
Arica 10368
Osorno 7544
Los Ángeles 7336
Copiapó 5208
La Serena 4520
Puerto Montt 4360
Antofagasta 3600
Buin 3000
Temuco 2008
Iquique 1424
Ovalle 1400
Linares 1296
Villarrica 1128
Talca 1064
Calama 776
$ 8
Name: count, dtype: int64
Valores no numéricos en la columna Region:
Region
Metropolitana 80312
Biobío 29544
O'Higgins 16968
Valparaíso 15792
Los Lagos 11664
Ñuble 11288
Arica y Parinacota 10160
Coquimbo 5784
Atacama 5064
Antofagasta 4240
Maule 2352
Araucanía 2008
Tarapacá 1408
Biobio 136
$ 24
Name: count, dtype: int64
Valores no numéricos en la columna Estado_Civil:
Estado_Civil
# Eliminar columnas completamente vacías
empty_columns = df.columns[df.isnull().all()]
print(f"Columnas vacías a eliminar: {empty_columns.tolist()}")

# Eliminar columnas
df.drop(columns=empty_columns, inplace=True)

# Verificar duplicados
duplicates_count = df.duplicated().sum()
print(f"Número de registros duplicados: {duplicates_count}")

# Eliminar duplicados si corresponde


if duplicates_count > 0:
df.drop_duplicates(inplace=True)

Columnas vacías a eliminar: ['Columna 11']


Número de registros duplicados: 0

# Filtrar filas distintas de $


df = df[df['Seguro'] != '$']

 3.3. Duplicados
# Encontrar duplicados
duplicados = df[df.duplicated(subset=['Id_cliente'], keep=False)]
duplicados

Id_cliente Seguro Genero Ciudad Region Estado_Civil Educacion N°_Hijos

Se corrobora la eliminacion

Para eliminar blas duplicadas y conservar la última aparición:

df = df.drop_duplicates(subset=['Id', 'N°_factura'], keep='last')

 3.4. Datos nulos (missing)

Identibcacion de datos nulos.


#Datos nulos
df.isna().sum()

Id_cliente 0

Seguro 239

Genero 400

Ciudad 264

Region 3728

Estado_Civil 448

Educacion 528

N°_Hijos 312

Cupo_TC 416

Gasto_Mensual 1192

dtype: int64

Eliminación de registros con menor cantidad de nulos:

print(df.columns)

Index(['Id_cliente', 'Seguro', 'Genero', 'Ciudad', 'Region', 'Estado_Civil',


'Educacion', 'N°_Hijos', 'Cupo_TC', 'Gasto_Mensual'],
dtype='object')
# Eliminar filas donde 'Ciudad', 'Genero', o 'Cupo_TC' sean nulos

df = df.dropna(subset=['Ciudad', 'Genero', 'Cupo_TC'])

# Mostrar las primeras filas para verificar que se eliminaron las filas nulas
print("DataFrame después de eliminar filas con datos nulos:")
print(df.head())

# Mostrar información del DataFrame para verificar el número de registros


print("Información del DataFrame después de la limpieza:")
print(df.info())

DataFrame después de eliminar filas con datos nulos:


Id_cliente Seguro Genero Ciudad Region Estado_Civil \
0 23210 Accidente Femenino 0 Los Lagos $
2 23212 Accidente $ Ovalle NaN Soltero(a)
5 23215 Accidente Femenino Buin NaN Soltero(a)
6 23216 Accidente Femenino Concepción Biobío Casado(a)
7 23217 Accidente Femenino Puerto Montt Los Lagos Soltero(a)

Educacion N°_Hijos Cupo_TC Gasto_Mensual


0 Tecnico 0.0 10000000.0 592360.0
2 NaN 3.0 1000000.0 -578670.0
5 Tecnico 5.0 1000000.0 530661.0
6 NaN 5.0 -1000000.0 NaN
7 Tecnico 1.0 1000000.0 904428.0
Información del DataFrame después de la limpieza:
<class 'pandas.core.frame.DataFrame'>
Index: 199704 entries, 0 to 200583
Data columns (total 10 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Id_cliente 199704 non-null int64
1 Seguro 199569 non-null object
2 Genero 199704 non-null object
3 Ciudad 199704 non-null object
4 Region 196128 non-null object
5 Estado_Civil 199384 non-null object
6 Educacion 199312 non-null object
7 N°_Hijos 199544 non-null float64
8 Cupo_TC 199704 non-null float64
9 Gasto_Mensual 198632 non-null float64
dtypes: float64(3), int64(1), object(6)
memory usage: 16.8+ MB
None
#Datos nulos
df.isna().sum()

Id_cliente 0

Seguro 135

Genero 0

Ciudad 0

Region 3576

Estado_Civil 320

Educacion 392

N°_Hijos 160

Cupo_TC 0

Gasto_Mensual 1072

dtype: int64

Imputación de datos faltantes de las variables con mayor cantidad de nulos.


#Imputacion por moda
for column in ['Ciudad', 'Seguro', 'Genero', 'Region', 'Estado_Civil', 'Educacion']:
moda = df[column].mode()[0] # Encuentra la moda
df[column].fillna(moda, inplace=True) # Rellena nulos con la moda

# Mostrar las primeras filas para verificar los cambios


print("DataFrame después de imputar valores nulos por moda:")
print(df.head())

DataFrame después de imputar valores nulos por moda:


Id_cliente Seguro Genero Ciudad Region Estado_Civil \
0 23210 Accidente Femenino 0 Los Lagos $
2 23212 Accidente $ Ovalle NaN Soltero(a)
5 23215 Accidente Femenino Buin NaN Soltero(a)
6 23216 Accidente Femenino Concepción Biobío Casado(a)
7 23217 Accidente Femenino Puerto Montt Los Lagos Soltero(a)

Educacion N°_Hijos Cupo_TC Gasto_Mensual


0 Tecnico 0.0 10000000.0 592360.0
2 Tecnico 3.0 1000000.0 -578670.0
5 Tecnico 5.0 1000000.0 530661.0
6 Tecnico 5.0 -1000000.0 NaN
7 Tecnico 1.0 1000000.0 904428.0

#Datos nulos
df.isna().sum()

Id_cliente 0

Seguro 0

Genero 0

Ciudad 0

Region 3576

Estado_Civil 320

Educacion 0

N°_Hijos 160

Cupo_TC 0

Gasto_Mensual 1072

dtype: int64
#Resumen estadístico columnas que son numéricas
resumen_estadistico = df.describe()

# Mostrar el resumen
print("Resumen estadístico de las columnas numéricas:")
print(resumen_estadistico)

Resumen estadístico de las columnas numéricas:


Id_cliente N°_Hijos Cupo_TC Gasto_Mensual
count 199704.000000 199544.000000 1.997040e+05 1.986320e+05
mean 123506.721768 1.876438 1.455554e+06 1.768507e+06
std 57903.398500 1.558588 1.276941e+06 8.534547e+06
min 23210.000000 0.000000 -2.000000e+06 -9.350280e+05
25% 73355.750000 1.000000 1.000000e+06 7.140360e+05
50% 123501.500000 2.000000 1.000000e+06 9.352970e+05
75% 173647.250000 3.000000 2.000000e+06 1.941800e+06
max 223793.000000 5.000000 1.000000e+08 9.460400e+08

# Comprobar valores nulos por columna


valores_nulos = df.isnull().sum()
print("Muestra los Valores nulos por columna después de la imputación:")
print(valores_nulos[valores_nulos > 0]) # Mostrar solo columnas con valores nulos

Muestra los Valores nulos por columna después de la imputación:


Region 3576
Estado_Civil 320
N°_Hijos 160
Gasto_Mensual 1072
dtype: int64

# Eliminar valores negativos en 'Cupo_TC'


df = df[df['Cupo_TC'] >= 0]

# Convertir a entero
df['Cupo_TC'] = df['Cupo_TC'].astype(int)

# Eliminar valores negativos en 'Gasto_Mensual' y convertir a entero


df = df[df['Gasto_Mensual'] >= 0]
df['Gasto_Mensual'] = df['Gasto_Mensual'].astype(int)
#verificar Datos
print(df['Cupo_TC'].dtype) # Debe ser int
print(df['Gasto_Mensual'].dtype)

int64
int64
import matplotlib.pyplot as plt
import seaborn as sns

# Seleccionar las columnas "Cupo_TC" y "Gasto_Mensual"


columnas = df[["Cupo_TC", "Gasto_Mensual"]]

# Selección de las columnas "Cupo_TC" y "Gasto_Mensual"


columnas = df[["Cupo_TC", "Gasto_Mensual"]]

# Ahora se crea una figura con dos subplots en una fila


fig, axes = plt.subplots(1, 2, figsize=(12, 4)) # 1 fila, 2 columnas

# Creación de gráfico de caja para cada columna


for i, column in enumerate(columnas.columns):
ax = axes[i]
ax.boxplot(columnas[column], patch_artist=True, boxprops=dict(facecolor='lightblue
ax.set_xlabel(column) # Título del eje x con el nombre de la columna
ax.set_ylabel("Valores") # Título del eje Y
ax.set_title(f"Boxplot de {column}")

# Se Ajusta la disposición para mostrar gráficos uno al lado del otro


plt.tight_layout()
plt.show()
df.info()

<class 'pandas.core.frame.DataFrame'>
Index: 198512 entries, 0 to 200583
Data columns (total 10 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Id_cliente 198512 non-null int64
1 Seguro 198512 non-null object
2 Genero 198512 non-null object
3 Ciudad 198512 non-null object
4 Region 194960 non-null object
5 Estado_Civil 198192 non-null object
6 Educacion 198512 non-null object
7 N°_Hijos 198360 non-null float64
8 Cupo_TC 198512 non-null int64
9 Gasto_Mensual 198512 non-null int64
dtypes: float64(1), int64(3), object(6)
memory usage: 16.7+ MB
df.describe()

1 to 8 of 8 entries Filter

index Id_cliente N°_Hijos Cupo_TC Gasto_Mensual


count 198512.0 198360.0 198512.0 198512.0
mean 123480.6190457 1.8760233918128655 1454783.61191263 1769264.4103731764
std 57902.12618313948 1.5582162517219422 1278049.831438998 8537015.086534398
min 23210.0 0.0 0.0 0.0
25% 73355.75 1.0 1000000.0 714386.0
50% 123501.5 2.0 1000000.0 935642.0
75% 173647.25 3.0 2000000.0 1941800.0
max 223793.0 5.0 100000000.0 946040000.0
Show 25 per page

Like what you see? Visit the data table notebook to learn more about interactive tables.

Distributions

2-d distributions
200000-
175000-

150000-

125000-

÷100000-
75000-
50000-
25000-

0- •

250005000075000100000125000150000175000200000225000
Id_cliente

from scipy import stats


Debnición Valores Atípicos, desviación estandar

# importar
from scipy import stats
# Se define la cantidad de desviaciones estándar
corte = 3
# Calcular el Z-Score para 'Cupo_TC'
z_cupo_tc = stats.zscore(df['Cupo_TC'])
outliers_cupo_tc = (abs(z_cupo_tc) > corte)
# Imprime el recuento de valores atípicos en 'Cupo_TC'
print(f"Recuento de valores atípicos en Cupo TC: {outliers_cupo_tc.sum()}")

# Calcular el Z-Score para 'Gasto_Mensual'


z_gasto_mensual = stats.zscore(df['Gasto_Mensual'])
outliers_gasto_mensual = (abs(z_gasto_mensual) > corte)
# Imprime el recuento de valores atípicos en 'Gasto_Mensual'
print(f"Recuento de valores atípicos en Gasto Mensual: {outliers_gasto_mensual.sum()}"

Recuento de valores atípicos en Cupo TC: 40


Recuento de valores atípicos en Gasto Mensual: 40

#verificación
print("Valores atípicos en Cupo TC:")
print(df[outliers_cupo_tc])

print("Valores atípicos en Gasto Mensual:")


print(df[outliers_gasto_mensual])

Valores atípicos en Cupo TC:


Id_cliente Seguro Genero Ciudad Region \
0 23210 Accidente Femenino 0 Los Lagos
9850 33060 Vida Masculino Los Ángeles Biobío
10035 33245 Automotriz Masculino Copiapó Atacama
10263 33473 Automotriz Masculino Santiago Metropolitana
10498 33708 Vida Femenino Osorno Los Lagos
25073 48283 Accidente Femenino 0 Los Lagos
34923 58133 Vida Masculino Los Ángeles Biobío
35108 58318 Automotriz Masculino Copiapó Atacama
35336 58546 Automotriz Masculino Santiago Metropolitana
35571 58781 Vida Femenino Osorno Los Lagos
50146 73356 Accidente Femenino 0 Los Lagos
59996 83206 Vida Masculino Los Ángeles Biobío
60181 83391 Automotriz Masculino Copiapó Atacama
60409 83619 Automotriz Masculino Santiago Metropolitana
60644 83854 Vida Femenino Osorno Los Lagos
75219 98429 Accidente Femenino 0 Los Lagos
85069 108279 Vida Masculino Los Ángeles Biobío
85254 108464 Automotriz Masculino Copiapó Atacama
85482 108692 Automotriz Masculino Santiago Metropolitana
85717 108927 Vida Femenino Osorno Los Lagos
100292 123502 Accidente Femenino 0 Los Lagos
110142 133352 Vida Masculino Los Ángeles Biobío
110327 133537 Automotriz Masculino Copiapó Atacama
110555 133765 Automotriz Masculino Santiago Metropolitana
110790 134000 Vida Femenino Osorno Los Lagos
125365 148575 Accidente Femenino 0 Los Lagos
135215 158425 Vida Masculino Los Ángeles Biobío
135400 158610 Automotriz Masculino Copiapó Atacama
135628 158838 Automotriz Masculino Santiago Metropolitana
135863 159073 Vida Femenino Osorno Los Lagos
150438 173648 Accidente Femenino 0 Los Lagos
160288 183498 Vida Masculino Los Ángeles Biobío
160473 183683 Automotriz Masculino Copiapó Atacama
160701 183911 Automotriz Masculino Santiago Metropolitana
160936 184146 Vida Femenino Osorno Los Lagos
175511 198721 Accidente Femenino 0 Los Lagos
185361 208571 Vida Masculino Los Ángeles Biobío
185546 208756 Automotriz Masculino Copiapó Atacama
185774 208984 Automotriz Masculino Santiago Metropolitana
186009 209219 Vida Femenino Osorno Los Lagos

Estado_Civil Educacion N°_Hijos Cupo_TC Gasto_Mensual


0 $ Tecnico 0.0 10000000 592360
9850 Soltero(a) Tecnico 0.0 10000000 586746
10035 Casado(a) Tecnico 4.0 100000000 736465
10263 Soltero(a) Tecnico 0.0 100000000 996749
10498 Casado(a) Media 1.0 50000000 440074
25073 $ Tecnico 0.0 10000000 592360
34923 Soltero(a) Tecnico 0.0 10000000 586746
35108 Casado(a) Tecnico 4.0 100000000 736465
35336 Soltero(a) Tecnico 0.0 100000000 996749
35571 Casado(a) Media 1.0 50000000 440074
50146 $ Tecnico 0.0 10000000 592360
59996 Soltero(a) Tecnico 0.0 10000000 586746
60181 Casado(a) Tecnico 4.0 100000000 736465
60409 Soltero(a) Tecnico 0.0 100000000 996749
60644 Casado(a) Media 1.0 50000000 440074
NOTA

Es importante revisar el comportamiento de las variables antes de este paso, ya


que en otros casos puede que hayan datos que no sean realmente atípicos pero
por su naturaleza queden fuera del rango normal, por lo que no sería necesario
realizar ninguna modibcación. En otros casos hay que hacer un bltro para eliminar
sólo los datos de las variables que correspondan. Por otro lado, cuando hay
demasiados datos atípicos (más de un 10-20% de los registros) es mejor imputar
los datos en vez de eliminarlos.

# Generar el resumen estadístico y formatear los montos


resumen_estadistico = df.describe()
resumen_estadistico['Cupo_TC'] = resumen_estadistico['Cupo_TC'].apply('{:.0f}'.format)
resumen_estadistico['Gasto_Mensual'] = resumen_estadistico['Gasto_Mensual'].apply('{:.

# Mostrar el resumen estadístico formateado


print(resumen_estadistico)

Id_cliente N°_Hijos Cupo_TC Gasto_Mensual


count 198512.000000 198360.000000 198512 198512
mean 123480.619046 1.876023 1454784 1769264
std 57902.126183 1.558216 1278050 8537015
min 23210.000000 0.000000 0 0
25% 73355.750000 1.000000 1000000 714386
50% 123501.500000 2.000000 1000000 935642
75% 173647.250000 3.000000 2000000 1941800
max 223793.000000 5.000000 100000000 946040000

 4. ANÁLISIS DE DATOS CORREGIDOS


# Generar el resumen estadístico
resumen_estadistico = df.describe()

# Formatear las columnas numéricas


resumen_estadistico['Cupo_TC'] = resumen_estadistico['Cupo_TC'].apply('{:.0f}'.format)
resumen_estadistico['Gasto_Mensual'] = resumen_estadistico['Gasto_Mensual'].apply('{:.

# Mostrar el resumen estadístico formateado


print(resumen_estadistico)

Id_cliente N°_Hijos Cupo_TC Gasto_Mensual


count 198512.000000 198360.000000 198512 198512
mean 123480.619046 1.876023 1454784 1769264
std 57902.126183 1.558216 1278050 8537015
min 23210.000000 0.000000 0 0
25% 73355.750000 1.000000 1000000 714386
50% 123501.500000 2.000000 1000000 935642
75% 173647.250000 3.000000 2000000 1941800
max 223793.000000 5.000000 100000000 946040000

df.head()

Id_cliente Seguro Genero Ciudad Region Estado_Civil Educacion N°_H

0 23210 Accidente Femenino 0 Los Lagos $ Tecnico

5 23215 Accidente Femenino Buin NaN Soltero(a) Tecnico

Puerto
7 23217 Accidente Femenino Los Lagos Soltero(a) Tecnico
Montt

8 23218 Automotriz Masculino Valparaíso Valparaíso Soltero(a) Tecnico

9 23219 Accidente Femenino Concepción NaN Casado(a) Tecnico

Agrupación de datos en tablas para resumir información del dataset:

# Función lambda para indicar el formato de moneda


moneda = lambda x: "${:,.0f}".format(x).replace(",", ".")
# Aplicar el formato $
df['Cupo_TC'] = df['Cupo_TC'].apply(moneda)
df['Gasto_Mensual'] = df['Gasto_Mensual'].apply(moneda)

# Mostrar las primeras filas para verificar los cambios


print(df[['Cupo_TC', 'Gasto_Mensual']].head())

Cupo_TC Gasto_Mensual
0 $10.000.000 $592.360
5 $1.000.000 $530.661
7 $1.000.000 $904.428
8 $1.000.000 $704.975
9 $1.000.000 $767.575

# Mostrar los primeros registros de la columna 'Gasto_Mensual'


print(df['Gasto_Mensual'].head(20))
# Verificar cuántos valores no numéricos hay
non_numeric = df[~df['Gasto_Mensual'].astype(str).str.isnumeric()]
print("Valores no numéricos encontrados en 'Gasto_Mensual':")
print(non_numeric)
# Intentar convertir nuevamente a numérico
df['Gasto_Mensual'] = pd.to_numeric(df['Gasto_Mensual'], errors='coerce')

# Verificar cuántos valores nulos hay después de la conversión


print("Valores nulos en 'Gasto_Mensual' después de la conversión:", df['Gasto_Mensual'
# Imputar la media o mediana
df['Gasto_Mensual'].fillna(df['Gasto_Mensual'].mean(), inplace=True) # O usa df['Gast
# Eliminar filas con valores nulos en 'Gasto_Mensual'
df.dropna(subset=['Gasto_Mensual'], inplace=True)
# Mostrar los primeros registros de la columna 'Gasto_Mensual'
print(df['Gasto_Mensual'].head(20))

Mostrar el resultado oculto

print(df['Gasto_Mensual'].head(20))

Series([], Name: Gasto_Mensual, dtype: float64)


# Calcular la suma de Gasto Mensual por región
suma_por_region = df[["Region", "Gasto_Mensual"]].groupby(by="Region").sum()

# Ordenar los resultados en orden descendente


suma_por_region = suma_por_region.sort_values(by="Gasto_Mensual", ascending=False)

# Formatear la columna 'Gasto_Mensual' como moneda


moneda = lambda x: "${:,.0f}".format(x).replace(",", ".")
suma_por_region["Gasto_Mensual"] = suma_por_region["Gasto_Mensual"].apply(moneda)

# Mostrar el resultado final


print(suma_por_region)

Empty DataFrame
Columns: [Gasto_Mensual]
Index: []

 5. ENCODING

Luego de preprocesar los datos es necesario realizar una transformación de las variables
categóricas a numéricas discretas, ya que los modelos predictivos necesitan que todas las
entradas de datos sean numéricas.

Este proceso de reemplazar las clases de cada variable por un código numérico se llama
"encoding".

Label Encoding : Creación de etiquetas numéricas dentro de la misma columna. Sólo sirve
para variables categóricas nominales ya que las etiquetas perderían el orden para variables
categoricas ordinales. Se recomienda para variables con muchas clases.
# Mostrar los tipos de columnas
print(df.dtypes)

# Listar las columnas categóricas


categorical_columns = df.select_dtypes(include=['object']).columns
print("Columnas categóricas:", categorical_columns)
from sklearn.preprocessing import LabelEncoder

# Inicializar el codificador
label_encoder = LabelEncoder()

# Aplicar Label Encoding a las columnas categóricas


for column in categorical_columns:
df[column] = label_encoder.fit_transform(df[column])

# Mostrar el DataFrame después del Label Encoding


print(df.head())

Id_cliente int64
Seguro object
Genero object
Ciudad object
Region object
Estado_Civil object
Educacion object
N°_Hijos float64
Cupo_TC object
Gasto_Mensual float64
dtype: object
Columnas categóricas: Index(['Seguro', 'Genero', 'Ciudad', 'Region', 'Estado_Civi
'Cupo_TC'],
dtype='object')
Empty DataFrame
Columns: [Id_cliente, Seguro, Genero, Ciudad, Region, Estado_Civil, Educacion, N°
Index: []

 DOCUMENTACIÓN
Numpy: https://numpy.org/devdocs/user/index.html#user

Pandas: https://pandas.pydata.org/docs/user_guide/index.html

Scipy: https://docs.scipy.org/doc/scipy/

Matplotlib: https://matplotlib.org/stable/users/index.html

Seaborn: https://seaborn.pydata.org/tutorial.html

También podría gustarte