domingo, 31 de maio de 2020

Como você executa um loop while no Python?

Como você executa um loop while no Python?

O que é um "loop while"?

Um loop while consiste em uma condição e, até que essa condição seja verdadeira, um conjunto de instruções é executado repetidamente.
Um loop while é a única construção de repetição necessária. O loop for, pode ser duplicado usando um loop while e com mais controle.

A sintaxe é a seguinte:

Exemplo

Aqui está uma olhada no código do loop while:

Exemplo
x = 4
y = 0
while (y <= 10 ): # o loop while vai ser executado enquanto y for menor ou igual a 10
  y += x
  x += 1

# o loop vai iterar 3 vezes
print("O valor de x é: ", x)
print("O valor de y é: ", y)

Explicação

No código acima, o loop while é executado enquanto a condição y <= 10 estiver sendo atendida. As instruções nas linhas 4 e 5 são executadas se a expressão entre parênteses for avaliada como verdadeira. br Quando a expressão é avaliada como falsa, o programa sai do loop e imprime os valores finais de x e y. Abaixo está uma ilustração do código acima para ajudar a ilustrar a lógica.

Fonte: How do you execute a 'while loop' in Python?
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

Como try/except é usado em Python?

Como try/except é usado em Python?

Manipulação de exceção

Uma exceção é um erro que ocorre enquanto o programa está executando. Quando esse erro ocorre, o programa é interrompido e gera uma exceção, que é manipulada para impedir que o programa trave.

try/except

As exceções geradas por um programa são capturadas no bloco try e tratadas no bloco except.

  • Try: Permite testar um bloco de código quanto a erros.
  • Except: permite lidar com o erro.

Exemplos

Vamos dar uma olhada em um exemplo simples de try/excption.

Exemplo
try:
  print(x)
except:
  print("Um erro ocorreu")

Como x não está definido em nenhum lugar do código, ocorrerá uma exceção; portanto, o bloco de exceção executará e exibirá a mensagem.
Você pode definir quantos blocos de exceção desejar para erros diferentes, como mostrado abaixo.

Exemplo
try:
  print(x)
except ValueError: #você receberá esse erro se houver um problema com o conteúdo do objeto ao qual você tentou atribuir o valor
  print("Dados não numéricos encontrados")
except NameError: #você receberá esse erro se o programa encontrar um nome que não reconheça
  print("A variável x não foi definida")
except:
  print("Algum erro aconteceu")

Você também pode usar a palavra-chave else para definir o código que deve ser executado se nenhum erro for gerado.

Exemplo
try:
  print("Hello World")
except ValueError:
  print("Dados não numéricos encontrados")
except NameError:
  print("A variável x não foi definida")
except:
  print("Algum erro aconteceu")
else:
  print("Nada de errado aconteceu")

Fonte: How is try/except used in Python?
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

O que são tuplas em Python?

O que são tuplas em Python?

O que é tupla?

Uma tupla é uma lista imutável de objetos Python, o que significa que não pode ser alterada de forma alguma depois de criada. Ao contrário dos sets, as tuplas são uma coleção ordenada.

Criando uma tupla

Agora vamos dar uma olhada no exemplo de uma tupla.

Exemplo
tupleExmp = ("alpha","bravo","charlie")
print(tupleExmp)

Depois que uma tupla é criada, os itens não podem ser adicionados ou removidos e seus valores não podem ser alterados. Alterar a tupla acima gera um erro.

Exemplo
tupleExmp = ("alpha","bravo","charlie")
tupleExmp[0] = "100" # um erro será lançado

Acessando itens de tupla

Os índices de tupla são baseados em zero, como em uma lista; portanto, o primeiro elemento de uma tupla não vazia é sempre a tupla[0].
Os índices selecionados são contados a partir do final da tupla, assim como as lista.

Exemplo
tupleExmp = ("alpha","bravo","charlie")
print(tupleExmp[1]) # mostra o segundo elemento
print(tupleExmp[-1]) # mostra o último elemento

Você também pode percorrer os valores da tupla usando um loop for.

Exemplo
tupleExmp = ("alpha","bravo","charlie")
for item in tupleExmp:
  print(item)

