1
resposta

Desempenho do cálculo da média através do groupby

Embora as instruções notas.groupby("filmeId").nota.mean() e notas.groupby("filmeId").mean().nota retornem os mesmos resultados, a primeira não teria um desempenho (em termo de tempo de resposta) melhor do que a segunda?

A primeira instrução parece que, primeiramente, retorna a coluna notas dos filmes para, depois, obter a média, enquanto que a segunda instrução parece que, primeiramente, calcula a média das colunas (usuarioId, nota e momento) dos filmes para, depois, filtrar as médias da coluna nota.

Executando no Colaboratory não vejo diferença (não sei como calcular o tempo de resposta). Mas, ao solicitar para executar, o tempo de resposta é imperceptível.

O meu raciocinio faz sentido?

Obrigado.

1 resposta

Olá Jhonatan! Tudo bem? Espero que sim!

Podemos montar um código para tirar a prova da sua teoria! Para isso, importamos a biblioteca time que permite execução de marcações de tempo, depois marcamos o tempo de inicio e fim com o comando time.time() de cada uma das opções e, com os dados obtidos, printamos a diferença de tempo entre as duas marcações:

import time

comeco1 = time.time()
medias_por_filme = notas.groupby("filmeId").mean().nota
fim1 = time.time()

comeco2 = time.time()
medias_por_filme = notas.groupby("filmeId").nota.mean()
fim2 = time.time()

print(f'Tempo .mean().nota: {fim1-comeco1}\nTempo .nota.mean(): {fim2-comeco2}')

O resultado que obtemos é o seguinte:

Tempo .mean().nota: 0.02095174789428711

Tempo .nota.mean(): 0.009973287582397461

É possivel notar que a organização .nota.mean() é realmente mais rápida que .mean().nota! Seu raciocínio está correto e fez muito sentido! Vemos também a diferença de tempo de execução entre os dois modos é muito pequeno, de modo que é humanamente impossível notar a diferença entre os dois, por isso não foi possível você perceber.

Eu espero ter te ajudado! Se surgir outra dúvida estarei à disposição.

Bons estudos!

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