Gráficos com PyPlot

Clique aqui para acessar o video com o desenvolvimento deste notebook.

O pacote PyPlot apresenta uma interface entre a linguagem Julia e a biblioteca matplotlib da linguagem Python.

Mais especificamente, ele provê acesso ao módulo matplotlib.pyplot dessa biblioteca.

Para utilizar a biblioteca PyPlot, você precisa instalar tanto o Python como a matplotlib no seu ambiente.


In [1]:
# Pacote DataFrames, para leitura dos dados a partir do arquivo CSV
using DataFrames
# PyPlot => interface com a biblioteca matplotlib da linguagem Python
using PyPlot

Dados de ações da empresa Autodesk

Os dados utilizados neste notebook foram obtidos a partir do site:

https://www.quandl.com/

Os dados, conforme informado no site, são de domínio público (no momento da criação deste notebook).

O arquivo CSV contém dados diários sobre os preços de ações da empresa Autodesk (abertura, fechamento, volume, etc.).

Neste notebook, os gráficos plotados se referem às colunas de data, preço de abertura e volume negociado.


In [2]:
atdk=readtable("data\\WIKI-ADSK.csv")
atdk


Out[2]:
DateOpenHighLowCloseVolumeEx_DividendSplit_RatioAdj_OpenAdj_HighAdj_LowAdj_CloseAdj_Volume
12015-11-2763.0463.2662.6963.05674381.00.01.063.0463.2662.6963.05674381.0
22015-11-2563.1763.362.7262.921.199068e60.01.063.1763.362.7262.921.199068e6
32015-11-2462.2463.35562.0463.081.858493e60.01.062.2463.35562.0463.081.858493e6
42015-11-2360.4263.2760.4262.712.902374e60.01.060.4263.2760.4262.712.902374e6
52015-11-2060.5560.8858.5560.557.655977e60.01.060.5560.8858.5560.557.655977e6
62015-11-1961.4762.6561.0462.393.476743e60.01.061.4762.6561.0462.393.476743e6
72015-11-1861.2861.6160.161.252.984214e60.01.061.2861.6160.161.252.984214e6
82015-11-1761.1762.460.8761.252.961213e60.01.061.1762.460.8761.252.961213e6
92015-11-1660.7861.7260.0760.934.000726e60.01.060.7861.7260.0760.934.000726e6
102015-11-1361.661.7160.1860.453.329407e60.01.061.661.7160.1860.453.329407e6
112015-11-1262.062.4261.3861.753.729319e60.01.062.062.4261.3861.753.729319e6
122015-11-1163.5163.6462.09562.124.286075e60.01.063.5163.6462.09562.124.286075e6
132015-11-1061.8863.3761.8263.363.783589e60.01.061.8863.3761.8263.363.783589e6
142015-11-0962.5463.6362.3963.513.794356e60.01.062.5463.6362.3963.513.794356e6
152015-11-0662.863.9262.2463.884.793059e60.01.062.863.9262.2463.884.793059e6
162015-11-0561.063.7260.1463.491.2548439e70.01.061.063.7260.1463.491.2548439e7
172015-11-0457.958.1157.4857.832.080894e60.01.057.958.1157.4857.832.080894e6
182015-11-0356.958.5656.6357.932.817e60.01.056.958.5656.6357.932.817e6
192015-11-0255.5157.0355.1656.893.184865e60.01.055.5157.0355.1656.893.184865e6
202015-10-3053.0755.653.055.193.067319e60.01.053.0755.653.055.193.067319e6
212015-10-2955.2155.3154.8255.062.012419e60.01.055.2155.3154.8255.062.012419e6
222015-10-2854.2455.8253.9555.53.935045e60.01.054.2455.8253.9555.53.935045e6
232015-10-2753.4454.1353.1854.13.041302e60.01.053.4454.1353.1854.13.041302e6
242015-10-2653.2453.6752.9453.613.042574e60.01.053.2453.6752.9453.613.042574e6
252015-10-2352.852.844751.8652.392.554395e60.01.052.852.844751.8652.392.554395e6
262015-10-2251.553.32151.552.592.123741e60.01.051.553.32151.552.592.123741e6
272015-10-2152.3452.3951.0851.131.687153e60.01.052.3452.3951.0851.131.687153e6
282015-10-2051.9952.3451.6952.02.455066e60.01.051.9952.3451.6952.02.455066e6
292015-10-1951.9152.743151.6652.443.033124e60.01.051.9152.743151.6652.443.033124e6
302015-10-1652.3752.5451.5752.043.113716e60.01.052.3752.5451.5752.043.113716e6
&vellip&vellip&vellip&vellip&vellip&vellip&vellip&vellip&vellip&vellip&vellip&vellip&vellip&vellip

Conversão dos dados da coluna 1, do formato UTF8String para o formato Date, da linguagem Julia.


In [4]:
atdk[:Date] = Date(atdk[:Date], "y-m-d")


Out[4]:
7659-element Array{Date,1}:
 2015-11-27
 2015-11-25
 2015-11-24
 2015-11-23
 2015-11-20
 2015-11-19
 2015-11-18
 2015-11-17
 2015-11-16
 2015-11-13
 2015-11-12
 2015-11-11
 2015-11-10
 ⋮         
 1985-07-17
 1985-07-16
 1985-07-15
 1985-07-12
 1985-07-11
 1985-07-10
 1985-07-09
 1985-07-08
 1985-07-05
 1985-07-03
 1985-07-02
 1985-07-01

Descrição dos dados lidos


In [5]:
describe(atdk)


Date
Length  7659
Type    Date
NAs     0
NA%     0.0%
Unique  7659