Comprimento de uma tupla

O comprimento de uma tupla pode ser encontrado usando a função len().

Exemplo
tupleExmp = ("alpha","bravo","charlie")
print(len(tupleExmp))

Fonte: What are tuples in Python?
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

O que são sets em Python?

O que são sets em Python?

O que é um set?

Um set é um monte não ordenado e não indexado de valores únicos.
Um único set pode conter valores de qualquer tipo de dados imutável, o que significa que os valores não podem ser alterados. Um conjunto em si é um objeto mutável, ou seja, um objeto que pode ser alterado após ser criado, mas não os seus elementos.

Criando um conjunto

Vamos aprender como criar um conjunto.

Exemplo
a_set = {'alpha', 'bravo', 'charlie'}
print(a_set)

#Um set também pode ser criado usando a função built-in set()
#set() recebe uma lista de elementos e converte num set

my_set = set([1, 2, 3, 4, 5])
print(my_set)

Acessando itens

Os sets não são indexados, portanto, você não pode acessar itens em um conjunto consultando um índice. O que você pode fazer é percorrer o conjunto para obter um valor específico.

Exemplo
a_set = {'alpha', 'bravo', 'charlie'}
for item in a_set:
  print(item)

Nota: Os set não são ordenados, portanto os itens aparecerão em uma ordem aleatória.

Métodos

O Python possui um conjunto de métodos internos que você pode usar em sets. Alguns deles estão especificados abaixo:

  • Adicionar itens: depois que um conjunto é criado, você não pode alterá-los, mas pode adicionar novos itens. Para adicionar um item a um conjunto, use o método add() e para adicionar mais de um item a um conjunto, use o método update().
  • Remover itens: para remover um item de um conjunto, use o método remove(). Você também pode usar o método discard() para remover.
Exemplo
a_set = {'alpha', 'bravo', 'charlie'}
print("Adicionando valor ao set")
a_set.add('jenny')
print(a_set)
a_set.update(['matty', 'johny'])
print("Adicionando valores ao set com update")
print(a_set)
print("Removendo valores do set")
a_set.remove('matty') #se o valor não existir um erro será lançado
print(a_set)
print("Retirando valores do set")
a_set.discard('johny') #se o valor não existir nenhum erro será lançado
print(a_set)
  • Comprimento do set: o método len() pode ser usado para determinar a contagem de itens em um conjunto.
  • Limpar conjunto: o método clear() esvazia o conjunto.
Exemplo
a_set = {'alpha', 'bravo', 'charlie'}
print("O número de itens é: ", (len(a_set)))
a_set.clear()
print("set esvaziado")
print(a_set)

Fonte: What are sets in Python?
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

O que são arrays em Python?

O que são arrays em Python?

Arrays são uma coleção de itens semelhantes. No Python, a maioria das pessoas usa listas em vez de arrays. Um usuário pode tratar listas como arrays, mas não pode restringir o tipo de dados de valores armazenados em uma lista. Somente o mesmo tipo de dados pode ser armazenado em arrays. Uma representação pictórica de arrays é mostrada abaixo:

  • O comprimento dessa matriz é 5.
  • O tipo de dados dos valores armazenados nessa matriz é inteiro.

Definindo matrizes em Python

Para criar matrizes em Python, precisamos importar o módulo de matriz para criar matrizes. Um exemplo disso mostrado abaixo:

Exemplo
import array as arr # importa o módulo array
a = arr.array('i', [1, 3, 5, 2, 4]) # define uma array do tipo inteiro com 5 elementos

'i' é o código do tipo para o tipo de dados dos valores da matriz. Nesse caso, o tipo de matriz é int.

Acessando valores de matriz

Os valores das matrizes são acessados usando os índices da matriz:

Exemplo
nomeArray[index]
  • O índice de matrizes em Python começa em 0.

Por exemplo:

Suponha que desejamos acessar o valor no terceiro índice da matriz. A ilustração e o trecho de código abaixo mostram como isso é feito.

Exemplo
import array as arr
a = arr.array('i',[1, 3, 5, 2, 4])
print("O valor no index 3 é: ")
print(a[3])

Fonte: What are arrays in Python?
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

