Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — FGV 2022

ProgramaçãoLinguagens de programação
Código
fg055326
Banca
FGV
Órgão
TCU
Ano
2022
Nível
Superior
Cargo
Auditor Federal de Controle Externo
Natasha, uma cientista de dados, está trabalhando com um conjunto de dados sobre carros para fazer um modelo preditivo para uma companhia de seguros. A primeira versão do modelo utiliza apenas informações básicas sobre os carros: a marca e a cor.Como esses dados são categóricos, Natasha faz um pré-processamento usando a biblioteca scikit-learn. Em um ambiente interativo, ela executa os comandos a seguir.>>> from sklearn.preprocessing import OneHotEncoder>>> enc = OneHotEncoder()>>> X = [['Toyota', 'vermelho'], ['Toyota', 'verde'], ['BMW', 'vermelho']]>>> enc.fit(X)>>> enc.get_feature_names()array(['x0_BMW', 'x0_Toyota', 'x1_verde','x1_vermelho'], dtype=object)>>> X_prime = enc.transform(X).toarray()>>> X_primearray([[0., 1., 0., 1.], [0., 1., 1., 0.], [1., 0., 0., 1.]])Para contar o número de carros da marca Toyota no conjunto de dados, obtendo corretamente o resultado 2, Natasha pode usar a seguinte linha de código:
  1. Alen([i for i in X if i == 'Toyota'])
  2. Blen([i for i in X_prime if i[0] == 1])
  3. Csum([i for i in X if 'Toyota' in i])
  4. Dsum(X_prime)[1]
  5. Esum(X_prime[:,0])
Revelar gabarito e comentário

GabaritoD — sum(X_prime)[1]

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Contagem de carros Toyota após OneHotEncoder

Gabarito: letra D. A matriz X_prime gerada pelo OneHotEncoder possui colunas na ordem: x0_BMW, x0_Toyota, x1_verde, x1_vermelho. A coluna de índice 1 corresponde a Toyota. Para contar os carros Toyota, usa-se sum(X_prime)[1], que soma as linhas de cada coluna (eixo 0) e retorna um array cujo índice 1 é o total de Toyotas (2). Nenhuma outra alternativa produz o resultado correto.

Alternativa A — ❌ Incorreta

len([i for i in X if i == 'Toyota']) compara cada lista i com a string 'Toyota'. Como ['Toyota', 'vermelho'] não é igual a 'Toyota', o resultado é uma lista vazia, cujo comprimento é 0. Sempre retornará 0.

Alternativa B — ❌ Incorreta

[i for i in X_prime if i[0] == 1] filtra as linhas cuja primeira coluna (BMW) é 1. Apenas a terceira linha (BMW) atende, resultando em 1 elemento. Não conta Toyotas.

Alternativa C — ❌ Incorreta

sum([i for i in X if 'Toyota' in i]) gera uma lista com as duas linhas que contêm 'Toyota' (listas). A função sum() tenta somar essas listas, o que gera TypeError em Python (não é possível somar listas com +). Mesmo que a intenção fosse somar booleanos, a sintaxe está errada.

Alternativa D — ✅ Correta ⟵ GABARITO

sum(X_prime)[1] soma os elementos de cada coluna (eixo 0). Como X_prime é:

[[0.,1.,0.,1.],
 [0.,1.,1.,0.],
 [1.,0.,0.,1.]]

a soma por coluna resulta em [1., 2., 1., 2.]. O índice 1 (x0_Toyota) vale 2, exatamente o número de carros Toyota.

Alternativa E — ❌ Incorreta

sum(X_prime[:,0]) seleciona a primeira coluna (BMW). A soma é 1 (apenas o terceiro carro). Não conta Toyotas.

NÃO CAIA NESSA!

A alternativa C é a mais traiçoeira. O candidato pode pensar que sum([i for i in X if 'Toyota' in i]) conta os elementos, mas na verdade i é uma lista, e sum() tentaria somar listas, causando erro. A forma correta com compreensão de listas seria sum(1 for i in X if 'Toyota' in i). Fique atento ao tipo dos elementos na lista.

Gabarito: letra D.

Link permanente: /questoes/fg055326