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

Publicados: 2021-06-22

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

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

Média, mediana, moda as três medidas de tendência central

Ao final deste tutorial, você:

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

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

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

Calculando a média em Python

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

Lembre-se de que 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 personagens
  • Dicionário: uma coleção de pares de valores-chave

Observação: embora existam outras estruturas de dados em Python, como filas ou pilhas, usaremos apenas as integradas.

Podemos calcular a média adicionando 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 ou 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.

Criação de 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))

Quebrando este código:

  • O “pythonic_machine_ages” é uma lista com as idades dos jogadores de basquete
  • Nós definimos uma função mean () que retorna a soma do conjunto de dados dado 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 conjunto de dados como um argumento, ele 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 imprimimos o resultado.

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

 26.375 # Because 211 / 8 = 26.375

Essa 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 com precisão a idade da maioria dos jogadores.

Usando mean () do Módulo de Estatística Python

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

Como faz parte da biblioteca padrão do Python, você não precisa 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 como um argumento. Isso retornará o mesmo resultado da função personalizada que definimos na seção anterior:

 26.375

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

Encontrando a mediana em Python

A mediana é o valor médio de um conjunto de dados classificado. É usado - novamente - para fornecer um valor “típico” de uma determinada 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 integrada classificada () . 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 médio do conjunto de dados
  • Uniforme: a mediana é a soma dos dois valores intermediários dividida por dois

Continuando com o conjunto de dados do nosso time de basquete, vamos calcular a altura média 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 considerar 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 intermediários 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

Criação de uma função 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:

  • Classifique o conjunto de dados: podemos fazer isso com a função Sort ()
  • Determine se é ímpar ou par: 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 médio
    • Uniforme: retorna a média dos dois valores intermediários

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))

Saída:

 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 cada vez que a função é invocada.

O índice armazena o valor médio - ou o valor médio 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 de que, no 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 intermediários dividida por dois. Observe que os dados [índice -1] nos fornecem o ponto médio inferior do conjunto de dados, enquanto os dados [índice] nos fornecem o ponto médio superior.

Usando median () do Módulo de Estatística Python

Dessa forma é muito mais simples porque estamos usando uma função já existente do módulo de estatísticas.

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

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))

Saída:

 198 200.5

Calculando o modo em Python

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

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

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

Como você pode apreciar, 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 cordas.

Vamos analisar as vendas de outro dia:

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

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

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

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

Isso é chamado de distribuição uniforme, basicamente, significa que não há modo no conjunto de dados.

Agora que você tem uma ideia rápida do conceito de modo, vamos calculá-lo em Python.

Criação de uma função de modo personalizado

Podemos pensar na frequência de um valor como um par de valores-chave, em outras palavras, um dicionário Python.

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

Para encontrar o modo, 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

Verificar o resultado passando as duas listas como argumentos:

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

Saída:

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

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

Explicando mais detalhadamente 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, então, ele adiciona um ao valor
    • Se não for encontrado, criamos um par de valores-chave com um valor de 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 no dicionário de frequência com a maioria das frequências.

Observe como é importante a nomenclatura de variáveis ​​para escrever código legível.

Usando mode () e multimodo () do Módulo de Estatística Python

Mais uma vez, o módulo de estatísticas nos fornece uma maneira rápida de fazer 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.

Aí 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.

Consequentemente, podemos dizer que a função personalizada que definimos é na verdade uma função multimodo () .
 print(mode(points_per_game)) print(mode(sponsorship))

Saída:

 10 nike

Nota: No Python 3.8 ou superior, a função mode () retorna o primeiro modo encontrado. Se você tiver uma versão mais antiga, receberá um StatisticsError.

Usando a função multimodo () :

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

Saída:

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

Resumindo

Parabéns ! Se você acompanhou até agora, aprendeu como 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 modo, é recomendado usar o módulo de estatísticas, já que faz parte da biblioteca padrão e você não precisa instalar nada para começar a usá-lo.

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