sábado, 30 de maio de 2020

Códigos de tipos em Python

Códigos de tipos em Python

As arrays em python se comportam muito semelhantes às listas, mas elas têm o mesmo tipo de dados armazenados nela. O tipo de dados é especificado no momento da criação da matriz, usando um único caractere chamado código de tipo.
Abaixo está a tabela para códigos de tipo, usados para definir matrizes em python, e seu tipo de dados correspondente em C++.

Código de tipo Tipo C++ Tipo Python Tamanho mínimo em bytes
'c' char Carácter 1
'b' signed char int 1
'B' unsigned char int 1
'u' Py_UNICODE Carácter unicode 2
'h' signed short int 2
'H' unsigned short int 2
'i' signed int int 2
'I' unsigned int long 2
'l' signed long int 4
'L' unsigned long long 4
'f' float float 4
'd' double float 8

Abaixo está um exemplo de uma matriz, do tipo char em C ++ e caractere em python.

C++
#include <iostream>
using namespace std;

int main() {
  char a[5] = {'a','e','i','o','u'}; // define uma array do tipo char para 5 elementos

  for (int i = 0; i < 5; i++){
    cout << a[i] << " "; // mostra na tela
  }

}
Python
import array as arr # importando o módulo array

a = arr.array('c',['a','e','i','o','u']) # cria uma array
print(a) # mostra na tela

Fonte: Type codes in Python
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

Python vs. Java

Python vs. Java

Java

Java é uma linguagem orientada a objetos com uma sintaxe semelhante à do C/C ++, tornando-o familiar para muitos programadores. Ela é vinculada dinamicamente, permitindo que o novo código seja baixado e executado, mas não é dinamicamente tipada.

Python

Python é uma linguagem de alto nível eficiente, legível e poderosa com gerenciamento automático de memória.

Em termos de velocidade, o Java é mais rápido que o Python, pois é uma linguagem compilada. Leva menos tempo para executar o código.
Python é uma linguagem interpretada e determina o tipo de dados em tempo de execução, tornando-o comparativamente mais lento.

Java Vs Python

Java é muito detalhado, pois são necessárias 10 linhas de código para ler um arquivo em Java, em comparação com o Python.
Para ler um arquivo, são necessárias apenas duas linhas de código no Python.
Java não está mais na moda como costumava ser, mas ainda é a linguagem de programação mais popular em praticamente qualquer medida.
Python cresceu em popularidade nos últimos anos. Isso ocorre por razões que incluem produtividade do desenvolvedor, suporte de biblioteca, suporte da comunidade, flexibilidade de idiomas e facilidade de aprendizado.
Java é mais popular para dispositivos móveis, android, aplicativos de desktop e aplicativos da web.
O Python é considerado a linguagem mais favorável para Machine Learning, Inteligência Artificial, IoT e muito mais.

Java é usado em Mobile, Android e Desenvolvimento Web

Python é usado em Inteligência Artificial e Machine Learning

Java é estaticamente tipado.

Python é dinamicamente tipado.

Fonte: Python vs. Java
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

sexta-feira, 29 de maio de 2020

O que é a declaração pass no Python?

O que é a declaração pass no Python?

No Python, pass é uma declaração nula. O intérprete não ignora uma declaração pass, mas nada acontece e a declaração resulta em nenhuma operação.
A declaração pass é útil quando você não escreve a implementação de uma função, mas deseja implementá-la no futuro.
Portanto, para evitar erros de compilação, você pode usar a declaração pass.

Sintaxe

A sintaxe da declaração de passe é:

Exemplo
pass

Exemplo

Escrevendo uma função sem corpo

A função addition() não tem implementação:

Exemplo
def addition(num1, num2):
  # a implementação vai aqui
  pass # declaração pass

addition(2, 2)

Ignorando uma Implementação de Instrução If

Se a instrução não tiver implementação:

Exemplo
# Essa função imprime o número na tela se não for o número 2
def display(number):
  if number is 2:
    pass # Pass statement
  else:
    print("Number: ", number)

display(2)
display(3)

Fonte: What is pass statement in Python?
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

Quais são as funções aleatórias do Python?

