1
resposta

[Projeto] criando sua própria aplicação

import streamlit as st
import pandas as pd
import joblib

st.set_page_config(page_title="Clusterização de Clientes", layout="wide")
st.title("Aplicação de Clusterização com KMeans")

# Carregar artefatos salvos
encoder = joblib.load("encoder.pkl")
scaler = joblib.load("scaler.pkl")
modelo = joblib.load("kmeans.pkl")

st.write("Faça upload de um arquivo CSV com a coluna 'sexo' e demais atributos usados no treinamento.")

arquivo = st.file_uploader("Selecione o arquivo CSV", type="csv")

def descrever_cluster(c):
    descricoes = {
        0: "Grupo 0: público jovem, forte interesse em moda, música e aparência.",
        1: "Grupo 1: perfil ligado a esportes e atividades culturais.",
        2: "Grupo 2: perfil equilibrado, com interesses em música, dança e moda."
    }
    return descricoes.get(c, "Grupo sem descrição.")

if arquivo is not None:
    df = pd.read_csv(arquivo)
    st.subheader("Prévia dos dados")
    st.dataframe(df.head())

    if "sexo" not in df.columns:
        st.error("O arquivo precisa conter a coluna 'sexo'.")
    else:
        # Codificação
        sexo_cod = encoder.transform(df[["sexo"]])
        sexo_df = pd.DataFrame(
            sexo_cod,
            columns=encoder.get_feature_names_out(["sexo"]),
            index=df.index
        )

        dados = pd.concat([df, sexo_df], axis=1).drop("sexo", axis=1)

        # Escalonamento
        dados_escalados = scaler.transform(dados)

        # Clusterização
        clusters = modelo.predict(dados_escalados)
        resultado = df.copy()
        resultado["cluster"] = clusters
        resultado["descricao_cluster"] = resultado["cluster"].apply(descrever_cluster)

        st.subheader("Resultado da clusterização")
        st.dataframe(resultado)

        st.subheader("Distribuição dos grupos")
        contagem = resultado["cluster"].value_counts().sort_index()
        st.bar_chart(contagem)

        st.subheader("Descrição dos grupos encontrados")
        for c in sorted(resultado["cluster"].unique()):
            st.write(f"**Cluster {c}:** {descrever_cluster(c)}")

        csv = resultado.to_csv(index=False).encode("utf-8")
        st.download_button(
            label="Baixar resultado em CSV",
            data=csv,
            file_name="clientes_clusterizados.csv",
            mime="text/csv"
        )
else:
    st.info("Envie um arquivo CSV para começar.")
1 resposta

Olá, Moacir! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso do Streamlit para criar uma interface interativa com Python, utilizou muito bem o KMeans para aplicar clusterização em novos dados e ainda compreendeu a importância de integrar artefatos salvos como encoder e scaler para manter consistência no processo de análise.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Sugestão de conteúdo para você mergulhar ainda mais no tema:

Alguns materiais estão em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!