Visualizando dados de frequência

Visualizando dados de frequência

Visualizar dados é uma das tarefas de um cientista de dados, por isso estava analisando os dias em que as pessoas mais acessam a plataforma da Alura. Para isso, os acessos da plataforma em uma semana do mês:


acessos_por_dia = pega_acessos(por='dias')

Esse método dos devolve um Series do Pandas:


acessos_por_dia = pega_acessos(por='dias')
print(acessos_por_dia)

0       1
1       1
2       1
3       1
4       2
5       1
6       1
7       2
8       2
9       1
    ..
9781    6
9782    6
9783    6
9784    6
9785    6
9786    6
9787    6
9788    6
9789    6
9790    6

Length: 9791, dtype: int64

Cada dia da semana está representado por um número - 0 para o domingo, 1 para segunda-feira, e assim para os demais.

Bacana! Já temos os dados, como podemos calcular a frequência agora?

Cada dia, um valor

Precisamos saber o total de acessos em um dia, ou seja, temos que pegar cada dia da semana e ir somando 1 a cada vez que ele aparece na nossa lista. Há algumas formas de se fazer isso, uma é fazer um loop e ir iterando por cada valor no array, outra é utilizar a classe Counter da biblioteca de collections do Python.

Para utilizar essa classe, precisamos importá-la do pacote de collections:


from collections import Counter
acessos_por_dia = pega_acessos(por='dias')

Agora, só precisamos passar a nossa variável de acessos no construtor da classe Counter:


from collections import Counter
acessos_por_dia = pega_acessos(por='dias')
quantidade_de_acessos_por_dia = Counter(acessos_por_dia)

A classe Counter cria um dicionário onde a chave são os dias da semana e o valor é a quantidade que cada dia apareceu na amostra.

Podemos pedir para o Python nos mostrar o conteúdo dessa variável:


from collections import Counter
acessos_por_dia = pega_acessos(por='dias')
quantidade_de_acessos_por_dia = Counter(acessos_por_dia)
print(quantidade_de_acessos_por_dia)

Counter({5: 1690, 4: 1687, 3: 1623, 2: 1523, 1: 1477, 0: 953, 6: 838})

Podemos ver que a saída são todos os dias da semana e quantos acessos tivemos em cada um deles. Como estamos utilizando um Counter, podemos ainda pedir apenas os dias mais comuns, isso é, os dias com mais acessos:


# restante do código
print(quantidade_de_acessos_por_dia.most_common())

[(5, 1690), (4, 1687), (3, 1623), (2, 1523), (1, 1477), (0, 953), (6, 838)]

Humm… ele nos devolve uma lista ordenada, onde cada posição é uma tupla com o dia e a quantidade de vezes que ele apareceu. Podemos filtrar esse valor e pedir para o Python só nos mostrar, por exemplo, os três dias com mais acessos:


# restante do código
print(quantidade_de_acessos_por_dia.most_common(3))

[(5, 1690), (4, 1687), (3, 1623)]

Bacana! Conseguimos visualizar aquilo que queríamos. Porém, ainda só conseguimos olhar esses dados pelo terminal, qual outra maneira temos de visualizar esses dados?

Banner da Escola de Programação: Matricula-se na escola de Programação. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

Um gráfico vale mais do que mil palavras

Uma forma muito comum de visualização de dados é por meio de gráficos. Existem diversas formas de criar um gráfico e visualizar os dados. No nosso caso, estamos calculando a frequência de acessos e um gráfico muito utilizado quando queremos visualizar isso é o gráfico de barras.

Vamos plotar esses dados utilizando a Matplotlib, uma biblioteca muito utilizada no mundo Python para visualização de dados.

Antes de tudo, precisamos importar da biblioteca o módulo de plotar gráficos com Python pyplot:


# restante do código

import matplotlib.pyplot as plt

Podemos pedir para o pyplot plotar um gráfico de barras para gente, onde o eixo X tem os valores dos dias (quantidade_de_acessos_por_dia.keys()) e o eixo Y os valores das frequências (quantidade_de_acessos_por_dia.values()):


# restante do código

import matplotlib.pyplot as plt
plt.bar(quantidade_de_acessos_por_dia.keys(), quantidade_de_acessos_por_dia.values())
plt.show()

Os números indicando os dias não ficam bacana para a visualização. Podemos alterar esses valores com a função xticks do Matplotlib. Nessa função, passamos como primeiro parâmetro os valores que vamos substituir e como segundo os que queremos alterar:


# restante do código

import matplotlib.pyplot as plt

plt.bar(quantidade_de_acessos_por_dia.keys(), quantidade_de_acessos_por_dia.values())

