Como encontrar média, mediana e moda em Python?

Média, mediana e moda são tópicos fundamentais da estatística. Você pode calculá-los facilmente em Python, com e sem o uso de bibliotecas externas.

Estas três são as principais medidas de tendencia central. A tendência central nos permite conhecer os valores “normais” ou “médios” de um conjunto de dados. Se você está apenas começando na ciência de dados, este é o tutorial certo para você.

Ao final deste tutorial, você:

  • Entenda o conceito de média, mediana e moda
  • Ser capaz de criar suas próprias funções de média, mediana e modo em Python
  • Faça uso do módulo de estatísticas do Python para iniciar rapidamente o uso dessas medições

Se você deseja uma versão para download dos exercícios a seguir, sinta-se à vontade para verificar o Repositório GitHub.

Vamos ver as diferentes maneiras de calcular média, mediana e moda.

Calculando a média em Python

o significa ou média aritmética é a medida de tendência central mais utilizada.

Lembre-se de que a tendência central é um valor típico de um conjunto de dados.

Um conjunto de dados é uma coleção de dados, portanto, um conjunto de dados em Python pode ser qualquer uma das seguintes estruturas de dados integradas:

  • Listas, tuplas e conjuntos: uma coleção de objetos
  • Strings: uma coleção de caracteres
  • Dicionário: uma coleção de pares chave-valor

Nota: Embora existam outras estruturas de dados em Python, como filas ou pilhas, usaremos apenas as internas.

Podemos calcular a média somando todos os valores de um conjunto de dados e dividindo o resultado pelo número de valores. Por exemplo, se tivermos a seguinte lista de números:

[1, 2, 3, 4, 5, 6]

A média seria 3,5 porque a soma da lista é 21 e seu comprimento é 6. Vinte e um dividido por seis é 3,5. Você pode realizar este cálculo com o cálculo abaixo:

(1 + 2 + 3 + 4 + 5 + 6) / 6 = 21

Neste tutorial, usaremos os jogadores de um time de basquete como nossos dados de amostra.

Criando uma função de média personalizada

Vamos começar calculando a idade média (média) dos jogadores de um time de basquete. O nome da equipe será “Pythonic Machines”.

pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24]

def mean(dataset):
    return sum(dataset) / len(dataset)

print(mean(pythonic_machine_ages))

Decompondo este código:

  • O “pythonic_machine_ages” é uma lista com as idades dos jogadores de basquete
  • Definimos uma função mean() que retorna a soma do conjunto de dados fornecido dividido por seu comprimento
    • A função sum() retorna a soma total (ironicamente) dos valores de um iterável, neste caso, uma lista. Tente passar o dataset como argumento, retornará 211
    • A função len() retorna o comprimento de um iterável, se você passar o conjunto de dados para ela, obterá 8
  • Passamos as idades do time de basquete para a função mean() e exibimos o resultado.
  Como compartilhar seu Apple Watch Face

Se você verificar a saída, obterá:

26.375
# Because 211 / 8 = 26.375

Esta saída representa a idade média dos jogadores do time de basquete. Observe como o número não aparece no conjunto de dados, mas descreve precisamente a idade da maioria dos jogadores.

Usando mean () do Python Statistic Module

Calcular medidas de tendência central é uma operação comum para a maioria dos desenvolvedores. Isso é porque Estatísticas do Python O módulo fornece diversas funções para calculá-los, juntamente com outros tópicos básicos de estatística.

Já que faz parte do Biblioteca padrão do Python você não precisará instalar nenhum pacote externo com o PIP.

Veja como você usa este módulo:

from statistics import mean

pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24]

print(mean(pythonic_machine_ages))

No código acima, você só precisa importar a função mean() do módulo de estatísticas e passar o conjunto de dados para ela como um argumento. Isso retornará o mesmo resultado da função personalizada que definimos na seção anterior:

26.375

Agora que você tem clareza do conceito de média, vamos continuar com a medição da mediana.

Encontrando a mediana em Python

o mediana é o valor médio de um conjunto de dados classificado. É usado — novamente — para fornecer um valor “típico” de um determinado população.

Na programação, podemos definir a mediana como o valor que separa uma sequência em duas partes — a metade inferior e a metade superior —.