Quais são as funções aleatórias do Python?

Existem várias funções no Python que fornecem a capacidade de gerar números aleatórios. Todas essas funções estão presentes no módulo random que pode ser importado import random.
As três funções principais usadas para geração de números aleatórios são:

  • random()
  • randint()
  • uniform()

random()

Esta função retorna um valor aleatório de ponto flutuante entre 0 e 1.

Exemplo
import random

# Um número entre 0 e 1
num = random.random()
print(num)

# Um número entre 0 e 100
num = random.random() * 100
print(num)

# Um número entre -50 e 50
num = random.random() * 100 - 50
print(num)

randint()

A função randint aceita um intervalo e produz um número inteiro entre esse intervalo.

Exemplo
import random

# Gera um número aleatório entre 1 e 40
num = random.randint(1, 40)
print(num)

uniform()

Assim como a função randint gera um número inteiro dentro de um determinado intervalo, o método uniform faz o mesmo para números de ponto flutuante.

Exemplo
import random

# Um número de ponto flutuante entre 1 e 50
num = random.uniform(1, 50)
print(num)

Fonte: What are the Python random functions?
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

O que é uma função lambda do Python?

O que é uma função lambda do Python?

Uma função lambda é uma pequena função anônima que retorna um objeto.
O objeto retornado pela função lambda geralmente é atribuído a uma variável ou usado como parte de outras funções maiores.
Em vez da palavra-chave def convencional usada para criar funções, uma função lambda é definida usando a palavra-chave lambda. A estrutura das funções lambdas pode ser vista abaixo:

Exemplos de lambdas simples

Aqui estão alguns exemplos de lambdas em ação:

Uma função quadrática
# Uma função lambda quadrada
square = lambda n : n * n
num = square(5)
print(num)
Uma função de subtração
# Uma função lambda de subtração com vários argumentos
sub = lambda x, y : x-y
print(sub(5, 3))

O objetivo das funções lambdas

Um lambda é muito mais legível do que uma função completa, pois pode ser escrito em linha. Portanto, é uma boa prática usar lambdas quando a expressão da função é pequena.
A beleza das funções lambda reside no fato de que elas retornam objetos de função. Isso as torna úteis quando usadas com funções como a map ou filter, que exigem objetos de função como argumentos.

Função map com lambda

Lambda torna a função map mais concisa.

Função lambda
myList = [10, 25, 17, 9, 30, -5]
# Dobrar o valor de cada elemento
myList2 = map(lambda n : n*2, myList)
print(myList2)
Função normal
# O código é mais longo

def double(n):
  return n * 2

myList = [10, 25, 17, 9, 30, -5]

myList2 = map(double, myList)
print(myList2)

Filter com lambda

Semelhante à função map, a função filter pode ser simplificada com lambda.

Função lambda
myList = [10, 25, 17, 9, 30, -5]
# Filtra os elementos que não são múltiplos de 5
myList2 = filter(lambda n : n%5 == 0, myList)
print(myList2)
Função normal
def multipleOf5(n):
  if(n % 5 == 0):
    return n

myList = [10, 25, 17, 9, 30, -5]

myList2 = filter(multipleOf5, myList)
print(myList2)

Fonte: What is a Python lambda function?
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

Como obter a raiz quadrada de um número com Python

Como obter a raiz quadrada de um número com Python

Usando a função Sqrt() do módulo de matemática

  1. Importe o módulo de matemática usando import math no início do programa.
  2. Descubra a raiz quadrada do número usando o método math.sqrt(número).
  3. Observe que um erro será gera se um número negativo for passado.
Exemplo
import math

print(math.sqrt(19))
# Lança um erro se um número negativo for passado
#print (math.sqrt (-19))

Escrevendo uma função

  1. Crie uma função que aceite um argumento.
  2. Então, se o número for negativo, não retorne nada. (Números imaginários é outro tópico para outra tentativa)
  3. Agora, como uma raiz quadrada de um número é simplesmente o número aumentado para a potência 0.5, aumente o número fornecido para a potência 0.5 usando a seguinte sintaxe:
  4. numeroexpoente​​=
    numero**expoente

  5. Isso nos dará a raiz quadrada do número.
  6. Por fim, imprima o resultado para o usuário.
