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 '---------------'
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