Pular para o conteúdo principal

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

ProgramaçãoLinguagens de programação
Código
fg121245
Banca
FGV
Órgão
TCE-PE
Ano
2025
Nível
Superior
Cargo
Analista de Controle Externo - Tecnologia da Informação
Considere o seguinte trecho de código Python utilizado por um analista de dados em um projeto de análise de churn de clientes:Imagem associada para resolução da questãoCom base no código acima, e nos conceitos de Pandas e análise de dados, é correto afirmar que:
  1. Ao código utiliza fillna() para substituir valores ausentes por zero, o que pode enviesar a distribuição dos dados.
  2. Ba função cut() cria intervalos categóricos baseados na variável score_credito e substitui valores ausentes por “desconhecido”.
  3. Ca normalização do score de crédito transforma os dados em uma escala entre 0 e 1, facilitando a aplicação de algoritmos de machine learning.
  4. Do agrupamento final calcula a média do tempo de contrato por faixa etária, considerando apenas os clientes que cancelaram o serviço.
  5. Eo método groupby() não pode ser utilizado após filtragem condicional com colchetes, sendo necessário aplicar query() previamente.
Revelar gabarito e comentário

GabaritoD — o agrupamento final calcula a média do tempo de contrato por faixa etária, considerando apenas os clientes que cancelaram o serviço.

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”.

Pandas: análise de churn com agrupamento e filtragem

Gabarito: letra D. O código, após tratar valores ausentes e criar faixas etárias, filtra os clientes que cancelaram o serviço e agrupa por faixa etária, calculando a média do tempo de contrato — exatamente o que a alternativa D descreve. As demais alternativas ou descrevem passos que não ocorrem no código (como a normalização) ou contêm erros conceituais sobre os métodos do Pandas.

O trecho de código apresentado é um pipeline típico de análise de dados com Pandas, uma biblioteca Python para manipulação de dados tabulares. Vamos entender cada etapa do processo para depois julgar as alternativas. Primeiro, o código provavelmente carrega um DataFrame com dados de clientes, incluindo colunas como score_credito, idade, tempo_contrato e cancelou. Em seguida, utiliza fillna() para preencher valores ausentes — mas não necessariamente com zero; pode ser com a mediana, a média ou um valor específico. Depois, a função cut() é usada para transformar uma variável contínua (como idade ou score_credito) em faixas categóricas (bins). O código então filtra os dados com uma condição (por exemplo, df[df['cancelou'] == 1]) e, por fim, aplica groupby() para agrupar por uma categoria (como faixa_etaria) e calcula a média de uma coluna numérica (como tempo_contrato).

A alternativa D é a única que descreve corretamente esse fluxo: o agrupamento final calcula a média do tempo de contrato por faixa etária, considerando apenas os clientes que cancelaram. Isso porque a filtragem condicional com colchetes (df[df['cancelou'] == 1]) seleciona apenas as linhas que atendem à condição, e o groupby() subsequente opera sobre esse subconjunto. As outras alternativas contêm erros: a A afirma que fillna() substitui por zero, o que não é necessariamente verdade; a B diz que cut() substitui valores ausentes, o que não é sua função; a C menciona normalização, que não aparece no código; e a E alega que groupby() não pode ser usado após filtragem, o que é falso.

A pegadinha central desta questão é a confusão entre as funções fillna(), cut() e a normalização. O candidato pode associar cut() à criação de faixas e achar que ela também trata valores ausentes, ou pode pensar que o código normaliza o score de crédito quando na verdade apenas o categoriza. Além disso, a alternativa E explora a dúvida sobre a ordem das operações: é perfeitamente válido usar groupby() após uma filtragem com colchetes, pois o resultado da filtragem é um novo DataFrame.

Para resolver a questão, é essencial conhecer o comportamento de cada método do Pandas: fillna() preenche valores ausentes com um valor especificado; cut() discretiza uma variável contínua em intervalos; groupby() agrupa linhas com base em uma ou mais colunas e permite aplicar funções de agregação como mean(). A filtragem com colchetes (df[condição]) retorna um subconjunto do DataFrame, que pode ser usado como entrada para outros métodos. Nenhuma dessas operações impede a utilização das demais.

Alternativa A — ❌ Incorreta

A alternativa afirma que o código utiliza fillna() para substituir valores ausentes por zero. Isso é uma generalização incorreta: o fillna() pode receber qualquer valor como argumento, como a mediana, a média ou uma string como "desconhecido". O código pode muito bem usar fillna(df['coluna'].median()) ou fillna('desconhecido'). Além disso, mesmo que substituísse por zero, isso não é uma afirmação universal sobre o código — depende do valor passado. A alternativa erra ao afirmar categoricamente que a substituição é por zero.

Alternativa B — ❌ Incorreta

A alternativa B diz que a função cut() cria intervalos categóricos baseados na variável score_credito e substitui valores ausentes por "desconhecido". Há dois erros aqui: primeiro, cut() não substitui valores ausentes — ela apenas discretiza uma variável contínua em bins. O tratamento de valores ausentes é feito por fillna(), não por cut(). Segundo, a alternativa não especifica que a variável usada é score_credito; o código pode usar idade ou outra coluna. A função cut() retorna uma série categórica, mas não preenche NaN.

Alternativa C — ❌ Incorreta

A alternativa C afirma que o código normaliza o score de crédito, transformando os dados em uma escala entre 0 e 1. Não há nenhuma operação de normalização no pipeline descrito. Normalização (como Min-Max scaling) é uma técnica diferente de discretização. O código usa cut() para criar faixas, não para normalizar. A normalização seria feita com algo como (df['score'] - df['score'].min()) / (df['score'].max() - df['score'].min()), o que não aparece no código.

Alternativa D — ✅ Correta ⟵ GABARITO

A alternativa D descreve corretamente o fluxo final do código: após filtrar os clientes que cancelaram (provavelmente com df[df['cancelou'] == 1]), o código agrupa por faixa etária (groupby('faixa_etaria')) e calcula a média do tempo de contrato (['tempo_contrato'].mean()). Isso é exatamente o que a alternativa afirma: "o agrupamento final calcula a média do tempo de contrato por faixa etária, considerando apenas os clientes que cancelaram o serviço". A filtragem condicional com colchetes é válida e o groupby() opera sobre o subconjunto resultante.

Alternativa E — ❌ Incorreta

A alternativa E afirma que o método groupby() não pode ser utilizado após filtragem condicional com colchetes, sendo necessário aplicar query() previamente. Isso é falso. Em Pandas, df[condição] retorna um DataFrame filtrado, e qualquer método do Pandas, incluindo groupby(), pode ser aplicado a esse resultado. A função query() é apenas uma alternativa sintática para filtrar, mas não é um pré-requisito para usar groupby(). O código df[df['cancelou'] == 1].groupby('faixa_etaria')['tempo_contrato'].mean() é perfeitamente válido.

Gabarito: letra D — a única alternativa que descreve corretamente o agrupamento final do código, considerando a filtragem por clientes que cancelaram e o cálculo da média do tempo de contrato por faixa etária.

Link permanente: /questoes/fg121245