Exemplo
def sqrt(n):
  if n < 0:
    return
  else
:
    return n ** 0.5

print(sqrt(19))

Fonte: How to take the square root of a number in Python
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

quinta-feira, 28 de maio de 2020

O que é um perceptron de várias camadas?

O que é um perceptron de várias camadas?

Um perceptron de várias camadas ( Multi-Layered Perceptron - MLP) é um dos modelos de redes neurais mais comuns usados no campo da aprendizagem profunda (Deep Learning). Muitas vezes referida como uma rede neural "baunilha", uma MLP é mais simples que os modelos complexos da era atual. No entanto, as técnicas introduzidas abriram caminho para novas redes neurais avançadas. O perceptron multicamada (MLP) é usado para uma variedade de tarefas, como análise de ações, identificação de imagens, detecção de spam e previsões de votação nas eleições.

A estrutura básica

Um perceptron de múltiplas camadas consiste em neurônios interconectados transferindo informações um para o outro, como o cérebro humano. Cada neurônio recebe um valor. A rede pode ser dividida em três camadas principais.

Camada de entrada

Esta é a camada inicial da rede que recebe uma entrada que será usada para produzir uma saída.

Camadas ocultas

A rede precisa ter pelo menos uma camada oculta. As camadas ocultas realizam cálculos e operações nos dados de entrada para produzir algo significativo.

Camada de saída

Os neurônios nesta camada exibem uma saída significativa.

Conexões

O MLP é uma rede neural feedforward, o que significa que os dados são transmitidos da camada de entrada para a camada de saída.
As conexões entre as camadas recebem pesos atribuídos. O peso de uma conexão especifica sua importância. Esse conceito é a espinha dorsal do processo de aprendizado de um MLP.

Enquanto as entradas tiram seus valores do ambiente, os valores de todos os outros neurônios são calculados através de uma função matemática que envolve os pesos e valores da camada anterior a ela.
Por exemplo, o valor do nó h5 pode ser:

h5 = h1.w8 + h2.w9

Backpropagation

Backpropagation é uma técnica usada para otimizar os pesos de um MLP usando as saídas como entradas.
Em uma MLP convencional, pesos aleatórios são atribuídos a todas as conexões. Esses pesos aleatórios propagam valores através da rede para produzir a saída real. Naturalmente, esse resultado seria diferente do esperado. A diferença entre os dois valores é chamada de erro.
Backpropagation refere-se ao processo de enviar esse erro de volta pela rede, reajustando os pesos automaticamente para que, eventualmente, o erro entre a saída real e a esperada seja minimizado.
Dessa maneira, a saída da iteração atual se torna a entrada e afeta a próxima saída. Isso é repetido até que a saída correta seja produzida. Os pesos no final do processo seriam aqueles nos quais a rede neural funciona corretamente.

Fonte: What is a multi-layered perceptron?
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

Como executar operações aritméticas no NumPy

Como executar operações aritméticas no NumPy

Uma característica interessante das matrizes NumPy é que podemos executar a mesma operação matemática em cada elemento com um único comando.
Nota: As operações exponencial e logarítmica são suportadas.

Exemplo
import numpy as np

arr = np.array([[5, 10], [15, 20]])
# Adiciona 10 para cada elemento
print("Adicionando 10: " + repr(arr + 10))

# Multiplicando cada elemento por 5
print("Multiplicando cada elemento por 5: " + repr(arr * 5))

# Subtraindo 5 de cada elemento
print("Subtraindo 5: " + repr(arr - 5))

# Multiplicação de matrizes
arr1 = np.array([[-8, 7], [17, 20], [8, -16], [11, 4]])
arr2 = np.array([[5, -5, 10, 20], [-8, 0, 13, 2]])
print("Multiplicando duas matrizes: " + repr(np.matmul(arr1, arr2)))

# Exponencial
arr3 = np.array([[1, 5], [2.5, 2]])

# Exponencial de cada elemento
print("Taking the exponential: " + repr(np.exp(arr3)))

# Cubo de cada elemento
print("Transformando cada elemento em uma potência de 3: " + repr(np.power(3, arr3)))

