Acessando dados na rede com Python

Faaaala cientista! Tudo certo?
Legal, você baixou seu arquivo com valores separados por vírgula, o .csv, precisou buscar em algum lugar e indicar pro programa qual era a pasta do arquivo, pra só depois começar a trabalhar. Chato né?
Hoje veremos como acessar um arquivinho desses na internet usando Python! Para isso usaremos algumas bibliotecas diferentes. Vamos lá?

Para acessar o arquivo .csv direto da rede, precisamos primeiro de um… arquivo .csv. Nestes testes escolhi a série de preços históricos da Petrobras, lá do Yahoo Finanças. O endereço da série é esse aqui: https://br.financas.yahoo.com/q/hp?s=PETR4.SA.

Lá no fim da página tem um link, “Fazer download para a planilha”. Mas não precisa baixar o menino! Clique com o botão direito, e selecione “Copiar endereço do link”; se o seu sistema está em inglês, a opção deve ficar “Copy link address” ou coisa do tipo.

copiarlink

Pronto! Agora guarde esse link. Vamos precisar dele mais tarde.

O código completo que usaremos no exemplo é esse aqui:

from urllib.request import urlopen
import matplotlib.pyplot as plt
import pandas

url = 'http://real-chart.finance.yahoo.com/table.csv?s=PETR4.SA&d=9&e=17&f=2015&g=d&a=0&b=3&c=2000&ignore=.csv'
petr_csv = urlopen(url)

petr = pandas.read_csv(petr_csv, index_col=0, parse_dates=True)
petr.plot(y='Adj Close')

plt.xlabel('Ano')
plt.ylabel('Cotação')
plt.legend().set_visible(False)
plt.show()

Vamos explicá-lo em blocos, ok?

from urllib.request import urlopen
import matplotlib.pyplot as plt
import pandas

Nessas linhas importamos a função urlopen do módulo urllib.request. Ela obterá os dados do arquivo .csv. Chamamos também o pandas, que irá transformar o arquivo .csv em uma tabela, e matplotlib.pyplot para modificar os parâmetros no gráfico resultante.

url = 'http://real-chart.finance.yahoo.com/table.csv?s=PETR4.SA&d=9&e=17&f=2015&g=d&a=0&b=3&c=2000&ignore=.csv'
petr_csv = urlopen(url)

Lembra do endereço que copiamos da página do Yahoo Finanças? Colamos ele (botão direito do mouse, “Colar” ou “Paste”) no código como uma string, que é atribuída à variável url. Depois, usamos a função urlopen para atribuir esse conteúdo à variável petr_csv.

petr = pandas.read_csv(petr_csv, index_col=0, parse_dates=True)
petr.plot(y='Adj Close')

Agora usamos o Pandas para transformar o conteúdo do arquivo .csv lido em uma tabela e plotamos o resultado. Para ver as cinco primeiras linhas da tabela, use:

petr.head()

O resultado é esse aqui:

            Open  High   Low  Close    Volume  Adj Close
Date                                                    
2015-10-14  8.07  8.23  7.89   7.96  75339100       7.96
2015-10-13  8.36  8.47  8.07   8.13  56100600       8.13
2015-10-12  8.80  8.80  8.80   8.80         0       8.80
2015-10-09  9.02  9.07  8.58   8.80  71885200       8.80
2015-10-08  8.46  8.84  8.28   8.75  68670000       8.75

Repare que usamos a coluna “Adj Close” como eixo y do gráfico no comando anterior.

plt.xlabel('Ano')
plt.ylabel('Cotação')
plt.legend().set_visible(False)
plt.show()

Por fim, esses comandos alteram os rótulos dos eixos x e y e escondem a legenda. Vimos alguns desses comandos na série sobre gráficos bidimensionais no Python, que começou aqui. O gráfico resultante é esse:

seriepetr

Que beleza hein! Mas é uma série bonita demás!
Hoje aprendemos a usar a função urlopen e vimos como transformar um arquivo .csv em uma tabela no pandas, além de ver o gráfico de uma das colunas da tabela. Tente alterar o valor de y do comando petr.plot() com outras informações! Por exemplo, use petr.plot(y=’Open’) ou petr.plot(y=’Close’).
Valeu cientista! Um giga abraço!


Gostou? Curta e compartilhe com seus amigos!
Quer baixar os códigos do Programando Ciência? Corre lá no nosso GitHub!
Faça uma doação pro Programando Ciência!
Curta a gente também no Facebook: www.facebook.com/programandociencia
Estou no Twitter! Siga-me se puder! @alexdesiqueira

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s