O histograma (também conhecido como distribuição de frequências) é a representação gráfica em colunas ou em barras (retângulos) de um conjunto de dados previamente tabulado e dividido em classes. A base de cada retângulo representa uma classe, enquanto que a altura de cada um representa a quantidade ou a frequência absoluta com que o valor da classe ocorre no conjunto de dados, para classes uniformes, ou a densidade de frequência, para classes não uniformes.

A biblioteca “matplotlib” do python permite montar facilmente um histograma, para imprimir na tela ou salvar como um arquivo de imagem. Ele é chamado pelo método “hist“, que recebe os dados como entrada e outros parâmetros. Para a leitura de dados de um arquivo CSV (colunas separadas por vírgula), a biblioteca “pandas” permite ler e gravar na memória uma planilha com as informações desse arquivo. Para cálculos matemáticos e outras funções, existe a biblioteca “numpy”.
O script a seguir carrega essas bibliotecas, faz a leitura do arquivo e chama a função para fazer o histograma. Como argumentos da função “histogram()”, estão o tipo de histograma, um vetor de dados, o nome da variável (a ser impresso no rótulo do eixo x) e uma variável extra (pode ser o nome do lugar ou outra informação para especificar o conjunto de dados, a ser impressa no título e no nome do arquivo).
Com relação aos tipos do histograma, uma das opções é fixar o tamanho dos bins (‘fixed_bin_size’), por exemplo todos os bins de largura 5 (definido na variável “bin_size = 5”). Outra opção é fixar o número de bins (‘fixed_number_bins’), por exemplo definindo como 30 bins, independente da largura que o algoritmo escolha (definido na variável “n_bins = 30”). No caso de não especificar os bins, ele será definido pelo método de Freedman-Diaconis.
#!/usr/bin/env python3.7.5
# -*- Coding: UTF-8 -*-
# Import modules
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Define functions
def histogram(type_hist, data, varname, place):
"""
Plot histogram from given list values.
Histogram types: fixed_bin_size or fixed_number_bins
"""
title = 'Histograma - %s' %place
figname = 'hist_%s.png' %place
text = 'média = %.2f\nmáximo = %.2f' % (data.mean(), max(data))
n_bins = 30
bin_size = 5
if type_hist == 'fixed_bin_size':
bins = np.arange(0, 100, bin_size)
elif type_hist == 'fixed_number_bins':
bins = np.linspace(math.ceil(min(data)), math.floor(max(data)), n_bins)
plt.xlim([min(data)-5, max(data)+5])
plt.hist(data, bins=bins)
plt.title(title)
plt.xlabel(varname)
#plt.ylabel('contagens')
ax = plt.gca() # Get axis handle for text positioning
plt.text(0.95, 0.95, text, horizontalalignment='right', verticalalignment='top', transform=ax.transAxes)
plt.savefig(figname)
plt.close()
# Import CSV file into pandas dataframe
df = pd.read_csv('dados.csv')
# Call histogram function
histogram('fixed_bin_size', df['valor'], 'var', 'lugar')
Na função “histogram”, também são calculadas a média dos dados e seu valor máximo, que são impressos no próprio gráfico. Você também pode alterar o script para que a variável extra seja o tamanho ou o número dos bins, desse modo sendo informado como um parâmetro da função.
Se a variável “density” (ou “normed”, nas versões mais antigas) for definida como True, os pesos serão normalizados, de modo que a integral da densidade na faixa permaneça 1 (o padrão é “None”).




