#1. Configuración del Ambiente
Para desarrollar este desafío te recomendamos trabajar directamente desde la plataforma Google Colab. (Recuerda que debes tener una cuenta en gmail, si aún no la tienes, debes crearla).
- Accede a la siguiente URL: Google Colaboratory
- Debes crear un nuevo Notebook, y asignarle el nombre que desees: Ej. La esencia del cliente 1
- Tras seguir los pasos anteriores, debes conectar tu notebook con tu cuenta de Google Drive. Para ello, en una nueva celda de código digita y ejecuta:
from google.colab import drive
drive.mount('/content/drive')
- Accede a las siguientes URLs para descargar el dataset que estaremos utilizando: Cost Prediction on acquiring Customers.
- Después de descargar el dataset, crea un directorio en tu cuenta de Drive y haz el upload de este.
- Ya estás listo para avanzar a la siguiente etapa. ¡Te deseo muchos Éxitos!
from google.colab import drive
drive.mount('/content/drive')
#2. Obtención de los datos
-
Para que puedas cargar en tu notebook los archivos que almacenaste previamente en tu cuenta de Drive, debes utilizar la biblioteca pandas.
-
Como el dataset original está en inglés, lo vas a dejar todo en español para que puedas tener una mejor comprensión del mismo. La idea no es que inviertas tu tiempo en la traducción del dataset y, por este motivo, aquí te voy a dejar un link con un archivo de python que contiene los diccionarios:
- Tu dataset para el análisis lo debes exportar en formato
.csv
y almacenarlo en tu directorio de Drive, pues será necesario para la segunda parte del desafío.
¡Ahora sí puedes avanzar a la siguiente fase! :)
import pandas as pd
media_prediction = pd.read_csv("/content/drive/MyDrive/BootCamp/CHALLENGE/Spring_3/media prediction and its cost.csv");
media_prediction.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
food_category | food_department | food_family | store_sales(in millions) | store_cost(in millions) | unit_sales(in millions) | promotion_name | sales_country | marital_status | gender | ... | grocery_sqft | frozen_sqft | meat_sqft | coffee_bar | video_store | salad_bar | prepared_food | florist | media_type | cost | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Breakfast Foods | Frozen Foods | Food | 7.36 | 2.7232 | 4.0 | Bag Stuffers | USA | M | F | ... | 18670.0 | 5415.0 | 3610.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | Daily Paper, Radio | 126.62 |
1 | Breakfast Foods | Frozen Foods | Food | 5.52 | 2.5944 | 3.0 | Cash Register Lottery | USA | M | M | ... | 18670.0 | 5415.0 | 3610.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | Daily Paper, Radio | 59.86 |
2 | Breakfast Foods | Frozen Foods | Food | 3.68 | 1.3616 | 2.0 | High Roller Savings | USA | S | F | ... | 18670.0 | 5415.0 | 3610.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | Daily Paper, Radio | 84.16 |
3 | Breakfast Foods | Frozen Foods | Food | 3.68 | 1.1776 | 2.0 | Cash Register Lottery | USA | M | F | ... | 18670.0 | 5415.0 | 3610.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | In-Store Coupon | 95.78 |
4 | Breakfast Foods | Frozen Foods | Food | 4.08 | 1.4280 | 3.0 | Double Down Sale | USA | M | M | ... | 18670.0 | 5415.0 | 3610.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | Radio | 50.79 |
5 rows × 40 columns
print(list(media_prediction.columns))
['food_category', 'food_department', 'food_family', 'store_sales(in millions)', 'store_cost(in millions)', 'unit_sales(in millions)', 'promotion_name', 'sales_country', 'marital_status', 'gender', 'total_children', 'education', 'member_card', 'occupation', 'houseowner', 'avg_cars_at home(approx)', 'avg. yearly_income', 'num_children_at_home', 'avg_cars_at home(approx).1', 'brand_name', 'SRP', 'gross_weight', 'net_weight', 'recyclable_package', 'low_fat', 'units_per_case', 'store_type', 'store_city', 'store_state', 'store_sqft', 'grocery_sqft', 'frozen_sqft', 'meat_sqft', 'coffee_bar', 'video_store', 'salad_bar', 'prepared_food', 'florist', 'media_type', 'cost']
import drive.MyDrive.BootCamp.CHALLENGE.Spring_3.diccionarios as diccionarios
df = media_prediction.copy()
# Obtener el diccionario de mapeo de columnas
column_mappings = diccionarios.columnas
# Mapeo de la columna media_prediction
df['food_category'] = df['food_category'].map(diccionarios.categoria_alimento);
df['food_department'] = df['food_department'].map(diccionarios.departamento);
df['food_family'] = df['food_family'].map(diccionarios.tipo);
df['promotion_name'] = df['promotion_name'].map(diccionarios.promocion);
df['education'] = df['education'].map(diccionarios.escolaridad);
df['member_card'] = df['member_card'].map(diccionarios.miembro);
df['occupation'] = df['occupation'].map(diccionarios.ocupacion);
df['sales_country'] = df['sales_country'].map(diccionarios.pais);
df['marital_status'] = df['marital_status'].map(diccionarios.estado_civil);
df['gender'] = df['gender'].map(diccionarios.genero);
df['avg. yearly_income'] = df['avg. yearly_income'].map(diccionarios.ingreso_anual);
df['houseowner'] = df['houseowner'].map(diccionarios.vivienda_propia);
df['store_type'] = df['store_type'].map(diccionarios.comercio);
df['media_type'] = df['media_type'].map(diccionarios.divulgacion);
df = df.rename(columns=column_mappings)
pd.set_option('display.max_rows', 5)
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
df.sample(5)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
categoria_alimento | departamento | tipo | ventas_tienda(en millones) | costo_tienda(en millones) | ventas_unitarias(en millones) | promocion | pais | estado_civil | genero | total_de_hijos | escolaridad | miembro | ocupacion | vivienda_propia | promedio_autos(aprox) | ingreso_anual | numero_hijos | promedio_autos(aprox) | marca | precio_recomendado | peso_bruto | peso_neto | empaque_reciclable | bajo_en_grasa | unidades_por_caja | comercio | ciudad | estado | pies_cuadrados_tienda | pies_cuadrados_comestibles | pies_cuadrados_congelados | pies_cuadrados_carne | cafeteria | tienda_de_videos | barra_de_ensaladas | comida_preparada | floristeria | divulgacion | costo | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
7514 | Dulces | Snacks | Comida | 8.40 | 3.1080 | 4.0 | Rebajadores de precios | Estados Unidos | Casado | Masculino | 1.0 | Primaria | NaN | Técnico | Sí | 1.0 | 20000 | 1.0 | 1.0 | Musial | 2.10 | 19.7 | 16.7 | 1.0 | 0.0 | 33.0 | Supermercado de lujo | Salem | OR | 27694.0 | 18670.0 | 5415.0 | 3610.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | Periódico dominical, radio, televisión | 54.11 |
55638 | Productos de cocina | Artículos para el hogar | No comestible | 5.70 | 1.8810 | 3.0 | Días de dólar | Estados Unidos | Casado | Femenino | 5.0 | Secundaria | Bronce | Técnico | Sí | 3.0 | 40000 | 1.0 | 3.0 | Sunset | 1.90 | 17.4 | 15.3 | 1.0 | 0.0 | 19.0 | Supermercado de lujo | Tacoma | WA | 33858.0 | 22123.0 | 7041.0 | 4694.0 | 1.0 | 0.0 | 1.0 | 1.0 | 1.0 | Periódico diario, radio | 138.81 |
17745 | Alimentos para picar | Alimentos para picar | Comida | 6.20 | 2.6040 | 4.0 | Venta Doble | Estados Unidos | Casado | Masculino | 4.0 | Secundaria | Oro | Obrero | No | 4.0 | 40000 | 4.0 | 4.0 | Fort West | 1.55 | 18.0 | 17.0 | 0.0 | 0.0 | 15.0 | Supermercado de lujo | Salem | OR | 27694.0 | 18670.0 | 5415.0 | 3610.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | Radio | 50.79 |
50526 | Anchoas enlatadas | Alimentos enlatados | Comida | 11.40 | 5.3580 | 4.0 | Duplica tus ahorros | Canadá | Soltero | Masculino | 2.0 | Superior | Bronce | Profesional | Sí | 2.0 | 100000 | 0.0 | 2.0 | Just Right | 2.85 | 10.1 | 7.1 | 1.0 | 1.0 | 9.0 | Supermercado mediano | Victoria | BC | 34452.0 | 27463.0 | 4193.0 | 2795.0 | 1.0 | 0.0 | 0.0 | 0.0 | 1.0 | Panfletos | 114.72 |
11976 | Alimentos ricos en almidón | Alimentos ricos en almidón | Comida | 10.92 | 3.6036 | 4.0 | Venta de dos días | Estados Unidos | Soltero | Masculino | 1.0 | Secundaria | NaN | Profesional | Sí | 2.0 | 140000 | 0.0 | 2.0 | Discover | 2.73 | 14.5 | 13.5 | 1.0 | 0.0 | 27.0 | Supermercado | Seattle | WA | 21215.0 | 13305.0 | 4746.0 | 3164.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | Radio | 91.28 |
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 60428 entries, 0 to 60427
Data columns (total 40 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 categoria_alimento 60428 non-null object
1 departamento 60428 non-null object
2 tipo 60428 non-null object
3 ventas_tienda(en millones) 60428 non-null float64
4 costo_tienda(en millones) 60428 non-null float64
5 ventas_unitarias(en millones) 60428 non-null float64
6 promocion 60428 non-null object
7 pais 60428 non-null object
8 estado_civil 60428 non-null object
9 genero 60428 non-null object
10 total_de_hijos 60428 non-null float64
11 escolaridad 60428 non-null object
12 miembro 46561 non-null object
13 ocupacion 60428 non-null object
14 vivienda_propia 60428 non-null object
15 promedio_autos(aprox) 60428 non-null float64
16 ingreso_anual 60428 non-null int64
17 numero_hijos 60428 non-null float64
18 promedio_autos(aprox) 60428 non-null float64
19 marca 60428 non-null object
20 precio_recomendado 60428 non-null float64
21 peso_bruto 60428 non-null float64
22 peso_neto 60428 non-null float64
23 empaque_reciclable 60428 non-null float64
24 bajo_en_grasa 60428 non-null float64
25 unidades_por_caja 60428 non-null float64
26 comercio 60428 non-null object
27 ciudad 60428 non-null object
28 estado 60428 non-null object
29 pies_cuadrados_tienda 60428 non-null float64
30 pies_cuadrados_comestibles 60428 non-null float64
31 pies_cuadrados_congelados 60428 non-null float64
32 pies_cuadrados_carne 60428 non-null float64
33 cafeteria 60428 non-null float64
34 tienda_de_videos 60428 non-null float64
35 barra_de_ensaladas 60428 non-null float64
36 comida_preparada 60428 non-null float64
37 floristeria 60428 non-null float64
38 divulgacion 60428 non-null object
39 costo 60428 non-null float64
dtypes: float64(23), int64(1), object(16)
memory usage: 18.4+ MB
#3. Exploración de los datos
La exploración visual de datos permite a los científicos de datos examinar y explorar grandes volúmenes de datos de manera intuitiva y eficiente. Al representar los datos visualmente, se pueden identificar características importantes, como valores atípicos, distribuciones, correlaciones y agrupaciones, que podrían no ser evidentes al examinar solo los números o las tablas de datos.
Se trata de una herramienta poderosa para comprender, analizar y comunicar información clave presente en los conjuntos de datos, brindando una comprensión más profunda y facilitando la toma de decisiones informadas.
-
Haciendo uso de Matplotlib y Seaborn vamos a generar diversos gráficos para entender mejor nuestros datos.
-
Ejemplo: A través de un histograma, podrás observar la distribución de ingresos anuales de los clientes, por ejemplo. (Siéntete libre de escoger las variables que desees visualizar, y genera varios gráficos, según lo consideres pertinente)
-
Es importante que escribas todas tus observaciones e hipótesis en la medida que generes los gráficos. Puedes utilizar una celda de texto de tu notebook para hacerlo.
Tip: Voy a dejar a continuación algunas variables que pueden ser de interés para tenerlas en cuenta en tu análisis visual: Escolaridad, Ocupación, Miembro, Género, Estado Civil, Número de Hijos, Ingresos_anuales, Categoría de alimentos, Tipo, entre otras.
import seaborn as sns
import matplotlib.pyplot as plt
# Crear figura con dos subplots
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))
# Gráfico izquierdo
sns.barplot(x='escolaridad', y='ingreso_anual', data=df, ax=ax1)
ax1.set_title("Ingreso Anual", fontsize=12)
ax1.set_xlabel("Escolaridad", fontsize=10)
ax1.set_ylabel("Ingreso", fontsize=10)
# Gráfico derecho
sns.barplot(x='escolaridad', y='numero_hijos', data=df, ax=ax2)
ax2.set_title("Número de Hijos", fontsize=12)
ax2.set_xlabel("Escolaridad", fontsize=10)
ax2.set_ylabel("Número de Hijos", fontsize=10)
# Ajustar espaciado entre subplots
plt.tight_layout()
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
# Crear figura con dos subplots
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))
# Gráfico izquierdo
sns.violinplot(x='ocupacion', y='ventas_unitarias(en millones)', data=df, ax=ax1)
ax1.set_title("Ventas Unitarias por Ocupación (en millones)", fontsize=12)
ax1.set_xlabel("Ocupación", fontsize=10)
ax1.set_ylabel("Ventas Unitarias", fontsize=10)
# Gráfico derecho
sns.violinplot(x='ocupacion', y='costo_tienda(en millones)', data=df, ax=ax2)
ax2.set_title("Costo Tienda por Ocupación (en millones)", fontsize=12)
ax2.set_xlabel("Ocupación", fontsize=10)
ax2.set_ylabel("Costo Tienda", fontsize=10)
# Ajustar espaciado entre subplots
plt.tight_layout()
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))
# Gráfico izquierdo
sns.boxplot(x='miembro', y='ingreso_anual', data=df, ax=ax1)
ax1.set_title('Ingreso Anual', fontsize=12)
ax1.set_xlabel('Miembro', fontsize=10)
ax1.set_ylabel('Ingreso', fontsize=10)
# Gráfico derecho
sns.boxplot(x='miembro', y='numero_hijos', data=df, ax=ax2)
ax2.set_title('Número de Hijos', fontsize=12)
ax2.set_xlabel('Miembro', fontsize=10)
ax2.set_ylabel('Número de Hijos', fontsize=10)
plt.tight_layout()
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
# Crear figura con dos subplots
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))
# Gráfico izquierdo
sns.lineplot(x='genero', y='ingreso_anual', data=df, ax=ax1)
ax1.set_title('Ingreso Anual', fontsize=12)
ax1.set_xlabel('Género', fontsize=10)
ax1.set_ylabel('Ingreso', fontsize=10)
# Gráfico derecho
sns.lineplot(x='genero', y='total_de_hijos', data=df, ax=ax2)
ax2.set_title('Total de Hijos', fontsize=12)
ax2.set_xlabel('Género', fontsize=10)
ax2.set_ylabel('Total de Hijos', fontsize=10)
plt.tight_layout()
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
# Crear figura con dos subplots
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))
# Gráfico izquierdo
sns.boxplot(x='estado_civil', y='ventas_tienda(en millones)', data=df, ax=ax1)
ax1.set_title('Ventas de la Tienda', fontsize=12)
ax1.set_xlabel('Estado Civil', fontsize=10)
ax1.set_ylabel('Ventas (millones)', fontsize=10)
# Gráfico derecho
sns.boxplot(x='estado_civil', y='peso_neto', data=df, ax=ax2)
ax2.set_title('Peso Neto', fontsize=12)
ax2.set_xlabel('Estado Civil', fontsize=10)
ax2.set_ylabel('Peso Neto (kg)', fontsize=10)
plt.tight_layout()
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
# Crear figura
fig, ax = plt.subplots()
# Gráfico de violín
sns.violinplot(x='escolaridad', y='numero_hijos', data=df, ax=ax)
plt.tight_layout()
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
# Crear figura con dos subplots
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))
# Gráfico izquierdo
sns.barplot(x='pais', y='ingreso_anual', data=df, ax=ax1)
ax1.set_ylim(50000, 60000) # Acotar eje y
ax1.set_title("Ingreso Anual vs País", fontsize=12)
ax1.set_xlabel("País", fontsize=10)
ax1.set_ylabel("Ingreso Anual", fontsize=10)
# Gráfico derecho
sns.barplot(x='estado_civil', y='ingreso_anual', data=df, ax=ax2)
ax2.set_ylim(50000, 60000) # Acotar eje y
ax2.set_title("Ingreso Anual vs Estado Civil", fontsize=12)
ax2.set_xlabel("Estado Civil", fontsize=10)
ax2.set_ylabel("Ingreso Anual", fontsize=10)
# Ajustar espaciado entre subplots
plt.tight_layout()
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
# Obtener top 10 categorías
top10_ventas = df['categoria_alimento'].value_counts().index[:10]
top10_costo = df.groupby('categoria_alimento')['costo'].mean().sort_values(ascending=False).index[:10]
# Filtrar df
df_top10 = df[df['categoria_alimento'].isin(top10_ventas) | df['categoria_alimento'].isin(top10_costo)]
# Crear figura con dos subplots
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))
# Gráfico izquierdo
sns.boxplot(x='ventas_unitarias(en millones)', y='categoria_alimento', data=df_top10, ax=ax1)
ax1.set_title("Ventas Unitarias", fontsize=12)
ax1.set_ylabel("Categoría Alimento", fontsize=10)
ax1.set_xlabel("Ventas Unitarias", fontsize=10)
# Gráfico derecho - Barras
ax2.set_xlim(80, 120) # Establecer límites de eje x
sns.barplot(x='costo', y='categoria_alimento', data=df_top10, ax=ax2)
ax2.set_title("Costo", fontsize=12)
ax2.set_ylabel("Costo", fontsize=10)
ax2.set_xlabel("Categoría Alimento", fontsize=10)
# Ajustar espaciado
plt.tight_layout()
plt.show()
import matplotlib.pyplot as plt
# Gráficos de torta más pequeños con figsize
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))
# Ventas unitarias
ventas_por_tipo = df.groupby('tipo')['ventas_unitarias(en millones)'].sum()
ax1.pie(ventas_por_tipo, labels=ventas_por_tipo.index, autopct='%1.1f%%')
ax1.set_title("Ventas Unitarias por Tipo")
# Costos
costos_por_tipo = df.groupby('tipo')['costo'].sum()
ax2.pie(costos_por_tipo, labels=costos_por_tipo.index, autopct='%1.1f%%')
ax2.set_title("Costo por Tipo")
plt.tight_layout()
plt.show()
#4. Preprocesamiento y Obtención de Features
-
En esta fase es importante utilizar una forma de codificar las variables categóricas para que el modelo de clusterización las pueda reconocer. Puedes usar one-hot-encoder, get_dummies, o establecer un valor numérico para las variables de acuerdo con tu percepción; por ejemplo, si queremos categorizar primaria, secundaria y universidad, podríamos decir que el valor numérico para primaria podría ser 1, el valor numérico para secundaria, 2, y así sucesivamente. (Es importante aclarar que en ejemplo citado, asignamos los valores a cada nivel porque sabemos que primaria es menor que secundaria, y secundaria menor que universidad)
-
Tras establecer un método de codificación para tus variables categóricas, debes reemplazar los valores numéricos asignados en el dataset para sustituir las cadenas de texto.
Tip: La pregunta que te debes estar haciendo es: ¿Será que tengo que codificar todas las columnas categóricas del dataset? La respuesta es no; únicamente codifica las columnas que tu consideres que puedan ser relevantes para la clusterización.
-
Teniendo en cuenta el paso anterior, debes en efecto seleccionar las variables que sean más relevantes para el caso de estudio: Se desea agrupar a los clientes en diversos clusters para entender sus características y brindarles el mejor servicio.
-
Con tus atributos seleccionados, al menos 6 y máximo 12, procederemos a estandarizar nuestros datos (que en este punto deben ser todos numéricos) para que todas las variables puedan ser tenidas en cuenta dentro de una misma escala. Varios de los hiperparámetros utilizados en las funciones de un modelo de Machine Learning asumen que todas las características están centradas alrededor de 0 y tienen varianza en el mismo orden. Si uno de los atributos del dataset tiene una varianza con orden de magnitud muy superior al de los demás atributos, puede dominar la función del modelo y hacer que el estimador no aprenda correctamente de los otros atributos como se espera. Vamos a utilizar con el StandardScaler. Puedes almacenar los valores estandarizados en una variable llamada
X_std
, por ejemplo.
¡Vas a obtener un numpy array listo para avanzar a la próxima fase!
df.sample(5)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
categoria_alimento | departamento | tipo | ventas_tienda(en millones) | costo_tienda(en millones) | ventas_unitarias(en millones) | promocion | pais | estado_civil | genero | total_de_hijos | escolaridad | miembro | ocupacion | vivienda_propia | promedio_autos(aprox) | ingreso_anual | numero_hijos | promedio_autos(aprox) | marca | precio_recomendado | peso_bruto | peso_neto | empaque_reciclable | bajo_en_grasa | unidades_por_caja | comercio | ciudad | estado | pies_cuadrados_tienda | pies_cuadrados_comestibles | pies_cuadrados_congelados | pies_cuadrados_carne | cafeteria | tienda_de_videos | barra_de_ensaladas | comida_preparada | floristeria | divulgacion | costo | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
49698 | Productos de baño | Salud e higiene | No comestible | 10.86 | 3.3666 | 3.0 | Adelante | Estados Unidos | Soltero | Masculino | 0.0 | Secundaria | Bronce | Técnico | No | 3.0 | 40000 | 0.0 | 3.0 | Hilltop | 3.62 | 19.30 | 16.20 | 0.0 | 0.0 | 32.0 | Supermercado | Portland | OR | 20319.0 | 16232.0 | 2452.0 | 1635.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | Periódico diario, radio | 67.01 |
38768 | Alimentos para picar | Alimentos para picar | Comida | 2.04 | 0.6528 | 4.0 | Ahorro para apostadores grandes | Estados Unidos | Casado | Masculino | 1.0 | Superior | Plata | Profesional | Sí | 3.0 | 60000 | 1.0 | 3.0 | Fast | 0.51 | 12.30 | 11.30 | 1.0 | 1.0 | 26.0 | Supermercado gourmet | Beverly Hills | CA | 23688.0 | 15337.0 | 5011.0 | 3340.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | Periódico dominical, radio, televisión | 95.55 |
36419 | Carne | Charcutería | Comida | 2.98 | 1.0728 | 2.0 | Descuento de fin de semana | Estados Unidos | Casado | Femenino | 2.0 | Primaria | NaN | Obrero | Sí | 1.0 | 20000 | 2.0 | 1.0 | Moms | 1.49 | 11.30 | 10.30 | 1.0 | 0.0 | 32.0 | Supermercado | Los Angeles | CA | 23598.0 | 14210.0 | 5633.0 | 3755.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | Panfletos | 53.37 |
4781 | Vegetales | Productos frescos | Comida | 7.32 | 2.9280 | 4.0 | Ahorro de precios | México | Soltero | Masculino | 2.0 | Secundaria | Bronce | Profesional | Sí | 4.0 | 140000 | 0.0 | 4.0 | Hermanos | 1.83 | 9.71 | 8.71 | 1.0 | 0.0 | 6.0 | Supermercado | Orizaba | Veracruz | 34791.0 | 26354.0 | 5062.0 | 3375.0 | 0.0 | 0.0 | 1.0 | 1.0 | 0.0 | Televisión | 77.72 |
780 | Pan | Productos horneados | Comida | 6.54 | 2.8122 | 2.0 | Venta de dos días | México | Soltero | Masculino | 1.0 | Técnico | Bronce | Cargo de Oficina | Sí | 3.0 | 40000 | 0.0 | 3.0 | Colony | 3.27 | 7.71 | 5.71 | 0.0 | 0.0 | 18.0 | Supermercado de lujo | Hidalgo | Zacatecas | 30584.0 | 21938.0 | 5188.0 | 3458.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | Radio | 94.79 |
print(df["divulgacion"].unique())
['Periódico diario, radio' 'Cupón en la tienda' 'Radio' 'Periódico diario'
'Anexo del producto' 'Periódico dominical, radio'
'Periódico dominical, radio, televisión' 'Periódico dominical'
'Panfletos' 'Televisión' 'Correo masivo' 'Entrega en el punto de venta'
'Periódico diario, radio, televisión']
import pandas as pd
import numpy as np
df_filter = df.copy()
# Mapear valores a números
categoria_alimento_map={'Alimentos para el desayuno':1,'Pan':2,'Camarones enlatados':3,
'Productos para hornear':4,'Vegetales':5,'Postres congelados':6,
'Dulces':7,'Alimentos para picar':8,'Productos lácteos':9,
'Alimentos ricos en almidón':10,'Suministros de limpieza':11,
'Descongestionantes':12,'Carne':13,'Bebidas calientes':14,
'Mermeladas y jaleas':15,'Bebidas carbonatadas':16,'Mariscos':17,
'Especialidades':18,'Productos de cocina':19,'Eléctrico':20,
'Cerveza y vino':21,'Velas':22,'Fruta':23,'Bebidas de jugo puro':24,
'Sopa enlatada':25,'Productos de papel':26,'Atún enlatado':27,
'Huevos':28,'Artículos de ferretería':29,'Sardinas enlatadas':30,
'Almejas enlatadas':31,'Analgésicos':32,'Acompañamientos':33,
'Productos de baño':34,'Revistas':35,'Platos preparados congelados':36,
'Pizza':37,'Remedios para el resfriado':38,'Anchoas enlatadas':39,
'Bebidas':40,'Higiene':41,'Productos de plástico':42,
'Ostras enlatadas':43,'Vegetales envasados':44,'Misceláneos':45}
departamento_map={'Alimentos congelados':1, 'Productos horneados':2,
'Alimentos enlatados':3,'Productos para hornear':4,
'Productos frescos':5, 'Snacks':6, 'Alimentos para picar':7,
'Productos lácteos':8, 'Alimentos ricos en almidón':9,
'Artículos para el hogar':10, 'Salud e higiene':11, 'Carne':12,
'Bebidas':13, 'Mariscos':14, 'Charcutería':15, 'Bebidas alcohólicas':16,
'Productos enlatados':17, 'Huevos':18, 'Publicaciones periódicas':19,
'Alimentos para el desayuno':20, 'Caja de salida':21, 'Carrusel':22}
tipo_map = {'Comida': 1, 'No comestible': 2, 'Bebida': 3}
promocion_map={'Bolsas llenas':1,'Lotería de la caja registradora':2,
'Ahorro para apostadores grandes':3,'Venta Doble':4,'Días de luz verde':5,
'Ahorro Enorme':6, 'Ahorro de precios':7,'Rebajadores de precios':8,
'Días de dólar':9,'Venta de dos días':10,'Super Ahorradores':11,
'Descuento de fin de semana':12,'Recortadores de dólares':13,
'Promociones por montones':14,'Gran promoción':15,'Gratis para todos':16,
'Ahorros por montones':17,'Ahorro de precios imbatible':18,
'Aplastadores de precios':19,'Días de liquidación de estanterías':20,
'Días de venta':21, 'Adelante':22,'Super Ahorro':23,'Ahorradores de billetera':24,
'Venta Ahorra Ya':25,'Destructores de precios':26,'Dos por uno':27,
'Descuentos de gran magnitud':28,'Estantes vacíos':29,'Adiós bebé':30,
'Venta de un día':31,'Descuentos fantásticos':32,'Días de ahorro':33,
'Ganadores de ventas':34,'Espectacular de cupones':35,'Tres por uno':36,
'Ganadores de precios':37,'Más barato':38,'Venta No Puedo Creerlo':39,
'Ahorradores de dinero':40,'Especial luz verde':41,'Rebajando precios':42,
'Ahorro de primera clase':43,'Mejores ahorros':44,'Elige tus ahorros':45,
'Duplica tus ahorros':46,'Venta misteriosa':47,
'Super ahorradores de billetera':48}
pais_map ={'Estados Unidos':1, 'México':2, 'Canadá':3}
estado_civil_map={'Casado':1, 'Soltero':2}
genero_map={'Femenino':1, 'Masculino':2}
estado_map={'OR':1, 'WA':2, 'CA':3, 'Veracruz':4, 'Yucatan':5, 'Zacatecas':6, 'DF':7,
'BC':8, 'Jalisco':9, 'Guerrero':10}
escolaridad_map={'Primaria':1, 'Superior':2, 'Secundaria':3, 'Maestría':4, 'Técnico':5}
miembro_map = {np.nan: 0, 'Plata': 1, 'Bronce': 2, 'Oro': 3}
ocupacion_map={'Técnico':1, 'Profesional':2, 'Obrero':3, 'Gestión':4, 'Cargo de Oficina':5}
vivienda_propia_map={'Sí':1, 'No':0}
marca_map={'Carrington':1,'Golden':2,'Imagine':3,'Big Time':4,'PigTail':5,'Fantastic':6,
'Great':7,'Sphinx':8,'Modell':9,'Colony':10,'Blue Label':11,'Pleasant':12,
'Bravo':13,'Better':14,'Just Right':15,'Plato':16,'BBB Best':17,'Landslide':18,
'Super':19,'CDR':20,'High Top':21,'Tri-State':22,'Hermanos':23,'Tell Tale':24,
'Ebony':25,'Thresher':26,'Gulf Coast':27,'Musial':28,'Atomic':29,'Choice':30,
'Fort West':31,'Nationeel':32,'Horatio':33,'Best Choice':34,'Fast':35,'Gorilla':36,
'Carlson':37,'Even Better':38,'Club':39,'Booker':40,'Shady Lake':41,'Monarch':42,
'Discover':43,'Colossal':44,'Medalist':45,'Jardon':46,'Cormorant':47,'Sunset':48,
'Red Wing':49,'High Quality':50,'Denny':51,'Faux Products':52,'Steady':53,
'Consolidated':54,'Bird Call':55,'Hilltop':56,'Ship Shape':57,'Footnote':58,
'Genteel':59,'Quick':60,'Gerolli':61,'Excellent':62,'Fabulous':63,'Token':64,
'Skinner':65,'Washington':66,'Dual City':67,'Kiwi':68,'Tip Top':69,'Amigo':70,
'Curlew':71,'Moms':72,'Cutting Edge':73,'Red Spade':74,'Lake':75,'American':76,
'Walrus':77,'Pearl':78,'Good':79,'Top Measure':80,'Portsmouth':81,'Toucan':82,
'Applause':83,'Swell':84,'Green Ribbon':85,'Big City':86,'National':87,
'Blue Medal':88,'Urban':89,'Jumbo':90,'Giant':91,'Dollar':92,'Mighty Good':93,
'Robust':94,'Gauss':95,'Excel':96,'Radius':97,'Best':98,'Jeffers':99,'Johnson':100,
'Special':101,'Akron':102,'Framton':103,'Black Tie':104,'Queen':105,'James Bay':106,
'Toretti':107,'Prelude':108,'Symphony':109,'ADJ':110,'King':111}
comercio_map={'Supermercado de lujo':1, 'Supermercado':2, 'Supermercado gourmet':3,
'Pequeño supermercado':4, 'Supermercado mediano':5}
ciudad_map={'Salem':1,'Tacoma':2,'Seattle':3,'Spokane':4,'Los Angeles':5,'Beverly Hills':6,
'Portland':7,'Bellingham':8,'Orizaba':9,'Merida':10,'Hidalgo':11,'Mexico City':12,
'Vancouver':13,'Bremerton':14,'Camacho':15,'Guadalajara':16,'Acapulco':17,
'San Francisco':18,'Victoria':19}
divulgacion_map={'Periódico diario, radio':1,'Cupón en la tienda':2,'Radio':3,
'Periódico diario':4,'Anexo del producto':5,'Periódico dominical, radio':6,
'Periódico dominical, radio, televisión':7,'Periódico dominical':8,
'Panfletos':9,'Televisión':10,'Correo masivo':11,
'Entrega en el punto de venta':12,'Periódico diario, radio, televisión':13}
df_filter['categoria_alimento'] = df_filter['categoria_alimento'].map(categoria_alimento_map)
df_filter['departamento'] = df_filter['departamento'].map(departamento_map)
df_filter['tipo'] = df_filter['tipo'].map(tipo_map)
df_filter['promocion'] = df_filter['promocion'].map(promocion_map)
df_filter['pais'] = df_filter['pais'].map(pais_map)
df_filter['estado_civil'] = df_filter['estado_civil'].map(estado_civil_map)
df_filter['genero'] = df_filter['genero'].map(genero_map)
df_filter['estado'] = df_filter['estado'].map(estado_map)
df_filter['escolaridad'] = df_filter['escolaridad'].map(escolaridad_map)
df_filter['miembro'] = df_filter['miembro'].map(miembro_map)
df_filter['ocupacion'] = df_filter['ocupacion'].map(ocupacion_map)
df_filter['vivienda_propia'] = df_filter['vivienda_propia'].map(vivienda_propia_map)
df_filter['marca'] = df_filter['marca'].map(marca_map)
df_filter['comercio'] = df_filter['comercio'].map(comercio_map)
df_filter['ciudad'] = df_filter['ciudad'].map(ciudad_map)
df_filter['divulgacion'] = df_filter['divulgacion'].map(divulgacion_map)
df_filter.sample(5)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
categoria_alimento | departamento | tipo | ventas_tienda(en millones) | costo_tienda(en millones) | ventas_unitarias(en millones) | promocion | pais | estado_civil | genero | total_de_hijos | escolaridad | miembro | ocupacion | vivienda_propia | promedio_autos(aprox) | ingreso_anual | numero_hijos | promedio_autos(aprox) | marca | precio_recomendado | peso_bruto | peso_neto | empaque_reciclable | bajo_en_grasa | unidades_por_caja | comercio | ciudad | estado | pies_cuadrados_tienda | pies_cuadrados_comestibles | pies_cuadrados_congelados | pies_cuadrados_carne | cafeteria | tienda_de_videos | barra_de_ensaladas | comida_preparada | floristeria | divulgacion | costo | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
46056 | 5 | 3 | 1 | 2.61 | 0.9918 | 3.0 | 5 | 2 | 1 | 1 | 2.0 | 2 | 2 | 2 | 0 | 2.0 | 60000 | 1.0 | 2.0 | 13 | 0.87 | 13.40 | 11.30 | 0.0 | 0.0 | 32.0 | 3 | 15 | 6 | 23759.0 | 16844.0 | 4149.0 | 2766.0 | 1.0 | 0.0 | 1.0 | 1.0 | 1.0 | 4 | 75.76 |
59222 | 34 | 11 | 2 | 4.47 | 2.0562 | 3.0 | 5 | 2 | 2 | 2 | 3.0 | 1 | 2 | 2 | 0 | 1.0 | 80000 | 0.0 | 1.0 | 56 | 1.49 | 13.10 | 10.10 | 0.0 | 0.0 | 9.0 | 1 | 10 | 5 | 30797.0 | 20141.0 | 6393.0 | 4262.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 8 | 92.57 |
9292 | 8 | 7 | 1 | 6.90 | 3.1050 | 3.0 | 48 | 1 | 2 | 1 | 1.0 | 4 | 2 | 2 | 1 | 3.0 | 40000 | 0.0 | 3.0 | 31 | 2.30 | 8.32 | 6.31 | 0.0 | 0.0 | 23.0 | 2 | 7 | 1 | 20319.0 | 16232.0 | 2452.0 | 1635.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 12 | 140.19 |
43814 | 5 | 1 | 1 | 6.66 | 2.2644 | 3.0 | 21 | 1 | 2 | 1 | 4.0 | 2 | 2 | 2 | 0 | 3.0 | 60000 | 0.0 | 3.0 | 1 | 2.22 | 16.10 | 14.10 | 1.0 | 0.0 | 29.0 | 2 | 4 | 2 | 30268.0 | 22063.0 | 4923.0 | 3282.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 11 | 116.74 |
16994 | 4 | 4 | 1 | 2.50 | 1.2250 | 2.0 | 36 | 1 | 2 | 1 | 1.0 | 1 | 0 | 3 | 0 | 2.0 | 20000 | 0.0 | 2.0 | 18 | 1.25 | 9.48 | 6.47 | 0.0 | 0.0 | 27.0 | 2 | 14 | 2 | 39696.0 | 24390.0 | 9184.0 | 6122.0 | 0.0 | 0.0 | 1.0 | 1.0 | 0.0 | 8 | 118.25 |
nan_counts = df_filter.isnull().sum()
print(nan_counts)
categoria_alimento 0
departamento 0
tipo 0
ventas_tienda(en millones) 0
costo_tienda(en millones) 0
ventas_unitarias(en millones) 0
promocion 0
pais 0
estado_civil 0
genero 0
total_de_hijos 0
escolaridad 0
miembro 0
ocupacion 0
vivienda_propia 0
promedio_autos(aprox) 0
ingreso_anual 0
numero_hijos 0
promedio_autos(aprox) 0
marca 0
precio_recomendado 0
peso_bruto 0
peso_neto 0
empaque_reciclable 0
bajo_en_grasa 0
unidades_por_caja 0
comercio 0
ciudad 0
estado 0
pies_cuadrados_tienda 0
pies_cuadrados_comestibles 0
pies_cuadrados_congelados 0
pies_cuadrados_carne 0
cafeteria 0
tienda_de_videos 0
barra_de_ensaladas 0
comida_preparada 0
floristeria 0
divulgacion 0
costo 0
dtype: int64
X_std = df_filter[['categoria_alimento','departamento','tipo','ventas_tienda(en millones)',
'costo_tienda(en millones)','ventas_unitarias(en millones)','promocion',
'pais','estado_civil','genero','total_de_hijos','escolaridad','miembro',
'ocupacion','vivienda_propia','promedio_autos(aprox)','ingreso_anual',
'numero_hijos','marca','precio_recomendado',
'peso_bruto','peso_neto','empaque_reciclable','bajo_en_grasa',
'unidades_por_caja','comercio','ciudad','estado','pies_cuadrados_tienda',
'pies_cuadrados_comestibles','pies_cuadrados_congelados',
'pies_cuadrados_carne','cafeteria','tienda_de_videos','barra_de_ensaladas',
'comida_preparada','floristeria','divulgacion','costo']]
X_std.sample(5)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
categoria_alimento | departamento | tipo | ventas_tienda(en millones) | costo_tienda(en millones) | ventas_unitarias(en millones) | promocion | pais | estado_civil | genero | total_de_hijos | escolaridad | miembro | ocupacion | vivienda_propia | promedio_autos(aprox) | promedio_autos(aprox) | ingreso_anual | numero_hijos | marca | precio_recomendado | peso_bruto | peso_neto | empaque_reciclable | bajo_en_grasa | unidades_por_caja | comercio | ciudad | estado | pies_cuadrados_tienda | pies_cuadrados_comestibles | pies_cuadrados_congelados | pies_cuadrados_carne | cafeteria | tienda_de_videos | barra_de_ensaladas | comida_preparada | floristeria | divulgacion | costo | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
8243 | 7 | 6 | 1 | 13.75 | 6.0500 | 5.0 | 11 | 3 | 1 | 2 | 4.0 | 2 | 3 | 2 | 1 | 4.0 | 4.0 | 80000 | 4.0 | 27 | 2.75 | 14.7 | 11.60 | 0.0 | 0.0 | 3.0 | 1 | 13 | 8 | 23112.0 | 16418.0 | 4016.0 | 2678.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 9 | 51.00 |
20988 | 19 | 10 | 2 | 1.89 | 0.7371 | 3.0 | 7 | 2 | 2 | 2 | 4.0 | 3 | 2 | 3 | 0 | 3.0 | 3.0 | 40000 | 0.0 | 48 | 0.63 | 14.5 | 13.50 | 1.0 | 0.0 | 3.0 | 2 | 9 | 4 | 34791.0 | 26354.0 | 5062.0 | 3375.0 | 0.0 | 0.0 | 1.0 | 1.0 | 0.0 | 10 | 77.72 |
828 | 2 | 2 | 1 | 5.04 | 2.3184 | 4.0 | 4 | 3 | 2 | 2 | 2.0 | 1 | 0 | 1 | 1 | 1.0 | 1.0 | 20000 | 0.0 | 9 | 1.26 | 10.3 | 9.30 | 1.0 | 1.0 | 10.0 | 1 | 13 | 8 | 23112.0 | 16418.0 | 4016.0 | 2678.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 3 | 53.21 |
6329 | 5 | 5 | 1 | 6.08 | 2.2496 | 4.0 | 5 | 2 | 1 | 1 | 5.0 | 5 | 1 | 2 | 0 | 3.0 | 3.0 | 140000 | 5.0 | 21 | 1.52 | 10.7 | 7.69 | 0.0 | 1.0 | 4.0 | 3 | 15 | 6 | 23759.0 | 16844.0 | 4149.0 | 2766.0 | 1.0 | 0.0 | 1.0 | 1.0 | 1.0 | 4 | 75.76 |
31889 | 25 | 3 | 1 | 2.28 | 1.0488 | 4.0 | 44 | 1 | 2 | 1 | 4.0 | 1 | 0 | 1 | 0 | 0.0 | 0.0 | 20000 | 0.0 | 14 | 0.57 | 16.9 | 14.80 | 1.0 | 0.0 | 6.0 | 2 | 3 | 2 | 21215.0 | 13305.0 | 4746.0 | 3164.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 9 | 114.01 |
X_std['ventas_unitarias(en millones)'] = X_std['ventas_unitarias(en millones)'].astype('int64')
X_std['total_de_hijos'] = X_std['total_de_hijos'].astype('int64')
X_std['cafeteria'] = X_std['cafeteria'].astype('int64')
X_std['tienda_de_videos'] = X_std['tienda_de_videos'].astype('int64')
X_std['barra_de_ensaladas'] = X_std['barra_de_ensaladas'].astype('int64')
X_std['comida_preparada'] = X_std['comida_preparada'].astype('int64')
X_std['floristeria'] = X_std['floristeria'].astype('int64')
X_std['promedio_autos(aprox)'] = X_std['promedio_autos(aprox)'].astype('int64')
X_std['numero_hijos'] = X_std['numero_hijos'].astype('int64')
X_std['empaque_reciclable'] = X_std['empaque_reciclable'].astype('int64')
X_std['bajo_en_grasa'] = X_std['bajo_en_grasa'].astype('int64')
X_std['unidades_por_caja'] = X_std['unidades_por_caja'].astype('int64')
X_std = X_std.rename(columns={'ventas_tienda(en millones)':'ventas_tienda_millones'})
X_std = X_std.rename(columns={'costo_tienda(en millones)':'costo_tienda_millones'})
X_std = X_std.rename(columns={'ventas_unitarias(en millones)':'ventas_unitarias_millones'})
X_std = X_std.rename(columns={'promedio_autos(aprox)':'promedio_autos'})
X_std.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 60428 entries, 0 to 60427
Data columns (total 40 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 categoria_alimento 60428 non-null int64
1 departamento 60428 non-null int64
2 tipo 60428 non-null int64
3 ventas_tienda_millones 60428 non-null float64
4 costo_tienda_millones 60428 non-null float64
5 ventas_unitarias_millones 60428 non-null int64
6 promocion 60428 non-null int64
7 pais 60428 non-null int64
8 estado_civil 60428 non-null int64
9 genero 60428 non-null int64
10 total_de_hijos 60428 non-null int64
11 escolaridad 60428 non-null int64
12 miembro 60428 non-null int64
13 ocupacion 60428 non-null int64
14 vivienda_propia 60428 non-null int64
15 promedio_autos 60428 non-null int64
16 promedio_autos 60428 non-null int64
17 ingreso_anual 60428 non-null int64
18 numero_hijos 60428 non-null int64
19 marca 60428 non-null int64
20 precio_recomendado 60428 non-null float64
21 peso_bruto 60428 non-null float64
22 peso_neto 60428 non-null float64
23 empaque_reciclable 60428 non-null int64
24 bajo_en_grasa 60428 non-null int64
25 unidades_por_caja 60428 non-null int64
26 comercio 60428 non-null int64
27 ciudad 60428 non-null int64
28 estado 60428 non-null int64
29 pies_cuadrados_tienda 60428 non-null float64
30 pies_cuadrados_comestibles 60428 non-null float64
31 pies_cuadrados_congelados 60428 non-null float64
32 pies_cuadrados_carne 60428 non-null float64
33 cafeteria 60428 non-null int64
34 tienda_de_videos 60428 non-null int64
35 barra_de_ensaladas 60428 non-null int64
36 comida_preparada 60428 non-null int64
37 floristeria 60428 non-null int64
38 divulgacion 60428 non-null int64
39 costo 60428 non-null float64
dtypes: float64(10), int64(30)
memory usage: 18.4 MB
X_std.sample(5)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
categoria_alimento | departamento | tipo | ventas_tienda_millones | costo_tienda_millones | ventas_unitarias_millones | promocion | pais | estado_civil | genero | total_de_hijos | escolaridad | miembro | ocupacion | vivienda_propia | promedio_autos | promedio_autos | ingreso_anual | numero_hijos | marca | precio_recomendado | peso_bruto | peso_neto | empaque_reciclable | bajo_en_grasa | unidades_por_caja | comercio | ciudad | estado | pies_cuadrados_tienda | pies_cuadrados_comestibles | pies_cuadrados_congelados | pies_cuadrados_carne | cafeteria | tienda_de_videos | barra_de_ensaladas | comida_preparada | floristeria | divulgacion | costo | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
52616 | 41 | 11 | 2 | 10.70 | 3.5310 | 5 | 16 | 1 | 1 | 1 | 3 | 2 | 3 | 4 | 1 | 4 | 4 | 80000 | 3 | 53 | 2.14 | 8.89 | 5.89 | 0 | 0 | 26 | 1 | 2 | 2 | 33858.0 | 22123.0 | 7041.0 | 4694.0 | 1 | 0 | 1 | 1 | 1 | 9 | 55.18 |
47231 | 7 | 6 | 1 | 4.32 | 1.6416 | 2 | 26 | 2 | 2 | 2 | 5 | 1 | 0 | 1 | 0 | 1 | 1 | 20000 | 0 | 29 | 2.16 | 17.50 | 15.50 | 0 | 1 | 32 | 1 | 11 | 6 | 30584.0 | 21938.0 | 5188.0 | 3458.0 | 1 | 1 | 1 | 1 | 1 | 12 | 148.62 |
59238 | 34 | 11 | 2 | 4.35 | 1.3050 | 3 | 30 | 2 | 1 | 1 | 1 | 3 | 2 | 1 | 0 | 3 | 3 | 40000 | 0 | 53 | 1.45 | 9.65 | 7.64 | 1 | 0 | 14 | 5 | 12 | 7 | 36509.0 | 22450.0 | 8435.0 | 5624.0 | 0 | 0 | 0 | 0 | 0 | 8 | 141.39 |
1756 | 4 | 4 | 1 | 3.08 | 1.3552 | 4 | 45 | 2 | 1 | 1 | 2 | 1 | 0 | 3 | 1 | 0 | 0 | 20000 | 1 | 16 | 0.77 | 13.40 | 10.30 | 1 | 1 | 26 | 1 | 11 | 6 | 30584.0 | 21938.0 | 5188.0 | 3458.0 | 1 | 1 | 1 | 1 | 1 | 7 | 141.38 |
20039 | 18 | 5 | 1 | 5.04 | 2.1672 | 3 | 12 | 1 | 2 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 20000 | 0 | 25 | 1.68 | 17.20 | 14.20 | 1 | 1 | 8 | 2 | 3 | 2 | 21215.0 | 13305.0 | 4746.0 | 3164.0 | 1 | 0 | 0 | 0 | 0 | 1 | 69.63 |
#5. Clusterización y validación
##Clusterización
- El algoritmo recomendado para la clusterización es KMeans, sin embargo, eres libre de utilizar cualquier otro algoritmo como Mean Shift o, incluso, DBSCAN. Lo importante es hallar el mejor número de clusters.
from sklearn.preprocessing import Normalizer
values = Normalizer().fit_transform(X_std.values)
values
array([[2.53355590e-05, 2.53355590e-05, 2.53355590e-05, ...,
2.53355590e-05, 2.53355590e-05, 3.20798848e-03],
[1.44974962e-05, 1.44974962e-05, 1.44974962e-05, ...,
1.44974962e-05, 1.44974962e-05, 8.67820124e-04],
[2.53356320e-05, 2.53356320e-05, 2.53356320e-05, ...,
2.53356320e-05, 2.53356320e-05, 2.13224679e-03],
...,
[3.70003343e-04, 4.52226308e-04, 4.11114826e-05, ...,
0.00000000e+00, 1.43890189e-04, 1.38771809e-03],
[1.96787923e-04, 2.40518573e-04, 2.18653248e-05, ...,
1.09326624e-05, 8.74612992e-05, 1.45273218e-03],
[3.70009261e-04, 4.52233541e-04, 4.11121401e-05, ...,
2.05560700e-05, 2.05560700e-05, 1.80400071e-03]])
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=5, n_init=10, max_iter=300)
y_pred = kmeans.fit_predict(values)
##Validación
-
Número de clusters: Debes instanciar de 3 a máximo 10 clusters con el(los) algoritmo(s) seleccionado(s), utilizando
X_std
y obtener cómo mínimo el puntaje de Silhouette, aunque te recomiendo utilizar otras métricas como Davies-Bouldin y Calinski and Harabasz para que puedas decidir cuál es la mejor configuración para el número de clusters.Restricciones: (El puntaje mínimo de Silhouette debe ser de 0.50; el de Davies-Bouldin máximo de 0.75; y el de CalinskiHarabasz, el número más alto posible.)
-
Estructura: Debes evaluar la estructura de los clusters tomando como referencia una baseline. Para generar la baseline, vamos a generar números aleatorios con el módulo random de numpy con las mismas dimensiones de tu dataset
X_std
y lo vas a almacenar en una variable llamadarandom_data
y vas a repetir el paso 2. Analiza los puntajes da la(s) métrica(s) utilizada y asegúrate de que tuX_std
tiene un desempeño muy superior al derandom_data
. -
Estabilidad: Finalmente, debes evaluar la estabilidad de los clusters con el número de clusters seleccionado en el paso 2. Para ello, debes segmentar
X_std
en 3 o 5 partes iguales, (puedes apoyarte en la funciónarray_split()
de numpy, y almacenar cada fragmento del dataset en una variable llamadaset_1, set_2, ..., set_n
) y repetir los pasos de validación para el número de clusters escogido en cada uno de los sets. Aquí lo verdaderamente importante es que los puntajes no presenten una variación mayor a ±5% entre sí. Esto va a garantizar que hay homogeneidad en la composición de los clusters.
Si has logrado llevar a cabo con éxito los pasos anteriores, puedes avanzar a la próxima fase. En caso contrario, verifica nuevamente las variables: añade, remueve, cambia por otras, y repite de nuevo los pasos de la tarjeta anterior para poder repetir los pasos de esta tarjeta hasta que obtengas los resultados sugeridos.
from sklearn import metrics
labels = kmeans.labels_
silhouette = metrics.silhouette_score(values, labels, metric='euclidean')
print(silhouette)
0.5352733712987886
dbs = metrics.davies_bouldin_score(values, labels)
print(dbs)
0.5845848355952169
calinski = metrics.calinski_harabasz_score(values, labels)
print(calinski)
248671.8844556791
scores= []
for s in range(3,11):
score={}
kmeans = KMeans(n_clusters= s, n_init=10, max_iter= 300)
y_pred = kmeans.fit_predict(values)
labels = kmeans.labels_
score['N_Clusters'] = s
score['Silhouette'] = metrics.silhouette_score(values, labels, metric='euclidean')
score['Davies-Bouldin'] = metrics.davies_bouldin_score(values, labels)
score['Calinski-Harabasz'] = metrics.calinski_harabasz_score(values, labels)
scores.append(score)
table = pd.DataFrame(scores)
table
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
N_Clusters | Silhouette | Davies-Bouldin | Calinski-Harabasz | |
---|---|---|---|---|
0 | 3 | 0.575792 | 0.545360 | 197252.435022 |
1 | 4 | 0.538342 | 0.576338 | 211771.411390 |
2 | 5 | 0.535273 | 0.584585 | 248671.884456 |
3 | 6 | 0.547922 | 0.611305 | 296370.912708 |
4 | 7 | 0.542302 | 0.613893 | 301186.729127 |
5 | 8 | 0.544900 | 0.625250 | 295784.826934 |
6 | 9 | 0.517273 | 0.734864 | 296932.908036 |
7 | 10 | 0.498212 | 0.784870 | 295121.956476 |
##Instanciando la mejor configuración de clusters
-
Vas a instanciar el algoritmo de clusterización una vez , con la configuración escogida, y vas a crear un nuevo atributo en el dataset
datos_raw
llamado'cluster'
para almacenar los labels de los clusters.Nota: Te sugiero que no ejecutes KMeans de nuevo, porque los clusters van a cambiar de label y color con cada ejecución del algoritmo.
-
Vas a realizar varios gráficos de dispersión para comparar las variables añadiendo una tercera dimensión con los clusters en el parámetro
hue
del gráfico. Trata de describir tus observaciones. Por ejemplo: En el cluster 0, de color rojo, se encuentran agrupados los clientes que gastan más dinero en productos no comestibles.
Repite el paso anterior hasta que puedas obtener varias descripciones de cada uno de los clusters.
¡Ten buen ánimo y adelante que ya estás en la recta final!
import numpy as np
random_data = np.random.rand(60428,40)
scores= []
for s in range(3,11):
score={}
kmeans = KMeans(n_clusters= s, n_init=10, max_iter= 300)
y_pred = kmeans.fit_predict(random_data)
labels = kmeans.labels_
score['N_Clusters'] = s
score['Silhouette'] = metrics.silhouette_score(random_data, labels, metric='euclidean')
score['Davies-Bouldin'] = metrics.davies_bouldin_score(random_data, labels)
score['Calinski-Harabasz'] = metrics.calinski_harabasz_score(random_data, labels)
scores.append(score)
random_data = pd.DataFrame(scores)
random_data
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
N_Clusters | Silhouette | Davies-Bouldin | Calinski-Harabasz | |
---|---|---|---|---|
0 | 3 | 0.015365 | 6.572858 | 948.065238 |
1 | 4 | 0.015080 | 6.469964 | 831.855857 |
2 | 5 | 0.014512 | 5.954636 | 738.331278 |
3 | 6 | 0.014367 | 5.599739 | 671.767696 |
4 | 7 | 0.014182 | 5.462235 | 618.858338 |
5 | 8 | 0.013996 | 5.214281 | 577.613804 |
6 | 9 | 0.013992 | 5.057696 | 542.671464 |
7 | 10 | 0.013937 | 4.951830 | 513.183774 |
set1,set2,set3,set4,set5,set6,set7,set8,set9,set10,set11,set12 = np.array_split(values,12)
sets = [set1,set2,set3,set4,set5,set6,set7,set8,set9,set10,set11,set12]
scores= []
n=1
for set_ in sets:
score={}
kmeans = KMeans(n_clusters= 7, n_init=10, max_iter= 300)
y_pred = kmeans.fit_predict(set_)
labels = kmeans.labels_
score['Set'] = f'set{n}'
n += 1
score['Silhouette'] = metrics.silhouette_score(set_, labels, metric='euclidean')
score['Davies-Bouldin'] = metrics.davies_bouldin_score(set_, labels)
score['Calinski-Harabasz'] = metrics.calinski_harabasz_score(set_, labels)
scores.append(score)
datos_raw = pd.DataFrame(scores)
datos_raw
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Set | Silhouette | Davies-Bouldin | Calinski-Harabasz | |
---|---|---|---|---|
0 | set1 | 0.549975 | 0.615592 | 26095.828477 |
1 | set2 | 0.547154 | 0.605508 | 24494.738300 |
2 | set3 | 0.544430 | 0.612219 | 25032.404405 |
3 | set4 | 0.545244 | 0.607009 | 25665.988326 |
4 | set5 | 0.509466 | 0.660016 | 24628.177579 |
5 | set6 | 0.549379 | 0.608522 | 24905.403881 |
6 | set7 | 0.535179 | 0.619307 | 24222.956940 |
7 | set8 | 0.542868 | 0.611956 | 25006.426084 |
8 | set9 | 0.541970 | 0.610896 | 25427.453831 |
9 | set10 | 0.542398 | 0.621619 | 25685.796319 |
10 | set11 | 0.538981 | 0.622191 | 24458.451420 |
11 | set12 | 0.539179 | 0.613452 | 25026.559504 |
kmeans = KMeans(n_clusters= 7, n_init=10, max_iter= 300)
y_pred = kmeans.fit_predict(values)
labels = kmeans.labels_
X_std['CLUSTER'] = labels
import matplotlib.pyplot as plt
plt.figure(figsize=(12,8))
plt.scatter(X_std['ventas_tienda_millones'], X_std['costo_tienda_millones'], c=labels, s=6, cmap='gist_rainbow')
plt.xlabel('Ventas en la Tienda (millones)')
plt.ylabel('Costos en la Tienda (millones)')
plt.show
<function matplotlib.pyplot.show(close=None, block=None)>
X_std.sample(5)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
categoria_alimento | departamento | tipo | ventas_tienda_millones | costo_tienda_millones | ventas_unitarias_millones | promocion | pais | estado_civil | genero | total_de_hijos | escolaridad | miembro | ocupacion | vivienda_propia | promedio_autos | promedio_autos | ingreso_anual | numero_hijos | marca | precio_recomendado | peso_bruto | peso_neto | empaque_reciclable | bajo_en_grasa | unidades_por_caja | comercio | ciudad | estado | pies_cuadrados_tienda | pies_cuadrados_comestibles | pies_cuadrados_congelados | pies_cuadrados_carne | cafeteria | tienda_de_videos | barra_de_ensaladas | comida_preparada | floristeria | divulgacion | costo | CLUSTER | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
29170 | 13 | 15 | 1 | 4.74 | 1.7538 | 2 | 24 | 1 | 2 | 2 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 20000 | 0 | 73 | 2.37 | 12.90 | 11.80 | 0 | 1 | 13 | 2 | 4 | 2 | 30268.0 | 22063.0 | 4923.0 | 3282.0 | 0 | 0 | 0 | 0 | 0 | 7 | 79.95 | 3 |
41425 | 33 | 15 | 1 | 1.94 | 0.8342 | 2 | 26 | 1 | 2 | 1 | 3 | 1 | 2 | 2 | 1 | 2 | 2 | 140000 | 0 | 74 | 0.97 | 8.83 | 6.82 | 0 | 0 | 6 | 2 | 5 | 3 | 23598.0 | 14210.0 | 5633.0 | 3755.0 | 0 | 0 | 0 | 0 | 1 | 10 | 135.92 | 6 |
8024 | 7 | 6 | 1 | 4.74 | 2.2752 | 3 | 7 | 2 | 1 | 1 | 1 | 2 | 2 | 2 | 1 | 2 | 2 | 60000 | 1 | 26 | 1.58 | 10.30 | 8.30 | 1 | 0 | 7 | 2 | 9 | 4 | 34791.0 | 26354.0 | 5062.0 | 3375.0 | 0 | 0 | 1 | 1 | 0 | 10 | 77.72 | 2 |
53756 | 5 | 1 | 1 | 13.28 | 5.4448 | 4 | 44 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 1 | 2 | 2 | 60000 | 1 | 4 | 3.32 | 7.20 | 6.19 | 1 | 0 | 21 | 3 | 6 | 3 | 23688.0 | 15337.0 | 5011.0 | 3340.0 | 1 | 1 | 1 | 1 | 1 | 13 | 53.82 | 5 |
13332 | 14 | 13 | 3 | 11.48 | 4.1328 | 4 | 5 | 1 | 2 | 1 | 2 | 2 | 2 | 4 | 1 | 3 | 3 | 60000 | 0 | 17 | 2.87 | 17.10 | 15.10 | 0 | 0 | 34 | 1 | 1 | 1 | 27694.0 | 18670.0 | 5415.0 | 3610.0 | 1 | 1 | 1 | 1 | 1 | 4 | 66.27 | 5 |
#6. Descripción de los clusters
¡Excelente trabajo! Los clusters generados tienen una descripción y ahora es el momento de analizar cada una da las descripciones.
- Debes generar en una celda de texto el resultado consolidado de tu análisis.
X_std.groupby('CLUSTER').describe()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead tr th {
text-align: left;
}
.dataframe thead tr:last-of-type th {
text-align: right;
}
categoria_alimento | departamento | tipo | ventas_tienda_millones | costo_tienda_millones | ventas_unitarias_millones | promocion | pais | estado_civil | genero | total_de_hijos | escolaridad | miembro | ocupacion | vivienda_propia | promedio_autos | ingreso_anual | numero_hijos | marca | precio_recomendado | peso_bruto | peso_neto | empaque_reciclable | bajo_en_grasa | unidades_por_caja | comercio | ciudad | estado | pies_cuadrados_tienda | pies_cuadrados_comestibles | pies_cuadrados_congelados | pies_cuadrados_carne | cafeteria | tienda_de_videos | barra_de_ensaladas | comida_preparada | floristeria | divulgacion | costo | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | |
CLUSTER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | 6719.0 | 16.018157 | 11.401139 | 1.0 | 7.0 | 13.0 | 23.0 | 45.0 | 6719.0 | 7.813663 | 4.980981 | 1.0 | 4.0 | 7.0 | 11.0 | 22.0 | 6719.0 | 1.382497 | 0.648926 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 | 6719.0 | 6.534888 | 3.442566 | 0.51 | 3.8600 | 5.91 | 8.64 | 19.90 | 6719.0 | 2.616995 | 1.442993 | 0.1632 | 1.528200 | 2.3730 | 3.449550 | 9.7265 | 6719.0 | 3.098824 | 0.831465 | 1.0 | 3.0 | 3.0 | 4.0 | 6.0 | 6719.0 | 22.140944 | 12.753622 | 1.0 | 11.0 | 21.0 | 33.0 | 48.0 | 6719.0 | 1.454681 | 0.623060 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 | 6719.0 | 1.470606 | 0.499172 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 6719.0 | 1.512427 | 0.499883 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 6719.0 | 2.492186 | 1.451987 | 0.0 | 1.0 | 2.0 | 4.0 | 5.0 | 6719.0 | 2.561095 | 1.089796 | 1.0 | 2.0 | 2.0 | 3.0 | 5.0 | 6719.0 | 1.929751 | 0.653026 | 0.0 | 2.0 | 2.0 | 2.0 | 3.0 | 6719.0 | 2.611401 | 0.921475 | 2.0 | 2.0 | 2.0 | 4.0 | 4.0 | 6719.0 | 0.679268 | 0.466793 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 6719.0 | 2.484894 | 0.937161 | 1.0 | 2.0 | 3.0 | 3.0 | 4.0 | 6719.0 | 2.484894 | 0.937161 | 1.0 | 2.0 | 3.0 | 3.0 | 4.0 | 6719.0 | 100202.411073 | 22740.641045 | 80000.0 | 80000.0 | 100000.0 | 120000.0 | 160000.0 | 6719.0 | 0.830630 | 1.249546 | 0.0 | 0.0 | 0.0 | 1.0 | 5.0 | 6719.0 | 36.756511 | 25.254382 | 1.0 | 18.0 | 33.0 | 51.0 | 111.0 | 6719.0 | 2.112741 | 0.927165 | 0.5 | 1.42 | 2.13 | 2.78 | 3.98 | 6719.0 | 13.853000 | 4.597272 | 6.0 | 9.79 | 13.7 | 17.8 | 21.9 | 6719.0 | 11.831424 | 4.670995 | 3.05 | 7.80 | 11.6 | 16.00 | 20.8 | 6719.0 | 0.560947 | 0.496309 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 6719.0 | 0.346778 | 0.475980 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 6719.0 | 18.639827 | 10.287779 | 1.0 | 9.00 | 19.0 | 28.0 | 36.0 | 6719.0 | 1.999107 | 0.995972 | 1.0 | 1.0 | 2.0 | 2.0 | 5.0 | 6719.0 | 8.159399 | 4.721513 | 1.0 | 4.0 | 7.0 | 12.0 | 19.0 | 6719.0 | 3.747730 | 2.455784 | 1.0 | 2.0 | 3.0 | 6.0 | 10.0 | 6719.0 | 27472.634321 | 5888.038463 | 20319.0 | 23112.0 | 23759.0 | 30797.0 | 39696.0 | 6719.0 | 18760.949546 | 4060.769026 | 13305.0 | 15337.0 | 17475.0 | 22063.0 | 30351.0 | 6719.0 | 5227.030064 | 1632.846700 | 2452.0 | 4149.0 | 5011.0 | 6393.0 | 9184.0 | 6719.0 | 3484.615717 | 1088.418572 | 1635.0 | 2766.0 | 3340.0 | 4262.0 | 6122.0 | 6719.0 | 0.615568 | 0.486497 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 6719.0 | 0.346034 | 0.475739 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 6719.0 | 0.590713 | 0.491739 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 6719.0 | 0.590713 | 0.491739 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 6719.0 | 0.562286 | 0.496142 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 6719.0 | 6.579402 | 3.757208 | 1.0 | 3.0 | 6.0 | 10.0 | 13.0 | 6719.0 | 99.787136 | 29.439739 | 50.79 | 73.27 | 98.81 | 126.24 | 149.75 |
1 | 7184.0 | 15.847996 | 11.217355 | 1.0 | 7.0 | 13.0 | 23.0 | 45.0 | 7184.0 | 7.856487 | 4.921025 | 1.0 | 4.0 | 7.0 | 11.0 | 22.0 | 7184.0 | 1.379872 | 0.651873 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 | 7184.0 | 6.535227 | 3.575841 | 0.51 | 3.6800 | 5.86 | 8.72 | 19.90 | 7184.0 | 2.624038 | 1.505865 | 0.1792 | 1.448850 | 2.3524 | 3.534150 | 9.5250 | 7184.0 | 3.096604 | 0.846655 | 1.0 | 3.0 | 3.0 | 4.0 | 5.0 | 7184.0 | 22.942650 | 12.740289 | 1.0 | 12.0 | 22.0 | 33.0 | 48.0 | 7184.0 | 1.365535 | 0.644978 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 | 7184.0 | 1.522829 | 0.499513 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 7184.0 | 1.510022 | 0.499934 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 7184.0 | 2.528257 | 1.462619 | 0.0 | 1.0 | 3.0 | 4.0 | 5.0 | 7184.0 | 1.526448 | 1.037845 | 1.0 | 1.0 | 1.0 | 1.0 | 5.0 | 7184.0 | 0.543012 | 0.965124 | 0.0 | 0.0 | 0.0 | 1.0 | 3.0 | 7184.0 | 2.075306 | 1.082190 | 1.0 | 1.0 | 2.0 | 3.0 | 5.0 | 7184.0 | 0.573775 | 0.494562 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 7184.0 | 1.347300 | 1.017355 | 0.0 | 1.0 | 1.0 | 2.0 | 4.0 | 7184.0 | 1.347300 | 1.017355 | 0.0 | 1.0 | 1.0 | 2.0 | 4.0 | 7184.0 | 24120.267261 | 8089.366585 | 20000.0 | 20000.0 | 20000.0 | 20000.0 | 40000.0 | 7184.0 | 0.794961 | 1.295264 | 0.0 | 0.0 | 0.0 | 1.0 | 5.0 | 7184.0 | 37.064449 | 24.964938 | 1.0 | 19.0 | 33.0 | 51.0 | 111.0 | 7184.0 | 2.103470 | 0.943698 | 0.5 | 1.38 | 2.13 | 2.78 | 3.98 | 7184.0 | 13.868502 | 4.624514 | 6.0 | 9.75 | 13.7 | 17.9 | 21.9 | 7184.0 | 11.856224 | 4.684531 | 3.05 | 7.77 | 11.6 | 16.10 | 20.8 | 7184.0 | 0.555540 | 0.496940 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 7184.0 | 0.353703 | 0.478152 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 7184.0 | 18.811665 | 10.238437 | 1.0 | 9.75 | 19.0 | 28.0 | 36.0 | 7184.0 | 2.314727 | 0.872284 | 1.0 | 2.0 | 2.0 | 3.0 | 5.0 | 7184.0 | 9.387667 | 4.768647 | 3.0 | 5.0 | 7.0 | 14.0 | 18.0 | 7184.0 | 3.656459 | 2.683140 | 1.0 | 2.0 | 3.0 | 6.0 | 10.0 | 7184.0 | 25953.479677 | 6973.816914 | 20319.0 | 21215.0 | 23598.0 | 23759.0 | 39696.0 | 7184.0 | 17494.010301 | 4486.158512 | 13305.0 | 14210.0 | 16232.0 | 17475.0 | 30351.0 | 7184.0 | 5075.773107 | 2041.601544 | 2452.0 | 4016.0 | 4746.0 | 5633.0 | 9184.0 | 7184.0 | 3383.741787 | 1360.750479 | 1635.0 | 2678.0 | 3164.0 | 3755.0 | 6122.0 | 7184.0 | 0.461442 | 0.498546 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 7184.0 | 0.213948 | 0.410119 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 7184.0 | 0.434716 | 0.495754 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 7184.0 | 0.434716 | 0.495754 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 7184.0 | 0.390590 | 0.487917 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 7184.0 | 7.108714 | 3.952208 | 1.0 | 4.0 | 7.0 | 11.0 | 13.0 | 7184.0 | 102.537609 | 30.087471 | 51.00 | 75.76 | 106.10 | 129.50 | 149.75 |
2 | 13249.0 | 15.878406 | 11.358319 | 1.0 | 7.0 | 13.0 | 24.0 | 45.0 | 13249.0 | 7.889048 | 4.966106 | 1.0 | 4.0 | 7.0 | 11.0 | 22.0 | 13249.0 | 1.384784 | 0.655383 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 | 13249.0 | 6.577622 | 3.464084 | 0.52 | 3.8400 | 6.00 | 8.70 | 19.90 | 13249.0 | 2.632508 | 1.449975 | 0.1953 | 1.518000 | 2.4054 | 3.505500 | 9.0945 | 13249.0 | 3.096083 | 0.829733 | 1.0 | 3.0 | 3.0 | 4.0 | 6.0 | 13249.0 | 22.672504 | 12.701308 | 1.0 | 12.0 | 22.0 | 33.0 | 48.0 | 13249.0 | 1.477017 | 0.682624 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 | 13249.0 | 1.502000 | 0.500015 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 13249.0 | 1.466601 | 0.498902 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 13249.0 | 2.578761 | 1.478613 | 0.0 | 1.0 | 3.0 | 4.0 | 5.0 | 13249.0 | 2.775153 | 1.090458 | 1.0 | 2.0 | 3.0 | 3.0 | 5.0 | 13249.0 | 1.942939 | 0.661373 | 0.0 | 2.0 | 2.0 | 2.0 | 3.0 | 13249.0 | 2.292022 | 1.104488 | 1.0 | 1.0 | 2.0 | 3.0 | 5.0 | 13249.0 | 0.578157 | 0.493872 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 13249.0 | 2.548796 | 0.959738 | 1.0 | 2.0 | 3.0 | 3.0 | 4.0 | 13249.0 | 2.548796 | 0.959738 | 1.0 | 2.0 | 3.0 | 3.0 | 4.0 | 13249.0 | 47836.063099 | 11149.442999 | 40000.0 | 40000.0 | 40000.0 | 60000.0 | 80000.0 | 13249.0 | 0.889954 | 1.343360 | 0.0 | 0.0 | 0.0 | 2.0 | 5.0 | 13249.0 | 37.077138 | 25.170741 | 1.0 | 18.0 | 33.0 | 52.0 | 111.0 | 13249.0 | 2.121408 | 0.925099 | 0.5 | 1.43 | 2.13 | 2.80 | 3.98 | 13249.0 | 13.835425 | 4.622013 | 6.0 | 9.71 | 13.6 | 17.8 | 21.9 | 13249.0 | 11.826391 | 4.686204 | 3.05 | 7.75 | 11.6 | 16.00 | 20.8 | 13249.0 | 0.563363 | 0.495988 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 13249.0 | 0.348781 | 0.476603 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 13249.0 | 18.958110 | 10.266305 | 1.0 | 10.00 | 20.0 | 28.0 | 36.0 | 13249.0 | 2.076685 | 0.919630 | 1.0 | 2.0 | 2.0 | 2.0 | 5.0 | 13249.0 | 8.612348 | 4.692500 | 2.0 | 5.0 | 7.0 | 13.0 | 19.0 | 13249.0 | 3.787154 | 2.503074 | 1.0 | 2.0 | 3.0 | 6.0 | 10.0 | 13249.0 | 26608.861876 | 6085.229383 | 20319.0 | 22478.0 | 23688.0 | 30797.0 | 39696.0 | 13249.0 | 18211.873802 | 4198.366284 | 13305.0 | 15337.0 | 16418.0 | 22063.0 | 30351.0 | 13249.0 | 5038.183863 | 1694.409428 | 2452.0 | 4016.0 | 4923.0 | 5633.0 | 9184.0 | 13249.0 | 3358.754095 | 1129.403360 | 1635.0 | 2678.0 | 3282.0 | 3755.0 | 6122.0 | 13249.0 | 0.560873 | 0.496299 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 13249.0 | 0.277606 | 0.447835 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 13249.0 | 0.521624 | 0.499551 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 13249.0 | 0.521624 | 0.499551 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 13249.0 | 0.495585 | 0.499999 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 13249.0 | 6.888218 | 3.851519 | 1.0 | 4.0 | 7.0 | 10.0 | 13.0 | 13249.0 | 102.290299 | 29.921509 | 51.00 | 76.41 | 102.47 | 129.50 | 149.75 |
3 | 7255.0 | 15.697726 | 11.314660 | 1.0 | 7.0 | 13.0 | 23.0 | 45.0 | 7255.0 | 7.842867 | 5.033344 | 1.0 | 4.0 | 7.0 | 11.0 | 22.0 | 7255.0 | 1.364438 | 0.639697 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 | 7255.0 | 6.519322 | 3.377506 | 0.52 | 3.9000 | 5.97 | 8.56 | 19.75 | 7255.0 | 2.615060 | 1.422929 | 0.1705 | 1.543900 | 2.3976 | 3.456000 | 8.9500 | 7255.0 | 3.073191 | 0.809045 | 1.0 | 3.0 | 3.0 | 4.0 | 6.0 | 7255.0 | 21.648105 | 13.417428 | 1.0 | 10.0 | 22.0 | 34.0 | 48.0 | 7255.0 | 1.397519 | 0.520804 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 | 7255.0 | 1.493039 | 0.499986 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 7255.0 | 1.463542 | 0.498703 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 7255.0 | 2.389387 | 1.489092 | 0.0 | 1.0 | 2.0 | 4.0 | 5.0 | 7255.0 | 1.139904 | 0.511381 | 1.0 | 1.0 | 1.0 | 1.0 | 5.0 | 7255.0 | 0.170503 | 0.602138 | 0.0 | 0.0 | 0.0 | 0.0 | 3.0 | 7255.0 | 1.904618 | 1.009603 | 1.0 | 1.0 | 1.0 | 3.0 | 5.0 | 7255.0 | 0.531633 | 0.499033 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 7255.0 | 0.873329 | 0.681047 | 0.0 | 0.0 | 1.0 | 1.0 | 2.0 | 7255.0 | 0.873329 | 0.681047 | 0.0 | 0.0 | 1.0 | 1.0 | 2.0 | 7255.0 | 20000.000000 | 0.000000 | 20000.0 | 20000.0 | 20000.0 | 20000.0 | 20000.0 | 7255.0 | 0.757960 | 1.242068 | 0.0 | 0.0 | 0.0 | 1.0 | 5.0 | 7255.0 | 36.909028 | 25.492280 | 1.0 | 18.0 | 32.0 | 52.0 | 111.0 | 7255.0 | 2.127858 | 0.933107 | 0.5 | 1.43 | 2.15 | 2.80 | 3.98 | 7255.0 | 13.685054 | 4.593611 | 6.0 | 9.63 | 13.4 | 17.5 | 21.9 | 7255.0 | 11.673932 | 4.657111 | 3.05 | 7.63 | 11.3 | 15.70 | 20.8 | 7255.0 | 0.555479 | 0.496947 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 7255.0 | 0.349139 | 0.476731 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 7255.0 | 18.985665 | 10.268000 | 1.0 | 10.00 | 20.0 | 28.0 | 36.0 | 7255.0 | 1.719779 | 1.162157 | 1.0 | 1.0 | 1.0 | 2.0 | 5.0 | 7255.0 | 7.024397 | 4.964149 | 1.0 | 2.0 | 9.0 | 11.0 | 19.0 | 7255.0 | 3.194624 | 2.010422 | 1.0 | 2.0 | 2.0 | 5.0 | 8.0 | 7255.0 | 32487.966092 | 3776.713279 | 27694.0 | 30268.0 | 30797.0 | 34791.0 | 39696.0 | 7255.0 | 22174.368573 | 2531.526823 | 18670.0 | 20141.0 | 22063.0 | 22450.0 | 30351.0 | 7255.0 | 6188.274845 | 1489.697279 | 3561.0 | 5062.0 | 5415.0 | 7041.0 | 9184.0 | 7255.0 | 4125.404273 | 993.055541 | 2374.0 | 3375.0 | 3610.0 | 4694.0 | 6122.0 | 7255.0 | 0.619435 | 0.485559 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 7255.0 | 0.400138 | 0.489960 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 7255.0 | 0.767609 | 0.422386 | 0.0 | 1.0 | 1.0 | 1.0 | 1.0 | 7255.0 | 0.767609 | 0.422386 | 0.0 | 1.0 | 1.0 | 1.0 | 1.0 | 7255.0 | 0.595314 | 0.490865 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 7255.0 | 6.509580 | 3.810494 | 1.0 | 3.0 | 6.0 | 10.0 | 13.0 | 7255.0 | 96.568673 | 30.127996 | 50.79 | 68.91 | 95.21 | 123.61 | 149.08 |
4 | 9552.0 | 15.860762 | 11.394961 | 1.0 | 7.0 | 13.0 | 23.0 | 45.0 | 9552.0 | 7.743928 | 4.951483 | 1.0 | 4.0 | 7.0 | 11.0 | 22.0 | 9552.0 | 1.384213 | 0.653906 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 | 9552.0 | 6.619889 | 3.488748 | 0.58 | 3.8700 | 6.16 | 8.73 | 19.90 | 9552.0 | 2.655329 | 1.466884 | 0.2496 | 1.522425 | 2.4207 | 3.510225 | 9.5305 | 9552.0 | 3.124477 | 0.830461 | 1.0 | 3.0 | 3.0 | 4.0 | 6.0 | 9552.0 | 20.793446 | 13.066999 | 1.0 | 9.0 | 22.0 | 31.0 | 46.0 | 9552.0 | 1.448178 | 0.523388 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 | 9552.0 | 1.502827 | 0.500018 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 9552.0 | 1.505549 | 0.499995 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 9552.0 | 2.711474 | 1.486505 | 0.0 | 2.0 | 3.0 | 4.0 | 5.0 | 9552.0 | 3.044075 | 1.164172 | 1.0 | 3.0 | 3.0 | 3.0 | 5.0 | 9552.0 | 2.021880 | 0.615000 | 0.0 | 2.0 | 2.0 | 2.0 | 3.0 | 9552.0 | 2.171587 | 1.145282 | 1.0 | 1.0 | 2.0 | 3.0 | 5.0 | 9552.0 | 0.576214 | 0.494183 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 9552.0 | 2.533396 | 0.924279 | 1.0 | 2.0 | 3.0 | 3.0 | 4.0 | 9552.0 | 2.533396 | 0.924279 | 1.0 | 2.0 | 3.0 | 3.0 | 4.0 | 9552.0 | 40117.252931 | 1526.942850 | 40000.0 | 40000.0 | 40000.0 | 40000.0 | 60000.0 | 9552.0 | 0.834485 | 1.326633 | 0.0 | 0.0 | 0.0 | 1.0 | 5.0 | 9552.0 | 36.314280 | 25.058367 | 1.0 | 18.0 | 32.0 | 51.0 | 111.0 | 9552.0 | 2.121784 | 0.935803 | 0.5 | 1.41 | 2.14 | 2.81 | 3.98 | 9552.0 | 13.770019 | 4.632081 | 6.0 | 9.63 | 13.5 | 17.7 | 21.9 | 9552.0 | 11.769253 | 4.683986 | 3.05 | 7.69 | 11.5 | 16.00 | 20.8 | 9552.0 | 0.557580 | 0.496700 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 9552.0 | 0.351026 | 0.477316 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 9552.0 | 18.852178 | 10.263379 | 1.0 | 9.00 | 20.0 | 28.0 | 36.0 | 9552.0 | 1.625523 | 1.140598 | 1.0 | 1.0 | 1.0 | 2.0 | 5.0 | 9552.0 | 6.069514 | 4.381597 | 1.0 | 2.0 | 4.0 | 10.0 | 19.0 | 9552.0 | 3.338358 | 2.038074 | 1.0 | 2.0 | 2.0 | 5.0 | 8.0 | 9552.0 | 31391.844640 | 2659.016403 | 27694.0 | 30268.0 | 30584.0 | 33858.0 | 38382.0 | 9552.0 | 21648.771357 | 2168.766572 | 18670.0 | 20141.0 | 22063.0 | 22123.0 | 30351.0 | 9552.0 | 5845.873953 | 1075.452638 | 3561.0 | 5062.0 | 5415.0 | 7041.0 | 8435.0 | 9552.0 | 3897.224246 | 717.100699 | 2374.0 | 3375.0 | 3610.0 | 4694.0 | 5624.0 | 9552.0 | 0.689908 | 0.462555 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 9552.0 | 0.459171 | 0.498356 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 9552.0 | 0.731784 | 0.443054 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 9552.0 | 0.731784 | 0.443054 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 9552.0 | 0.666248 | 0.471577 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 9552.0 | 6.239740 | 3.790656 | 1.0 | 3.0 | 6.0 | 9.0 | 13.0 | 9552.0 | 95.488011 | 29.250215 | 50.79 | 68.91 | 94.79 | 116.74 | 149.08 |
5 | 10769.0 | 15.667471 | 11.314588 | 1.0 | 7.0 | 13.0 | 23.0 | 45.0 | 10769.0 | 7.776488 | 4.931562 | 1.0 | 4.0 | 7.0 | 11.0 | 22.0 | 10769.0 | 1.364751 | 0.637724 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 | 10769.0 | 6.417448 | 3.390633 | 0.53 | 3.7200 | 5.82 | 8.52 | 22.92 | 10769.0 | 2.567445 | 1.424065 | 0.2014 | 1.459200 | 2.3312 | 3.410400 | 9.2825 | 10769.0 | 3.060544 | 0.802724 | 1.0 | 3.0 | 3.0 | 4.0 | 6.0 | 10769.0 | 20.129817 | 13.184394 | 1.0 | 8.0 | 18.0 | 31.0 | 48.0 | 10769.0 | 1.407466 | 0.609335 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 | 10769.0 | 1.524933 | 0.499401 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 10769.0 | 1.481939 | 0.499697 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 10769.0 | 2.434674 | 1.501494 | 0.0 | 1.0 | 2.0 | 4.0 | 5.0 | 10769.0 | 2.353329 | 0.964574 | 1.0 | 2.0 | 2.0 | 2.0 | 5.0 | 10769.0 | 1.974928 | 0.592112 | 0.0 | 2.0 | 2.0 | 2.0 | 3.0 | 10769.0 | 2.617606 | 0.988572 | 1.0 | 2.0 | 2.0 | 4.0 | 5.0 | 10769.0 | 0.587055 | 0.492386 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 10769.0 | 2.568762 | 0.912667 | 1.0 | 2.0 | 3.0 | 3.0 | 4.0 | 10769.0 | 2.568762 | 0.912667 | 1.0 | 2.0 | 3.0 | 3.0 | 4.0 | 10769.0 | 69623.920513 | 12181.213148 | 60000.0 | 60000.0 | 60000.0 | 80000.0 | 120000.0 | 10769.0 | 0.743244 | 1.208758 | 0.0 | 0.0 | 0.0 | 1.0 | 5.0 | 10769.0 | 36.617420 | 24.977073 | 1.0 | 18.0 | 32.0 | 51.0 | 111.0 | 10769.0 | 2.100218 | 0.933576 | 0.5 | 1.40 | 2.11 | 2.77 | 3.98 | 10769.0 | 13.794186 | 4.654042 | 6.0 | 9.63 | 13.6 | 17.8 | 21.9 | 10769.0 | 11.783691 | 4.707324 | 3.05 | 7.68 | 11.5 | 16.00 | 20.8 | 10769.0 | 0.552233 | 0.497287 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 10769.0 | 0.352679 | 0.477826 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 10769.0 | 18.852540 | 10.238454 | 1.0 | 10.00 | 19.0 | 28.0 | 36.0 | 10769.0 | 1.887269 | 1.005886 | 1.0 | 1.0 | 2.0 | 2.0 | 5.0 | 10769.0 | 6.991271 | 5.049929 | 1.0 | 3.0 | 6.0 | 11.0 | 19.0 | 10769.0 | 3.426502 | 2.419777 | 1.0 | 2.0 | 2.0 | 5.0 | 10.0 | 10769.0 | 26922.884948 | 4911.235923 | 20319.0 | 23112.0 | 27694.0 | 30584.0 | 39696.0 | 10769.0 | 18396.785124 | 3579.372493 | 13305.0 | 15337.0 | 18670.0 | 21938.0 | 30351.0 | 10769.0 | 5115.719380 | 1306.882889 | 2452.0 | 4294.0 | 5062.0 | 5633.0 | 9184.0 | 10769.0 | 3410.450367 | 871.180241 | 1635.0 | 2863.0 | 3375.0 | 3755.0 | 6122.0 | 10769.0 | 0.703501 | 0.456735 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 10769.0 | 0.405330 | 0.490979 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 10769.0 | 0.600056 | 0.489909 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 10769.0 | 0.600056 | 0.489909 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 10769.0 | 0.639892 | 0.480054 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 10769.0 | 6.520661 | 3.855941 | 1.0 | 3.0 | 6.0 | 10.0 | 13.0 | 10769.0 | 98.344258 | 30.333223 | 50.79 | 69.63 | 95.74 | 126.62 | 149.75 |
6 | 5700.0 | 15.683509 | 11.364258 | 1.0 | 6.0 | 13.0 | 23.0 | 45.0 | 5700.0 | 7.758070 | 5.006845 | 1.0 | 4.0 | 7.0 | 11.0 | 22.0 | 5700.0 | 1.364211 | 0.636645 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 | 5700.0 | 6.599498 | 3.534297 | 0.65 | 3.7575 | 5.97 | 8.79 | 19.75 | 5700.0 | 2.630025 | 1.470617 | 0.2130 | 1.472450 | 2.3936 | 3.521700 | 9.2825 | 5700.0 | 3.110000 | 0.856632 | 1.0 | 3.0 | 3.0 | 4.0 | 6.0 | 5700.0 | 21.124912 | 13.236501 | 1.0 | 10.0 | 21.0 | 31.0 | 48.0 | 5700.0 | 1.341404 | 0.620698 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 | 5700.0 | 1.482982 | 0.499754 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 5700.0 | 1.493860 | 0.500006 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 5700.0 | 2.559474 | 1.546089 | 0.0 | 1.0 | 3.0 | 4.0 | 5.0 | 5700.0 | 2.620175 | 1.236024 | 1.0 | 2.0 | 3.0 | 3.0 | 5.0 | 5700.0 | 1.939123 | 0.750724 | 0.0 | 2.0 | 2.0 | 2.0 | 3.0 | 5700.0 | 2.594737 | 0.914280 | 2.0 | 2.0 | 2.0 | 4.0 | 4.0 | 5700.0 | 0.786140 | 0.410065 | 0.0 | 1.0 | 1.0 | 1.0 | 1.0 | 5700.0 | 2.564211 | 0.931172 | 1.0 | 2.0 | 3.0 | 3.0 | 4.0 | 5700.0 | 2.564211 | 0.931172 | 1.0 | 2.0 | 3.0 | 3.0 | 4.0 | 5700.0 | 134263.157895 | 17764.150911 | 100000.0 | 120000.0 | 140000.0 | 140000.0 | 160000.0 | 5700.0 | 0.975263 | 1.462133 | 0.0 | 0.0 | 0.0 | 2.0 | 5.0 | 5700.0 | 36.476667 | 25.348942 | 1.0 | 18.0 | 32.0 | 51.0 | 111.0 | 5700.0 | 2.120232 | 0.936789 | 0.5 | 1.42 | 2.14 | 2.80 | 3.98 | 5700.0 | 13.844575 | 4.612528 | 6.0 | 9.79 | 13.7 | 17.7 | 21.9 | 5700.0 | 11.834211 | 4.671976 | 3.05 | 7.78 | 11.6 | 15.85 | 20.8 | 5700.0 | 0.567018 | 0.495532 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 5700.0 | 0.350877 | 0.477286 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 5700.0 | 18.827018 | 10.249523 | 1.0 | 10.00 | 19.0 | 28.0 | 36.0 | 5700.0 | 1.913333 | 0.780665 | 1.0 | 1.0 | 2.0 | 2.0 | 5.0 | 5700.0 | 6.790351 | 4.488047 | 1.0 | 3.0 | 6.0 | 10.0 | 19.0 | 5700.0 | 3.263158 | 2.350020 | 1.0 | 2.0 | 3.0 | 5.0 | 10.0 | 5700.0 | 24951.024035 | 3777.961898 | 20319.0 | 21215.0 | 23598.0 | 27694.0 | 36509.0 | 5700.0 | 17090.746491 | 3074.783847 | 13305.0 | 14210.0 | 16232.0 | 18670.0 | 27463.0 | 5700.0 | 4716.225088 | 1065.744226 | 2452.0 | 4149.0 | 4923.0 | 5415.0 | 8435.0 | 5700.0 | 3144.102807 | 710.316197 | 1635.0 | 2766.0 | 3282.0 | 3610.0 | 5624.0 | 5700.0 | 0.610351 | 0.487713 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 5700.0 | 0.387193 | 0.487151 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 5700.0 | 0.439474 | 0.496367 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 5700.0 | 0.439474 | 0.496367 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 5700.0 | 0.574211 | 0.494506 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 5700.0 | 6.528246 | 4.048583 | 1.0 | 3.0 | 6.0 | 10.0 | 13.0 | 5700.0 | 98.965900 | 30.139485 | 50.79 | 69.63 | 98.52 | 126.62 | 149.75 |
kmeans.cluster_centers_
array([[1.58172551e-04, 7.70610374e-05, 1.36417593e-05, 6.45507355e-05,
2.58528667e-05, 3.06112298e-05, 2.17936780e-04, 1.42799056e-05,
1.45706441e-05, 1.48761729e-05, 2.47279928e-05, 2.51345298e-05,
1.92079447e-05, 2.57618566e-05, 6.50597769e-06, 2.45573027e-05,
2.45573027e-05, 9.46414710e-01, 8.20276496e-06, 3.62242011e-04,
2.08851188e-05, 1.37149966e-04, 1.17157000e-04, 5.56229603e-06,
3.42067942e-06, 1.84114933e-04, 1.99699121e-05, 8.02081105e-05,
3.70242828e-05, 2.60753896e-01, 1.78297171e-01, 4.94741924e-02,
3.29821717e-02, 6.15620185e-06, 3.47674384e-06, 5.43257687e-06,
5.43257687e-06, 5.55080838e-06, 6.49688528e-05, 9.88580818e-04],
[4.20509951e-04, 2.08652418e-04, 3.65626499e-05, 1.72918244e-04,
6.93850592e-05, 8.18787351e-05, 5.98210905e-04, 3.62993429e-05,
4.03153359e-05, 4.00265388e-05, 6.70528891e-05, 3.60602076e-05,
1.00177674e-05, 5.47391664e-05, 1.54235134e-05, 3.22129488e-05,
3.22129488e-05, 5.96261692e-01, 2.10138959e-05, 9.84452606e-04,
5.58139888e-05, 3.68109421e-04, 3.14721135e-04, 1.46795444e-05,
9.34706763e-06, 4.99111276e-04, 6.02519314e-05, 2.35614854e-04,
9.72726449e-05, 6.50446711e-01, 4.40918390e-01, 1.25718502e-01,
8.38105362e-02, 1.34481097e-05, 6.09981908e-06, 1.03615260e-05,
1.03615260e-05, 1.11418950e-05, 1.87692679e-04, 2.72334689e-03],
[2.86015192e-04, 1.42229711e-04, 2.49396319e-05, 1.18267992e-04,
4.72959824e-05, 5.56675749e-05, 4.05048248e-04, 2.64102279e-05,
2.70572528e-05, 2.66147839e-05, 4.64783992e-05, 5.13436813e-05,
3.50547884e-05, 4.08205715e-05, 1.03818121e-05, 4.59223574e-05,
4.59223574e-05, 8.23279117e-01, 1.58983601e-05, 6.68554736e-04,
3.81921080e-05, 2.48969039e-04, 2.12752892e-04, 1.01532626e-05,
6.28391656e-06, 3.41146459e-04, 3.76327392e-05, 1.52656453e-04,
6.81973017e-05, 4.58667059e-01, 3.14236052e-01, 8.66583724e-02,
5.77719028e-02, 1.03890556e-05, 5.10434504e-06, 8.66013864e-06,
8.66013864e-06, 9.02382374e-06, 1.24307264e-04, 1.84841802e-03],
[3.52901749e-04, 1.76347551e-04, 3.06786286e-05, 1.46405944e-04,
5.87267016e-05, 6.90330672e-05, 4.80451918e-04, 3.12536816e-05,
3.35465125e-05, 3.28778296e-05, 5.38159761e-05, 2.56628734e-05,
3.80942644e-06, 4.28158290e-05, 1.19376139e-05, 1.95433791e-05,
1.95433791e-05, 4.49546049e-01, 1.71753540e-05, 8.29953788e-04,
4.78228821e-05, 3.07522476e-04, 2.62326328e-04, 1.24936711e-05,
7.83646446e-06, 4.27241384e-04, 3.75812547e-05, 1.51942210e-04,
7.08167450e-05, 7.23013285e-01, 4.94185902e-01, 1.37299196e-01,
9.15303505e-02, 1.44935619e-05, 9.67810069e-06, 1.73060520e-05,
1.73060520e-05, 1.39102319e-05, 1.45072333e-04, 2.16109009e-03],
[2.84499701e-04, 1.38968788e-04, 2.48324414e-05, 1.18680088e-04,
4.75985814e-05, 5.60212134e-05, 3.71352392e-04, 2.58242706e-05,
2.69828537e-05, 2.70112582e-05, 4.86007202e-05, 5.45834549e-05,
3.62360240e-05, 3.89239037e-05, 1.03208758e-05, 4.54911482e-05,
4.54911482e-05, 7.19102551e-01, 1.49080103e-05, 6.51648997e-04,
3.80613787e-05, 2.47102046e-04, 2.11208487e-04, 1.00031204e-05,
6.30101578e-06, 3.38155218e-04, 2.87041110e-05, 1.07526993e-04,
5.91723499e-05, 5.61146042e-01, 3.86874514e-01, 1.04563596e-01,
6.97085230e-02, 1.25276082e-05, 8.49685446e-06, 1.31909509e-05,
1.31909509e-05, 1.20890024e-05, 1.11600810e-04, 1.70747742e-03],
[2.08304344e-04, 1.03578181e-04, 1.81653483e-05, 8.53881272e-05,
3.41615883e-05, 4.06791295e-05, 2.67263750e-04, 1.85889752e-05,
2.03632531e-05, 1.97926484e-05, 3.22987898e-05, 3.11696012e-05,
2.61838546e-05, 3.46682313e-05, 7.67608539e-06, 3.42256005e-05,
3.42256005e-05, 9.01925708e-01, 9.74709063e-06, 4.87718330e-04,
2.79739794e-05, 1.83483130e-04, 1.56711817e-04, 7.32619876e-06,
4.69162603e-06, 2.50768363e-04, 2.54454015e-05, 9.35773274e-05,
4.54621516e-05, 3.48934415e-01, 2.38270804e-01, 6.63990314e-02,
4.42656589e-02, 9.37259513e-06, 5.35085528e-06, 7.68839439e-06,
7.68839439e-06, 8.41452201e-06, 8.70057208e-05, 1.31273656e-03],
[1.15832753e-04, 5.72847408e-05, 1.00700034e-05, 4.87879642e-05,
1.94478297e-05, 2.29866797e-05, 1.56438956e-04, 9.82030704e-06,
1.09702789e-05, 1.10115527e-05, 1.88649457e-05, 1.95588111e-05,
1.43450666e-05, 1.91996425e-05, 5.79312313e-06, 1.88635206e-05,
1.88635206e-05, 9.73747826e-01, 7.10472815e-06, 2.69355761e-04,
1.56657567e-05, 1.02250538e-04, 8.74006943e-05, 4.19472575e-06,
2.59437066e-06, 1.39060037e-04, 1.42346629e-05, 5.00446844e-05,
2.37598513e-05, 1.82454739e-01, 1.24908117e-01, 3.45283851e-02,
2.30186257e-02, 4.45768621e-06, 2.74734151e-06, 3.12608553e-06,
3.12608553e-06, 4.16543105e-06, 4.82817013e-05, 7.32851823e-04]])
X_std.drop(columns='CLUSTER', inplace=True)
centroids = pd.DataFrame(kmeans.cluster_centers_, columns=X_std.columns)
round(centroids.var(),3).sort_values(ascending=False)
pies_cuadrados_tienda 0.041
ingreso_anual 0.038
pies_cuadrados_comestibles 0.019
pies_cuadrados_carne 0.001
pies_cuadrados_congelados 0.001
empaque_reciclable 0.000
bajo_en_grasa 0.000
unidades_por_caja 0.000
comercio 0.000
ciudad 0.000
estado 0.000
categoria_alimento 0.000
peso_bruto 0.000
cafeteria 0.000
tienda_de_videos 0.000
barra_de_ensaladas 0.000
comida_preparada 0.000
floristeria 0.000
divulgacion 0.000
peso_neto 0.000
precio_recomendado 0.000
departamento 0.000
genero 0.000
tipo 0.000
ventas_tienda_millones 0.000
costo_tienda_millones 0.000
ventas_unitarias_millones 0.000
promocion 0.000
pais 0.000
estado_civil 0.000
total_de_hijos 0.000
marca 0.000
escolaridad 0.000
miembro 0.000
ocupacion 0.000
vivienda_propia 0.000
promedio_autos 0.000
promedio_autos 0.000
numero_hijos 0.000
costo 0.000
dtype: float64
X_std['CLUSTER']=labels
X_std.groupby('CLUSTER')['miembro','comercio','promocion',
'ocupacion','escolaridad','estado_civil',
'genero','total_de_hijos','ingreso_anual',
'costo'].describe()
<ipython-input-37-98d8a544ebde>:2: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.
X_std.groupby('CLUSTER')['miembro','comercio','promocion',
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead tr th {
text-align: left;
}
.dataframe thead tr:last-of-type th {
text-align: right;
}
miembro | comercio | promocion | ocupacion | escolaridad | estado_civil | genero | total_de_hijos | ingreso_anual | costo | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | |
CLUSTER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | 6719.0 | 1.929751 | 0.653026 | 0.0 | 2.0 | 2.0 | 2.0 | 3.0 | 6719.0 | 1.999107 | 0.995972 | 1.0 | 1.0 | 2.0 | 2.0 | 5.0 | 6719.0 | 22.140944 | 12.753622 | 1.0 | 11.0 | 21.0 | 33.0 | 48.0 | 6719.0 | 2.611401 | 0.921475 | 2.0 | 2.0 | 2.0 | 4.0 | 4.0 | 6719.0 | 2.561095 | 1.089796 | 1.0 | 2.0 | 2.0 | 3.0 | 5.0 | 6719.0 | 1.470606 | 0.499172 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 6719.0 | 1.512427 | 0.499883 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 6719.0 | 2.492186 | 1.451987 | 0.0 | 1.0 | 2.0 | 4.0 | 5.0 | 6719.0 | 100202.411073 | 22740.641045 | 80000.0 | 80000.0 | 100000.0 | 120000.0 | 160000.0 | 6719.0 | 99.787136 | 29.439739 | 50.79 | 73.27 | 98.81 | 126.24 | 149.75 |
1 | 7184.0 | 0.543012 | 0.965124 | 0.0 | 0.0 | 0.0 | 1.0 | 3.0 | 7184.0 | 2.314727 | 0.872284 | 1.0 | 2.0 | 2.0 | 3.0 | 5.0 | 7184.0 | 22.942650 | 12.740289 | 1.0 | 12.0 | 22.0 | 33.0 | 48.0 | 7184.0 | 2.075306 | 1.082190 | 1.0 | 1.0 | 2.0 | 3.0 | 5.0 | 7184.0 | 1.526448 | 1.037845 | 1.0 | 1.0 | 1.0 | 1.0 | 5.0 | 7184.0 | 1.522829 | 0.499513 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 7184.0 | 1.510022 | 0.499934 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 7184.0 | 2.528257 | 1.462619 | 0.0 | 1.0 | 3.0 | 4.0 | 5.0 | 7184.0 | 24120.267261 | 8089.366585 | 20000.0 | 20000.0 | 20000.0 | 20000.0 | 40000.0 | 7184.0 | 102.537609 | 30.087471 | 51.00 | 75.76 | 106.10 | 129.50 | 149.75 |
2 | 13249.0 | 1.942939 | 0.661373 | 0.0 | 2.0 | 2.0 | 2.0 | 3.0 | 13249.0 | 2.076685 | 0.919630 | 1.0 | 2.0 | 2.0 | 2.0 | 5.0 | 13249.0 | 22.672504 | 12.701308 | 1.0 | 12.0 | 22.0 | 33.0 | 48.0 | 13249.0 | 2.292022 | 1.104488 | 1.0 | 1.0 | 2.0 | 3.0 | 5.0 | 13249.0 | 2.775153 | 1.090458 | 1.0 | 2.0 | 3.0 | 3.0 | 5.0 | 13249.0 | 1.502000 | 0.500015 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 13249.0 | 1.466601 | 0.498902 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 13249.0 | 2.578761 | 1.478613 | 0.0 | 1.0 | 3.0 | 4.0 | 5.0 | 13249.0 | 47836.063099 | 11149.442999 | 40000.0 | 40000.0 | 40000.0 | 60000.0 | 80000.0 | 13249.0 | 102.290299 | 29.921509 | 51.00 | 76.41 | 102.47 | 129.50 | 149.75 |
3 | 7255.0 | 0.170503 | 0.602138 | 0.0 | 0.0 | 0.0 | 0.0 | 3.0 | 7255.0 | 1.719779 | 1.162157 | 1.0 | 1.0 | 1.0 | 2.0 | 5.0 | 7255.0 | 21.648105 | 13.417428 | 1.0 | 10.0 | 22.0 | 34.0 | 48.0 | 7255.0 | 1.904618 | 1.009603 | 1.0 | 1.0 | 1.0 | 3.0 | 5.0 | 7255.0 | 1.139904 | 0.511381 | 1.0 | 1.0 | 1.0 | 1.0 | 5.0 | 7255.0 | 1.493039 | 0.499986 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 7255.0 | 1.463542 | 0.498703 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 7255.0 | 2.389387 | 1.489092 | 0.0 | 1.0 | 2.0 | 4.0 | 5.0 | 7255.0 | 20000.000000 | 0.000000 | 20000.0 | 20000.0 | 20000.0 | 20000.0 | 20000.0 | 7255.0 | 96.568673 | 30.127996 | 50.79 | 68.91 | 95.21 | 123.61 | 149.08 |
4 | 9552.0 | 2.021880 | 0.615000 | 0.0 | 2.0 | 2.0 | 2.0 | 3.0 | 9552.0 | 1.625523 | 1.140598 | 1.0 | 1.0 | 1.0 | 2.0 | 5.0 | 9552.0 | 20.793446 | 13.066999 | 1.0 | 9.0 | 22.0 | 31.0 | 46.0 | 9552.0 | 2.171587 | 1.145282 | 1.0 | 1.0 | 2.0 | 3.0 | 5.0 | 9552.0 | 3.044075 | 1.164172 | 1.0 | 3.0 | 3.0 | 3.0 | 5.0 | 9552.0 | 1.502827 | 0.500018 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 9552.0 | 1.505549 | 0.499995 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 9552.0 | 2.711474 | 1.486505 | 0.0 | 2.0 | 3.0 | 4.0 | 5.0 | 9552.0 | 40117.252931 | 1526.942850 | 40000.0 | 40000.0 | 40000.0 | 40000.0 | 60000.0 | 9552.0 | 95.488011 | 29.250215 | 50.79 | 68.91 | 94.79 | 116.74 | 149.08 |
5 | 10769.0 | 1.974928 | 0.592112 | 0.0 | 2.0 | 2.0 | 2.0 | 3.0 | 10769.0 | 1.887269 | 1.005886 | 1.0 | 1.0 | 2.0 | 2.0 | 5.0 | 10769.0 | 20.129817 | 13.184394 | 1.0 | 8.0 | 18.0 | 31.0 | 48.0 | 10769.0 | 2.617606 | 0.988572 | 1.0 | 2.0 | 2.0 | 4.0 | 5.0 | 10769.0 | 2.353329 | 0.964574 | 1.0 | 2.0 | 2.0 | 2.0 | 5.0 | 10769.0 | 1.524933 | 0.499401 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 10769.0 | 1.481939 | 0.499697 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 10769.0 | 2.434674 | 1.501494 | 0.0 | 1.0 | 2.0 | 4.0 | 5.0 | 10769.0 | 69623.920513 | 12181.213148 | 60000.0 | 60000.0 | 60000.0 | 80000.0 | 120000.0 | 10769.0 | 98.344258 | 30.333223 | 50.79 | 69.63 | 95.74 | 126.62 | 149.75 |
6 | 5700.0 | 1.939123 | 0.750724 | 0.0 | 2.0 | 2.0 | 2.0 | 3.0 | 5700.0 | 1.913333 | 0.780665 | 1.0 | 1.0 | 2.0 | 2.0 | 5.0 | 5700.0 | 21.124912 | 13.236501 | 1.0 | 10.0 | 21.0 | 31.0 | 48.0 | 5700.0 | 2.594737 | 0.914280 | 2.0 | 2.0 | 2.0 | 4.0 | 4.0 | 5700.0 | 2.620175 | 1.236024 | 1.0 | 2.0 | 3.0 | 3.0 | 5.0 | 5700.0 | 1.482982 | 0.499754 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 5700.0 | 1.493860 | 0.500006 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 5700.0 | 2.559474 | 1.546089 | 0.0 | 1.0 | 3.0 | 4.0 | 5.0 | 5700.0 | 134263.157895 | 17764.150911 | 100000.0 | 120000.0 | 140000.0 | 140000.0 | 160000.0 | 5700.0 | 98.965900 | 30.139485 | 50.79 | 69.63 | 98.52 | 126.62 | 149.75 |
##Posibles estrategias a implementar
- Aquí vas a elaborar una serie de recomendaciones de estrategias para personalizar la experiencia de los clientes en cada uno de los clusters; por ejemplo:
En el cluster A, se encuentran reunidos los clientes que gastan más dinero en productos de bebida.
Estrategia sugerida: Elaborar una campaña dirigida a estos clientes para que también compren productos de comida(…)
Aquí puedes usar toda tu creatividad, y la idea es proponer acciones para los clientes según sus características de consumo.
Miembro: Como los Supermarket clasifica a sus clientes
{
'No afiliado': 0,
'Plata': 1,
'Bronce': 2,
'Oro': 3
}
Comercio: Los Supermarket se clasifican dependiendo de su ubicación en valor adquisito referente a sus clientes
{
'Supermercado de lujo':1,
'Supermercado':2,
'Supermercado gourmet':3,
'Pequeño supermercado':4,
'Supermercado mediano':5
}
Promocion: Esta Categoria los Supermarket genera insentivos a los clientes para generar mayores compras en ciertos productos
{
'Bolsas llenas':1,
'Lotería de la caja registradora':2,
'Ahorro para apostadores grandes':3,
'Venta Doble':4,
'Días de luz verde':5,
'Ahorro Enorme':6,
'Ahorro de precios':7,
'Rebajadores de precios':8,
'Días de dólar':9,
'Venta de dos días':10,
'Super Ahorradores':11,
'Descuento de fin de semana':12,'Recortadores de dólares':13,
'Promociones por montones':14,
'Gran promoción':15,
'Gratis para todos':16,
'Ahorros por montones':17,
'Ahorro de precios imbatible':18,
'Aplastadores de precios':19,
'Días de liquidación de estanterías':20,
'Días de venta':21,
'Adelante':22,
'Super Ahorro':23,
'Ahorradores de billetera':24,
'Venta Ahorra Ya':25,
'Destructores de precios':26,
'Dos por uno':27,
'Descuentos de gran magnitud':28,
'Estantes vacíos':29,
'Adiós bebé':30,
'Venta de un día':31,
'Descuentos fantásticos':32,
'Días de ahorro':33,
'Ganadores de ventas':34,
'Espectacular de cupones':35,
'Tres por uno':36,
'Ganadores de precios':37,
'Más barato':38,
'Venta No Puedo Creerlo':39,
'Ahorradores de dinero':40,
'Especial luz verde':41,
'Rebajando precios':42,
'Ahorro de primera clase':43,
'Mejores ahorros':44,
'Elige tus ahorros':45,
'Duplica tus ahorros':46,
'Venta misteriosa':47,
'Super ahorradores de billetera':48
}
Ocupacion: Trabajo remunerado o no remunerado que tiene el Cliente
{
'Técnico':1,
'Profesional':2,
'Obrero':3,
'Gestión':4,
'Cargo de Oficina':5
}
Escolaridad: Profesion o nivel de estudio del Cliente
{
'Primaria':1,
'Superior':2,
'Secundaria':3,
'Maestría':4,
'Técnico':5
}
Estado_civil: Nivel que comparte con otro persona o con ninguna
{
'Casado':1,
'Soltero':2
}
Genero: Clasificacion fisica del Cliente
{
'Femenino':1,
'Masculino':2
}
Total_de_hijos: Integrantes de niños ó niñas que tiene a cargo el cliente
Ingreso_anual: Dinero ganado del cliente por prestar su tiempo y espacio a una empresa, ó negocio propio
Costo: Gasto que tiene ó tubo el cliente en el Supermarket
description = round(X_std.groupby('CLUSTER', as_index=False)['miembro','comercio','promocion',
'ocupacion','escolaridad','estado_civil',
'genero','total_de_hijos','ingreso_anual',
'costo'].mean(),2)
description['N.CUSTOMERS'] = X_std.CLUSTER.value_counts()
description
<ipython-input-38-8510fd11d7d1>:1: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.
description = round(X_std.groupby('CLUSTER', as_index=False)['miembro','comercio','promocion',
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
CLUSTER | miembro | comercio | promocion | ocupacion | escolaridad | estado_civil | genero | total_de_hijos | ingreso_anual | costo | N.CUSTOMERS | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1.93 | 2.00 | 22.14 | 2.61 | 2.56 | 1.47 | 1.51 | 2.49 | 100202.41 | 99.79 | 6719 |
1 | 1 | 0.54 | 2.31 | 22.94 | 2.08 | 1.53 | 1.52 | 1.51 | 2.53 | 24120.27 | 102.54 | 7184 |
2 | 2 | 1.94 | 2.08 | 22.67 | 2.29 | 2.78 | 1.50 | 1.47 | 2.58 | 47836.06 | 102.29 | 13249 |
3 | 3 | 0.17 | 1.72 | 21.65 | 1.90 | 1.14 | 1.49 | 1.46 | 2.39 | 20000.00 | 96.57 | 7255 |
4 | 4 | 2.02 | 1.63 | 20.79 | 2.17 | 3.04 | 1.50 | 1.51 | 2.71 | 40117.25 | 95.49 | 9552 |
5 | 5 | 1.97 | 1.89 | 20.13 | 2.62 | 2.35 | 1.52 | 1.48 | 2.43 | 69623.92 | 98.34 | 10769 |
6 | 6 | 1.94 | 1.91 | 21.12 | 2.59 | 2.62 | 1.48 | 1.49 | 2.56 | 134263.16 | 98.97 | 5700 |
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = description.set_index('CLUSTER')
# Usar los nombres de las columnas del df
corr_matrix = description[['miembro','comercio','promocion','ocupacion','escolaridad',
'estado_civil','genero','total_de_hijos','ingreso_anual',
'costo','N.CUSTOMERS']].corr()
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.tight_layout()
plt.show()
# Convertir la matriz de correlación en un dataframe
correlation_df = pd.DataFrame(corr_matrix.unstack().sort_values(ascending=False), columns=['Correlación'])
correlation_df = correlation_df.reset_index()
correlation_df.columns = ['Columna 1', 'Columna 2', 'Correlación']
# Imprimir el dataframe de correlación
print(correlation_df)
Columna 1 Columna 2 Correlación
0 miembro miembro 1.000000
1 comercio comercio 1.000000
2 costo costo 1.000000
3 ingreso_anual ingreso_anual 1.000000
4 total_de_hijos total_de_hijos 1.000000
5 genero genero 1.000000
6 escolaridad escolaridad 1.000000
7 ocupacion ocupacion 1.000000
8 promocion promocion 1.000000
9 estado_civil estado_civil 1.000000
10 N.CUSTOMERS N.CUSTOMERS 1.000000
11 costo comercio 0.962213
12 comercio costo 0.962213
13 miembro escolaridad 0.957956
14 escolaridad miembro 0.957956
15 ocupacion ingreso_anual 0.865165
16 ingreso_anual ocupacion 0.865165
17 ocupacion miembro 0.786562
18 miembro ocupacion 0.786562
19 costo promocion 0.757094
20 promocion costo 0.757094
21 promocion comercio 0.724955
22 comercio promocion 0.724955
23 total_de_hijos escolaridad 0.713147
24 escolaridad total_de_hijos 0.713147
25 miembro ingreso_anual 0.633225
26 ingreso_anual miembro 0.633225
27 escolaridad ocupacion 0.599581
28 ocupacion escolaridad 0.599581
29 total_de_hijos genero 0.530590
30 genero total_de_hijos 0.530590
31 escolaridad ingreso_anual 0.504588
32 ingreso_anual escolaridad 0.504588
33 miembro total_de_hijos 0.500362
34 total_de_hijos miembro 0.500362
35 N.CUSTOMERS estado_civil 0.473156
36 estado_civil N.CUSTOMERS 0.473156
37 escolaridad N.CUSTOMERS 0.384205
38 N.CUSTOMERS escolaridad 0.384205
39 N.CUSTOMERS miembro 0.363968
40 miembro N.CUSTOMERS 0.363968
41 genero escolaridad 0.338124
42 escolaridad genero 0.338124
43 comercio estado_civil 0.283701
44 estado_civil comercio 0.283701
45 miembro genero 0.265200
46 genero miembro 0.265200
47 comercio genero 0.236850
48 genero comercio 0.236850
49 ocupacion genero 0.226446
50 genero ocupacion 0.226446
51 total_de_hijos N.CUSTOMERS 0.214656
52 N.CUSTOMERS total_de_hijos 0.214656
53 costo estado_civil 0.204214
54 estado_civil costo 0.204214
55 ingreso_anual genero 0.197152
56 genero ingreso_anual 0.197152
57 N.CUSTOMERS costo 0.171893
58 costo N.CUSTOMERS 0.171893
59 costo ocupacion 0.133692
60 ocupacion costo 0.133692
61 promocion genero 0.103353
62 genero promocion 0.103353
63 comercio ocupacion 0.102325
64 ocupacion comercio 0.102325
65 genero costo 0.090548
66 costo genero 0.090548
67 ingreso_anual total_de_hijos 0.041879
68 total_de_hijos ingreso_anual 0.041879
69 ingreso_anual costo 0.031037
70 costo ingreso_anual 0.031037
71 total_de_hijos promocion 0.019112
72 promocion total_de_hijos 0.019112
73 comercio N.CUSTOMERS -0.001454
74 N.CUSTOMERS comercio -0.001454
75 ingreso_anual comercio -0.003838
76 comercio ingreso_anual -0.003838
77 total_de_hijos estado_civil -0.004771
78 estado_civil total_de_hijos -0.004771
79 ocupacion N.CUSTOMERS -0.012022
80 N.CUSTOMERS ocupacion -0.012022
81 total_de_hijos ocupacion -0.017104
82 ocupacion total_de_hijos -0.017104
83 promocion N.CUSTOMERS -0.035405
84 N.CUSTOMERS promocion -0.035405
85 miembro costo -0.041898
86 costo miembro -0.041898
87 genero estado_civil -0.042366
88 estado_civil genero -0.042366
89 costo total_de_hijos -0.053814
90 total_de_hijos costo -0.053814
91 escolaridad costo -0.067793
92 costo escolaridad -0.067793
93 promocion estado_civil -0.077745
94 estado_civil promocion -0.077745
95 comercio total_de_hijos -0.114355
96 total_de_hijos comercio -0.114355
97 miembro comercio -0.160990
98 comercio miembro -0.160990
99 escolaridad comercio -0.200315
100 comercio escolaridad -0.200315
101 estado_civil miembro -0.202606
102 miembro estado_civil -0.202606
103 estado_civil escolaridad -0.219002
104 escolaridad estado_civil -0.219002
105 estado_civil ocupacion -0.262904
106 ocupacion estado_civil -0.262904
107 promocion ingreso_anual -0.293029
108 ingreso_anual promocion -0.293029
109 escolaridad promocion -0.295902
110 promocion escolaridad -0.295902
111 ingreso_anual N.CUSTOMERS -0.357520
112 N.CUSTOMERS ingreso_anual -0.357520
113 N.CUSTOMERS genero -0.362627
114 genero N.CUSTOMERS -0.362627
115 promocion ocupacion -0.375470
116 ocupacion promocion -0.375470
117 miembro promocion -0.406670
118 promocion miembro -0.406670
119 ingreso_anual estado_civil -0.580792
120 estado_civil ingreso_anual -0.580792
CLUSTER 0:
{
miembro:No esta afiliado
comercio:Nucleo de compras principal es el Supermarket
promocion:Le llama mas la atención el día de Super Ahorro
ocupacion: Este grupo tiene un cargo mas Profesional
escolaridad: un mayor porcentaje solo tienen primaria aunque algunos son Profesionales
estado_civil: Personas Casadas
genero: Este grupo tiene un alto número de mujeres
total_de_hijos: un promedio de 2 hijos
ingreso_anual: su poder adquisitivo es uno de los bajos
costo:sus gastos tiene una tendencia alta
N.CUSTOMERS:Número de clientes bajo
}
CLUSTER 1:
{
miembro:Plata, con derechos de algunos productos con descuento
comercio:Nucleo de compras principal es el Supermarket
promocion:Le llama mas la atención los Días de liquidación de estanterías
ocupacion: Este grupo tiene un cargo mas Obrero
escolaridad: un porcentaje promedio graduados en Superior
estado_civil: Personas Casadas
genero: Este grupo tiene un alto número de mujeres
total_de_hijos: un promedio de 2 hijos
ingreso_anual: su poder adquisitivo es promedio
costo:sus gastos tiene una tendencia promedia
N.CUSTOMERS:Número de clientes alto
}
CLUSTER 2:
{
miembro:Plata, con derechos de algunos productos con descuento
comercio:Nucleo de compras principal es el Supermarket
promocion:Le llama mas la atención los Días de Adelanto
ocupacion: Este grupo tiene un cargo mas Obrero
escolaridad: un porcentaje alto en graduados de Secundaria
estado_civil: Personas Casadas
genero: Este grupo tiene un alto número de mujeres
total_de_hijos: un promedio de 2 hijos
ingreso_anual: su poder adquisitivo esta en un grado alto
costo:sus gastos tiene una tendencia promedia
N.CUSTOMERS:Número de clientes bajo
}
CLUSTER 3:
{
miembro:Plata, con derechos de algunos productos con descuento
comercio:Nucleo de compras principal es el Supermarket
promocion:Le llama mas la atención el día de Super Ahorro
ocupacion: Este grupo tiene un cargo mas Profesional
escolaridad: un porcentaje alto en graduados de Secundaria
estado_civil: Personas Casadas
genero: Este grupo tiene un alto número de mujeres
total_de_hijos: un promedio de 3 hijos
ingreso_anual: su poder adquisitivo es basico
costo:sus gastos tiene una tendencia alta
N.CUSTOMERS:Número de clientes alto
}
CLUSTER 4:
{
miembro:Plata, con derechos de algunos productos con descuento
comercio:Nucleo de compras principal es el Supermarket
promocion:Le llama mas la atención los Días de venta
ocupacion: Este grupo tiene un cargo mas Profesional
escolaridad: un porcentaje alto en graduados de Secundaria
estado_civil: Personas Casadas
genero: Este grupo tiene un alto número de mujeres
total_de_hijos: un promedio de 3 hijos
ingreso_anual: su poder adquisitivo es basico
costo:sus gastos tiene una tendencia baja
N.CUSTOMERS:Número de clientes alto
}
CLUSTER 5:
{
miembro:Plata, con derechos de algunos
comercio:Nucleo de compras principal es el Supermarket
promocion:Le llama mas la atención los Días de Adelanto
ocupacion: Este grupo tiene un cargo mas Profesional
escolaridad: un mayor porcentaje solo tienen primaria aunque algunos son Profesionales
estado_civil: Personas Casadas
genero: Este grupo tiene un alto número de mujeres
total_de_hijos: un promedio de 2 hijos
ingreso_anual: su poder adquisitivo es uno de los bajos
costo:sus gastos tiene una tendencia baja
N.CUSTOMERS:Número de clientes bajo
}
CLUSTER 6:
{
miembro:No esta afiliado
comercio:Nucleo de compras principal es el Supermarket
promocion:Le llama mas la atención los Días de venta
ocupacion: Este grupo tiene un cargo mas Obrero
escolaridad: un porcentaje alto en graduados de Secundaria
estado_civil: Personas Casadas
genero: Este grupo tiene un alto número de mujeres
total_de_hijos: un promedio de 3 hijos
ingreso_anual: su poder adquisitivo es el mas alto
costo:sus gastos tiene una tendencia promedia
N.CUSTOMERS:Número de clientes bajo
}