Estatísticas e agregação

Como o objetivo é produzir algo útil a partir de um conjunto de dados, o NumPy oferece várias ferramentas estatísticas, como mínimo, máximo, mediana, média e soma.

Exemplo
import numpy as np

arr = np.array([[18, 5, -25],
                [-10, 30, 7],
                [8, 16, -2]])

print("Mínimo: ", arr.min())
print("Máximo: ", arr.max())
print("Soma: ", np.sum(arr))
print("Média ", np.mean(arr))
print("Mediano: ", np.median(arr))
print("Variação: ", np.var(arr))

Salvando dados

No NumPy, todos os nossos dados podem ser salvos usando o método save. Isso criará um arquivo com a extensão .npy contendo todos os nossos dados.
O método load pode carregar os dados de um arquivo .npy novamente no programa.

Fonte: How to perform arithmetic operations in NumPy?
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

O que é NumPy

O que é NumPy

O NumPy é uma biblioteca Python gratuita, equipada com uma coleção de operações matemáticas complexas, adequadas para o processamento de dados estatísticos. A biblioteca pode ser importada para o seu projeto Python da seguinte maneira:

Exemplo
import numpy as np
# aqui importamos a biblioteca numpy e demos um apelido a ela: “np”.

Dados numéricos no aprendizado de máquina

A manipulação de dados é um componente essencial nas ciências de dados e no aprendizado de máquina. No caso do aprendizado de máquina, o sistema coleta uma enorme quantidade de dados e se treina para fazer previsões precisas. Naturalmente, seria necessário executar operações aritméticas em dados numéricos para produzir algo significativo. É aqui que o NumPy entra em cena.

Funções básicas do NumPy

A principal estrutura de dados do NumPy é a matriz NumPy. Todos os dados são armazenados em matrizes. O NumPy fornece um vasto repertório de operações matemáticas e estatísticas que podem ser executadas nessas matrizes.

Fonte: What is NumPy?
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

terça-feira, 26 de maio de 2020

Visualizando um campo escalar 2D

Visualizando um campo escalar 2D

As bibliotecas matplotlib e numpy nos fornecem algumas funções uteis para a visualização de um campo escalar em 2D. Nesse tutorial vamos aprender como visualizar um campo escalar 2D de um jeito muito simples.

Como visualizar um campo escalar 2D com o Matplotlib

Para visualizar um campo escalar 2D vamos utilizar a função meshgrid, da biblioteca numpy, e a pcolormesh, da biblioteca matplotlib. A função meshgrid retorna matrizes com vetores de coordenadas. E a função pcolormesh, é chamada para mostrar a função. Veja um exemplo abaixo usando as duas funções:

Exemplo
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

x = np.linspace(-3, 3, 51)
y = np.linspace(-2, 2, 41)
X, Y = np.meshgrid(x, y)

Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)

plt.pcolormesh(X, Y, Z, cmap = cm.viridis)
plt.colorbar()

plt.show()

Executando o código acima o seu gráfico deve estar igual a este:

Nesse exemplo fica claro como uma boa escolha de cores pode ajudar na analise de dados. Na imagem os valores negativos aparecem com uma tonalidade mais para o azul e os valores positivos mais para o amarelo.

Como funciona...

A função meshgrid recebe duas coordenadas x e y, e retorna dois grids com as coordenadas de x e y. E a função pcolormesh recebe as variáveis x, y e z, assim obtemos as coordenadas corretas. A função pcolormesh é chamada para renderizar o gráfico com as coordenadas recebidas, o mesmo resultado pode ser alcançado utilizando a função imshow.

terça-feira, 19 de maio de 2020

Adicionando legenda do colormap

Adicionando legenda do colormap

Uma coisa indispensável em muitos gráficos, e que ainda não aprendemos, é adicionar uma legenda do mapa de cores. Uma legenda do mapa de cores pode tornar o seu gráfico mais legível e visualmente mais agradável. Claro que a estética é uma das últimas preocupações quando estamos criando um gráfico. O que realmente gostaríamos de mostra, quando adicionamos uma legenda ao mapa de cores, é o valor que cada cor representa no gráfico. Nesse tutorial vamos aprender como adicionar uma legenda do colormap com a biblioteca matplotlib.

