Menu

A média é a medida de posição (ou tendência central) mais conhecida e comumente utilizada para começar a verificar o comportamento dos dados.

Não existe um só tipo de média. Temos vários tipos de média, tais como: aritmética (simples e ponderada); geométrica (simples e ponderada); harmônica (simples e ponderada); quadrática; cúbica; e heroniana. Cada tipo desses é mais adequado para análises específicas e para dados diferentes. Irei falar de cada uma delas aqui.

Média Aritmética

Se você já foi estudante, você certamente já calculou esse tipo de média (talvez não pela vontade de aprender médias, mas simplesmente para ver se você tinha nota suficiente para passar de ano).

A média aritmética é muito utilizada para diversos tipos de cálculos, como, por exemplo, a média de notas de um aluno para verificar se ele passou na disciplina, a média de gols de um jogador em um campeonato para comparar com outros jogadores, a média de batimentos cardíacos por minuto para verificar o estado de saúde de um indivíduo, entre outros.

Média Aritmética Simples

A média aritmética simples é definida como a soma de todos os valores dividida pelo número total de valores em um determinado conjunto de dados, e é determinada pela seguinte expressão:

E como podemos realizar um cálculo de média aritmética simples na linguagem Python?

Primeiro, vamos definir um exemplo.

Vamos supor que um professor queira calcular a média de notas de um aluno em um semestre letivo que possui 5 avaliações, com notas de 0 a 10, de mesmo peso.

Vamos supor, ainda, que Jefferson tenha sido o aluno escolhido para o cálculo da média, e que ele tenha tirado as seguintes notas nas avaliações: 6, 5, 7, 8, 10.

Vou, então, definir uma lista em Python com os valores dos quais queremos achar a média e atribuir a uma variável:

minha_lista = [6,5,7,8,10]

Vou demonstrar aqui duas formas de manipularmos essa lista de valores e chegarmos à sua média.

1. Criando uma função que soma os itens e divide pela quantidade de elementos

A primeira delas é criando uma função que soma os valores e divide pela quantidade total de valores (a própria definição desse tipo de média). Vejamos:

def calcula_media (minha_lista):
    return sum(minha_lista) / len(minha_lista)

Aqui, nós criamos e definimos a função "calcula_media", que retorna uma divisão de "sum(minha_lista)" por "len(minha_lista)".

A função "sum"é built-in do Python e retorna um número, qual seja a soma dos elementos da lista passada como argumento (no nosso caso, a soma dos elementos de "minha_lista").

Já a função "len", também é built-in do Python e também retorna um número, qual seja o número de elementos da lista passada como argumento (no nosso caso, o número de elementos contidos em "minha_lista").

No final das contas, chamamos nossa função, passando nossa lista como argumento, e mandamos imprimir na tela com a função "print":

print(calcula_media(minha_lista))

Então, teremos o resultado "7.2", que é a média aritmética simples dos elementos contidos naquela lista.

Veja o código completo:

def calcula_media (minha_lista):
    return sum(minha_lista) / len(minha_lista)

minha_lista = [6,5,7,8,10]

print(calcula_media(minha_lista))

2. Utilizando a função "mean" do pacote "numpy"

A segunda é importando a biblioteca "numpy" e utilizando sua função "mean". Aqui nós vamos presumir que você saiba instalar pacotes no Python. Fazemos assim:

import numpy

media_aritmetica_simples = numpy.mean(minha_lista)

print(media_aritmetica_simples)

A função "mean" do "numpy" possui apenas um parâmetro obrigatório, que é o "array" ou a lista de elementos dos quais se pretende a média. No nosso caso, é a lista "minha_lista".

Média Aritmética Ponderada

Enquanto que na média aritmética simples nós damos pesos iguais a todos os valores, na média aritmética ponderada alguns valores contribuem mais do que outros (possuem um peso maior), e é determinada pela seguinte expressão:

E agora? Como podemos realizar um cálculo de média aritmética ponderada na linguagem Python?

Nós poderíamos pegar o exemplo das notas do Jefferson que fizemos na média aritmética simples e acrescentar pesos às avaliações. Mas não irei fazer isso, vamos ver uma aplicação diferente.

Vamos supor que uma empresa possua 150 empregados, dividos em 5 cargos de igual remuneração mensal, e queira saber qual é a média da remuneração paga considerando todos os empregados da empresa. Vejamos:

Cargo 1: Temos 5 empregados que ganham R$ 16.000,00 por mês;
Cargo 2: Temos 15 empregados que ganham R$ 12.000,00 por mês;
Cargo 3: Temos 25 empregados que ganham R$ 8.000,00 por mês;
Cargo 4: Temos 45 empregados que ganham R$ 4.000,00 por mês;
Cargo 5: Temos 60 empregados que ganham R$ 2.000,00 por mês.

Antes de mais nada, como fizemos com a média aritmética simples, vou definir uma lista com os valores dos quais queremos achar a média e atribuir a uma variável:

salarios = [16000,12000,8000,4000,2000]

Mas, veja, nós não precisaremos somente dos valores da lista, mas também dos pesos com os quais cada um desses valores contribui para a média.

Portanto, irei também criar uma lista com os pesos, que, nesse caso, são as quantidades de empregados por cargo:

empregados = [5,15,25,45,60]

Veja que a ordem dos pesos importa na lista, eles devem estar na mesma posição que seu respectivo valor. Caso contrário, o cálculo ficará errado.

Vou demonstrar aqui duas formas de manipularmos essas listas e chegarmos à média ponderada.

1. Criando uma função que utiliza compreensão de listas (List Comprehension)

A primeira delas é criando uma função que utiliza compreensão de listas. A compreensão de listas oferece uma sintaxe mais curta quando você deseja criar uma nova lista com base nos valores de uma lista existente, ao invés de você escrever uma estrutura de repetição "for" com uma estrutura condicional dentro.

