107
1 azevedolab.net

Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

1 azevedolab.net

Page 2: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Máquina de escrever inventada pelo padre paraibano,

Francisco João de Azevedo.

Site da Revista Pesquisa Fapesp. Disponível em:<

http://revistapesquisa2.fapesp.br/?art=1406andbd=1andpg=1

andlg=>. Acesso em: 21 de novembro de 2016.

Antes de iniciarmos o curso, gostaria de

destacar que todo esforço foi realizado

para que o texto esteja em concordância

com as regras vigentes da nova

ortografia. Mas eu cometo erros de

digitação com frequência, por isso já peço

desculpas antecipadas. Outro ponto que

gostaria de destacar, as aulas em

PowerPoint têm como objetivo

disponibilizar o conteúdo completo da

disciplina em PDF (Portable Document

Format). Visto que os slides foram

preparados como material de estudo, eles

apresentam, na grande maioria, um texto

longo para o padrão de apresentações de

slides. Por isso, veja a apresentação

disponibilizada como material de estudo,

e não somente o slide da aula, onde

recomenda-se escrevermos pouco. O

texto está com fonte arial e tamanho 18.

2

Prefácio

www.python.org

Page 3: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Disponível em:

<

http://www.cs.princeton.edu/courses/archive/spr08/cos511/sc

ribe_notes/0204.pdf >

Acesso em: 21 de novembro de 2016.

Aprendizado de máquina é um conjunto de ferramentas estatísticas e algoritmos para

treinar um computador para realizar tarefas específicas.

Alguns exemplos:

Reconhecimento de escrita;

Reconhecimento facial;

Filtro de spam;

Interpretação de linguagem falada;

Diagnóstico médico;

Previsão de comportamento de consumidores;

Detecção de fraudes;

Análise de crédito;

Análise de seguros;

Previsão do tempo;

Previsão do efeito de fármacos e muitas outras...

3

O Que é Aprendizado de Máquina?

www.python.org

Page 4: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

O nosso curso é introdutório, por isso uma parte substancial será focada ao

aprendizado de uma linguagem de programação, especificamente: Python.

Como o foco é no Aprendizado de Máquina, uma vez dominado os recursos básicos

da linguagem Python, partiremos para os recursos do Python para Aprendizado de

Máquina, principalmente aqueles disponíveis na biblioteca scikit-learn.

4

O Que é Veremos?

www.python.org

Page 5: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Uma grande parte de cientistas da área

de inteligência artificial, acredita que

vivemos um momento especial da história

do desenvolvimento científico. Devido à

importância deste momento, destaco nos

meus modestos cursos alguns aspectos

relevantes do processo da singularidade

tecnológica. Uma das características

desta última é o aumento expressivo da

expectativa de vida. Se compararmos a

expectativa de vida hoje, com a de um

brasileiro do início do século XX, vemos

que mais que dobramos nossa

expectativa. No gráfico ao lado, vemos

que a expectativa de vida do brasileiro em

1910 era de 34 anos, e hoje está acima

de 70 anos. O aumento deve-se a

diversos fatores, tais como o

desenvolvimento no saneamento básico e

as conquistas científicas da medicina

moderna. 5

Ano

Expectativa de vida do Brasileiro entre 1910 e 2009. Fonte

dos dados: Informe da Previdência Social. Disponível em: <

http://www.previdencia.gov.br/arquivos/office/4_110525-

171625-908.pdf >.

Acesso em: 21 de novembro de 2016.

0

10

20

30

40

50

60

70

80

1900 1920 1940 1960 1980 2000 2020

Singularidade Tecnológica

Exp

ecta

tiva

de

vid

a

Page 6: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Dados para expectativa de vida, antes de

1910, indicam números ainda piores.

Segundo algumas fontes, a expectativa

de vida no Brasil em 1900 era inferior a 30

anos. Fonte: Laboratório de Demografia e

Estudo Populacionais. Disponível em: <

http://www.ufjf.br/ladem/2012/02/28/aume

nto-da-longevidade-e-estancamento-da-

esperanca-de-vida-artigo-de-jose-

eustaquio-diniz-alves/ >. Acesso em: 21

de novembro de 2016.

Um gráfico da evolução da expectativa de

vida ano a ano (2000-2012), mostra

aspectos curiosos do aumento. Vemos um

avanço considerável entre 2002 e 2004.

Este pulo na melhora da expectativa de

vida, é, também, uma consequência direta

de políticas públicas de redução da

pobreza.

6

Expectativa de vida do Brasileiro entre 2000 e 2012. Fonte

dos dados: Index Mundi. Disponível em:

< http://www.indexmundi.com/g/g.aspx?c=br&v=30&l=pt >.

Acesso em: 21 de novembro de 2016.

60

62

64

66

68

70

72

74

76

78

80

1998 2000 2002 2004 2006 2008 2010 2012 2014

Exp

ecta

tiva

de

vid

a

Ano

Singularidade Tecnológica

Page 7: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Olhando para o futuro, a expectativa de

vida traz grandes promessas. Um

geneticista da Cambridge University -

Reino Unido, prevê que a primeira pessoa

a viver mais de 1000 anos já está entre

nós (Site da BBC. Disponível em: <

http://news.bbc.co.uk/2/hi/uk_news/40030

63.stm >. Acesso em: 21 de novembro de

2016.

Isto mesmo, mil anos! Não é erro de

digitação. Eu sou cético com relação a

este número, mas acredito, baseado na

aceleração do desenvolvimento científico,

que ultrapassaremos o limite de 120 anos

nas próximas décadas.

7

Página de entrada do site da Strategies for Engineered

Negligible Senescence (SENS) Foundation.

Disponível em: < http://sens.org/>.

Acesso em: 21 de novembro de 2016.

Singularidade Tecnológica

Page 8: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

A evolução da ciência médica, nos deu

nas últimas décadas desenvolvimentos

como transplantes, vacinas, novos

fármacos etc. Além disso, temos a

expectativa da substituição de órgãos,

como o rim crescido artificialmente

mostrado ao lado (Song et al., 2013).

Baseado neste cenário, podemos ser

otimistas quanto à expectativa de vida do

ser humano. Esperamos que, nas

próximas décadas, teremos a

possibilidade de substituição de nossos

órgãos conforme envelhecemos. A

substituição do rim por um crescido

artificialmente tem uma perspectiva de ser

possível numa década. Outros órgãos

apresentam equivalente biomecânico,

como o coração.

8

Rim artificial testado em ratos.

Disponível em: < http://www.bbc.co.uk/news/science-

environment-22149844>.

Acesso em: 21 de novembro de 2016.

Referência:

Song JJ, Guyette JP, Gilpin SE, Gonzalez G, Vacanti JP, Ott

HC.

Regeneration and experimental orthotopic transplantation of

a bioengineered kidney. Nat Med. 2013 Apr 14. doi:

10.1038/nm.3154

Singularidade Tecnológica

Page 9: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Além do aumento expressivo do número

de anos vividos, a humanidade usufruirá

de facilidades tecnológicas, cada vez

mais baratas.

A evolução da medicina e da cibernética,

permitirá o desenvolvimento de um

equivalente computacional ao cérebro

humano. Como o desenvolvimento

concomitante da neurociência, espera-se

que tenhamos a capacidade tecnológica

de transferirmos o conjunto de nossas

sinapses para um cérebro eletrônico, ou

seja, a substituição do cérebro humano,

por um equivalente computacional. Nessa

fase a humanidade atingirá virtualmente a

imortalidade. A situação onde esta

transição ocorrerá, é chamada de

singularidade tecnológica. Visão artística da modelagem matemática do cérebro.

Disponível em: <http://www.kurzweilai.net/mind-uploading-

featured-in-academic-journal-for-first-time>.

Acesso em: 21 de novembro de 2016.

9

Singularidade Tecnológica

Page 10: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

O gráfico ao lado ilustra a lei de Moore,

que estabelece que aproximadamente

entre 18 e 24 meses o número de

transistores por chip dobra. Esta lei foi

proposta por Gordon Moore cofundador

da Intel. Ou seja, considerando-se os

processadores hoje, esperamos que em

aproximadamente entre 18 e 24 meses

teremos disponíveis, pelo mesmo preço,

computadores com o dobro da

capacidade de processamento. Uma

extrapolação da lei de Moore para 2030,

ou um pouco depois, indica que teremos

computadores com a complexidade do

cérebro humano.

Disponível em: <

http://www.kurzweilai.net/the-law-of-

accelerating-returns >. Acesso em: 21 de

novembro de 2016.

Evolução do número de transistores por chip em função do

ano.

Disponível em:

http://library.thinkquest.org/4116/Science/moore%27s.htm.

Acesso em: 21 de novembro de 2016.

10

Singularidade Tecnológica

Page 11: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

A pesquisa em singularidade tecnológica

é uma atividade multidisciplinar, cujo o

foco é o entendimento dos sistemas

biológicos e computacionais,

especificamente a interface do ser

humano com máquinas. A partir deste

conhecimento, teremos condições de

prolongar nossa expectativa de vida, até

termos condições tecnológicas de

transferirmos nossa consciência para um

sistema computacional, o que abre a

possibilidade da imortalidade, bem como

uma nova fase da evolução humana. Tal

fase da evolução permitirá a integração

das consciências computacionais, o que

abre um amplo espectro de

possibilidades. Tais tecnologias ainda não

existem, mas se consideramos a lei de

Moore, vemos que o rápido

desenvolvimento tecnológico nos levará

até este estágio.

Visão artística do cérebro digital.

Disponível em: < http://www.kurzweilai.net/critique-of-

against-naive-uploadism#!prettyPhoto>.

Acesso em: 21 de novembro de 2016.

11

Singularidade Tecnológica

Page 12: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Muitos autores destacam que, as

pesquisas mais importantes e

desafiadoras nos dias de hoje, estão

relacionadas com a singularidade

tecnológica. A biofísica pode contribuir

nesta área em duas frentes de atuação.

Uma frente para entendermos as bases

moleculares do funcionamento do

cérebro, que permitirá seu entendimento e

então sua modelagem computacional.

Noutra frente, ao vivermos mais (aumento

da expectativa de vida), nos tornamos

sujeitos a novas enfermidades, que

podem ser combatidas com abordagens

do desenho de fármacos baseado em

computadores.

12

Página de entrada do site Kurzweil Accelerating Intelligence.

Disponível em:<http://www.kurzweilai.net/ >.

Acesso em: 21 de novembro de 2016.

Singularidade Tecnológica

Page 13: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

13

Ao atingirmos a singularidade

tecnológica, abandonaremos as

limitações biológicas do nosso ser e

atingiremos um universo de novas

possibilidades que tal fase nos

trará.

Singularidade Tecnológica

Page 14: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Maiores informações sobre a singularidade tecnológica podem ser encontradas nos

artigos de Ray Kurzweil disponíveis on-line no site Kurzweil Accelerating Intelligence.

► Kurzweil responds: Don’t underestimate the Singularity. Disponível em: <

http://www.kurzweilai.net/kurzweil-responds-dont-underestimate-the-singularity>.

Acesso em: 21 de novembro de 2016.

► The new era of health and medicine as an information technology is broader

than individual genes. Disponível em: < http://www.kurzweilai.net/the-new-era-of-

health-and-medicine >. Acesso em: 21 de novembro de 2016.

► How my predictions are faring — an update by Ray Kurzweil. Disponível em: <

http://www.kurzweilai.net/how-my-predictions-are-faring-an-update-by-ray-kurzweil >.

Acesso em: 21 de novembro de 2016.

► The Law of Accelerating Returns. Disponível em: < http://www.kurzweilai.net/the-

law-of-accelerating-returns >. Acesso em: 21 de novembro de 2016.

14

Singularidade Tecnológica

Page 15: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Guido van Rossum concedeu uma entrevista em 2008 à

revista Linux Journal.

Disponível em:

< http://www.linuxjournal.com/magazine/interview-guido-van-

rossum >

Acesso em: 21 de novembro de 2016.

Python é uma linguagem de programação

que foi criada por Guido van Rossum em

1991, com o objetivo de ser uma

linguagem de alto de nível,

multiplataforma e de fácil aprendizagem.

Seu desenvolvimento criou uma legião de

fiéis seguidores, e o fato de ser livre,

permitiu que diversos programadores

participassem de seu desenvolvimento. A

linguagem Python tem sido usada nas

mais diversas áreas, do desenvolvimento

de jogos (pygames disponível em: <

http://www.pygame.org/wiki/about >,

acesso em Acesso em: 21 de novembro

de 2016.) a aplicações científicas (scipy

disponível em: < http://www.scipy.org/ >,

acesso em: 21 de novembro de 2016).

15

Introdução ao Python

www.python.org

Page 16: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

python

Uma parte importante, no aprendizado de qualquer linguagem de programação, é ter

condições de rodar os programas que você desenvolve no seu computador. Assim,

sua primeira tarefa é instalar o Python no seu computador. Há tutoriais descrevendo

passo-a-passo cada etapa da instalação em Windows. Para aqueles que trabalham

com Linux ou Mac OS X o interpretador Python já vem instalado. Basta abrir uma

janela de Terminal (Linux ou Mac OS X) ou o Prompt de Comando do Windows e

digitar os seguintes comandos e <Enter>.

Alguns comentários sobre as convenções usadas no presente curso. Toda vez que

você tiver uma parte do slide com o fundo azul, indica que você está no Terminal (Mac

OS X ou Linux) ou no Prompt de Comando (Windows). O fundo cinza é usado para

mostrar código fonte e algoritmos em pseudocódigos. Com exceção de quando

indicarmos a edição e execução do código no ambiente integrado de desenvolvimento,

descrito adiante. No texto, usamos itálico para nome de programas, por exemplo:

dark.py. Usamos itálicos para funções da linguagem Python, por exemplo: print() e

comandos a serem digitados no Terminal ou no Prompt de Comando. Os nomes das

variáveis também estão em itálico no texto.

16

Introdução ao Python

www.python.org

Page 17: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

>>> quit()

C:\Users\Walter>

Abaixo temos uma sessão o terminal, como o Prompt de Comando do Windows, para

verificarmos se o Python está instalado digitamos python seguido de <Enter>. Não

colocaremos a indicação do <Enter> de agora em diante, está subtendido que você

tem que pressionar a tecla <Enter> após a linha de comandos. O resultado de

digitarmos python é que o interpretador Python indicará a versão que está instalada,

como mostrado abaixo.

Estando instalado o interpretador Python, entraremos no modo de linha de comandos,

para sair basta digitar quit(), como mostrado abaixo.

17

Introdução ao Python

www.python.org

python

Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:55:48) [MSC v.1600 32 bit

(Intel)] on win32