Para calcular a mediana, primeiro precisamos classificar o conjunto de dados. Poderíamos fazer isso com algoritmos de classificação ou usando a função interna sorted(). A segunda etapa é determinar se o comprimento do conjunto de dados é ímpar ou par. Dependendo disso, alguns dos seguintes processos:

  • Ímpar: a mediana é o valor do meio do conjunto de dados
  • Par: A mediana é a soma dos dois valores do meio dividida por dois

Continuando com nosso conjunto de dados do time de basquete, vamos calcular a altura mediana dos jogadores em centímetros:

[181, 187, 196, 196, 198,  203, 207, 211, 215]
# Since the dataset is odd, we select the middle value
median = 198

Como você pode ver, como o comprimento do conjunto de dados é ímpar, podemos usar o valor do meio como a mediana. No entanto, o que aconteceria se um jogador acabasse de se aposentar?

Precisaríamos calcular a mediana tomando os dois valores centrais do conjunto de dados

[181, 187, 196, 198, 203, 207, 211, 215] 
# We select the two middle values, and divide them by 2
median = (198 + 203) / 2
median = 200.5

Criando uma função de mediana personalizada

Vamos implementar o conceito acima em uma função Python.

Lembre-se das três etapas que precisamos seguir para obter a mediana de um conjunto de dados:

  • Classificar o conjunto de dados: podemos fazer isso com a função sorted()
  • Determine se é par ou ímpar: podemos fazer isso obtendo o comprimento do conjunto de dados e usando o operador de módulo (%)
  • Retorne a mediana com base em cada caso:
    • Ímpar: Retorna o valor do meio
    • Par: Retorna a média dos dois valores do meio

Isso resultaria na seguinte função:

pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215]
after_retirement = [181, 187, 196, 198, 203, 207, 211, 215]

def median(dataset):
    data = sorted(dataset)
    index = len(data) // 2
    
    # If the dataset is odd  
    if len(dataset) % 2 != 0:
        return data[index]
    
    # If the dataset is even
    return (data[index - 1] + data[index]) / 2

Imprimindo o resultado de nossos conjuntos de dados:

print(median(pythonic_machines_heights))
print(median(after_retirement))

Resultado:

198
200.5

Observe como criamos uma variável de dados que aponta para o banco de dados classificado no início da função. Embora as listas acima sejam classificadas, queremos criar uma função reutilizável, portanto, classificando o conjunto de dados sempre que a função for invocada.

  6 melhores alternativas do OpManager para monitoramento e gerenciamento de rede

O índice armazena o valor do meio — ou o valor do meio superior — do conjunto de dados, usando o operador de divisão inteira. Por exemplo, se estivéssemos passando a lista “pythonic_machine_heights” ela teria o valor 4.

Lembre-se que em Python os índices de sequência começam em zero, porque podemos retornar o índice do meio de uma lista, com uma divisão inteira.

Em seguida, verificamos se o comprimento do conjunto de dados é ímpar comparando o resultado da operação do módulo com qualquer valor que não seja zero. Se a condição for verdadeira, retornamos o elemento do meio, por exemplo, com a lista “pythonic_machine_heights”:

>>> pythonic_machine_heights[4]
# 198

Por outro lado, se o conjunto de dados for par, retornamos a soma dos valores centrais dividida por dois. Observe que os dados[index -1] nos dá o ponto médio inferior do conjunto de dados, enquanto os dados[index] nos fornece o ponto médio superior.

Usando median() do Python Statistic Module

Desta forma é bem mais simples pois estamos utilizando uma função já existente no módulo de estatísticas.

Pessoalmente, se há algo já definido para mim, eu o usaria por causa do princípio DRY —Não se repita — (neste caso, não repita o código dos outros).

Você pode calcular a mediana dos conjuntos de dados anteriores com o seguinte código:

from statistics import median

pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215]
after_retirement = [181, 187, 196, 198, 203, 207, 211, 215]

print(median(pythonic_machines_heights))
print(median(after_retirement))

Resultado:

198
200.5

Calculando o modo em Python

o modo é o valor mais frequente no conjunto de dados. Podemos pensar nisso como o grupo “popular” de uma escola, que pode representar um padrão para todos os alunos.

Um exemplo de modo pode ser as vendas diárias de uma loja de tecnologia. A moda desse conjunto de dados seria o produto mais vendido de um dia específico.

['laptop', 'desktop', 'smartphone', 'laptop', 'laptop', 'headphones']

Como você pode perceber, o modo do conjunto de dados acima é “laptop” porque era o valor mais frequente na lista.