Como adicionar legendas do colormap

Para esse exemplo vamos criar uma matriz 2d com valores aleatórios e adicionar uma legenda ao colormap. Veja como fazer isso no exemplo abaixo:

Exemplo
import numpy as np
import matplotlib.pyplot as plt

matriz = np.random.random((100,100))
plt.imshow(matriz, origin = 'lower', cmap = 'viridis', interpolation = 'nearest')

cb = plt.colorbar(orientation = 'horizontal', shrink = .75)
cb.set_label('Legenda do colormap')

plt.show()

Executando o código acima o seu gráfico deve ficar parecido com esse:

Com essa barra e a legenda é possível saber qual valor uma determinada cor representa.

Como funciona…

Com o método colorbar dizemos a biblioteca matplotlib que queremos adicionar uma barra ao nosso gráfico. Para facilitar o entendimento, adicionamos alguns parâmetros adicionais ao método colorbar. O parâmetro orientation define a orientação da barra, o padrão desse parâmetro é vertical. Nesse caso escolhemos horizontal, para deixar a barra na vertical é só omitir esse parâmetro. Com o parâmetro shrink definimos o quanto a barra deve ser encolhida com base no seu tamanho padrão. Já para adicionar a legenda precisamos criar um objeto colorbar e chamar o método set_label, passando como argumento o texto da legenda que queremos adicionar a barra.

Mais sobre o método imshow

Mais sobre o método imshow do Matplotlib

Com o exemplo do tutorial anterior, obtivemos alguns resultados preliminares. Nesse exemplo é possível notar que os eixos usados no gráfico são os indexes da matriz 2d que passamos para o método imshow. É possível que você queira usar outros eixos. Para fazer essa alteração precisamos passar os novos valores para o parâmetro extent. Nesse exemplo vamos utilizar os valores do quadro de amostra do mandelbrot. Para evitar digitar código repetido vamos apenas mudar a chamada a função imshow do tutorial passado, veja como fica a nova chamada ao método imshow:

Exemplo
plt.imshow(mandelbrot, cmap = cm.viridis, extent = (x_min, x_max, y_min, y_max))

Executando o código do tutorial anterior com as alterações no método imshow, que fizemos nesse tutorial, o gráfico gerado deve ser igual a esse:

Como funciona…

Quando passamos valores para o parâmetro opcional extent especificamos o sistema de coordenados que deve ser usado para renderizar os dados da matriz 2d. O parâmetro extent recebe uma tupla com quatro valores. Os dois primeiros valores da tupla devem ter os valores mínimos e máximos do eixo horizontal. E os dois últimos valores devem ter os valores do eixo vertical. Fazendo essa alteração os eixos mostram os valores que usamos para calcular o conjunto de mandelbrot.

Visualizando o conteúdo de uma matriz 2D

Visualizando o conteúdo de uma matriz 2D

Introdução

Até o momento, criamos gráficos que representam dados unidimensionais. Com esses dados fomos capazes de traçar algumas primitivas. Quando desenhamos mapas é possível visualizar a influência que dois dados tem sobre um terceiro. Imagine que você tem algumas fazendas espelhadas pelo país. Com uma rápida olhada num mapa seria possível saber qual produto cada região do país produz, de acordo com os dados de produção de suas fazendas. A biblioteca matplotlib nos fornece uma API simples para a criação mapas.

Visualizando uma matriz 2D

Nesse exemplo vamos começar com um projeto bem simples. Tudo o que queremos é visualizar o conteúdo de uma matriz 2D. E a matriz que vamos utilizar é o conjunto de Mandelbrot. O conjunto de Mandelbrot é um fractal definido como o conjunto de pontos x no plano complexo para o qual a sequência é definida recursivamente: não tende ao infinito. Para cada ponto x do plano complexo, a sequência se expande indefinidamente.

Como visualizar o conjunto de Mandelbrot

Para visualizar uma matriz 2D, primeiro precisamos criar uma matriz 2d com os valores do mandelbrot e depois precisamos chamar o método imshow passando a matriz para o método. Veja um exemplo abaixo:

