Está en la página 1de 20

numist - IST

Tutorial para estudantes


Construir bom material de apresentao para teses e trabalhos em engenharia

Pedro Correia
2011

NDICE
INTRODUO ................................................................................................................................ 3
INSTALAR O PYTHON ..................................................................................................................... 3
FICHEIROS DE TEXTO ..................................................................................................................... 5
PREPARAR A CONSOLA E FOLHA DE SCRIPT.................................................................................. 5
CARREGAR FICHEIROS DE DADOS PARA O PYTHON ..................................................................... 6
HISTOGRAMAS .............................................................................................................................. 7
RESUMO DOS HISTOGRAMAS ................................................................................................. 14
GRFICOS DE LINHAS E PONTOS ................................................................................................. 15
RESUMO DOS GRFICOS DE PONTOS E LINHAS ......................................................................... 19
CONSIDERAES FINAS ............................................................................................................... 20

INTRODUO
Recentemente reparei na dificuldade dos estudantes em apresentarem os seus resultados em
teses ou trabalhos acadmicos devido ao desconhecimento que tm dos softwares usados
vulgarmente na construo dos mesmos. Regra geral programas como o EXCEL (Office) e CALC
(Open Office) so os mais utilizados para essas funes e embora proporcionem a maneira
mais bvia para o utilizador analisar os seus dados pecam por no permitir, ou ser complexo,
construir grficos com o detalhe e caracterizao ideal para um resultado. Por esse motivo
construo este guia para qualquer pessoa que queira produzir material visual de qualidade nos
seus trabalhos.
Para o fazer irei utilizar a linguagem Python. Isto no uma introduo programao, coisa
que o utilizador deve ter em conta (existe outra publicao no numist que, de facto, ensina a
programar em Python), mas sim um guia de instrues para cumprir objectivos muito
especficos. Para isso irei ensinar o utilizador a carregar dados para dentro do Python e analislos visualmente e, por vezes, numericamente.

INSTALAR O PYTHON
O pacote que aconselho a que se instale o Python XY (penso que de momento s existe
verso para Windows). Est disponvel para download gratuito no seguinte link (seco de
downloads):
http://www.pythonxy.com/

As bibliotecas que esto l dentro que vo mesmo precisar o numpy e o matplotlib, mas
minha sugesto que, se vo instalar o pacote o faam com tudo o que est l dentro. Quando
surgir na janela de instalao a lista de pacotes que tm de instalar procurem que pelos menos
os que indiquei acima estejam seleccionados.
Agora, depois de instalarem dever aparecer um cone do Python XY algures no desktop. Ao
carregarem nele (ou ento vo procura dele na lista de programas no inciar) ir aparecer isto:

Carreguem aqui.

Ao carregarem no stio que eu estou, declaradamente, a dizer para carregarem vai aparecer
isto (ou semelhante, eu j tenho cdigo l, vocs no vo ter):

Ao que est dentro do rectngulo vermelho na imagem que mostrei vamos chamar consola.
Ao que est dentro do rectngulo verde vamos chamar folha de script.

FICHEIROS DE TEXTO
Regra geral ns costumamos meter todas as informaes em ficheiros de texto ( possvel
exportar as tabelas de EXCEL e CALC para ficheiros de texto no Salvar como). Um ficheiro
de texto, regra geral com extenso .txt, .prn, etc (.doc e .docx no so ficheiros de texto, so
ficheiros do Word) e podem ser abertos com programas como o notepad, no Windows, e gedit,
no Ubuntu. Para ser mais simples para vocs aprenderem faam os vossos ficheiros de texto
com os dados l dentro assim:
10
20
15
14
23
33
29
19
10
9

No caso de terem apenas uma coluna de dados, e assim no caso de terem duas:
13
9
10
7
9
8
5
3
2
1

27
33
29
37
31
39
44
33
42
55

E por ai adiante no caso de terem 3, 4 ou mais. Reparem que no h mais informao


nenhuma nos ficheiros sem ser os vossos dados.

PREPARAR A CONSOLA E FOLHA DE SCRIPT


Quando comearem a trabalhar na consola ou folha de script faam estes comandos antes de
fazer seja o que for:

Para a consola:
In [1]: from __future__ import division
In [2]: import numpy as np
In [3]: import matplotlib.pyplot as plt

