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.
últimas postagens
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.
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.
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.
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.