Prova prática: lidando com dados sem rótulo
Objetivo
Construir um modelo de clusterização para agrupar consumidores
- Importação das bibliotecas
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import joblib
detalhe: bibliotecas usadas
manipular dados ( pandas, numpy);
visualizar informações ( matplotlib, seaborn);
salvar objetos técnicos ( joblib).
- Carregamento dos dados
url = 'https://raw.githubusercontent.com/alura-cursos/Clusterizacao-dados-sem-rotulo/main/Dados/dados_mkt.csv'
df = pd.read_csv(url)
print(df.head())
os dados são carregados em um DataFrame.
- Exploração
print(df.info())
print(df['sexo'].unique())
analisamos:
tipos das colunas;
existência de valores categóricos;
interesse geral do conjunto
- Aplicação do One-Hot Encoding
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(categories=[['F', 'M', 'NE']], sparse_output=False)
encoded_sexo = encoder.fit_transform(df[['sexo']])
encoded_df = pd.DataFrame(encoded_sexo, columns=encoder.get_feature_names_out(['sexo']))
dados = pd.concat([df, encoded_df], axis=1).drop('sexo', axis=1)
print(dados.head())
- Salvando o encoder
joblib.dump(encoder, 'encoder.pkl')
- Treinamento do modelo KMeans
from sklearn.cluster import KMeans
mod_kmeans = KMeans(n_clusters=2, random_state=45)
modelo = mod_kmeans.fit(dados)
etapa:
n_clusters=2definir dois grupos;
random_state=45garante reprodutibilidade.
- Visualização dos clusters
dados['cluster'] = modelo.labels_
print(dados.head())
codigo fonte completo
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import joblib
from sklearn.preprocessing import OneHotEncoder
from sklearn.cluster import KMeans
url = 'https://raw.githubusercontent.com/alura-cursos/Clusterizacao-dados-sem-rotulo/main/Dados/dados_mkt.csv'
df = pd.read_csv(url)
print(df.info())
print(df['sexo'].unique())
encoder = OneHotEncoder(categories=[['F', 'M', 'NE']], sparse_output=False)
encoded_sexo = encoder.fit_transform(df[['sexo']])
encoded_df = pd.DataFrame(encoded_sexo, columns=encoder.get_feature_names_out(['sexo']))
dados = pd.concat([df, encoded_df], axis=1).drop('sexo', axis=1)
joblib.dump(encoder, 'encoder.pkl')
mod_kmeans = KMeans(n_clusters=2, random_state=45)
modelo = mod_kmeans.fit(dados)
dados['cluster'] = modelo.labels_
print(dados.head())