Para a folha de script:


from __future__ import division
import numpy as np
import matplotlib.pyplot as plt

Com isto vocs esto a importar as bibliotecas necessrias para fazer grficos e outras coisas.
Sempre que iniciarem uma sesso (abrirem o software ou uma folha de script nova), escrevam
isto se j no estiver l escrito.

CARREGAR FICHEIROS DE DADOS PARA O PYTHON


Para carregar ficheiros para o Python como aqueles que mostrei num dos captulos anteriores
basta fazer assim (no meu exemplo estou a abrir o exemplo que dei de ficheiro com duas
colunas):

In [4]: dados=np.loadtxt(r'C:\Pedro Correia\Dados\TESES E TRABALHOS\DADOS\nome_do_vosso_ficheiro.txt')

dados=np.loadtxt(r'C:\Pedro Correia\Dados\TESES E TRABALHOS\DADOS\nome_do_vosso_ficheiro.txt')

Reparem que meti o caminho onde est o ficheiro conjuntamente com o nome dentro de
pelicas. Reparem que tambm est um r antes das pelicas. importante para o Python
perceber que um caminho escrito moda do Windows por isso se estiverem a trabalhar em
Windows metam-no sempre. Agora j tm dos dados carregados. Se chamarem na consola a
varivel dados para onde foi para a informao que meteram no ficheiro vai aparecer toda a
informao:

In [5]: dados
Out[5]:
array([[ 13.,
[ 9.,
[ 10.,
[ 7.,
[ 9.,
[ 8.,
[ 5.,
[ 3.,
[ 2.,
[ 1.,

27.],
33.],
29.],
37.],
31.],
39.],
44.],
33.],
42.],
55.]])

A folha de script vai correr apenas quando a fizeres correr (depois explico) enquanto a consola
funciona em tempo real. Por isso que s mostrei como fazer na consola (na folha de script
seria totalmente intil).

HISTOGRAMAS
Histogramas so dos tipos de grficos mais usados por descreverem o que a distribuio de
uma varivel. Mas antes de fazermos um histograma vamos ver como seleccionamos apenas
uma das colunas dos nossos dados (para escolhermos apenas uma varivel). Se assumirmos
que os dados esto dispostos desta maneira:
Linhas\Colunas
0
1
2
3
4
5
6
7
8
9

0
13
9
10
7
9
8
5
3
2
1

1
27
33
29
37
31
39
44
33
42
55

Ento a primeira coluna a coluna 0 e a segunda a coluna 1, da mesma maneira que a primeira
linha a linha 0 e a segunda a 1, terceira a 2, por ai adiante. assim que se escolhe as posies
em Python. Para escolher posies em python fazemos assim (exemplo apenas na consola):
In [6]: dados[3,0]
Out[6]: 7.0

Repara que escolhi o nmero que estava na posio 3 das linhas e 0 das colunas (confirma na
tabela). Se eu quiser escolher uma coluna inteira em vez de apenas uma posio digo que
quero tudo numa determinada linha ou coluna com o indicador :.
In [7]: dados[:,0]
Out[7]: array([ 13.,

9.,

10.,

7.,

9.,

8.,

5.,

3.,

2.,

1.])

Repara que escolhi todas a linhas da coluna 0. Vamos l agora fazer um histograma desta
coluna.
In [8]: plt.hist(dados[:,0])
Out[8]:
(array([2, 1, 0, 1, 0, 2, 2, 1, 0, 1]),
array([ 1. ,
2.2,
3.4,
4.6,
5.8,
11.8, 13. ]),
<a list of 10 Patch objects>)

7. ,

8.2,

9.4,

10.6,

plt.hist(dados[:,0])
plt.show()

Resultou o histograma acima mostrado. Tm classes a mais por isso vou especificar que apenas
quero trs classes no histograma.
In [9]: plt.hist(dados[:,0],bins=3)
Out[9]:
(array([3, 3, 4]),
array([ 1.,
5.,
9., 13.]),
<a list of 3 Patch objects>)
plt.hist(dados[:,0],bins=3)
plt.show()

