Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida de Conversão String para Float

Minha dúvida é a seguinte, vendo o curso, tentei aplicar parte dele em um data frame real, no qual trabalho e um ponto que me deparei, que também já me deparei em outros cursos é a parte da conversão de string para sequêncial numérico. Ou seja, hipoteticamente você têm uma coluna com cores, por exemplo, cores amarelo, vermelho e azul e precisa converter isso dinamicamente para 1, 2 e 3. Mas preciso fazer isso dinamicamente, sem um "de para" manual via dicionário, pois em produção e escala essa opção não é factível. Nesse caso, meu ponto de dúvida é como é algo comum de precisarmos fazer em praticamente todos os MLs que faremos ao longo da carreira, existe alguma lib que já tenha uma função pronta para fazer isso ? Pois no dia a dia, será necessário sempre recursos dinâmicos, por isso a minha dúvida se sefaz necessário fazer uma função para esta situação, ou se existe algo pronto nas libs para isso ?

Obs.: Ponto importante no ambiente utilizamos data frames em pyspark. Então coloquei a minha dúvida aqui, pois pode ser a dúvida de outros alunos também.

Obrigado pelo apoio !

2 respostas
solução!

Olá Maurício, tudo bem com você?

A ação de conversão de dados para sequências numéricas é algo bem comum no dia a dia de quem trabalha com Machine Learning e fazer o processo manual é bem cansativo. Para fazer isso de forma dinâmica no contexto do pyspark você pode usar a classe StringIndexer, que irá atribuir um índice numérico a cada valor único em uma coluna de String. O índice numérico é atribuído com base na frequência dos valores na coluna.

Exemplo de código:

spark = SparkSession.builder.appName("forumMauricio").getOrCreate()

dados = [("amarelo",),
        ("vermelho",),
        ("azul",),
        ("vermelho",)]

columns = ["cores"]
df = spark.createDataFrame(dados, columns)

# Usando o StringIndexer para converter a coluna 'cores' em índices numéricos
indexer = StringIndexer(inputCol="cores", outputCol="cores_index")
model = indexer.fit(df)
df_resultado = model.transform(df)


df_resultado.show()

Resultado:

corescores_index
amarelo1.0
vermelho0.0
azul2.0
vermelho0.0

Essa abordagem evita a criação manual de um mapeamento e é mais escalável para grandes conjuntos de dados.

Espero ter ajudado. Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade. Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Obrigado pela ajuda. Fiz alguns testes e funciona, obrigado pelo apoio !