Type "help", "copyright", "credits" or "license" for more information.

>>>

Page 18: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Se você obteve uma mensagem similar à mostrada no slide anterior, ótimo, o Python

está instalado e podemos começar a sair das trevas. Caso não esteja instalado, veja o

link: http://www.python.org/ . Escolha a versão para o seu sistema operacional, e siga

as instruções para instalação. Usaremos o python 3 no presente curso.

18

Introdução ao Python

www.python.org

Computador HAL 9000

Disponível em: < http://www.python.org/ >

Acesso em: 21 de novembro de 2016.

Page 19: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

19

Uma observação importante antes de continuarmos, se o seu computador tiver o

Python 2, você terá que fazer upgrade para o Python 3. O Python 3 é a versão mais

recente do Python e não é 100 % compatível com o Python 2.

Introdução ao Python

www.python.org

Page 20: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

20

Um programa de computador nada mais é que uma sequência de instruções, que

pode ser lida pelo computador. Esta sequência de instruções é o que o leva o

computador a realizar uma dada tarefa. Em Python podemos ter um programa bem

simples, que peça para que o computador mostre na tela uma sequência de DNA,

como segue:

A função print() gera na tela do computador a sequência de DNA, indicada abaixo.

Todo programa tem que estar num arquivo, o programa acima está no arquivo

showSeq.py. Para executá-lo, precisamos chamar o aplicativo Python, com o comando

python showSeq.py e depois <Enter>. No Windows, o comando é digitado na tela do

Prompt de Comando, para o Mac OS X e Linux no Terminal.

print("GATTACA")

python showSeq.py

GATTACA

Definição de Programa de Computador

www.python.org

Page 21: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

21

Uma linguagem de programação é um

conjunto cuidadosamente definido de

regras de como escrever um programa de

computador. As linguagens apresentam

um conjunto de instruções e de regras de

como essas instruções se relacionam.

Pensando-se especificamente em

linguagens de alto nível, as instruções (ou

comandos) tendem a ser em inglês (como

as instruções em Python mostradas ao

lado). O programa escrito é chamado

código fonte, ou simplesmente código

ou fonte. O computador não entende tal

linguagem diretamente. Assim, as

instruções contidas num código fonte

devem ser traduzidas para a linguagem

de máquina, que é dependente de cada

tipo de computador. Nos programas o

símbolo “#” é usado para comentários.

Tudo que estiver depois do símbolo #, e

na mesma linha, é ignorada pelo Python.

# Program hal.py

print ("Dave, I'm loosing my mind...")

As linguagens de alto nível, como o Python, não dependem

do computador, posso escrever o programa num

computador rodando Windows e executá-lo num

computador rodando Mac OSX

Computador HAL 9000

Disponível em:

<http://s374.photobucket.com/albums/oo184/jeanamann/?ac

tion=viewandcurrent=hal9000.jpgandnewest=1 >

Acesso em: 21 de novembro de 2016.

Linguagem de Programação

www.python.org

Page 22: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

22

O Python é uma linguagem de alto nível, o que significa que suas instruções são

próximas da linguagem humana, que não pode ser entendida diretamente pelo

computador. A linguagem de alto nível necessita ser traduzida. Na tradução, as

instruções em Python são convertidas para uma linguagem de máquina. A linguagem

de máquina é binária, ou seja, formada por “zero” e “um” e de difícil programação, por

isso temos as linguagens de alto nível. Na linguagem Python temos um interpretador

de Python, que está instalado no computador. Como vimos, para acioná-lo basta

digitarmos python e o nome do programa, por exemplo, se quezermos executar o

programa hal.py, devemos digitar o seguinte comando e pressionar <Enter>:

Teremos o mesmo resultado se digitarmos diretamente o nome do programa, como

mostrado abaixo para Windows. Em Linux e Mac OS X temos que digitar: ./hal.py .

O interpretador de Python é capaz de compilar e executar as linhas de instruções de

um programa em Python. O resultado da execução do programa hal.py é a mensagem

“Dave, I’m losing my mind...”.

python hal.py

Dave, I’m losing my mind...

./hal.py

Dave, I'm loosing my mind...

Linguagem de Programação

www.python.org

Page 23: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

23

Uma das áreas do conhecimento humano

onde a lei de Murphy aplica-se com

constância é a programação. “Se algo

pode dar errado dará !”. Adaptando para

o mundo da programação. “Se algo pode

ser digitado errado, será !”. Assim,

temos que ter cuidado especial ao

digitarmos as linhas de código de um

programa. Vamos usar um programa

simples, que mostra uma mensagem na

tela e introduzir um erro de digitação, e

veremos o que acontece. O programa

chama-se dark.py, o seu código fonte está

listado abaixo.

# Program to show a message on screen print ("You don't know the power of the dark side!\n")

Disponível em:

< http://favim.com/image/9492/>

Acesso em: 21 de novembro de 2016.

Ciclo de Programação: Editar-Rodar-Revisar

www.python.org

Page 24: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

24

Não digitamos o n de print. Salvamos o programa com o mesmo nome e acionamos o

interpretador Python. O resultado está mostrado na tela azul abaixo.

python dark.py

Traceback (most recent call last):

File "dark.py", line 2, in <module>

prit ("You don't know the power of the dark side!\n")

NameError: name 'prit' is not defined

Disponível em:

< http://favim.com/image/44067/ >

Acesso em: 21 de novembro de 2016.

Ciclo de Programação: Editar-Rodar-Revisar

www.python.org

Page 25: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

25

Caos! Um monte de mensagens. E isto só

porque esquecemos um inocente “n”. Se

a interpretação do código fosse feita por

um humano, tal erro de digitação seria

claro e corrigido. Não é o caso do

interpretador Python. O prit não é uma

instrução reconhecida pelo interpretador

Python, e ele faz questão de deixar isto

bem claro. Os erros de digitação e outros

serão indicados, criticados e o programa

não será executado. Não temos nossa

mensagem limpa na tela. A última

mensagem “NameError: name 'prit' is not

defined.”, resume o relatório de erros. A

execução do programa dark.py foi

abortada, pois “prit” não é uma instrução

reconhecida do Python. Erros que

impedem a execução do programa são

chamados de erro de sintaxe ou erro de

execução.

Disponível em:

< http://favim.com/image/40691/ >

Acesso em: 21 de novembro de 2016.

Ciclo de Programação: Editar-Rodar-Revisar

www.python.org

Page 26: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

26

Bem, você pode fazer todo curso assim,

usando um editor de texto e executando os

programas em Python via linha de

comandos. Para isso, digite as linhas de

código no editor de texto, salve o arquivo

com a extensão .py e depois abra o

Prompt de Comando e digite python e o

nome do programa para executá-lo.

A alternativa que usaremos no curso é

desenvolvermos os programas em um

ambiente integrado de desenvolvimento,

ou IDE (Integrated Development

Environment, em inglês). A nossa escolha

foi no uso do IEP. Um IDE que é instalado

quando instalamos o Python via pyzo.

Ambiente Integrado de Desenvolvimento

Página de entrada Pyzo.

Disponível em: < http://www.pyzo.org/ >.

Acesso em: 21 de novembro de 2016.

www.python.org

Page 27: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

27

Considerando que vocês já estão com o interpretador Python 3 instalado, o IEP,

vamos digitar um programa bem simples. É comum iniciarmos com o programa “Hello

World”, eu irei poupá-los disso. Se quiserem, podem escrever o programa “Hello

World”. Seu primeiro programa chama-se programa1.py, e tem a duas linhas de

código mostradas abaixo, coloque como argumento da função print() a mensagem que

você quiser, não use acentos.

Bem, já sabemos o que digitar. A questão é: como preparar o arquivo com o código

fonte? Uma forma é usarmos um editor de texto, digitarmos as linhas acima e

salvarmos o arquivo texto com extensão .py. Não é aconselhável usar o Word para a