Pretendo visualizar os histogramas de ambas as colunas no mesmo grfico. Para isso insiro as
instrues seguintes:
In [10]: plt.hist(dados[:,0],bins=5)
Out[10]:
(array([3, 1, 2, 3, 1]),
array([ 1. ,
3.4,
5.8,
8.2, 10.6,
<a list of 5 Patch objects>)
In [11]: plt.hist(dados[:,1],bins=5)
Out[11]:
(array([3, 3, 2, 1, 1]),
array([ 27. , 32.6, 38.2, 43.8, 49.4,
<a list of 5 Patch objects>)
plt.hist(dados[:,0],bins=5)
plt.hist(dados[:,1],bins=5)
plt.show()

13. ]),

55. ]),

Ele mudou a cor automaticamente quando reparou que havia dois sets de dados dentro do
mesmo grfico. Repara tambm que mudei o nmero de classes para 5 em cada histograma.
Quero agora comparar o histograma da primeira coluna (0) com 3 classes e com 5 classes no
mesmo grfico. Para isso quero meter o primeiro caso a azul e o segundo a vermelho.
In [12]: plt.hist(dados[:,0],bins=3,color='blue')
Out[12]:
(array([3, 3, 4]),
array([ 1.,
5.,
9., 13.]),
<a list of 3 Patch objects>)
In [13]: plt.hist(dados[:,0],bins=5,color='red')
Out[13]:
(array([3, 1, 2, 3, 1]),
array([ 1. ,
3.4,
5.8,
8.2, 10.6, 13. ]),
<a list of 5 Patch objects>)
plt.hist(dados[:,0],bins=3,color=blue)
plt.hist(dados[:,0],bins=5,color=red)
plt.show()

O problema neste caso que o histograma vermelho est a ocultar o azul de certa maneira por
isso seria ideal que ele apresentasse alguma transparncia para o que est por baixo parecer
perceptvel.
In [14]: plt.hist(dados[:,0],bins=3,color='blue')
Out[14]:
(array([3, 3, 4]),
array([ 1.,
5.,
9., 13.]),
<a list of 3 Patch objects>)
In [15]: plt.hist(dados[:,0],bins=5,color='red',alpha=0.5)
Out[15]:
(array([3, 1, 2, 3, 1]),
array([ 1. ,
3.4,
5.8,
8.2, 10.6, 13. ]),
<a list of 5 Patch objects>)
plt.hist(dados[:,0],bins=3,color=blue)
plt.hist(dados[:,0],bins=5,color=red,alpha=0.5)
plt.show()

10

Agora todas as caractersticas do primeiro histograma com o segundo so perceptveis ao


leitor e por estarem os dois includos no mesmo grfico torna-se muito fcil de comparar.
Reparem que nos grficos acima o Python automaticamente estabelece um espao em branco
para cada um dos lados do histograma e por vezes ns prprios queremos controlar onde
comea e acaba o limite da imagem. Podemos faz-lo assim:
In [16]: plt.hist(dados[:,0],bins=3,color='blue')
Out[16]:
(array([3, 3, 4]),
array([ 1.,
5.,
9., 13.]),
<a list of 3 Patch objects>)
In [17]: plt.hist(dados[:,0],bins=5,color='red',alpha=0.5)
Out[17]:
(array([3, 1, 2, 3, 1]),
array([ 1. ,
3.4,
5.8,
8.2, 10.6, 13. ]),
<a list of 5 Patch objects>)
In [18]: plt.xlim(1,13)
Out[18]: (4, 10)
In [19]: plt.ylim(0.5,4)
Out[19]: (1, 3)

plt.hist(dados[:,0],bins=3,color=blue)
plt.hist(dados[:,0],bins=5,color=red,alpha=0.5)
plt.xlim(1,13)
plt.ylim(0.5,4)
plt.show()

11

At agora no fizemos nada de muito impressionante mas j conseguimos fazer alteraes


pequenas aos nossos grficos. O resultado na folha de script o seguinte no meu exemplo
(repara que para correr o script preciso fazer run):

Isto ir fazer aparecer a janela do grfico por onde vocs podem salvar para imagem.

12

Uma coisa que me estava a esquecer de acrescentar legenda ao grfico. muito fcil, basta
acrescentar a label em cada instruo e depois meter o comando legend. Aqui est um cdigo
completo feito no script:

from __future__ import division


import numpy as np
import matplotlib.pyplot as plt