Diferentemente da média aritmética simples, teremos agora que passar dois argumentos para a função que criarmos: "salarios" e "empregados". Vejamos:

def calcula_media_ponderada (salarios, empregados):
    return round(sum([salarios[i]*empregados[i] for i in range(len(salarios))])/sum(empregados),2)

Aqui, nós criamos e definimos a função "calcula_media_ponderada", que retorna uma divisão de "sum([distribution[i]*weights[i] for i in range(len(distribution))])" por "sum(weights)" e arredonda o resultado para duas casas decimais.

A função "sum" nós já vimos, é built-in do Python e retorna um número, qual seja a soma dos elementos da lista passada como argumento. Aqui, ela está retornando a soma dos elementos da lista criada pela "list comprehension" que fizemos. Vamos entendê-la melhor.

Essa é a nossa "list comprehension": [salarios[i]*empregados[i] for i in range(len(salarios))].

A variável "i" indica o índice do elemento nas listas.

Por exemplo, quando temos i = 0, salario[0] é o primeiro valor da lista de salários que criamos, qual seja 16000... quando temos i = 1, salario[1] é o segundo valor da lista "salarios" que criamos, qual seja 12000.

Isso acontece porque a indexação na linguagem Python sempre inicia do zero. O mesmo ocorre na lista "empregados".

Lembra que dissemos que a função "len" também é built-in do Python e também retorna um número, qual seja o número de elementos da lista passada como argumento? Nesse caso, ela tá trazendo o número de elementos da lista "salarios" como argumento para a função "range".

E o que seria a função "range"? Essa função é built-in do Python e retorna uma sequência de números, começando em 0 (por padrão) com incrementos em 1 (por padrão), parando antes de um número especificado.

Assim, trazendo pro nosso caso, temos "len(salarios)" que é igual a 5, pois a lista "salarios" contém 5 elementos, e "range(len(salarios))" retorna uma sequência de 5 números incrementados em 1, de 0 a 5 (excluído o 5).

Então, quando dizemos, em nossa "list comprehension", "salarios[i]*empregados[i] for i in range(len(salarios))", o que estamos dizendo é: para cada número "i" da sequência de 0 a 5, pegue o valor do salário no índice "i" da lista "salarios" e multiplique pelo valor de empregados no índice "i" da lista "empregados".

Então, a função "calcula_media_ponderada" que criamos vai pegar esse número e dividir por "sum(empregados)", que é a soma dos valores dos elementos na lista "empregados", que correspondem aos valores dos pesos no cálculo da média aritmética ponderada.

Por fim, a função "round" também é built-in do Python e retorna o número passado como argumento com o arredondamento da quantidade de casas decimais determinado por outro argumento. No nosso caso, passamos "sum([salarios[i]*empregados[i] for i in range(len(salarios))])/sum(empregados)" como argumento do número a ser arredondado e "2" como a quantidade de casas decimais.

No final, chamamos nossa função, passando como argumento as listas , e mandamos imprimir na tela com a função "print":

print(calcula_media_ponderada(salarios, empregados))

Então, teremos o resultado "5066.67", ou seja, R$ 5.066,67, que é a média aritmética ponderada dos salários pagos pela empresa.

Veja o código completo:

def calcula_media_ponderada (salarios, empregados):
    return round(sum([salarios[i]*empregados[i] for i in range(len(salarios))])/sum(empregados),2)

salarios = [16000,12000,8000,4000,2000]

empregados = [5,15,25,45,60]

print(calcula_media_ponderada(salarios, empregados))

2. Utilizando a função "average" do pacote "numpy"

A segunda é importando a biblioteca "numpy" e utilizando sua função "average". Aqui nós vamos presumir que você saiba instalar pacotes no Python. Fazemos assim:

import numpy

media_aritmetica_ponderada = round(average(salarios, weights = empregados]), 2)

print(media_aritmetica_ponderada)

A função "average" do "numpy" possui apenas um parâmetro obrigatório, que é o "array" ou a lista de elementos dos quais se pretende a média (no nosso caso, a lista "salarios"). Com isso, ele faz o cálculo da média aritmética simples. Mas possui também um parâmetro chamado "weights", que é o "array" ou a lista de elementos correspondentes aos pesos (no nosso caso, a lista "empregados"). 

Você também pode se interessar por:

Ainda não existem posts similares

4 comentários

  1. woodcockkienzlelsj8o9+8410n1c5dno5@gmail.com
    |Responder

    quia et tempora porro consequatur quaerat voluptatem id sit iste ut minus sapiente quas aliquam ea. illum animi distinctio facere numquam eum veniam. ut aperiam itaque sunt. et dolores dolorum fugiat

    1. wetzelmhoonjgq1a2+8410n08dv3tv@gmail.com respondendo woodcockkienzlelsj8o9+8410n1c5dno5@gmail.com
      |Responder

      cumque voluptatem eaque culpa nostrum non et culpa non consectetur ut provident laboriosam repudiandae facere illum autem aliquid. sunt sunt ducimus eaque blanditiis consequuntur id id suscipit volupt

  1. wetzelmhoonjgq1a2+8410n08dv3tv@gmail.com
    |Responder

    et dignissimos et corporis inventore voluptas quod facere reprehenderit sit aperiam nisi architecto sequi consectetur et. officiis ut qui veniam debitis qui blanditiis sit nemo dolor. doloremque odit

  1. 24 hour pharmacy
    |Responder

    Hi there! Quick question that's entirely off topic. Do you know how to make your site mobile friendly? My weblog looks weird when browsing from my iphone4. I'm trying to find a template or plugin that might be able to correct this issue. If you have any suggestions, please share. Thanks!

Deixe seu comentário