valores_numericos = list(dias_da_semana.keys())
valores_nominais = list(dias_da_semana.values())

plt.xticks(valores_numericos, valores_nominais)
plt.show()

Com o gráfico fica mais claro a visualização dos dados. Podemos mais claramente que os dias úteis tem mais acessos do que os finais de semana.

Esse gráfico que mostra a frequência de um dado da amostra é chamado de histograma. É um tipo gráfico muito utilizado na análise de dados. Tão comum que nem precisamos criar esse gráfico "na mão". Isto é, contar a ocorrência dos dados na amostra e utilizar o gráfico de barras.

A maior parte das bibliotecas utilizadas para a criação de gráficos já deixam disponíveis funções para montar o histogramas, no caso da matplotlib, existe a função hist.

Nessa função, não precisamos passar os dados já contados, passamos apenas os valores da amostra e deixamos a biblioteca trabalhar para a gente:


# restante do código

import matplotlib.pyplot as plt

acessos_por_dia = pega_acessos(por='dias')

plt.hist(acessos_por_dia)
plt.show()

Temos uma visualização bem similar ao gráfico de barras, porém, o histograma não quebrou em faixas inteiras. Podemos resolver isso falando como o histograma deve agrupar os dados:


# restante do código

import matplotlib.pyplot as plt

acessos_por_dia = pega_acessos(por='dias')

plt.hist(acessos_por_dia, bins=[0, 1, 2, 3, 4, 5, 6, 7])
plt.show()

Por fim, só precisamos renomear os valores do eixo X da mesma forma que o gráfico de barras:


# restante do código

import matplotlib.pyplot as plt

acessos_por_dia = pega_acessos(por='dias')
plt.hist(acessos_por_dia, bins=[0, 1, 2, 3, 4, 5, 6, 7])
plt.xticks(valores_numericos, valores_nominais)
plt.show()

Agora nosso histograma está parecido com o gráfico de barras. Espera aí, utilizar a função que cria os gráficos de barra e histogramas é a mesma coisa?

Bem, o histograma é um gráfico de barras, porém, seu uso é diferente. Para começar, é muito mais semântico em termos de código termos uma função com o nome hist() (de histograma), do que bar, falando sobre um gráfico de barras que pode ser "genérico".

Outro ponto interessante é que com os histogramas, temos tipos de manipulações de dados comuns para dados de frequências, como por exemplo, descobrir a frequência acumulada da amostra que estamos vendo.

Para isso, basta dizer que o parâmetro cumulative é verdadeiro:


# restante do código

import matplotlib.pyplot as plt

acessos_por_dia = pega_acessos(por='dias')
plt.hist(acessos_por_dia, bins=[0, 1, 2, 3, 4, 5, 6, 7], cumulative=True)
plt.xticks(valores_numericos, valores_nominais)
plt.show()

A frequência cumulativa nos mostra que, aproximadamente, até quarta-feira (dia 3) 70 pessoas acessaram a plataforma. Esse valor vai se acumulando até o fim da semana.

Com que frequência?

Gráficos são muito utilizados na visualização de dados. Com eles, conseguimos ver de uma maneira macro como nossos dados se comportam.

Existem diversos tipos de gráficos. O histograma por exemplo, também conhecido como distribuição de frequências, é muito utilizado quando temos que visualizar a frequência de dados em uma amostra.

No nosso caso, olhamos apenas a frequência acomulada absoluta. Porém, poderíamos ter olhado a frequência relativa. Isto é, o percentual que cada grupo de dados representa.

Por exemplo, na nossa amostra temos 9791 dados. Isso representa 100% da amostra. Domingo tivemos 953 acessos, aproximadamente 9,73% dos dados. Já segunda tivemos 1477 acessos, ou 15,09%.

Acumulando essas duas frequências relativas, temos 24.82%. O que nos diz que 24.82% dos acessos foram entre domingo e segunda.

Visualizar dados é uma das tarefas principais de um cientista de dados. Aqui na Alura, temos uma formação sobre Data Science. Nela você aprenderá desde a parte de visualização, mineração, exploração e avaliação de hipóteses e muito mais.

Yuri Matheus
Yuri Matheus

Yuri é desenvolvedor e instrutor. É estudante de Sistemas de Informação na FIAP e formado como Técnico em Informática no Senac SP. O seu foco é nas plataformas Java e Python e em outras áreas como Arquitetura de Software e Machine Learning. Yuri também atua como editor de conteúdo no blog da Alura, onde escreve, principalmente, sobre Redes, Docker, Linux, Java e Python.

Veja outros artigos sobre Programação