dados=np.loadtxt(r'C:\Pedro Correia\Dados\TESES E
TRABALHOS\DADOS\nome_do_vosso_ficheiro.txt')
plt.hist(dados[:,0],bins=3,color='blue',label='3 classes')
plt.hist(dados[:,0],bins=5,color='red',alpha=0.5, label='4 classes')
plt.legend()
plt.xlim(1,13)
plt.ylim(0.5,4.5)
plt.show()

13

RESUMO DOS HISTOGRAMAS


Cabealho inicial:
from __future__ import division
import numpy as np
import matplotlib.pyplot as plt

Importar dados:
dados=np.loadtxt(r'C:\Pedro Correia\Dados\TESES E TRABALHOS\DADOS\nome_do_vosso_ficheiro.txt')

Fazer o histograma primeira coluna especificando o nmero de classes (bins), cor (color) e
transparncia da cor (alpha) e nome (label):
plt.hist(dados[:,0],bins=5,color=red,alpha=0.5, label=5 classes)

Limitar a imagem dos grficos aos limites em X e Y:


plt.xlim(1,13)
plt.ylim(0.5,4)

Acrescentar legenda:
plt.legend()

Visualizar o grfico (na consola no preciso):


plt.show()

A ttulo de informao o parmetro alpha vai de 0 a 1, com zero sendo totalmente


transparente e 1 sendo totalmente opaco (sem transparncia). S utilizamos as cores azul
(blue) e vermelho (red) mas possvel meter qualquer cor l desde que indicando ou o nome
da cor ou o cdigo da cor. Algumas das cores possvel com nome so:
blue, red, green, yellow, orange, purple, violet, pink, black, grey,brown,sienna,etc.

14

GRFICOS DE LINHAS E PONTOS


Grficos de linhas e de pontos so feitos com o mesmo comando no matplotlib simplesmente
mudamos o estilo do marcador (linha, pontos, tringulos, estrelas, tracejado, o que tu
quiseres). Ento pegando nos dados que j usamos no captulo anterior fazemos (a partir de
agora mostrarei apenas o cdigo para a folha de script pois como j devers ter percebido a
nica diferena entre um e outro o facto de funcionarem por compilao ou em tempo real):
from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
dados=np.loadtxt(r'C:\Pedro Correia\Dados\TESES E
TRABALHOS\DADOS\nome_do_vosso_ficheiro.txt')
plt.plot(dados[:,0],dados[:,1],marker='-',color='orange',label='scatterplot')
plt.legend()
plt.show()

Repara que por ter metido no campo do marker o smbolo - (hfen) o grfico saiu com
linhas. Se tivesse metido outro smbolo com por exemplo o o (letra o) surgiriam bolas como o
marcador (repara nas duas alternativas e o que acontece com os resultados):
plt.plot(dados[:,0],dados[:,1],marker='o',color='orange',label='scatterplot')
plt.legend()
plt.show()
plt.plot(dados[:,0],dados[:,1],'o',color='orange',label='scatterplot')
plt.legend()
plt.show()

15

Um saiu com linhas e pontos e outro s com pontos. Podemos achar que o marcador dos
pontos demasiado pequeno e podemos muda-lo com o comando markersize:
plt.plot(dados[:,0],dados[:,1],marker='o',markersize=30,color='orange',label='scatterplot')
plt.legend()
plt.show()

Da mesma maneira que limitamos a janela nos grficos do captulo anterior tambm podemos
continuar a faz-lo com os comandos xlim e ylim. Como j devers ter reparado tambm a
legenda funciona da mesma maneira. Informao nova adicionar nomes aos eixos e ttulo ao
grfico.
plt.plot(dados[:,0],dados[:,1],marker='o',markersize=30,color='orange',label='scatterplot')
plt.xlabel('Data Set 1')
plt.ylabel('Data Set 2')
plt.title('Relacao entre Set 1 e Set 2')
plt.legend()
plt.show()

16

Claro que o tamanho das letras poder ser demasiado pequeno por defeito por isso para o
caso de o queres mudar basta indicares, com o comando fontsize, o tamanho que pretendes:
plt.plot(dados[:,0],dados[:,1],marker='o',markersize=30,color='orange',label='scatterplot')
plt.xlabel('Data Set 1', fontsize=30)
plt.ylabel('Data Set 2', fontsize=30)
plt.title('Relacao entre Set 1 e Set 2', fontsize=30)
plt.legend()
plt.show()

Da mesma maneira que podes mudar o tamanho podes tambm mudar uma srie de outros
parmetros como se queres o texto em bold, itlico, a fonte do texto, entre muitas outras

17

coisas. No exemplo a seguir mostro os comandos fontstyle (itlico ou no), fontweight


(texto em bold, muito ou pouco) e family (tipo de letra).
plt.plot(dados[:,0],dados[:,1],marker='o',markersize=30,color='orange',label='scatterplot')
plt.xlabel('Data Set 1',fontsize=30,fontstyle='italic',fontweight='light',family='monospace')
plt.ylabel('Data Set 2',fontsize=30,fontstyle='oblique',family='fantasy')
plt.title('Relacao entre Set 1 e Set 2',fontsize=40,fontstyle='normal',fontweight='bold')
plt.legend()
plt.show()

Existem muitos comandos para muitas coisas no matplotlib e nesta publicao no se


pretende passar por todos (nem pouco mais ou menos). No entanto, certamente, cada vez que
quiseres fazer qualquer coisa mais especfica podes ir procurar net que no demorars muito
a encontrar.

18

RESUMO DOS GRFICOS DE PONTOS E LINHAS


Para fazeres um grfico de linhas:
dados=np.loadtxt(r'C:\Pedro Correia\Dados\TESES E
TRABALHOS\DADOS\nome_do_vosso_ficheiro.txt')
plt.plot(dados[:,0],dados[:,1],marker='-',color='orange',label='scatterplot')
plt.legend()
plt.show()

Para fazeres um grfico de pontos:


plt.plot(dados[:,0],dados[:,1],marker='o',color='orange',label='scatterplot')

Outros tipos de marcadores que podem usar so (do todo o tipo de forma, uma questo de
experimentar:
o,-,--',^,>,<,v,*,+,.,p,s,h

Para mudar o tamanho do marcador:


plt.plot(dados[:,0],dados[:,1],marker='o',markersize=30,color='orange',label='scatterplot')

Para dar nomes aos eixos e ttulo:


plt.plot(dados[:,0],dados[:,1],marker='o',markersize=30,color='orange',label='scatterplot')
plt.xlabel('Data Set 1')
plt.ylabel('Data Set 2')
plt.title('Relacao entre Set 1 e Set 2')
plt.legend()
plt.show()

Para mudar tamanhos, estilos e tipos de fonte:


plt.plot(dados[:,0],dados[:,1],marker='o',markersize=30,color='orange',label='scatterplot')
plt.xlabel('Data Set 1',fontsize=30,fontstyle='italic',fontweight='light',family='monospace')
plt.ylabel('Data Set 2',fontsize=30,fontstyle='oblique',family='fantasy')
plt.title('Relacao entre Set 1 e Set 2',fontsize=40,fontstyle='normal',fontweight='bold')
plt.legend()
plt.show()

19

CONSIDERAES FINAS
Obviamente que para tirar total proveito do matplotlib preciso saber Python como deve ser.
Existe uma publicao disponvel no numist para isso em (est publicao tambm passa pela
matplotlib):
http://numist.ist.utl.pt/index.php?action=media;sa=item;in=15
De qualquer das maneiras para fazer grficos simples as instrues que vos dei nos captulos
anteriores servem perfeitamente. Se quiserem continuar a trabalhar no matplolib para alm
do que aprenderam aqui podem tirar ideias da galeria que eles tm no site deles:
http://matplotlib.sourceforge.net/gallery.html
Se carregarem nas imagens vo dar ao cdigo que deu origem aquela imagem. Alguns
exemplos do que se pode fazer esto nas imagens seguintes:

O software SciPlot (que nunca chegou a ser terminado) foi largamente baseado nesta
biblioteca para fazer os seus grficos e existe uma verso para download gratuito do mesmo
no numist no link:
http://numist.ist.utl.pt/index.php?action=media;sa=item;in=11
De resto espero que esta pequena sebenta sirva para melhorar em muito a publicao de
trabalhos e teses no mundo dos estudantes (e profissionais tambm) que h para ai.
Grande abrao,
Pedro Correia

20

También podría gustarte