O legal do modo é que o conjunto de dados não deve ser numérico. Por exemplo, podemos trabalhar com strings.

Vamos analisar as vendas de outro dia:

['mouse', 'camera', 'headphones', 'usb', 'headphones', 'mouse']

O conjunto de dados acima tem dois modos: “mouse” e “headphones” porque ambos têm uma frequência de dois. Isso significa que é um multimodal conjunto de dados.

E se não conseguirmos encontrar a moda em um conjunto de dados, como o abaixo?

['usb', 'camera', 'smartphone', 'laptop', 'TV']

Isso é chamado de distribuição uniformebasicamente, significa que não há moda no conjunto de dados.

  14 tipos de publicidade que todo profissional de marketing deve conhecer

Agora que você entendeu rapidamente o conceito de modo, vamos calculá-lo em Python.

Criando uma função de modo personalizado

Podemos pensar na frequência de um valor como um par chave-valor, ou seja, um dicionário Python.

Recapitulando a analogia do basquete, podemos usar dois conjuntos de dados para trabalhar: os pontos por jogo e o patrocínio de tênis de alguns jogadores.

Para encontrar a moda primeiro precisamos criar um dicionário de frequência com cada um dos valores presentes no conjunto de dados, depois obter a frequência máxima e retornar todos os elementos com essa frequência.

Vamos traduzir isso em código:

points_per_game = [3, 15, 23, 42, 30, 10, 10, 12]
sponsorship = ['nike', 'adidas', 'nike', 'jordan',
               'jordan', 'rebook', 'under-armour', 'adidas']

def mode(dataset):
    frequency = {}

    for value in dataset:
        frequency[value] = frequency.get(value, 0) + 1

    most_frequent = max(frequency.values())

    modes = [key for key, value in frequency.items()
                      if value == most_frequent]

    return modes

Verificando o resultado passando as duas listas como argumentos:

print(mode(points_per_game))
print(mode(sponsorship))

Resultado:

[10]
['nike', 'adidas', 'jordan']

Como você pode ver, a primeira instrução print nos deu um único modo, enquanto a segunda retornou vários modos.

Explicando mais a fundo o código acima:

  • Declaramos um dicionário de frequência
  • Nós iteramos sobre o conjunto de dados para criar um histograma — o termo estatístico para um conjunto de contadores (ou frequências) —
    • Se a chave for encontrada no dicionário, adiciona um ao valor
    • Se não for encontrado, criamos um par chave-valor com valor um
  • A variável most_frequent armazena — ironicamente — o maior valor (não a chave) do dicionário de frequência
  • Retornamos a variável de modos que consiste em todas as chaves do dicionário de frequência com maior frequência.

Observe a importância da nomenclatura de variáveis ​​para escrever um código legível.

Usando mode() e multimode() do Python Statistic Module

Mais uma vez, o módulo de estatísticas nos fornece uma maneira rápida de realizar operações estatísticas básicas.

Podemos usar duas funções: modo() e multimodo().

from statistics import mode, multimode

points_per_game = [3, 15, 23, 42, 30, 10, 10, 12]
sponsorship = ['nike', 'adidas', 'nike', 'jordan',
               'jordan', 'rebook', 'under-armour', 'adidas']

O código acima importa ambas as funções e define os conjuntos de dados com os quais trabalhamos.

Aqui vem a pequena diferença: a função mode() retorna o primeiro modo que encontra, enquanto multimode() retorna uma lista com os valores mais frequentes no conjunto de dados.

Conseqüentemente, podemos dizer que a função personalizada que definimos é, na verdade, uma função multimodo().

print(mode(points_per_game))
print(mode(sponsorship))

Resultado:

10
nike

Observação: no Python 3.8 ou superior, a função mode() retorna o primeiro modo encontrado. Se você tiver uma versão mais antiga, receberá uma EstatísticaErro.

Usando a função multimodo():

print(multimode(points_per_game))
print(multimode(sponsorship))

Resultado:

[10]
['nike', 'adidas', 'jordan']

Resumindo

Parabéns! Se você acompanhou até aqui, aprendeu a calcular a média, a mediana e a moda, as principais medidas de tendência central.

Embora você possa definir suas funções personalizadas para encontrar média, mediana e moda, é recomendável usar o módulo de estatísticas, pois faz parte da biblioteca padrão e você não precisa instalar nada para começar a usá-lo.

Em seguida, leia uma introdução amigável à análise de dados em Python.