sexta-feira, 20 de setembro de 2013

     No post de hoje aprenderemos como visualizar dados no Python, mais especificamente um gráfico de barras para visualizarmos a quantidade de notícias vinculadas em uma fonte na internet sobre a Petrobrás, por trimestre ,desde 2010.

     Lembra do post Construindo um RSS Reader com o Python e MongoDB? Usaremos esta base de dados para trabalhar e transformar estas informações. Nosso código começa importando as bibliotecas necessárias. As principais são numpy, pymongo e matplotlib:

import datetime
import pymongo
import matplotlib.pyplot as plt # Para plotar o gráfico
from pylab import figure, show, legend, ylabel
import numpy as np
     Em seguida, inicializamos a conexão com o MongoDB e escolhemos a chave de busca, no caso, Petrobras.
# Conectando com o Mongo
connection = pymongo.Connection("mongodb://localhost", safe=True)

# handles para a base de dados
db = connection.datasets
news = db.news

termos = ['petrobras']
     O próximo passo é extrair os dados da collection:

print '--- EM 1T10 ---'
for termo in termos:
      dataI = datetime.datetime(2010, 1, 1)
      dataF = datetime.datetime(2010, 3, 31)
      T110 = tcc.find({'data':{'$gte': dataI, '$lt': dataF},'headline':{'$regex':termo} }).count()
print termo + ' ' + str(T110)
print '---------------'

     Usando esta lógica associada a um loop for, extraímos as informações para cada trimestre, desde 2010. Para relembrar como manipular datas, recomendamos a leitura dos posts:

Consultando datas no MongoDB

     Finalizada esta manipulação, vamos ao bloco de código para plotar o gráfico.

N = 4
ind = np.arange(N)  # the x locations for the groups
width = 0.15       # the width of the bars
fig, ax = plt.subplots()
trimestres10 = (T110,T210,T310,T410)
rects1 = ax.bar(ind, trimestres10, width, color='r')

trimestres11 = (T111,T211,T311,T411)
rects2 = ax.bar(ind+1.2*width, trimestres11, width, color='b')

trimestres12 = (T112,T212,T312,T412)
rects3 = ax.bar(ind+2.4*width, trimestres12, width, color='g')

trimestres13 = (T113,T213,T313,T413)
rects4 = ax.bar(ind+3.6*width, trimestres13, width, color='w')

# Adicionando labels
ax.set_ylabel('Headlines')
ax.set_title('Headlines por trimeste')
ax.set_xticks(ind+2*width)
ax.set_xticklabels( ('T1', 'T2','T3','T4') )

ax.legend( (rects1[0], rects2[0],rects3[0],rects4[0]), ('2010', '2011','2012','2013') )

def autolabel(rects):
    # Adiconando mais labels
     for rect in rects:
         height = rect.get_height()
         ax.text(rect.get_x()+rect.get_width()/2., 1.03*height, '%d'%int(height),
         ha='center', va='bottom')

#Chama a função para gerar as labels para cada bloco de dados
autolabel(rects1)
autolabel(rects2)
autolabel(rects3)
autolabel(rects4)

plt.show()

    Após a implantação, temos em nossa saída o gráfico abaixo:

   
     Viu como é fácil?!

     Abraços e até o próximo post!

0 comentários:

Postar um comentário