Nota: O seguinte artigo irá ajudá-lo com: Como encontrar média, mediana e modo 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.
Essas três são as principais medidas de tendência 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 com ciência de dados, este é o tutorial certo para você.
Ao final deste tutorial você irá:
- 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 Python Estatisticas módulo para iniciar rapidamente o uso dessas medidas
Se você quiser uma versão para download dos exercícios a seguir, fique à vontade para conferir o repositório do GitHub.
Vamos entrar nas 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 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
- Cordas: 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 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 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 exemplo.
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
- Nós definimos um significa() função que retorna a soma do conjunto de dados fornecido dividido pelo seu comprimento
- o soma() A função retorna a soma total (ironicamente) dos valores de um iterável, neste caso, uma lista. Tente passar o dataset como argumento, ele retornará 211
- o len() função retorna o comprimento de um iterável, se você passar o conjunto de dados para ele, obterá 8
- Passamos as idades do time de basquete para o significa() função e imprima 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 do 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á-las, juntamente com outros tópicos básicos de estatística.
Como faz parte da 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 o significa() função do Estatisticas module e passe o conjunto de dados para ele como um argumento. Isso retornará o mesmo resultado da função personalizada que definimos na seção anterior:
26.375
Agora você tem claro o conceito de significa vamos continuar com o mediana medição.
Encontrando a mediana em Python
A mediana é a valor médio de um conjunto de dados ordenado. Ele é 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 embutida classificado(). A segunda etapa é determinar se o comprimento do conjunto de dados é par ou ímpar. Dependendo disso, alguns dos seguintes processos:
- Ímpar: A mediana é o valor médio do conjunto de dados
- Até: A mediana é a soma dos dois valores do meio dividido 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 tomar 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:
- Classifique o conjunto de dados: Podemos fazer isso com o classificado() função
- 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 médio
- Até: 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 um dados variável 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 divisão inteira operador. Por exemplo, se estivéssemos passando a lista “pythonic_machine_heights”, ela teria o valor de 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 do meio dividido por dois. Observe que dados[index -1] nos dá o ponto médio inferior do conjunto de dados, enquanto dados[index] nos fornece o ponto médio superior.
Usando median() do módulo de estatística do Python
Desta forma é muito mais simples pois estamos utilizando uma função já existente do 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 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))
Resultado:
198 200.5
Calculando o modo em Python
A moda é o valor mais frequente no conjunto de dados. Podemos pensar nele como o grupo “popular” de uma escola, que pode representar um padrão para todos os alunos.
Um exemplo de moda 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 ver, a moda do conjunto de dados acima é “laptop” porque foi 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 conjunto de dados multimodal.
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 uniforme, basicamente, significa que não há moda no conjunto de dados.
Agora que você tem uma compreensão rápida do 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, em outras palavras, 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:
- Nós declaramos um frequência dicionário
- 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, ela adiciona uma ao valor
- Se não for encontrado, criamos um par chave-valor com um valor de um
- o mais frequente variável armazena – ironicamente – o maior valor (não chave) do dicionário de frequência
- Nós devolvemos o modos variável que consiste em todas as chaves do frequência dicionário com a maior frequência.
Observe a importância da nomenclatura de variáveis para escrever 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 fazer operações estatísticas básicas.
Podemos usar duas funções: mode() e multimode().
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 estamos trabalhando.
Aí vem a pequena diferença: O modo() função retorna o primeiro modo que encontra, enquanto multimodo() 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 multimodo() função.
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á um StatisticsError.
Usando o multimodo() função:
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.