edição. Podemos usar o WordPad do Windows para isso, desde que tenhamos o

cuidado de salvar como texto e com a extensão .py. Lembre-se, estamos

considerando o ambiente Windows. Para o Linux ou Mac OS X podemos usar o editor

vi ou outro disponível. Podemos ainda usar o ambiente integrado de desenvolvimento

integrado IDLE, que tem um editor de texto e roda os scripts em Python de forma

integrada. O IDLE não será usado no presente curso. Para seu código use o IEP, é

fácil e totalmente integrado. Depois de digitar seu código, salve o arquivo e rode o

programa no IEP, se tudo funcionar, parabéns, você já é um programador, com muito

para aprender, mas quem não tem?

#Diga sua mensagem em Python

print (“Sua mensagem \n")

Meu Primeiro Programa em Python

www.python.org

Page 28: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

28

Vamos olhar mais cuidadosamente a função print(). Podemos pensar que a função

print() é um miniprograma que executa uma tarefa específica, neste caso mostrar uma

mensagem na tela. A mensagem pode está entre aspas, como em print(“GATTACA”).

A função é chamada pelo programa e executa sua tarefa, assim no jargão dizemos

que a função print() foi chamada. O termo entre as aspas é chamado argumento,

dizemos que passamos o argumento “GATTACA” para a função print().

As funções em Python podem retornar ou fornecer informações de volta para a parte

do programa que chamou a função. Esses valores são chamados de valores de

retorno (return values).

Função print()

www.python.org

print (“GATTACA")

Função a ser chamada pelo programa

Argumento

Page 29: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

29

Ao chamarmos a função print(), esta mostra o argumento na tela e depois pula para a

próxima linha (newline), se chamarmos outra função print() em seguida, a mensagem

será mostrada na próxima linha, como no código multLines.py, mostrado abaixo.

Na primeira linha em vermelho, vemos o parâmetro end=“ “, que indica que a função

print() terá um espaço em branco “ “ no final da linha e não uma nova linha (newline). A

função print() mostrará no final o que estiver indicado no parâmetro end=“ “, podemos

colocar uma vírgula no final, como mostrado na quinta linha do código acima. O uso

do parâmetro end=“ “ força que ao chamarmos uma nova função print(), esta

começará na linha anterior.

Função print()

www.python.org

# Program to demonstrate print() function

print("First line.")

print("Second line.")

print("Third line with end parameter,",end=" ")

print(“we still in the third line",end=", ")

print(“finally at the end of third line.")

print("Forth line and end!")

Page 30: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

First line.

Second line.

Third line with end parameter, we still in the third line, finally at the end of

third line.

Forth line and end!

30

O resultado da execução do programa multLines.py está mostrado abaixo.

Função print()

www.python.org

Page 31: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

# Program to demonstrate the use of """ in Python.

# ASCCII art available at: http://www.network-science.de/ascii/

# Font: Star Wars, size 80.

print("""

.______ ____ ____ .___________. __ __ ______ .__ __.

| _ \ \ \ / / | || | | | / __ \ | \ | |

| |_) | \ \/ / `---| |----`| |__| | | | | | | \| |

| ___/ \_ _/ | | | __ | | | | | | . ` |

| | | | | | | | | | | `--' | | |\ |

| _| |__| |__| |__| |__| \______/ |__| \__|

"""

) 31

Podemos chamar a função print() para mostrar mensagens de texto mais complexas,

usando-se o recurso das aspas duplas repetidas três vezes. Este recurso permite que diversas linhas sejam mostradas entre a primeira aparição das """ e o fechamento

das aspas """. No programa asciiArtPython.py, usamos o recurso de arte com ASCII

(American Standard Code for Information Interchange), para colocarmos a palavra

PYTHON com o grafismo do Star Wars. Quem tiver interesse em arte com ASCII,

visite o site: http://www.network-science.de/ascii/.

Função print()

www.python.org

Page 32: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

32

O código fonte está no arquivo asciiArtPython.py, ao executarmos o código temos o

resultado abaixo.

Função print()

www.python.org

.______ ____ ____ .___________. __ __ ______ .__ __.

| _ \ \ \ / / | || | | | / __ \ | \ | |

| |_) | \ \/ / `---| |----`| |__| | | | | | | \| |

| ___/ \_ _/ | | | __ | | | | | | . ` |

| | | | | | | | | | | `--' | | |\ |

| _| |__| |__| |__| |__| \______/ |__| \__|

Page 33: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

33

Um recurso importante das linguagens de programação como Python e Perl são as

sequências de escape. Uma sequência de escape indica uma ação específica,

relacionada como a exibição de mensagens. Por exemplo, ao mostrarmos um

argumento com a função print(), podemos ter a necessidade de pular mais de uma

linha, para isto adicionamos a sequência de escape \n no argumento a ser passado

para função print(), como indicado abaixo.

A execução da segunda linha acima leva ao pulo de duas linhas, antes de ser

mostrada a mensagem da segunda função print(). A terceira linha é mostrada sem

uma nova linha. O resultado da execução do código acima está mostrado abaixo.

Sequência de Escape em Python

www.python.org

print(“First line.\n")

print("Second line.")

print("Third line.")

First line.

Second line.

Third line.

Page 34: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

34

A tabela abaixo traz as principais sequências de escape usadas em Python.

Sequência de Escape em Python

www.python.org

Sequência de escape Descrição da sequência de escape

\n Nova linha (newline)

\t Tabulação

\\ Inserção de uma barra \

\’ Inserção de aspa simples

\” Inserção de aspas duplas

\a Faz beep ao ser executado

\b Volta um espaço

Page 35: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

35

O programa escapeSeq.py ilustra as principais sequências de escape em Python.

O resultado da execução do código acima está mostrado abaixo.

Sequência de Escape em Python

www.python.org

# Program to demonstrate the main escape sequences in Python

print("Escape sequence for new line (\\n) => \n New line.")

print("Escape sequence for tab (\\t) =>\tWord1\tWord2\tWord3")

print('Escape sequence for double quotes (\\") => \" ')

print("Escape sequence for single quote (\\') => \' ")

print("Escape sequence for slash (\\\) => \\")

print("Escape sequence for backspace (\\b) => Word\bA")

print("Escape beep (\\a) \a")

Escape sequence for new line (\n) =>

New line.

Escape sequence for tab (\t) => Word1 Word2 Word3

Escape sequence for double quotes (\") => "

Escape sequence for single quote (\') => '

Escape sequence for slash (\\) => \

Escape sequence for backspace (\b) => WorA

Escape beep (\a)

Page 36: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

O que é um algoritmo?

Algoritmos são descrições passo a

passo de uma tarefa, passível de

implementação computacional. Por

exemplo, uma descrição passo a passo

de como resolver uma equação de

segundo grau é um algoritmo. Cada

programa de computador é a

implementação de um algoritmo ou vários

algoritmos. Quando você usa um

programa, nada mais está fazendo que

usando a implementação de algoritmos. O

presente curso está focado no

aprendizado de algoritmos e sua

implementação na linguagem de

programação Python. Os algoritmos serão

estudados com aplicações na área de

bioinformática, com exceção aos

primeiros algoritmos, que serão de

aplicações gerais.

Processo

(tarefas a

serem

executadas)

36

Entrada

de dados

Saída de

dados

Introdução aos Algoritmos

www.python.org

Page 37: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Colocando a definição de uma forma mais

simples ainda, podemos pensar no

algoritmo como uma receita de bolo, por

exemplo, a receita para prepararmos um

bolo de leite condensado sem farinha de

trigo.

Para o bolo temos os seguintes

ingredientes:

-1 lata de leite condensado;

-4 ovos pequenos (ou 3 grandes);

-1 medida de leite igual ao volume da lata

de leite condensado;

-100 g de coco ralado e

-uma colher de fermento.

Os ingredientes são as entradas do

algoritmo.

.

Ingredientes do nosso delicioso bolo de leite condensado

sem farinha de trigo

37

Introdução aos Algoritmos

www.python.org

Page 38: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

O processo do algoritmo é a receita, no

nosso bolo é a seguinte: coloque todos os

ingredientes num liquidificador e mexa

tudo (foto 1). Unte uma forma de bolo com

manteiga (foto 2). Coloque o conteúdo do

liquidificador na forma untada. Asse no

forno convencional a 260º por

aproximadamente 40 minutos (foto 3).

A saída é nosso bolo de leite condensado

(foto 4). Assim, na solução de muitos

problemas científicos e tecnológicos,

temos algoritmos.

Foto 1

Foto 2

Foto 3 Foto 4

38

Introdução aos Algoritmos

www.python.org

Page 39: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Acredito que o conceito de algoritmo

tenha ficado claro. Podemos então partir

para uma definição computacional,

extraída de um livro de algoritmos.

“Informalmente é qualquer procedimento

computacional bem definido que toma

algum valor ou conjunto de valores como

entrada e produz algum valor ou conjunto

de valores como saída. Também podemos

visualizar um algoritmo como uma

ferramenta para resolver um problema

computacional bem especificado. O

enunciado do problema especifica em

termos gerais o relacionamento entre a

entrada e a saída desejada. O algoritmo

descreve um procedimento computacional

específico para se alcançar esse

relacionamento da entrada com a saída.” 1

39

1Cormen, T.H, Leiserson, C.E., Rivest, R. L., Stein, C.

Algoritmos. Teoria e Prática. 2ª edição. Editora Campus Ltda.

Rio de Janeiro. p3.

O problema da Torre de Hanoi busca transferir todos os discos

da pilha da esquerda para alguma das pilhas da direita. No

processo de transferência, um disco maior não pode ficar

sobre um menor. Este é um problema bem especificado.

A imagem acima é uma implementação de algoritmo para

solução desse problema com o programa Mathematica.

TowersofHanoi-source.nb. Arquivo nb do Mathematica

Disponível em:

<http://demonstrations.wolfram.com/TowersOfHanoi/>

Acesso em: 21 de novembro de 2016.

Introdução aos Algoritmos

www.python.org

Page 40: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

A melhor forma de fixarmos um conceito é

aplicando-o a um problema prático já

conhecido. Vamos considerar um

algoritmo para a resolução da equação de

segundo grau, mostrada abaixo.

Para resolver a equação vamos usar a

fórmula de Bhaskara, que determina as

duas raízes possíveis da equação de

segundo grau (x1 e x2), como segue:

Onde = b2 – 4ac .

40

0 c bx ax2

a

Δ-b x

21

a

Δ-b x

22

Representação gráfica da função y = x2 – 3x + 2. As raízes

são os pontos onde a curva corta o eixo dos x, ou seja, 1 e

2.

Disponível em:

<http://educacao.uol.com.br/matematica/bhaskara.jhtm>

Acesso em: 21 de novembro de 2016.

Introdução aos Algoritmos

www.python.org

Page 41: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Para facilitar, nosso algoritmo considera

que a equação quadrática só terá raízes

reais, ou seja, que o 0.

Podemos usar o fluxograma geral de um

algoritmo, para nos ajudar na

implementação. Olhe o fluxograma ao

lado, imagine onde encaixar a resolução

da equação de segundo grau em cada

etapa ao lado.

Disponível em:

http://educacao.uol.com.br/matematica/bhaskara.jhtm

Acesso em: 21 de novembro de 2016.

41

Processo

(tarefas a

serem

executadas)

Entrada

de dados

Saída de

dados

Introdução aos Algoritmos

www.python.org

Page 42: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Entrada de dados. Começando com a

entrada de dados. Quais são as

entradas? Na resolução de uma equação

de segundo grau, precisamos dos

coeficientes a, b e c. Então nossos dados

de entrada são os coeficientes a, b e c. A

entrada dos coeficientes poderia ocorrer

por meio da leitura de um arquivo, onde

tais números estariam armazenados.

Outra possibilidade, a ser considerada, o

usuário do algoritmo fornecerá os

coeficientes via teclado. Assim, o

algoritmo tem que “perguntar” pelos

coeficientes. Ou seja, o algoritmo tem que

interagir com o usuário, de forma a obter

a informação (coeficientes a, b e c).

Vamos considerar que nosso algoritmo

lerá as informações do teclado de

computador.

42

Leitura dos

coeficientes a, b e

c.

Processo

(tarefas a

serem

executadas)

Entrada

de dados

Saída de

dados

Introdução aos Algoritmos

www.python.org

Page 43: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Processo. Nosso algoritmo leu os

coeficientes (a, b e c). Assim, esta

informação fica disponível para uso no

processo. Pensando em termos do

computador, tal evento seria o

armazenamento da informação na

memória. O processo é o cálculo da

equação de Bhaskara. Temos a equação

para duas raízes, que podemos chamar

x1 e x2. Antes de resolver a equação

temos que realizar um teste. Verificar se o

0, caso satisfaça a condição,

podemos calcular as raízes. Não

satisfazendo a condição, temos que

mostrar uma informação ao usuário, que

no nosso algoritmo só trata com raízes

reais. Tal situação ilustra a ideia de

aplicabilidade, nosso modesto algoritmo

pode ser usado para equações de

segundo grau, mas somente aquelas com

raízes reais. 43

Leitura dos

coeficientes a, b e

c.

Cálculo da

equação de

segundo grau.

Processo

(tarefas a

serem

executadas)

Entrada

de dados

Saída de

dados

Introdução aos Algoritmos

www.python.org

Page 44: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Saída de dados. Bem, calculamos as

raízes da equação, agora vamos mostrar

os resultados. As raízes da equação

poderiam ser gravadas num arquivo de

saída, para posterior análise, ou ainda

poderiam ser mostrados na tela, ou

ambos. Vamos optar pela última. Nosso

algoritmo mostra os resultados (raízes da

equação de segundo grau) na tela do

computador. Na verdade o resultado pode

ser uma mensagem dizendo que não há

raízes reais para a equação, quando o <

0.

44

Leitura dos

coeficientes a, b e

c.

Cálculo da

equação de

segundo grau.

Mostra na tela os

resultados

Processo

(tarefas a

serem

executadas)

Entrada

de dados

Saída de

dados

Introdução aos Algoritmos

www.python.org

Page 45: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Agora já temos uma visão geral do

funcionamento do nosso algoritmo para

resolução da equação de segundo grau.

Avançaremos para uma descrição mais

detalhada do algoritmo. Usando a

analogia com a receita de bolo, vamos

descrever com detalhes os ingredientes

da nossa receita (entrada de dados), bem

como o processo (como calcular a

equação). Há diversas formas de

detalharmos um algoritmo. Uma já vimos,

com o fluxograma, que é o diagrama

esquemático desenhado ao lado.

Poderíamos dividir o processo em outras

caixas, com detalhamento do cálculo e

eventuais decisões que temos que tomar

no desenvolvimento do cálculo.

45

Leitura dos

coeficientes a, b e

c.

Cálculo da

equação de

segundo grau.

Mostra na tela os

resultados

Processo

(tarefas a

serem

executadas)

Entrada

de dados

Saída de

dados

Introdução aos Algoritmos

www.python.org

Page 46: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Outra forma de detalharmos o nosso

algoritmo, é com o uso de

pseudocódigos. A ideia de pseudocódigo

é simples, usamos uma descrição escrita

das etapas a serem realizadas pelo

algoritmo. Uma abordagem possível do

pseudocódigo é deixá-lo o mais universal

possível, sem levar em consideração

características de implementação de uma

linguagem de programação. Tal

abordagem facilita a implementação do

algoritmo em qualquer linguagem de

programação de alto nível, como o

Python. Entenda que o pseudocódigo é

um recurso para facilitar a

programação, não é para ser

interpretado e executado como o

código fonte. O interpretador Python

não entende pseudocódigo, o

programador sim. 46

Leitura dos

coeficientes a, b e

c.

Cálculo da

equação de

segundo grau.

Mostra na tela os

resultados

Processo

(tarefas a

serem

executadas)

Entrada

de dados

Saída de

dados

Introdução aos Algoritmos

www.python.org

Page 47: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Colocaremos o pseudocódigo da equação de segundo grau e detalharemos cada

passo.

47

Início

Leia (a, b, c)

Calcule o = b2 -4ac

Se ( 0) então

Escreva: “As raízes da equação são”: x1, x2

Senão

Escreva: “Não há raízes reais”

Fim

2a

b- x1

2a

b- x2

Introdução aos Algoritmos

www.python.org

Page 48: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Na segunda linha os valores dos coeficientes da equação de segundo grau são lidos.

Na terceira linha temos o cálculo do valor de , que será posteriormente avaliado e

usado no cálculo das raízes da equação.

48

Início

Leia (a, b, c)

Calcule o = b2 -4ac

Se ( 0) então

Escreva: “As raízes da equação são”: x1, x2

Senão

Escreva: “Não há raízes reais”

Fim

2a

b- x1

2a

b- x2

Introdução aos Algoritmos

www.python.org

Page 49: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

2a

b- x2

2a

b- x1

Início

Leia (a, b, c)

Calcule o = b2 -4ac

Se ( 0) então

Escreva: “As raízes da equação são”: x1, x2

Senão

Escreva: “Não há raízes reais”

Fim

Na quarta linha temos o teste do , se o valor calculado for maior ou igual a zero, o

algoritmo realiza a tarefa indicada no quadro verde, caso contrário ( < 0), o algoritmo

faz o que está indicado do quadro vermelho. O quadro verde é o cálculo das duas

raízes reais (x1 e x2) da equação do segundo grau. O quadro vermelho exibe a

mensagem que não há raízes reais.

49

Introdução aos Algoritmos

www.python.org

Page 50: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Fluxograma. Vamos indicar ao lado os

quatro dos principais símbolos usados em

fluxogramas. O terminal é usado para

indicação do início ou do fim do algoritmo.

Tais indicadores facilitam a leitura do

algoritmo, deixando claro onde devemos

começar a execução e onde o algoritmo

acaba.

Outro símbolo é a caixa de processo,

indica algum procedimento do algoritmo,

como cálculos por exemplo.

O paralelogramo indica entrada e saída,

usado para leitura de dados e exibição

dos resultados na tela.

O losango é a caixa de decisão, se a

condição indicada no losango é satisfeita,

o algoritmo segue o caminho do “Sim”,

caso contrário o caminho do “Não”.

50

?

Sim

Não

Terminal (Início ou Fim)

Processo

Entrada/saída

Decisão

Introdução aos Algoritmos

www.python.org

Page 51: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

O fluxograma para o algoritmo de

resolução da equação de segundo

grau está mostrado ao lado. Os

quadros vermelho e verde não fazem

parte do fluxograma, estão colocados

somente para indicar o bloco que é

executado quando o 0 (verde) e

quando o não satisfaz a condição

(vermelho), ou seja, quando é menor

que zero.

O fluxograma é normalmente lido de

cima para baixo, com setas indicando

a sequência de execução do

fluxograma.

51

Início

Calcule o =

b2 -4ac

( 0)

?

Calcule x1

e x2

Fim

Leia (a,

b, c)

Escreva: “As

raízes da

equação são”:

x1, x2

Escreva:

“Não há

raízes reais”

Sim

Não

Introdução aos Algoritmos

www.python.org

Page 52: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

52

Uma parte importante do uso de uma linguagem de programação, está centrada na

manipulação de números. Os números em Python usam até 17 dígitos, como o

número 1.3333333333333333. Tais números são chamados de ponto flutuante de

precisão dupla, podemos pensar na representação dos números reais, sem

obviamente a abrangência do conjunto dos números reais. As limitações são o número

de dígitos (17), e os limites variam de entre os sistemas operacionais e hardwares. Por

exemplo, no Windows 8.1, o python 3.4.0 tem os seguintes limites de números de

ponto flutuante: 1e-323 e 1e308. O número 1.10308 é representado em Python pela

notação 1e308. Abaixo temos uma lista de valores numéricos possíveis em Python.

Número de Ponto Flutuante em Python

1

1.12e-9

3.14159265358979

-3.14159265358979

1.11E-9

1234567890

www.python.org

Page 53: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

53

Veremos vários trechos simples de programas em Python, que executam operações

aritméticas básicas. Depois implementaremos em Python a solução da equação de

segundo grau, usando o algoritmo que desenvolvemos nos slides anteriores. Muitas

dos processos em bioinformática envolvem cálculos. Em Python temos um conjuntos

de operadores para tais funções matemáticas. Usando nossa abordagem para o

aprendizado, veremos através de exemplos escritos em Python, como avançar e

desenvolver programas cada vez mais complexos. Inicialmente trabalharemos com

variáveis numéricas. Abaixo temos exemplos de variáveis.

Especificamente nas linhas de código acima, as variáveis x1 e x2 referem-se aos

valores “73” e 1.12e-9”. Tais valores serão somados e atribuídos à variável sum1. Uma

variável é uma forma de rotularmos e acessarmos informações, por exemplo a

informação da variável x1. A primeira linha de código acima cria a variável x1, esta

linha é chamada comando de atribuição (assignment statement).

x1 = 73

x2 = 1.12e-9

sum1 = x1 + x2

Variáveis em Python

www.python.org

Page 54: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

54

Tecnicamente, dizemos que um comando de atribuição armazena o valor do lado

direito do sinal de igual (=) na memória do computador, enquanto a variável do

lado esquerdo somente refere-se ao valor, e não o armazena diretamente. Assim

podemos dizer que a variável x1 obtém o valor 73, ao invés de dizermos que é

atribuído o valor 73 à variável. Muitos autores usam ambos os termos com o mesmo

sentido, por exemplo: DAWSON, Michael. Python Programming, for the absolute

beginner. 3ed. Boston: Course Technology, 2010, página 31.

x1 = 73

x2 = 1.12e-9

sum1 = x1 + x2

O número 73 é armazenado na memória do computador

A variável x1 refere-se ao valor (número 73)

Variáveis em Python

www.python.org

Page 55: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

55

Sobre as variáveis, quando escolhemos um nome para um dada variável, por

exemplo, x3, temos que seguir alguns critérios. Uma variável inicia com uma letra ou

underscore “_”, não usamos números para iniciar o nome da variável. Podemos usar

letras maiúsculas ou minúsculas, mas tenha em mente que o Python diferencia entre

elas, assim as variáveis X3 e x3 são duas variáveis distintas. Uma variável pode ser

alterada durante a execução do programa, conforme a necessidade. Só não muda

o seu endereço de memória. Segue uma lista de nomes de variáveis permitidas em

Python, para as quais valores foram atribuídos usando o operador atribuição ( = ).

x3 = 3.14

dark_side = 0.0

_So_it_is_a_variable = 1.0e-99

doce_de_jaca = 0.00008

my_variable_1 = 1.00001

_ = 2

Variáveis em Python

www.python.org

Page 56: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

56

Segue um código em Python, onde os valores das variáveis são mostrados na tela. O

nome do programa é testOfVariables.py .

x3 = -1.0

X3 = 3.14

dark_side = 0.0

_So_it_is_a_variable = 1.0e-99

doce_de_jaca = 0.00008

my_variable_1 = 1.00001

_ = 2

_123_ = 8.123e-5

_1_2_3_Variable = -1.4e-190

minimumFloatValue = 1e-323

maximumFloatValue = 1e308

bigInteger = 1234567890123456

print ("x3 = ",x3," and X3 = ", X3)

print ("\ndark_side = ", dark_side)

print ("\nSo_it_is_a_variable = ", _So_it_is_a_variable)

print ("\ndoce_de_jaca = ", doce_de_jaca)

print ("\nmy_variable_1 = ", my_variable_1)

print ("\n_ = ", _)

print ("\n_123_ = ", _123_)

print ("\n_1_2_3_Variable = ", _1_2_3_Variable)

print("\nminimumFloatValue = ",minimumFloatValue)

print("\nmaximumFloatValue = ",maximumFloatValue)

print("\nbigInteger = ", bigInteger)

Variáveis em Python

www.python.org

Page 57: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Examples of variables in Python.

x3 = -1.0 and X3 = 3.14

dark_side = 0.0

So_it_is_a_variable = 1e-99

doce_de_jaca = 8e-05

my_variable_1 = 1.00001

_ = 2

_123_ = 8.123e-05

_1_2_3_Variable = -1.4e-190

minimumFloatValue = 1e-323

maximumFloatValue = 1e+308

bigInteger = 1234567890123456 57

Abaixo temos o resultado de rodarmos o código testOfVariables.py .

Variáveis em Python

www.python.org

Page 58: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

x1 = 73 # Assigns value 73 to variable x1

print("x1 = ",x1) # Shows results on screen

x1 = 3.14159 # Assigns value 3.14159 to variable x1

print("x1 = ",x1) # Shows results on screen

58

Vimos até agora o uso de variáveis que já apresentavam um valor inicial. Destacamos

que podemos mudar os valores da variável ao longo do programa, por exemplo veja o

código abaixo, chamado changeValue.py.

Inicialmente atribuímos 73 à variável x1, mostramos o resultado na tela, com a função

print(). Depois atribuímos o valor 3.14159 à mesma variável x1 e mostramos o novo

resultado na tela. Ao executarmos o código acima, temos os resultados abaixo.

Veremos a seguir como inserir valores a uma variável durante a execução do

programa, ou seja, como um usuário do programa para atribuir valor a uma variável,

sem ter que editar o código fonte.

x1 = 73

x1 = 3.14159

Variáveis em Python

www.python.org

Page 59: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

59

A função input() do Python permite que seja atribuído um valor a uma variável pelo

usuário, durante a execução do código. Esta função permite que o usuário interaja

com o programa, e não simplesmente assista a sua execução. Abaixo temos uma

linha de código com as funções int() e input().

Na linha de código acima, a função input() tem como argumento a string “Enter a

number => “. Esta mensagem será mostrada na tela, como no caso da função print(),

a novidade aqui é que ao encontrar a função input(), o interpretador Python realiza

uma pausa na execução do restante do programa. O programa fica esperando que o

usuário digite algum valor via teclado e pressione <Enter>. Na linha de código acima,

ao entrar um valor, este é convertido de string para um número inteiro, devido à

função int(). O valor lido e convertido para inteiro é atribuído à variável x1. Usamos a

função int() para garantir que o número lido seja inteiro, se deixássemos sem a função

int() a entrada seria considerada uma string. Outra possibilidade é usarmos a função

float(), que converte a entrada para um número de ponto de flutuante, a linha de

comando para a leitura de um número de ponto flutuante está mostrada abaixo.

Função input()

www.python.org

x1 = int(input(“Enter a number =>”))

x1 = float(input(“Enter a number =>”))

Page 60: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

60

A linguagem Python tem os operadores matemáticos básicos. Para ilustrar seu uso,

discutiremos um programa que realiza a leitura de dois números e aplica o operador a

eles. Assim temos que definir os nomes das variáveis, que serão x1 e x2, o resultado

do operador matemático será atribuído à variável result. Poderíamos escrever o

algoritmo antes e depois implementar em Python, mas a aplicação direta dos

operadores é tão simples, que não vale o esforço de escrevermos o algoritmo. Vamos

direto ao Python! O quadro abaixo ilustra a linha de comando com a aplicação do

operador soma (+) às variáveis x1 e x2. O operador atribuição (=) atribui o resultado

da operação realizada à direita (x1 + x2), à variável indicada à esquerda (result).

Para a entrada dos valores das variáveis x1 e x2, usaremos a função input() do

Python. Por exemplo, para a leitura da variável x1 do tipo de ponto flutuante, usamos:

x1 = float(input(“Enter a number => "))

A função input() mostra a mensagem na tela (argumento da função), depois espera

que seja digitado um valor via teclado. O valor digitado será convertido para ponto

flutuante e atribuído à variável, indicada no lado esquerdo do operador atribuição.

Operadores Matemáticos em Python

www.python.org

result = x1 + x2

Page 61: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

61

Abaixo temos uma tabela com os principais operadores matemáticos disponíveis em

Python.

O operador = é chamado operado atribuição, ou seja, atribui o resultado da direita à

variável da esquerda.

Temos os operadores acima implementados no código mathOp1.py.

Operadores Matemáticos em Python

www.python.org

Operador matemático Descrição Exemplo

+ Soma result = x1 + x2

- Subtração result = x1 - x2

* Multiplicação result = x1 * x2

/ Divisão result = x1 / x2

% Módulo (resto inteiro da divisão) result = x1 % x2

// Divisão inteira (parte inteira da

divisão, sem arredondamento)

result = x1 // x2

** Potenciação result = x1 ** x2

Page 62: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

62

Código fonte do programa mathOp1.py

# Program to demonstrate basic mathematical operators in Python.

x1 = float(input("Enter a number => ")) # Reads value for variable x1

x2 = float(input("Enter a number => ")) # Reads value for variable x2

result = x1 + x2 # Applies sum (+) operator

print("Sum = ",result) # Shows result on screen

result = x1 - x2 # Applies subtraction (-) operator

print("Subtraction = ",result) # Shows result on screen

result = x1*x2 # Applies multiplication (*) operator

print("Multiplication = ",result) # Shows result on screen

result = x1/x2 # Applies division (/) operator

print("Division = ",result) # Shows result on screen

result = x1%x2 # Applies modulus (%) operator

print("Modulus = ",result) # Shows result on screen

result = x1//x2 # Applies floor division (//) operator

print("Floor Division = ",result) # Shows result on screen

result = x1**x2 # Applies exponentiation (+) operator

print("Exponentiation = ",result) # Shows result on screen

Operadores Matemáticos em Python

www.python.org

Page 63: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Enter a number => 7

Enter a number => 0

Sum = 7.0

Subtraction = 7.0

Multiplication = 0.0

Traceback (most recent call last):

File "C:\Users\Walter\workspace\Bioinfo_Aula1\mathOp.py", line 10, in <module>

result = x1/x2 # Applies division (/)

operator

ZeroDivisionError: float division by zero

Enter a number => 7

Enter a number => 3

Sum = 10.0

Subtraction = 4.0

Multiplication = 21.0

Division = 2.3333333333333335

Modulus = 1.0

Floor Division = 2.0

Exponentiation = 343.0

63

Se entrarmos 7 para a variável x1 e 3 para a variável x2, temos os resultados abaixo:

O programa funcionou sem erros, mas se introduzirmos o segundo número como zero,

veja o resultado.

Operadores Matemáticos em Python

www.python.org

Page 64: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

64

O erro ocorreu pois entramos um valor não válido para divisão, e para os operadores

relacionados (módulo e divisão inteira). Não podemos dividir por zero, assim seria

interessante testarmos se o divisor (x2) é zero e emitir uma mensagem de erro.

Quando apresentamos os símbolos mais usados para montagem de fluxogramas,

vimos a caixa de decisão, o condicional “if”, mostrado abaixo.

O condicional “if” testa uma situação, e se for verdadeira executa um trecho do código,

caso contrário executa outra parte do código. É uma forma de rompermos a sequência

natural de execução das linhas de comandos presentes num programa, que seguem

de cima para baixo, como vimos nos programas anteriores. A presença da estrutura

de controle “if”, muda a sequência natural de execução. Em Python usamos a

construção indicada no quadro cinza acima. Quando a condição for verdadeira,

executamos o trecho em verde, caso não seja executamos o trecho em vermelho.

Operadores Matemáticos em Python

www.python.org

?

Sim

Não

Decisão if(condição verdadeira):

......

else:

....

Page 65: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

65

Quando usamos o condicional if para números, temos os seguintes operadores

relacionais.

O novo código chama-se mathOp2.py.

Operador Significado Exemplo de teste condicional Resultado do teste

condicional

!= Não é igual a 7 != 3 True (verdadeiro)

== É igual a 7 == 7 True (verdadeiro)

> Maior que 7 > 3 True (verdadeiro)

< Menor que 3 < 7 True (verdadeiro)

>= Maior ou igual a 7 >= 8 False (falso)

<= Menor ou igual a 8 <= 7 False (falso)

Operadores Matemáticos em Python

www.python.org

Page 66: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

66

Código fonte do programa mathOp2.py

# Program to demonstrate basic mathematical operators in Python.

# In addition, we test if divisor is zero.

x1 = float(input("Enter a number => ")) # Reads value for variable x1

x2 = float(input("Enter a number => ")) # Reads value for variable x2

result = x1 + x2 # Applies sum (+) operator

print("Sum = ",result) # Shows result on screen

result = x1 - x2 # Applies subtraction (-) operator

print("Subtraction = ",result) # Shows result on screen

result = x1*x2 # Applies multiplication (*) operator

print("Multiplication = ",result) # Shows result on screen

if x2 != 0: # Tests if x2 is different from zero

result = x1/x2 # Applies division (/) operator

print("Division = ",result) # Shows result on screen

result = x1%x2 # Applies modulus (%) operator

print("Modulus = ",result) # Shows result on screen

result = x1//x2 # Applies floor division (//) operator

print("Floor Division = ",result) # Shows result on screen

else:

print("Error! Divisor should be different from zero!") # Shows error message

result = x1**x2 # Applies exponentiation (+) operator

print("Exponentiation = ",result) # Shows result on screen

Operadores Matemáticos em Python

www.python.org

Page 67: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Enter a number => 7

Enter a number => 0

Sum = 7.0

Subtraction = 7.0

Multiplication = 0.0

Error! Divisor should be different from zero!

Exponentiation = 1.0

Enter a number => 7

Enter a number => 3

Sum = 10.0

Subtraction = 4.0

Multiplication = 21.0

Division = 2.3333333333333335

Modulus = 1.0

Floor Division = 2.0

Exponentiation = 343.0

67

Se entrarmos 7 e 3, temos os resultados esperados:

Entrando 7 e 0, temos os seguintes resultados.

Operadores Matemáticos em Python

www.python.org

Page 68: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

# Program to demonstrate the method math.sqrt() from math module in Python

import math # Imports module math

x1 = float(input("Enter a number => ")) # Reads x1

if x1 >= 0: # Tests if x1 is greater or equal to zero

result = math.sqrt(x1) # Calculates square root

print("Square root = ",result) # Shows result on screen

else:

print("Error! Entry should be >=0 .") # Shows error message

68

Método raiz quadrada ( math.sqrt() ). Para raiz quadrada, só precisaremos de uma

variável, x1. Aplicaremos o método math.sqrt() ao valor atribuído à x1, tal inserção

pode causar problemas, visto que a raiz quadrada não gera resultados em números

complexos. Para evitar números complexos, testamos se o valor atribuído à variável

x1 é maior ou igual a zero, satisfazendo à condição, calculamos a raiz, caso contrário,

mostramos uma mensagem de erro. O método math.sqrt() faz parte do módulo math,

que tem que ser importado antes da chamada do método. O módulo math é importado

com o comando: import math , como mostrado no abaixo. Alternativamente, podemos

usar o operador potenciação (**0.5) para a raiz quadrada, o que permite resultados

complexos.

Código fonte do programa squareRoot.py

Operadores Matemáticos em Python

www.python.org

Page 69: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Enter a number => -1

Error! Entry should be >=0 .

69

Vamos testar para um número maior que zero (exemplo 1), para zero (exemplo 2) e

para um número negativo (exemplo 3).

Enter a number => 73

Square root = 8.54400374531753

Enter a number => 0

Square root = 0.0

Exemplo 1

Exemplo 2

Exemplo 3

Operadores Matemáticos em Python

www.python.org

Page 70: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

# Program to demonstrate how to calculate log using the method math.log() from

# math module.

import math # Imports math module

x1 = float(input("Enter a number => ")) # Reads x1

if x1 > 0: # Tests if x1 >= 0

result = math.log(x1) # Calculates log(x)

print("Log = ", result) # Shows result on screen

else:

print("Error! Number should be >= 0") # Shows error message

70

O logaritmo na base e ( e = 2,718281828459045...) é definido pelo método math.log().

O “e” é chamado de número de Euler. O quadro abaixo ilustra a programa para uso do

método math.log. Este método, e muitos outros, estão definidos no módulo math. A

função log é definida para números maiores que zero, tal condição será considerada

com o teste da variável x1. Números maiores que zero tem seu log calculado, os

outros geram uma mensagem de erro. Maiores informações sobre o método math.log

disponíveis em: < http://www.tutorialspoint.com/python/number_log.htm >. Acesso em:

21 de novembro de 2016.

Código fonte do programa log.py

Operadores Matemáticos em Python

www.python.org

Page 71: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Enter a number => 0

Error! Number should be >= 0

71

Função interna logaritmo natural (log()). Realizaremos 3 testes, no primeiro

calculamos o logaritmo natural de e = 2.718281828459045..., no segundo teste

calculamos o log de 1 e, por último, o log de 0.

Enter a number => 2.718281828459045

Log = 1.0

Enter a number => 1

Log = 0.0

Exemplo 1

Exemplo 2

Exemplo 3

Operadores Matemáticos em Python

www.python.org

Page 72: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

# Program to demonstrate how to calculate log10 using the method

# math.log10() from math module.

import math # Imports math module

x1 = float(input("Enter a number => ")) # Reads x1

if x1 > 0: # Tests if x1 >= 0

result = math.log10(x1) # Calculates log(x)

print("Log10 = ", result) # Shows result on screen

else:

print("Error! Number should be >= 0") # Shows error message

72

O módulo math tem um método para o logaritmo na base 10, math.log10(). O

funcionamento é análogo ao método do logaritmo natural, a implementação segue a

mesma lógica de programação, como mostrado no código abaixo.

Código fonte do programa log10.py

Operadores Matemáticos em Python

www.python.org

Page 73: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Enter a number => 0

Error! Number should be >= 0

73

Enter a number => 100

Log10 = 2.0

Enter a number => 1

Log10 = 0.0

Exemplo 1

Exemplo 2

Exemplo 3

Logaritmo. Calcularemos o log na base 10 de 100 (exemplo 1), de 1 (exemplo 2) e de

0 (exemplo 3).

Operadores Matemáticos em Python

www.python.org

Page 74: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

74

Notação científica. Podemos entrar dados na forma de notação científica, usando o

seguinte formato:

a,bc . 10d = a.bced

Vamos considerar a entrada de dados em notação científica do número 7,3.10-3 em

Python fica da seguinte forma:

7.3e-3 (exemplo abaixo)

Aplicaremos a notação científica no programa de logaritmo na base 10.

Enter a number => 7e-3

Log10 = -2.154901959985743

Operadores Matemáticos em Python

www.python.org

Page 75: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

75

Outros métodos. Como outras linguagens de alto nível, o Python tem um arsenal de

métodos matemáticos pré-definidos. O quadro abaixo traz uma lista desses métodos

disponíveis no módulo math.

Método no módulo math Descrição

math.atan2(y, x) Calcula o arco-tangente em radianos do valor de y/x. O valor

calculado está no intervalo de –Pi a +Pi.

math.cos(x) Calcula o cosseno de x em radianos.

math.sin(x) Calcula o seno de x em radianos.

math.tan(x) Calcula a tangente de x em radianos.

math.exp(x) Calcula e elevado à potência de x.

math.pow(x,y) Calcula x elevado a y.

math.fabs(x) Calcula o valor absoluto de x.

math.degrees(x) Converte o ângulo x de radianos para graus.

math.radians(x) Converte o ângulo x de graus para radianos.

Disponível em: < http://docs.python.org/2/library/math.html >

Acesso em: 21 de novembro de 2016.

Operadores Matemáticos em Python

www.python.org

Page 76: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

# Program to solve quadratic equation u

import math # Imports math module

a = float(input("Enter coefficient a => ")) # Reads a

b = float(input("Enter coefficient b => ")) # Reads b

c = float(input("Enter coefficient c => ")) # Reads c

delta = b**2 - 4*a*c # Calculates delta

if delta>=0 : # Checks whether delta >= 0

x1 = (-b + math.sqrt(delta))/(2*a)#Calculates x1

x2 = (-b - math.sqrt(delta))/(2*a)#Calculates x2

print("The roots are: ", x1," ",x2)#Shows results

else:

print("There are no real roots!") # Shows message

76

Podemos agora implementar em Python o algoritmo para solução da equação de

segundo grau. À esquerda temos o pseudocódigo e à direita a implementação em

Python. Usamos um código de cores, para mostrar a equivalência entre o

pseudocódigo e o código em Python.

2a

b- x2

2a

b- x1

Início

Chama módulo math

Leia (a, b, c)

Calcule o = b2 -4ac

Se ( 0) então

Escreva: “As raízes da equação são”: x1, x2

Senão

Escreva: “Não há raízes reais”

Fim

Código fonte do programa bhaskara.py

Implementação de Equações em Python

www.python.org

Page 77: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

77

O “Fim” do pseudocódigo não precisa ser implementado em Python.

Vamos testar nosso código com dois exemplos. No primeiro temos raízes reais (x2 +

10 x + 21 = 0) (exemplo 1). No segundo exemplo calculamos as raízes da equação (x2

+ x + 1 = 0 ) (exemplo 2), que não tem raízes reais.

Enter coefficient a => 1

Enter coefficient b => 10

Enter coefficient c => 21

The roots are: -3.0 -7.0

Enter coefficient a => 1

Enter coefficient b => 1

Enter coefficient c => 1

There are no real roots!

Exemplo 1

Exemplo 2

Implementação de Equações em Python

www.python.org

Page 78: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

É muito comum na implementação de equações em Python, necessitarmos do valor

de Pi. Em Python podemos chamar a constante Pi a partir do módulo math, como

segue: math.pi .

Depois de importado o módulo math, podemos chamar o valor de Pi somente fazendo

menção a ele, como mostrado abaixo para o cálculo da área.

area = math.pi*raio**2

78

Implementação de Equações em Python

www.python.org

Page 79: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

79

Vamos usar um programa simples para aplicarmos a chamada do valor de Pi.

Veremos um programa que calcula a área e o volume de uma esfera (sphere1.py), a

partir da entrada do valor do raio. As equações da área e volume estão indicadas

abaixo.

raio

3raio3

4 volume

2raio4 area

Implementação de Equações em Python

www.python.org

Page 80: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

80

O pseudocódigo para o cálculo da área e do volume da esfera está mostrado abaixo.

Testamos se o raio é maior ou igual a zero, para calcularmos a área e o volume, caso

não seja, mostramos uma mensagem de erro. Recomenda-se que os pseudocódigos

sejam apresentados de uma forma independente da linguagem de programação, no

qual serão posteriormente implementados. Contudo, percebi que muitos alunos usam

o pseudocódigo para implementar o código em Python. Assim, sempre que possível,

deixarei as variáveis de agora em diante no padrão da linguagem Python, o que

permite que os alunos copiem a linha com boa parte das equações diretamente do

pseudocódigo, com exceção para as equações mais longas. No código abaixo,

podemos copiar as linhas em vermelho, para implementar as equações em Python. O

“Fim” do pseudocódigo não precisa ser implementado em Python.

Início

Chama módulo math

Leia (raio)

Se (raio >0) então

area = 4*math.pi*raio**2

volume = (4/3)*math.pi*raio**3

Escreva: "A area da esfera = ", area

Escreva: "O volume da esfera = ", volume

Senão

Escreva: "Erro! Raio tem que maior que zero!"

Fim

Implementação de Equações em Python

www.python.org

Page 81: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

# Program to calculate the area and the volume of a sphere using radius value.

# Author: Walter F. de Azevedo Jr.

# Date: March 15th 2015.

import math # Imports math module

raio = float(input("Enter radius => ")) # Reads radius

if raio>=0: # Tests if radius >= 0

area= 4*math.pi*raio**2 # Calculates area

volume = (4/3)*math.pi*raio**3 # Calculates volume

print("\nArea of sphere = ", area) # Shows area

print("\nVolume of sphere = ", volume) # Shows volume

else:

print("\nError! Radius should be >= 0!") # Shows error message

81

O código sphere1.py está mostrado abaixo. As primeiras linhas são comentários,

usados para informar o que o programa faz, bem como autor, data e outras

informações relevantes. Não indicaremos mais este tipo de informação nos programas

seguintes, por uma questão de espaço. Veja que usamos a sequência de escape \n no

início da string, ou seja, será pulada uma linha, antes de mostrar a mensagem na tela.

Analise com atenção cada linha de código, verificando se entendeu o que cada linha

realiza. Lembre-se, a execução do programa segue de cima para baixo, com exceção

do condicional if, que testa se o valor atribuído à variável raio é maior ou igual a zero.

Implementação de Equações em Python

www.python.org

Page 82: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Enter radius => -1

Error! Radius should be >= 0! 82

Usaremos o programa sphere1.py para o cálculo da área e do volume para 3

situações. Inicialmente para raio igual 1 (exemplo 1), no segundo exemplo para raio

igual 10,77 (exemplo 2) (não esqueça de usar ponto decimal para a entrada de

dados), no último usamos um raio negativo, -1 (exemplo 3).

Enter radius => 1

Area of sphere = 12.566370614359172

Volume of sphere = 4.1887902047863905

Enter radius => 10.77

Area of sphere = 1457.6097700343018

Volume of sphere = 5232.819074423143

Exemplo 1

Exemplo 2

Exemplo 3

Implementação de Equações em Python

www.python.org

Page 83: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

83

Modificaremos o código visando à sua otimização, ou seja, melhorar o código para

que este realize sua tarefa de forma mais precisa ou com um número menor de

operações matemáticas. Foi sugerido por Steeb e o colaboradores (STEEB, Willi-

Hans; HARDY, Yorick;HARDY, Alexandre; STOOP, Ruedi. Problems and Solutions

in Scientific Computing with C++ and Java Simulations. Singapora: World

Scientific Publishing Co.Pte. Ltd., 2004. p2. ) que o cálculo do volume seja realizado

com as seguintes equações:

O cálculo do volume usa a informação já calculada da área, se considerarmos

simplesmente o número de operações, a versão anterior tem quatro operações, a

nova versão tem duas, o que reduz o tempo e execução. Isso se não levarmos em

conta que a potenciação ao cubo tem uma complexidade maior que a multiplicação

simples da versão otimizada, então a vantagem da segunda versão é ainda maior.

Nem tente perceber a diferença de tempo de execução do programa atual. Com um

código tão simples não será possível, mas imagine um programa onde o cálculo da

esfera será repedido um milhão de vezes, o uso da segunda versão será mais

eficiente. Como exercício, implemente o código sphere2.py, que usa as equações

acima para o cálculo do volume. O resumo do programa está no próximo slide.

raio/3*area volume 2raio4 area

Implementação de Equações em Python

www.python.org

Page 84: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Resumo

O programa sphere2.py calcula a área e o volume de uma esfera, a partir do

raio. O cálculo da área é dado pela equação: area = 4*math.pi*raio**2. O volume

é calculado a partir da área, com a seguinte equação: volume = area*raio/3. Tal

equação do volume reduz o número de operações de cálculo, como destacado

em: STEEB, Willi-Hans; HARDY, Yorick;HARDY, Alexandre; STOOP, Ruedi.

Problems and Solutions in Scientific Computing with C++ and Java

Simulations. Singapora: World Scientific Publishing Co.Pte. Ltd., 2004. p2. O

programa usa o valor de Pi do módulo math.

Cálculo da área e do volume da esfera (versão 2)

Programa: sphere2.py

84

Programa: sphere2.py

www.python.org

Page 85: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

85

Após a implementação do código em Python, teste o programa sphere2.py para os

valores indicados na tabela abaixo, para confirmar se o seu código está funcionando

de forma correta. Quando você consegue executar um código sem erros, mas o

programa não gera os dados esperados, dizemos que temos um erro de lógica, que

são os mais difíceis de consertar, pois podem indicar um erro do algoritmo usado para

resolver o problema. Assim, sempre que possível, temos que testar os programas para

valores conhecidos.

Raio Área Volume

1 12.566370614359172 4.1887902047863905

0.001 1.2566370614359172e-05 4.188790204786391e-09

10.77 1457.6097700343018 5232.819074423143

0 0.0 0.0

-1.0 Erro! Raio tem que maior que zero!

Programa: sphere2.py

www.python.org

Page 86: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Um dos algoritmos mais usados em

Aprendizado de Máquina é baseado na

simulação do funcionamento de redes de

neurônios, chamado de redes neurais.

Por isso precisamos de um entendimento

básico do funcionamento da transmissão

sináptica.

O cérebro humano é considerado por

muitos como o mais capaz entre os

animais do planeta Terra. Considerando-

se que, um maior número de neurônios

significa maior poder cognitivo, espera-se

que o cérebro humano seja o campeão

entre os animais em número de

neurônios. Na verdade, apesar de muitos

livros textos estabelecerem o número

redondo de 100 bilhões de neurônios no

cérebro (1011 ) ( Williams & Herrup, 1988),

tal número ainda é motivo de grande

debate. Fonte: Williams RW, Herrup K. The control of

neuron number. Annu Rev Neurosci. 1988;11:423-53.

Imagem de CAT scan do cérebro.

Disponível em : <

http://netanimations.net/Moving_Animated_Heart_Beating_L

ungs_Breathing_Organ_Animations.htm#.UXKY4rXvuSp >.

Acesso em: 21 de novembro de 2016. 86

Cérebro Humano

Page 87: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Se considerarmos que o cérebro humano

é formado por aproximadamente 1011

neurônios, sendo que cada uma dessas

células pode formar até 10.000 conexões,

temos que o cérebro humano pode

apresentar até 1014 sinapses. Tomamos

um valor médio de 103 sinapses por

neurônio. Um estudo sobre o assunto

(Azevedo et al., 2009), estimou o número

em 86,1 ± 8,1 bilhões de neurônios (

8,61.1010) num adulto do sexo masculino.

Revisões posteriores, sobre o número de

neurônios no cérebro humano, ficam entre

75 e 124 bilhões (Lent, 2012), assim, o

número de 100 bilhões, é um valor médio

das estimativas.

Fonte: Azevedo FA, Carvalho LR, Grinberg LT, Farfel JM,

Ferretti RE, Leite RE, Jacob Filho W, Lent R, Herculano-Houzel

S. Equal numbers of neuronal and nonneuronal cells make the

human brain an isometrically scaled-up primate brain

J Comp Neurol. 2009;513(5):532-41.

Concepção artística do cérebro humano.

Disponível em : < http://www.whydomath.org/ >

Acesso em: 21 de novembro de 2016.

87

Cérebro Humano

Page 88: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

A complexidade dos pensamentos e do

tráfego de sinais no organismo humano

são resultados da interação entre

neurônios conectados. O impressionante

número de conexões entre os neurônios

cria um sistema altamente complexo

envolvendo 1014 sinapses. Os resultados

da ação desse sistema vemos a cada

segundo de nossas vidas, pensando,

criando e aprendendo... As interações,

que geram padrões complexos, são

resultados das sinapses entre as células.

Resumindo, tudo que pensamos e

lembramos é resultado das interações

dessa rede complexa de sinapses. Iremos

ver as principais características das

sinapses.

Segundo alguns autores, o cérebro humano tem

aproximadamente 1014 sinapses, uns apresentam um

número menor...

Fonte da imagem:

http://images.fanpop.com/images/image_uploads/Homer-

Brain-X-Ray-the-simpsons-60337_1024_768.jpg

Acesso em: 21 de novembro de 2016.

88

Cérebro Humano

Page 89: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

As sinapses são junções estruturalmente especializadas, em que uma célula pode

influenciar uma outra célula diretamente por meio do envio de sinal químico ou

elétrico. A forma mais comum de sinapse é a sinapse química. Na sinapse temos a

participação das células pré-sináptica e pós-sináptica.

Célula pré-sináptica: É a célula que envia o sinal nervoso.

Célula pós-sináptica: É a célula que recebe o sinal da célula pré-sináptica.

Neurotransmissor

Ca+2

Receptor

Canal de Ca+2

Vesícula

Membrana pós-sináptica

Membrana pré-sináptica

Fenda sináptica

89

Sinapses

Page 90: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Na sinapse química, a comunicação entre a célula pré-sináptica e pós-sináptica dá-se

por meio de neurotransmissores, que passam da célula pré-sináptica, ligando-se a

receptores específicos na célula pós-sináptica. Os neurotransmissores ficam

armazenados em vesículas e, uma vez que um potencial de ação chega ao terminal

axonal, esses são liberados na fenda sináptica. Os neurotransmissores ligam-se a

uma classe especial de proteínas transmembranares, chamadas receptores.

Neurotransmissor

Ca+2

Receptor

Canal de Ca+2

Vesícula

Membrana pós-sináptica

Membrana pré-sináptica

Fenda sináptica

90

Sinapse Química

Page 91: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Fon

te: P

urv

es e

t a

l.,

Vid

a. A

ciê

ncia

da

Bio

logia

. 6

a. E

d.

Art

me

d e

dito

ra, 2

00

2 (

pg

. 7

87

).

91

Sinapse Química

Page 92: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Resumo

O programa nernst1.py calcula o potencial de membrana a partir dos valores das

concentrações extracelular e intracelular de um íon monovalente positivo.

Consideramos a temperatura em 20,0 oC (293,15 K). As concentrações estão em

mM e a resposta está em Volts. O programa usa os valores das constantes

como pré-definidas, com os seguintes valores: eCharge= 1.60276565e-19 C,

AvogadroConstant= 6.02214129e23(1/mol) e gasConst=8.3144621 J mol-1 K-1.

As constantes foram obtidas no site: The NIST reference on constants, Units,

and Uncertainty. Disponível em: <

http://physics.nist.gov/cuu/Constants/index.html >. Acesso em: 21 de novembro

de 2016.

Cálculo do potencial de membrana a partir da

equação de Nernst (versão 1)

Programa: nernst1.py

92

Programa: nernst1.py

www.python.org

Page 93: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Descreveremos o potencial de membrana

na situação de repouso. Usaremos a

equação de Nernst como exemplo e

implementaremos duas versões em

Python da solução do problema. Os

interessados em maiores informações

sobre o potencial de membrana podem

acessar as minhas modestas aulas de

Biofísica.

Ao lado temos a representação

computacional do modelo da bicamada

fosfolipídica. A parte central é formada

pelas caudas hidrofóbicas dos

fosfolipídios. As partes superior e inferior

indicam as partes polares, que participam

dos contatos com os meios extra e

intracelulares.

93

Modelo computacional da bicamada fosfolipídica da

membrana celular.

Figura gerada com o programa Visual Molecular

Dynamics (VMD) as coordenadas atômicas para a

bicamada fosfolipídica foram obtidas do site:

http://people.ucalgary.ca/~tieleman/download.html .

Acesso em: 21 de novembro de 2016.

Programa: nernst1.py

www.python.org

Page 94: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Se inserirmos eletrodos num neurônio em repouso, teremos a medida de um potencial

negativo. Tal potencial é o resultado líquido da ação conjunta das proteínas, bomba de

Na+/K+ e do canal de K+ . O potencial de repouso é da ordem de algumas dezenas de

milivolts negativos. A ação contínua da bomba de Na+/K+, leva a um acúmulo de íons

de Na+, no meio extracelular, e um acúmulo de íons de K+ no meio intracelular. Tal

situação ocorre com o gasto de energia, obtida da molécula de ATP. Concomitante à

ação da bomba de Na+/K+, há um canal de K+, que fica aberto, permitindo a saída do

excesso de íons de K+. O resultado é uma tensão negativa do meio intracelular, com

relação ao meio extracelular. Tal tensão é chamada de potencial de repouso, pois não

é necessário a aplicação de estímulo na célula para que ocorra. A equação de Nernst

é uma tentativa de modelarmos o potencial de repouso.

Amplificador

-70mV

Potencial de repouso

94

Neurônio

Programa: nernst1.py

www.python.org

Page 95: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Diferença de potencial através da membrana

Concentração

do íon dentro da célula

Concentração

do íon fora da célula Constante universal dos gases

Temperatura absoluta

Valência do Íon

Carga elétrica do elétron

Número de Avogadro

A equação de Nernst prevê o potencial de membrana, inclusive na situação de repouso

(potencial de repouso), levando-se em consideração a concentração iônica. Abaixo

temos uma descrição detalhada de cada termo da equação de Nernst.

95

intracel

extraceli

Íon

Íon

zeA

RT E ln

Programa: nernst1.py

www.python.org

Page 96: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Diferença de potencial através da membrana

Concentração

do íon monovalente

dentro da célula

Concentração

do íon monovalente

fora da célula

Constante universal dos gases

Carga elétrica do elétron

Número de Avogadro

Vamos considerar a temperatura em 20,0o C e a valência do íon +1. Como entradas

temos as concentrações iônicas, a equação fica da seguinte forma:

96

intracel

extraceli

Íon

Íon

eA

.R, E ln

15293

Programa: nernst1.py

www.python.org

Page 97: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

O potencial de membrana (Ei) é nossa variável dependente, ela será do tipo real (tipo

float da linguagem Python). As variáveis independentes são as concentrações

extracelular ([Íon]extracel ) e intracelular ([Íon]intracel ), que também são do tipo float.

Resta atribuirmos nomes às variáveis. Recomenda-se o uso de nomes de variáveis

que lembrem a grandeza sendo representada. Assim usaremos,

potE = potencial de membrana (Ei)

intraConc = concentração intracelular

extraConc = concentração extracelular

Como já destacamos, as variáveis do tipo float em Python apresentam até 17 dígitos

significativos, e são usadas em operações de ponto flutuante.

97

Programa: nernst1.py

www.python.org

Page 98: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

As constantes são as seguintes:

A equação de Nernst fica da seguinte forma:

Ou em Python:

potE = (293.15*gasConst/(eCharge*AvogadroConst))*( math.log(extraConc/intraConc) )

98

Carga do elétron (e): eCharge= 1.60276565e-19 C

Constante de Avogadro (A): AvogadroConst= 6.02214129e23 (1/mol)

Constante Universal dos gases (R): gasConst= 8.3144621 J mol-1 K-1

concIntra

concExtra

Conste*AvogadroeCh

s*constGase. potE log

arg

15293

Programa: nernst1.py

www.python.org

Page 99: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

99

Abaixo temos o pseudocódigo para o cálculo da equação de Nernst. Veja que

colocamos dois condicionais. Tal procedimento visa evitar a entrada de concentrações

menores ou iguais a zero, o que levaria a uma indeterminação, pois o log não é

definido para esses valores. Implemente em Python e teste para os valores no

próximo slide. A equação do potencial pode ser passada diretamente para a

implementação em Python. O “Fim” do pseudocódigo não precisa ser implementado

em Python.

Início

Chama módulo math

Definição das constantes (eCharge, AvogadroConst, gasConst)

Leia (intraConc, extraConc)

Se intraConc >0 and extraConc > 0 então

potE = (293.15*gasConst/(eCharge*AvogadroConst))*( math.log(extraConc/intraConc) )

Escreva: “Potencial de membrana: ”, potE, “ V”

Senão

Escreva: “As concentrações devem ser maiores que zero!”

Fim

Programa: nernst1.py

www.python.org

Page 100: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

100

Teste o programa nernst1.py para os valores indicados na tabela abaixo.

Concentração

intracelular (mM)

Concentração

extracelular (mM)

Potencial de membrana

(V)

100 10 -0.05814585734031759

10 100 0.0581458573403176

100 100 0.0

200 55 -0.03260048119992571

150 73 -0.018186186705047153

0 73 As concentrações devem

ser maiores que zero!

73 0 As concentrações devem

ser maiores que zero!

0 0 As concentrações devem

ser maiores que zero!

Programa: nernst1.py

www.python.org

Page 101: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

Resumo

O programa nernst2.py calcula o potencial, usando como entradas as concentrações

extracelular e intracelular de um dado íon, a valência do íon e a temperatura em Celsius. A

temperatura em Celsius é transformada em Kelvin, somando-se 273,15 ao valor em

Celsius. As concentrações estão em mM e a resposta está em mVolts. A equação de

Nernst implementada não usa constantes pré-definidas. Antes da implementação,

calculamos a relação entre elas e chegamos a uma equação de Nernst da seguinte forma:

potE = (8.61734248621241e-2*tempKelvin/valIon)*(math.log(extraConc/intraConc)). A

constante multiplicativa foi obtida a partir dos valores da carga do elétron, constante molar

do gases e constante de Avogadro. As constantes foram obtidas no site: The NIST

reference on constants, Units, and Uncertainty. Disponível em: <

http://physics.nist.gov/cuu/Constants/index.html >. Acesso em: 21 de novembro de 2016.

Cálculo do potencial de membrana a partir da

equação de Nernst (versão 2)

Programa: nernst2.py

101

Programa: nernst2.py

www.python.org

Page 102: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

102

Podemos aperfeiçoar nosso programa, usando a equação de Nernst onde temos

como entradas a temperatura (T), a valência do íon (z), além das concentrações

iônicas. Deixando as variáveis independentes indicadas acima, a equação de Nernst

fica da seguinte forma,

Assim não temos que usar as constantes, que geraram multiplicações e divisões a

mais.

intracel

extracel

-iÍon

Íon

/mol .,C..,z.

T J/(mol.K), E ln

1100221415610602176531

31447282319

intracel

extraceli

Íon

Íon

.z

.T, E ln

10

21241861734248604

intracel

extracel

-

iÍon

Íon

z

.T., E ln

10124161734248628 5

Programa: nernst2.py

www.python.org

Page 103: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

103

A equação anterior fornece o potencial de membrana em Volts, se quisermos deixar a

unidade em mV temos que multiplicar por 103, e a equação de Nernst fica da seguinte

forma:

Definido as novas variáveis independentes:

tempCelsius: temperatura em Celsius

tempKelvin: temperatura em Kelvin

valIon: a valência do íon

A equação fica da seguinte forma:

racel

extracel

-

iÍon

Íon

z

.T., E

int

2

ln10124161734248628

concIntra

concExtra

valIon

in)*tempKelve-.( potE log

2124161734248628

Programa: nernst2.py

www.python.org

Page 104: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

import sys #Chama modulo sys

#Leitura da temperatura em Celsius

tempCelsius = float(input("Digite a temperatura em Celsius: "))

if tempCelsius < -273.15: #Testa se a temperatura em Celsius e' menor que -273.13

sys.exit("A temperatura tem que ser maior ou igual a -273.15! Programa encerrado!") #Encerra programa

#Leitura da valencia do ion

valIon = float(input("Digite a valencia do ion: "))

if valIon == 0 : #Testa a valencia do ion

sys.exit("A valencia do ion tem que diferente de zero! Programa encerrado!") #Encerra programa

104

O pseudocódigo mostra que temos que parar o programa, quando a valência do íon

(valIon) for zero e, quando a temperatura em Celsius (tempCelsius) for menor que

273.15. Tais procedimentos precisam do recurso sys.exit(), que mostra uma

mensagem entre os parênteses e encerra o programa. Para usarmos tal recurso,

precisamos chamar o módulo sys. Para chamá-lo usamos o import, desta forma:

import sys . Abaixo temos um trecho de código em Python, onde lemos as variáveis

tempCelsius e valIon e realizamos os testes indicados acima, satisfazendo aos

critérios, encerramos o programa.

Programa: nernst2.py

www.python.org

Page 105: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

105

Abaixo temos o pseudocódigo para a nova equação de Nernst. Implemente em Python

e teste para os valores indicados no próximo slide.

Início

Chama módulo math

Chama módulo sys

Leia (intraConc, extraConc, tempCelsius, valIon)

Se tempCelsius < -273.15

Escreva: “A temperatura tem que ser maior ou igual a -273.15! Programa encerrado!”

Fim

Se valIon == 0

Escreva: “A valência do íon tem que diferente de zero! Programa encerrado!”

Fim

Se intraConc >0 and extraConc > 0 então

tempKelvin = tempCelsius + 273.15

potE = (8.61734248621241e-2*tempKelvin/valIon)*(math.log(extraConc/intraConc) )

Escreva: “Potencial de membrana = ”, potE, “ mV”

Senão

Escreva: “As concentrações devem ser maiores que zero!”

Fim

Programa: nernst2.py

www.python.org

Page 106: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

106

Abaixo temos uma tabela com os valores esperados para o programa nernst2.py.

Confira se seu código funciona da forma esperada.

Concentração

intracelular (mM)

Concentração

extracelular (mM)

Temperatura (C) Valência do

íon

Potencial de membrana (mV)

100 10 37 1 -61.540472731453484

10 100 37 1 61.5404727314535

10 100 37 -1 -61.5404727314535

100 10 20 1 -58.1673047919574

177 73 36 1 -23.59524487065909

0 73 36 1 As concentrações devem ser

maiores que zero!

177 0 36 1 As concentrações devem ser

maiores que zero!

100 10 -273.16 1 A temperatura tem que ser

maior ou igual a -273.15!

Programa encerrado!

100 10 37 0 A valência do íon tem que

diferente de zero! Programa

encerrado!

Programa: nernst2.py

www.python.org

Page 107: Aprendizado de Máquina. Uma Introdução com a Linguagem Python · brasileiro do início do século XX, vemos que mais que dobramos nossa expectativa. No gráfico ao lado, vemos

ALBERTS, B. et al. Biologia Molecular da Célula. 4a edição. Porto Alegre: Artmed editora, Porto Alegre, 2004.

-BRESSERT, Eli. SciPy and NumPy. Sebastopol: O’Reilly Media, Inc., 2013. 56 p.

-DAWSON, Michael. Python Programming, for the absolute beginner. 3ed. Boston: Course Technology, 2010. 455 p.

-HAL, Tim, STACEY, J-P. Python 3 for Absolute Beginners. Springer-Verlag New York, 2009. 295 p.

-HETLAND, Magnus Lie. Python Algorithms. Mastering Basic Algorithms in the Python Language. Nova York: Springer

Science+Business Media LLC, 2010. 316 p.

-IDRIS, Ivan. NumPy 1.5. An action-packed guide dor the easy-to-use, high performance, Python based free open source

NumPy mathematical library using real-world examples. Beginner’s Guide. Birmingham: Packt Publishing Ltd., 2011. 212 p.

-KIUSALAAS, Jaan. Numerical Methods in Engineering with Python. 2ed. Nova York: Cambridge University Press, 2010. 422

p.

-LANDAU, Rubin H. A First Course in Scientific Computing: Symbolic, Graphic, and Numeric Modeling Using Maple, Java,

Mathematica, and Fortran90. Princeton: Princeton University Press, 2005. 481p.

-LANDAU, Rubin H., PÁEZ, Manuel José, BORDEIANU, Cristian C. A Survey of Computational Physics. Introductory

Computational Physics. Princeton: Princeton University Press, 2008. 658 p.

-LUTZ, Mark. Programming Python. 4ed. Sebastopol: O’Reilly Media, Inc., 2010. 1584 p.

-TOSI, Sandro. Matplotlib for Python Developers. Birmingham: Packt Publishing Ltd., 2009. 293 p.

Última atualização: 21 de novembro 2016.

107

Referências

www.python.org