Open
Min      10.2
1st Qu.  28.48
Median   36.25
Mean     36.2283098315707
3rd Qu.  44.0
Max      84.37
NAs      0
NA%      0.0%

High
Min      11.75
1st Qu.  29.0
Median   36.97
Mean     36.888471850110975
3rd Qu.  44.75
Max      90.37
NAs      0
NA%      0.0%

Low
Min      10.18
1st Qu.  27.75
Median   35.66
Mean     35.59778433215825
3rd Qu.  43.205
Max      84.37
NAs      0
NA%      0.0%

Close
Min      10.9
1st Qu.  28.479999999999997
Median   36.28
Mean     36.26172996474736
3rd Qu.  44.0
Max      86.38
NAs      0
NA%      0.0%

Volume
Min      500.0
1st Qu.  341300.0
Median   945100.0
Mean     1.5957048959394176e6
3rd Qu.  2.3543e6
Max      3.44191e7
NAs      0
NA%      0.0%

Ex_Dividend
Min      0.0
1st Qu.  0.0
Median   0.0
Mean     0.00011620315968142054
3rd Qu.  0.0
Max      0.015
NAs      0
NA%      0.0%

Split_Ratio
Min      1.0
1st Qu.  1.0
Median   1.0
Mean     1.0006528267397832
3rd Qu.  1.0
Max      3.0
NAs      0
NA%      0.0%

Adj_Open
Min      0.4860449089066554
1st Qu.  5.735305621732332
Median   9.101406512508492
Mean     18.15378757557318
3rd Qu.  33.24733472007857
Max      64.05
NAs      0
NA%      0.0%

Adj_High
Min      0.49617084450887744
1st Qu.  5.860024031075591
Median   9.331179986193197
Mean     18.43778649101629
3rd Qu.  33.75
Max      65.0
NAs      0
NA%      0.0%

Adj_Low
Min      0.4860449089066554
1st Qu.  5.609050069701317
Median   8.901246055826205
Mean     17.877745650519223
3rd Qu.  32.705
Max      63.65
NAs      0
NA%      0.0%

Adj_Close
Min      0.4860449089066554
1st Qu.  5.747029895646817
Median   9.11933092509836
Mean     18.16879325175364
3rd Qu.  33.28
Max      64.24
NAs      0
NA%      0.0%

Adj_Volume
Min      12000.0
1st Qu.  1.663e6
Median   2.5233e6
Mean     3.0047226658832747e6
3rd Qu.  3.65445e6
Max      4.97944e7
NAs      0
NA%      0.0%

Primeiro exemplo de utilização da matplotlib


In [14]:
#Cria um objeto figura e define o tamanho através do parâmetro figsize
fig=figure(figsize=[12,6])

# Cria um subgráfico na primeira célula
ax1=subplot(2,1,1)
# Chama o método 'plot' a partir do objeto retornado na variável ax1 e
# traça um gráfico de linha
ax1[:plot](atdk[:Date], atdk[:Open])

# Cálcula a média do preço de abertura das ações...
media=mean(atdk[:Open])
# ...e plota a média como uma linha vermelha no gráfico
axhline(media, linewidth=1, color="r")
# Define o título para este gráfico
title("Preço Abertura")

# Cria um subgráfico na segunda célula
ax2=subplot(2,1,2)
# Chama o método 'bar' a partir do objeto retornado na variável ax2 e
# traça um gráfico de barras
ax2[:bar](atdk[:Date],atdk[:Volume])

# Cria um objeto para formatar as datas (labels) no eixo X
# com dia-mês-ano (com 4 dígitos)
formatador=matplotlib[:dates][:DateFormatter]("%d-%m-%Y")
# Atribui o formatador ao eixo X
ax2[:xaxis][:set_major_formatter](formatador)

# Define o título para este gráfico
title("Volume")

# Define o título superior
suptitle("Autodesk")


Out[14]:
PyObject <matplotlib.text.Text object at 0x0000000055DE4C88>

In [15]:
minimum(atdk[:Date])


Out[15]:
1985-07-01

Segundo exemplo de utilização da matplotlib


In [19]:
#Cria um objeto figura e define o tamanho através do parâmetro figsize
fig=figure(figsize=[12,6])

# Cria um subgráfico na primeira célula
ax1=subplot2grid([6,4], [0,0], rowspan=3, colspan=4)
# Chama o método 'plot' a partir do objeto retornado na variável ax1 e
# traça um gráfico de linha
ax1[:plot](atdk[:Date], atdk[:Open], linewidth=2, label="Abertura", color="#7f7f7f")

# Cálcula a média do preço de abertura das ações...
media=mean(atdk[:Open])
# ...e plota a média como uma linha vermelha no gráfico
axhline(media, linewidth=1, color="r")
# Define o título para este gráfico
title("Preço Abertura")
# "Liga" o parâmetro grid
ax1[:grid]("on")

# Cria um subgráfico na segunda célula
ax2=subplot2grid([6,4], [4,0], rowspan=2, colspan=4)
# Chama o método 'bar' a partir do objeto retornado na variável ax2 e
# traça um gráfico de barras
ax2[:bar](atdk[:Date],atdk[:Volume])

# Cria um objeto para formatar as datas (labels) no eixo X
# com dia-mês-ano (com 4 dígitos)
formatador=matplotlib[:dates][:DateFormatter]("%d-%m-%Y")
# Atribui o formatador ao eixo X
ax2[:xaxis][:set_major_formatter](formatador)

# Define o título para este gráfico
title("Volume")
# "Liga" o parâmetro grid
ax2[:grid]("on")

# Define o título superior
suptitle("Autodesk")
println()



Os links descritos acima, bem como os dados utilizados para a confecção deste notebook foram acessados em: 01/12/2015.