ComeçarComece de graça

Tratando Valores Ausentes e Categóricos de Forma Ingênua

Random Forest Regression é robusto o suficiente para permitir que a gente ignore muitas etapas de preparação de dados que são demoradas e tediosas. Embora algumas implementações de Random Forest lidem automaticamente com valores ausentes e categóricos, a do PySpark não. A matemática, no entanto, continua a mesma, então podemos usar algumas substituições simples de valores.

Para valores ausentes, como nossos dados são estritamente positivos, vamos atribuir -1. A random forest vai dividir com base nesse valor e tratá-lo de forma diferente do restante dos valores na mesma feature.

Para valores categóricos, podemos apenas mapear os valores de texto para números e, novamente, a random forest vai tratá-los adequadamente ao dividir neles. Neste exemplo, vamos tirar o pó de pipelines da Introduction to PySpark para escrever nosso código de forma mais concisa. Observe que o exercício começará exibindo os dtypes das colunas no dataframe; compare-os com os resultados ao final deste exercício.

NOTA: Pipeline e StringIndexer já foram importados para você. A lista categorical_cols também está disponível.

Este exercício faz parte do curso

Feature Engineering com PySpark

Ver curso

Instruções do exercício

  • Substitua os valores em WALKSCORE e BIKESCORE por -1 usando fillna() e o parâmetro subset.
  • Crie uma lista de StringIndexers usando list comprehension para iterar por cada coluna em categorical_cols.
  • Aplique fit() e transform() ao pipeline indexer_pipeline.
  • Remova as categorical_cols usando drop() já que não são mais necessárias. Inspecione os tipos de dados resultantes usando dtypes.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

# Replace missing values
df = df.____(____, ____=[____, ____])

# Create list of StringIndexers using list comprehension
indexers = [____(inputCol=____, outputCol=____+"_IDX")\
            .setHandleInvalid("keep") for ____ in ____]
# Create pipeline of indexers
indexer_pipeline = Pipeline(stages=indexers)
# Fit and Transform the pipeline to the original data
df_indexed = ____.____(df).____(df)

# Clean up redundant columns
df_indexed = df_indexed.____(*____)
# Inspect data transformations
print(df_indexed.dtypes)
Editar e executar o código