Exemplo
import numpy as np
import matplotlib.cm as cm
from matplotlib import pyplot as plt

def iter_count(C, i_max):
  X = C
  for n in range(i_max):
    if abs(X) > 2.:
      return n
    X = X ** 2 + C
  return i_max

N = 512
i_max = 64
x_min, x_max, y_min, y_max = -2.2, .8, -1.5, 1.5

X = np.linspace(x_min, x_max, N)
Y = np.linspace(y_min, y_max, N)
mandelbrot = np.empty((N, N))

for i, y in enumerate(Y):
  for j, x in enumerate(X):
    mandelbrot[i, j] = iter_count(complex(x, y), i_max)

plt.imshow(mandelbrot, cmap = cm.viridis)
plt.show()

Por ser um exemplo que precisa de muito processamento, esse exemplo pode demorar um pouco para mostrar o seu resultado. Mas o resultado vai ser um fractal de Mandelbrot, igual a este:

Como funciona a função imshow

O funcionamento do método imshow é muito simples. O método recebe uma matriz 2d e para cada elemento dessa matriz o método cria um pixel. A cor do pixel é escolhida entre os valores de um mapa de imagens (no nosso caso usamos o viridis). Apesar do métod imshow criar a imagem ela não a mostra, por isso precisamos chamar o método show.

Criando um arquivo pdf com várias páginas

Criando um arquivo pdf com várias páginas

Nos tutoriais anteriores aprendemos como criar um gráfico com vários gráficos. Assim criamos um gráfico com várias imagens utilizando a biblioteca matplotlib. Desse modo podemos criar gráficos cada vez mais complexos. Desse modo é compreensível pensar que, se utilizamos a biblioteca matplotlib para exportar esse gráfico composto para um arquivo pdf, teríamos um arquivo pdf com uma pagina com vários gráficos. Mas com apenas um pouco de esforço podemos mudar essa realidade e criar um arquivo pdf com algumas páginas. Uma coisa importante de se ter em mente é que o matplotlib é uma biblioteca de plotagem cientifica e não um sistema de composição de documentos como é o caso do LaTeX. Nesse tutorial vamos aprender como criar um documento pdf com algumas páginas.

Exemplo
import datetime
import numpy as np
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt

# Cria um objeto PdfPages com o qual salvaremos as páginas:
# A instrução with garantimos que o objeto PdfPages seja fechado corretamente
# no final, mesmo que ocorra uma exceção.

with PdfPages('multiplas_paginas_pdf.pdf') as pdf:
  plt.figure(figsize = (3, 3))
  plt.plot(range(7), [3, 1, 4, 1, 5, 9, 2], 'r-o')
  plt.title('Página Um')
  pdf.savefig() # salva a imagem atual numa pagina do pdf
  plt.close()

  # Se LaTeX não estiver instalado vai causar um erro
  # Nesse caso mude usetex para False

  plt.rc('text', usetex = True)
  plt.figure(figsize = (8, 6))
  x = np.arange(0, 5, 0.1)
  plt.plot(x, np.sin(x), 'b-')
  plt.title('Página Dois')
  pdf.attach_note("Curva de sin(x)") # você pode adicionar uma nota ao pdf
  pdf.savefig()
  plt.close()

  plt.rc('text', usetex = True)
  fig = plt.figure(figsize = (4, 5))
  plt.plot(x, x ** 2, 'ko')
  plt.title('Página Três')
  pdf.savefig(fig) # Você pode passar um objeto figure para o método savefig
  plt.close()

  # tambem podemos adicionar metadados do arquivo pdf com o objeto PdfPages
  d = pdf.infodict()
  d['Title'] = 'Exemplo Com Múltiplas páginas'
  d['Author'] = 'Acervo Lima'
  d['Subject'] = 'Como criar um arquivo pdf com mútiplas páginas'
  d['Keywords'] = 'PdfPages multipage keywords'
  d['CreationDate'] = datetime.datetime(2020, 5, 13)
  d['ModDate'] = datetime.datetime.today()

Executando o código acima um arquivo pdf com três páginas deve ser criado na pasta do script.