Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
2
respostas

[Projeto] Desafio: bora praticar?

Aula 4
Importe novamente o arquivo alunos.csv para realizar os desafios abaixo.

# Importando novamente os dados
import pandas as pd

dados_alunos = pd.read_csv('https://raw.githubusercontent.com/alura-cursos/pandas-conhecendo-a-biblioteca/main/desafios/alunos.csv')
dados_alunos
dados_alunos['Notas'].fillna(0, inplace=True)
dados_alunos  

Desafio 1
Os alunos participaram de uma atividade extracurricular e ganharam pontos extras. Esses pontos extras correspondem a 40% da nota atual de cada um deles. Com base nisso, crie uma coluna chamada "Pontos_extras" que contenha os pontos extras de cada aluno, ou seja, 40% da nota atual deles

dados_alunos['Pontos_extras'] = dados_alunos['Notas'] * 0.4   #não quis usar apply forma que esta aqui é vetorizada, mais eficiente
dados_alunos

Desafio 2
Crie mais uma coluna, chamada "Notas_finais" que possua as notas de cada aluno somada com os pontos extras

dados_alunos['Notas_finais'] = dados_alunos['Notas'] + dados_alunos['Pontos_extras']
dados_alunos

Desafio 3
Como os alunos ganharam pontos extras, alguns que não tinham sido aprovados antes podem ter sido aprovados agora. Com base nisso, crie uma coluna chamada "Aprovado_final" com os seguintes valores:

True: caso o aluno esteja aprovado (nota final deve ser maior ou igual a 6);
False: caso o aluno esteja reprovado (nota final deve ser menor que 6).

#este eu fiz sem usar apply, utilizei uma opção masis performatica, só porqeu aprendi isso queria praticar

import numpy as np

dados_alunos['Aprovado_final'] = np.where(dados_alunos['Notas_finais'] >= 6, True, False)
dados_alunos

Desafio 4
Faça uma seleção e verifique quais alunos não tinham sido aprovados anteriormente, mas foram aprovados após a soma dos pontos extras

selecao = dados_alunos.query('Aprovado == False and Aprovado_final == True')
selecao
dados_alunos.to_csv('alunos_final.csv', index=False, sep=';')
2 respostas

Olá, Marcelo! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou o fillna para tratar valores ausentes com pandas, utilizou muito bem o np.where para criar colunas condicionais e ainda compreendeu a importância da vetorização para tornar operações mais eficientes em grandes DataFrames.

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

Uma dica interessante para o futuro é aplicar o método assign para criar múltiplas colunas de forma encadeada:

dados_alunos = dados_alunos.assign(
    Pontos_extras = dados_alunos['Notas'] * 0.4,
    Notas_finais = lambda df: df['Notas'] + df['Pontos_extras'],
    Aprovado_final = lambda df: df['Notas_finais'] >= 6
)

Isso faz com que você crie várias colunas em uma única chamada, deixando o código mais organizado.

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

Ah, uma pergunta: você acha mais interessante manter cada coluna criada passo a passo para clareza ou prefere encadear operações com assign para deixar o código mais compacto?

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!
solução!

Olá Daniel,

interessantissimo, o assign, eu vejo que o uso depende, performaticamente, talvez o custo de cada de função com lambda, ali não seja significativo e valha a pena, apesar que eu penso que o assign fara uma cópia, em arquivos grandes usara mais memória. Creio que num pipeline profissional fique mais interessante o assign . Aquele df['Notas_finais'] >= 6 também é interessante, melhor talvez até que o np.where, já que a condição é intrinsecasmente bool.

A primeira forma que fiz, penso que pode ajudar a debugar linha a linha de forma a ficar bem entendido cada operação numa EDA, pra quem esta estudando é bom, ou em algo que esta mais complexo ficar mais claro.

Penso que a abordagem aí, não teria a ver com performance exatamente, mais pelo estilo e uma clareza, saber as duas forma ajuda entender também códigos de outras pessoas, mas gostei do assign e o encadeamento.

Obrigado e muito boas dicas. Uma abraço