Enviar um café pro programador

Mostrando postagens com marcador Data Science. Mostrar todas as postagens
Mostrando postagens com marcador Data Science. Mostrar todas as postagens

Reshape e Resize: Como mudar o tamanho e formato de dados em Python

 Neste tutorial, de nosso curso de Ciência de Dados com Python, vamos aprender como usar as funções de reshaping e resizing, para alterar o formato e tamanho dos arrays.

É muito comum, quando trabalhamos com dados em programação, termos a necessidade de alterar a maneira como as informações são armazenadas e exibidas, para facilitar nossa tarefa.

Por exemplo, vamos supor que você um array unidimensional com as notas de todos os alunos de uma turma, ou seja, tudo numa linha. Ora, essa é uma péssima maneira de armazenar esses dados. Seria melhor uma tabela (matriz), onde uma linha se refere a somente um aluno, e as colunas são as notas de cada matéria, concorda?

reshape() - Mudando o formato de arrays

Nas funções de reshape, não vamos alterar o número de elementos total, vamos apenas reorganizar, ou seja, mudar o formato como as dados são exibidos, ok?

np.reshape( info, formato(linhas, colunas) )

Vamos usar a função reshape, da biblioteca NumPy, para alterar o formato de um array. Para isso, vamos fornecer dois argumentos para a função: o array com as informações e o formato na qual queremos exibir, onde o formato deve ser da seguinte maneira: (linhas, colunas)

Vamos supor que temos o array arr1 que tem uma linha e 4 colunas, e queremos criar o array arr2 com duas linhas e duas colunas. Ou seja, vamos mudar o array de 1x4 para 4x4:

import numpy as np arr1 = np.array([1,2,3,4]) arr2 = np.reshape(arr1, (2,2)) print("Array original 1x4: ", arr1) print("Array reshape 2x2 : \n", arr2)

Mais uma vez é importante salientar: não alteramos o número de elementos, nem seus valores, apenas vamos alterar seu formato (shape).

Agora vamos fazer o contrário, vamos pegar um array arr1 que é uma matriz 3x3 e vamos transformar um array unidimensional, de 9 elementos:

import numpy as np arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) arr2 = arr1.reshape(1,9) print("Array original 3x3: \n", arr1) print("Array reshape 1x9 : \n", arr2)

Note que chamamos a função reshape diretamente do array arr1, bastando então fornecer o formato que queremos salvar em arr2, pois já fica subtendido que vamos usar os dados de arr1.


Transformando tudo em um array unidimensional: ravel()

Veja que no último caso foi preciso explicitar as dimensões do array unidimensional. Porém, as vezes não sabemos ou não queremos nos incomodar com o tanto de elementos, apenas queremos transformar a matriz de dados em um array unidimensional. Para fazer isto, basta usar a função ravel():

import numpy as np arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) arr2 = np.array([ [9,8], [7,6], [5,4], [3,2]]) print("ravel() de arr1: ", arr1.ravel()) print("ravel() de arr2: ", arr2.ravel())

Lembrando que, tanto a reshape() como a ravel() não vão alterar o formato dos arrays originais.


Resize - mudando o tamanho de arrays

Uma outra operação bem comum em data science, é a de alterar o tamanho de arrays, como por exemplo, unir duas matriz, concatenar arrays ou simplesmente adicionar ou retirar elementos desses arrays.

  • append() : acrescentando elementos ao final

A maneira mais simples de se mudar o tamanho de um array, é adicionando um elemento ao final dele. Para isso, vamos usar a função append(), que cria um novo array, com o original acrescido do que você adicionou.

Por exemplo:

import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) arr3 = np.append(arr1, arr2) arr4 = np.append(arr3, 7) print(arr4)

Para criar o arr3, unimos o arr2 ao final do arr1. Assim, temos : arr3 = [1,2,3,4,5,6]
Já para criar o arr4, simplesmente adicionamos o valor 7 a ele: arr4 = [1,2,3,4,5,6,7]

Se não especificarmos o eixo (axis), essa função primeiro deixar os arrays como unidimensionais e depois faz a junção. Mas, podemos, por exemplo, adicionar elementos ao final tanto no eixo vertical (axis=0), ou seja abaixo, como ao final horizontalmente (axis=1).

import numpy as np

arr1 = np.array([[1, 2],
[3, 4]])

arr2 = np.array([[5, 6],
[7, 8]])

arr3 = np.append(arr1, arr2, axis=0)
arr4 = np.append(arr1, arr2, axis=1)

print("axis=0: \n", arr3)
print("axis=1: \n", arr4)

O resultado é:

axis=0: 
 [1 2]
 [3 4]
 [5 6]
 [7 8]

axis=1: 
 [1 2 5 6]
 [3 4 7 8]

  • concatenate() : juntando quaisquer arrays

Os dois exemplos anteriores de append só funcionaram porque as duas matrizes eram arrays de mesmas dimensões. Experimente usar o append de um array 2x1 em uma matriz 2x2.

Intuitivamente, esperaríamos que o array fosse anexado ao final da matriz. Porém, teste. Teste e veja que não funciona.

Uma maneira de resolver isso, é usar a função concatenate(), que recebe uma lista com os arrays a serem concatenados e se desejar, você pode especificar como vai ocorrer o concatenamento. 

No exemplo abaixo, arr1 é uma matriz 2x2, arr2 é um vetor de linha 1x2 e arr3 é um vetor de coluna 2x1. Criamos arr4 concatenando a linha embaixo da matriz e arr5 é criado concatenando arr3 à direita da matriz, veja:

import numpy as np arr1 = np.array([[1, 2], [3, 4]]) arr2 = np.array([ [5, 6] ]) arr3 = np.array([ [5], [6]]) arr4 = np.concatenate((arr1, arr2), axis=0) arr5 = np.concatenate((arr1, arr3), axis=1) print("axis=0: \n", arr4) print("axis=1: \n", arr5)

Onde a saída será:

axis=0: 
 [[1 2]
  [3 4]
  [5 6]]

axis=1: 
 [[1 2 5]
  [3 4 6]]

Veja que os três arrays declarados são de dimensões diferentes.

  • resize() : criando arrays de quaisquer tamanhos

Por fim, é bem comum termos a necessidade de alterar as dimensões diretamente em um array, seja através da união de outros arrays ou simplesmente expandindo o próprio array.

Através da resize() podemos sempre alterar o tamanho e dimensão do array, e mesmo que isso signifique acrescentar novos elementos, sem termos que especificar novos valores ou fornecer sequer um outro array para fazer ele mudar de tamanho.

Por exemplo, vamos mudar um matriz 2x2 para uma 3x3:

import numpy as np arr = np.array([[1, 2], [3, 4]]) arr2 = np.resize(arr, (3,3)) print(arr2)

E o resultado é:

[[1 2 3]
 [4 1 2]
 [3 4 1]]

Ou seja, o NumPy cria uma cópia do array original, coloca no novo array e repete os valores do array original, até preencher as novas posições da matriz 3x3.

Já se chamarmos a função resize() diretamente do array, sem criar uma nova matriz, ele vai alterar a matriz original, preenchendo ela com valores 0:

import numpy as np arr = np.array([[1, 2], [3, 4]]) arr.resize((3,3)) print(arr)

Saída:

[[1 2 3]
 [4 0 0]
 [0 0 0]]


Histograma em Python - Como gerar e plotar gráficos

 Neste tutorial, vamos aprender como gerar um gráfico do tipo histograma, através da linguagem de programação Python.

O que é um Histograma

Histograma é um tipo de gráfico, com barras verticais, onde cada uma represente uma classe de valores, e a altura representa a frequência que essa classe aparece no seu conjunto de dados. Numa linguagem mais técnica, representa uma distribuição de frequências.

Por exemplo, um consultório médico criou um histograma, para melhor entender a distribuição de idades dos pacientes:

Como plotar gráficos do tipo Histograma

No eixo x, temos as idades dos pacientes. Cada barra dessas representa uma idade ou intervalo de idades. Já o eixo y representa quantas vezes cada intervalo desses apareceu.

Pelo gráfico, podemos ver que cada barra dessas tem um intervalo próximo de 5 anos. A maior parte dos pacientes, tem por volta dos 20-25 anos e 25-30, pois cada barra que representa esses intervalos apareceu (frequência) mais de 50 vezes. Ou seja, tem mais de 100 pacientes com idade entre 20 e 30 anos.

Pacientes com mais de 90 anos? Bem poucos.
Pacientes com 0-5 anos de idade? Quase 20.

O gráfico do tipo histograma é muito útil quando você tem uma grande quantidade de dados e quer, rápida e facilmente, identificar como está a distribuição de determinados valores desses dados. Por ser uma maneira visual de representar e classificar dados, é muito usada para exibir resultados, seja em trabalhos científicos como em reuniões, por exemplo.

Tipos de Histograma em Python

Como podem imaginar, existe uma infinidade de tipos de gráficos histograma, e cada um deles nos diz informações muito importante sobre os dados que estamos analisando.

E, obviamente, o Python pode nos ajudar muito, mas muito mesmo, nessa tarefa de plotar e analisar.

Experimento do Pêndulo Simples

No laboratório de Física da Universidade Federal do Ceará (UFC), realizei o famoso experimento do pêndulo simples:

Pêndulo simples em Python

Cuja fórmula do período é dada por:

Física com Python

Onde L é o comprimento da corda do pêndulo, e g o valor da gravidade no local, que é 9,78 m/s² dentro do Campus do Pici, local onde foi realizado a medição.

Logo, o valor teórico do período é: T = 2,009141114 s = 2,01s
Vamos usar o mesmo número de algarismos significativos do cronômetro usado, dois.

Os valores que calculei podem ser obtidos em:
https://github.com/jarlissonmoreira/PythonProgressivo/blob/main/Histograma/data.txt

Note que os valores obtidos experimentalmente estão bem próximos do valor teórico. Vamos colocar esses valores em um histograma e ver isso em um gráfico, para confirmar que a maioria das medições estão ali por volta desse valor 2.01s

O meu arquivo tem 135 linhas, divididas em 10 colunas. Mas o script que será apresentado é bem abrangente, você pode colocar seus dados em quaisquer números de linhas e colunas, que ele vai funcionar.

Vamos aprender como usar o script para plotar um histograma.


Como plotar um Histograma em Python

Vamos usar a biblioteca matplotlib e a função hist() dela, para plotar nosso histograma.
Mas, antes, precisamos tratar nossos dados, antes de passar os valores para essa função.

De onde o script vai puxar esses dados? Onde e como você vai armazenar eles? Eles tem vírgula ou ponto, como decimal? Se for vírgula, precisa trocar por ponto. Como estão formatados? Tudo junto? Numa matriz? Em txt ou csv?

Usar as funções é fácil, o que devemos ter cuidado é na hora de tratar os dados.

No script fornecido abaixo, você pode passar os dados de várias maneiras. Eu, por exemplo, coloquei todos os dados no arquivo txt acima mencionado e em seguida usei o endereço desse arquivo "data.txt" (pois o data.txt está na mesma pasta do script histograma.py) para o parâmetro path da minha função plot_histograma().

Se preferir, pode passar diretamente os dados através do parâmetro data (como não usei, coloquei o valor None nele), fornecendo uma string de valores. Obviamente, só é viável se tiver poucos dados.

Por fim, precisamos configurar o bins, que são os intervalos das barras, no eixo x. Eu passei o valor 'auto', para a função hist() fazer o melhor ajuste possível, mas você pode definir manualmente os intervalos que desejar.

Vamos plotar três gráficos. O primeiro, é o histograma da matriz original, com todos os dados, bastando fazer:

  • ax1.hist(array, bins)

Onde array são os dados e bins os intervalos.

No segundo gráfico, vamos calcular as médias de cada linha da matriz. Nossa matriz tem 135 linhas com 10 elementos em cada. Logo, nosso segundo gráfico vai ter 135 elementos. Isso é muito usado em Física Experimental, a média das médias, pois fornecem valores mais confiáveis e próximos do teórico, pois 'amenizam' os resultados muito discrepantes.

Por fim, ploetei os dois gráficos juntos, um na frente do outro, para vermos a diferença.

O resultado ficou:

Script para fazer histograma em Python

Nosso script, usado para gerar esses plots de histogramas, é:

import numpy as np
from matplotlib import pyplot


def plot_histograma(path: str = None, data: str = None, bins: float | str = None) -> None:
    #path: caminho do arquivo .txt com os dados "caminho/do/data.txt"
    #bins: se nao fornecido retorna o histograma dos valores individuais,
    #ele pode ser tamanho (float), ou uma string com valores: 'auto', 'fd', 'doane', 'scott', 'stone', 'rice', 'sturges', or 'sqrt'
    #return: printa na tela o histograma
    
    if path is not None:
        with open(path, "r") as file:
            content = file.read().replace(',', '.')
            values: list[float] = [float(i) for i in content.split()]
    else:
        content = data.replace(',', '.')
        values: list[float] = [float(i) for i in content.split(';')]
   
    array = np.array(values)
    
    if bins is None:
        bins=sorted(values)
       
    if type(bins) is str:
        bins=bins
       
    if type(bins) is float:
        bins = np.arange(array.min(), array.max() + bins, bins)
    
    #Transforma o array/lista de valores em uma matriz com 10 colunas
    col = 10
    lin = int(len(array)/col)
    array2 = array.reshape(lin,col)
    
    #Cria um array, onde cada elemento é uma média de 10 valores,
    #de cada linha da matriz anterior
    median=np.mean(array2, axis=1)
    
    #Novo código para imprimir os três gráficos, com mesmo eixo x
    fig, (ax1, ax2, ax3) = pyplot.subplots(3, 1, sharex=True)

    #Primeiro gráfico, de 1350 medições
    ax1.hist(array, bins)
    ax1.xaxis.set_tick_params(labelbottom=True)
    leg1 = str(lin*col)
    ax1.set_xlabel(leg1+' medições')

    #Segundo gráfico, das 135 médias
    ax2.hist(median,bins)
    ax2.xaxis.set_tick_params(labelbottom=True)
    leg2 = str(len(median))
    ax2.set_xlabel(leg2+' médias')
    
    #Sobrepondo os dois, para efeitos de comparação
    ax3.hist(array, bins, alpha=0.5, label=leg1)
    ax3.hist(median, bins, alpha=0.5, label=leg2)
    ax3.set_xlabel('Gráficos sobrepostos')
    ax3.legend(loc='upper right')
    
    pyplot.tight_layout()
    pyplot.show()

path="data.txt"
data=None
bins='auto'
plot_histograma(path,data,bins)

Bibliotecas para Programação Científica - NumPy, SymPy, SciPy, Matplotlib e Pandas

 Nesta seção, de nosso curso de Programação Científica com Python, vamos te apresentar as principais bibliotecas para se trabalhar com Computação Numérica e Ciência de Dados, que são:

  • NumPy
  • SciPy
  • SymPy
  • Matplotlib
  • Pandas
  • Outros
São ferramentas que serão necessárias você instalar, para dar continuidade em nosso curso.

NumPy - O pacote fundamental da Computação Científica

Essa biblioteca é a base de toda a computação numérica (Numerical Python), que usamos para trabalharmos com Array, especificamente.

Pacote NumPy para Data Science e Machine Learning


Embora tenha muita semelhança com as Listas, os arrays tem uma característica especial de ser possível fazer operações aritméticas com eles, diferente dos outros tipos de sequências.

Com a library do NumPy, vamos aprender a armazenar dados em um array e como manipular essas informações de uma maneira bem fácil. Se é da área de exatas, certamente já ouvir falar em matrizes, que no mundo da computação científica é conhecida por array multidimensional, também tratadas pelo NumPy.

O que é possível fazer com o NumPy:
  • Criar, adicionar, remover e ordenas os elementos de um array
  • Alterar tamanhos e formatos de arrays e matrizes
  • Fazer operações aritméticas com arrays
  • Achar elementos máximos, mínimos, médias, soma etc
  • Gerar números aleatórios
  • Fazer cálculos matemáticos, como raiz quadrada, somatório, funções trigonométricas, hiperbólicas, arredondamentos, expoentes, logaritmos, numéricos completos, Bessel etc
  • Álgebra linear
  • Estatística
  • Operação com bits
Documentação oficial do NumPy:

Como instalar o NumPy:
Se estiver usando o Jupyter notebook, não precisa fazer nada.

Para trabalhar diretamente numa IDE em sua máquina, utilize o pip no terminal de comandos de seu sistema operacional:
  • pip3 install numpy
Ou
  • pip install numpy

SymPy - Símbolos científicos em Python

Não sei se já percebeu, mas quase tudo em programação é feito através de números e textos, corretos?

Mas, e para exibir o símbolo de uma integral?
E de um somatório? Uma equação ordinária?
Imagine ter que estudar e lidar com uma função que tem trigonometria, logaritmo, números complexos etc, e tudo em uma fração?

É aí que entra a biblioteca SymPy (Symbolic Python). Com ela, além de fazer todos os cálculos possíveis que usualmente fazemos, ele exibe os símbolos (como o da raiz quadrada, a divisão com numerador em cima e denominador embaixo e tudo mais o que você puder fazer no papel, faremos no Python. 
Biblioteca Sympy para computação matemática
Com o SymPy, podemos trabalhar com:

  • Polinômios (fatorar, decompor, dividir...)
  • Cálculo (limite, derivada, integral, série de Taylor)
  • Equações (polinomiais, algébricas, diferencial, diofantinas e sistemas)
  • Análise Combinatória (combinação, permutação, arranjos, binômio de Newton)
  • Fórmulas de Física
  • Matemática discreta e Lógica
  • Matrizes (determinantes, autovalor/vetor)
  • Geometria
  • Estatística
  • Cristografia
  • Gráficos (plot)
Vejam um exemplo bonitinho no Jupyter notebook:
Fórmulas de Física no Python

Para instalar o Sympy: 

  • pip install sympy ou 
  • pip3 install sympy

Documentação oficial do SymPy:

https://docs.sympy.org/latest/index.html


SciPy - O Python na Computação Científica

As duas bibliotecas anteriores são usadas para cálculos matemáticos, no geral. E são essenciais, afinal a Matemática é a base para toda a ciência, principalmente de exatas.

Mas é com a library SciPy que vamos adentrar, especificamente, nas ciências, com a programação em Python.
SciPy scientific library


Ela se dá especialmente bem com a NumPy, principalmente quando precisamos fazer otimizações e integrações numéricas, tanto que sua estrutura de dados básica é o array multidimensional (matriz).

O SciPy acaba por 'estender' algumas funcionalidades do NumPy, generalizando mais algumas funções, como as da álgebra linear e da transformada de Fourier, por exemplo.

A biblioteca SciPy é mais usada, principalmente, para:
  • Equações algébricas
  • Equações diferenciais
  • Interpolação
  • Problemas envolvendo autovalor
  • Integração
  • Otimização
  • Funções e distribuições estatísticas
  • Algoritmos fundamentais para todas as ciências
  • Processamento de Sinais
  • Processamento multidimensional de imagens
  • Transformadas de Fourier
  • Spatial data structures (sistemas de informações geográficos, computação gráfica, robótica e outras áreas)
Veja um exemplo de uso da SciPy com o software de mapas e informações geográficas ArcGis:
Computação científica com Python

Para instalar o SciPy: 

  • pip install scipy ou 
  • pip3 install scipy
Guia oficial do usuário SciPy:

Matplotlib - Gráficos e visualizações de dados

Agora que já aprendemos quais as ferramentas que existem e que usaremos para fazer cálculos numéricos, precisamos de uma maneira para exibir essas informações.

E é aí que entra a poderosa biblioteca Matplotlib, de mathematical plotting library, cujo propósito é o de exibir saídas e visualizações, que é algo bem mais amplo e poderoso do que simplesmente 'exibir gráficos', como veremos ao longo de nosso curso de Programação Científica com Python.

Com pouquíssimas linhas de código seremos capazes de construir os mais diversos tipos de imagens e gráficos, em excelente resolução e de maneira bem flexível e configurável. Se já usou o MATLAB alguma vez, saiba que vai ter tudo o que ele oferece, e muito mais, graças ao poder e versalidade do Python.

A título de curiosidade, essa library foi criado por um neurocientista e biólogo, chamado John Hunter, mostrando que cientistas também podem se tornar exímios programadores. Não sinta medo se aparecer algo estranho ou difícil, em primeiro momento. Com o tempo e prática, vai ver que programar é uma das coisas mais simples e belas de se fazer.

Confesso que foi uma tarefa árdua achar imagens que ilustrassem o que é possível fazer com o Matplotlib:
Como criar gráficos em Python

Por isso, convido todos a digitarem 'matplotlib' no Google imagens e ver a infinidade de possibilidades que essa biblioteca do Python nos fornece:
Gráficos para Ciência de dados

A biblioteca do Matplotlib nos fornecesse a possibilidade de se criar e trabalhar com:
  • Plot de linhas
  • Plot scatter (gráficos de dispersão)
  • Plot stem (Diagrama de ramos e folhas)
  • Plot em 2D e 3D
  • Plot de contorno
  • Plot polares
  • Stack Plot (gráficos de pilha)
  • Box Plot (gráficos de caixa)
  • Error Plot (margem de erro)
  • Violin Plot
  • Plot de mapas de cores
  • Plot interativos (suportam tratamento de eventos e possibilidade de se mudar os dados de maneira dinâmica)
  • Gráficos de barra
  • Gráficos de pizza (pie chart)
  • Histograma
  • Customização de figuras, legendas, rótulos, eixos, títulos, subplots, grids de imagens etc
  • Mapas e projeções cartográficas (Basemap e Cartopy)
  • Portável e multi-plataforma
  • Integração com outras ferramentas, com o LaTeX e o Microsoft Excel
  • Qualidade de imagens do nível de publicações científicas
  • Total integração com o NumPy
  • Integração com o Jupyter Notebook
  • Possibilidade de se trabalhar com animações e renderizações rápidas
Para instalar o Matplotlib, acesse o terminal de comando de seu sistema operacional e digite:
pip install matplotlib
ou
pip3 install matplotlib

Veja a documentação oficial do Matplotlib em:

Pandas e a ciência de dados (data science)

Certamente você já ouviu falar em ciência de dados (ou mais especificamente, análise e processamento de dados). Se tornou algo tão grande, tão importante e com tão poucas pessoas que tem conhecimento na área, que é comum de ouvirmos falar até em meios não-acadêmicos, como na TV mesmo ou como propaganda em alguma rede social sua.

Em nosso curso de computação numérica com Python, iremos utilizar a poderosíssima e famosa biblioteca pandas, que vai nos permitir fazer uma vasta gama de operações com todos os tipos de dados que você imaginar.

Iremos aprender a trabalhar com Series e Dataframes (dados em série e tabela de dados), mais precisamente quebrando essas informações, unindo, classificando, agrupando, extraindo estatísticas, percebendo padrões, convertendo dados etc.

Por exemplo, vamos supor que o órgão oficial da sua cidade está coletando informação de onde chove, em 10 locais de sua cidade. Pega informações a cada hora. Ou seja, 240 dados diariamente (10mm de chuva, 15mm de chuva, 0 mm de chuva etc).

Se você pegar um mês desses dados, vai ter mais de 7000 informações, porém não vai conseguir concluir nada. Afinal, você analisou só um mês.

Mas vamos supor que você consiga 20 anos dessas informações. São quase 2 milhões de dados.
Dá pra fazer algo manualmente? Bem inviável, concorda?

É aí que entra a programação em Python e, especificamente, o pandas. Podemos pegar os dados ano a ano e ver como ele se comporta. Que anos choveu mais ou menos? Ou foi estável? É possível notar mudanças climáticas em sua cidade, e usar isso em um artigo acadêmico.

E que tal agora a gente selecionar por mês? Quanto que choveu em cada mês, de cada ano? Tem meses que chovem mais? Certamente, apenas olhando os dados, você saberia dizer que época chove mais, quanto que chove, que meses tem seca (assim, gerar informações para a criação de projetos contra seca ou alagamentos!), e por aí vai.

Veja bem, é possível analisar milhões e milhões de dados desses, com pouquíssimas linhas de código, extrair todo tipo de informação que você possa imaginar e até mostrar isso de maneira gráfica.

O motivo do nome ser pandas é porque pandas são fofos, e é simplesmente apaixonante trabalhar com esta biblioteca:
Curso de ciência de dados com Python


Documentação do pandas

Adivinha? Para instalar o pandas, digite o comando:
pip install pandas
ou
pip3 install pandas

No terminal de comando de seu sistema operacional.

Machine Learning e a Inteligência Artificial

Assim como a ciência de dados, muitíssimo provavelmente você ouviu falar num campo de estudo e trabalho chamado Machine Learning, ou aprendizado de máquina, em nossa língua.

Em nossa apostila Programação Científica em Python, iremos apresentar uma biblioteca para aprender e trabalhar com Machine Learning, vamos aprender como criar programas que irão detectar padrões em dados, ver coisas que nós humanos não conseguimos ver, através da teoria do aprendizado computacional.

Inteligência artificial em Python

Sim. É possível programarmos e ensinarmos as máquinas a: 
  • Reconhecer padrões
  • Aprender com erros
  • Criação de algoritmos
  • Fazer previsões
  • Tomar decisões

E tudo isso é a base para toda a inteligência artificial.

Ficou satisfeito com o que é possível fazer nas ciências, com o Python?
Pois bem, não mostrei nem 1% do que é possível. Bem vindo ao fantástico mundo da programação.

Chega de moleza com sua máquina, nos próximos tutoriais vamos colocar a mão na massa e aprender como fazer o hardware pegar fogo, de tanto trabalhar e calcular.

Como usar o Jupyter Notebook e o Spyder IDE

 Neste tutorial de nossa seção de Programação Científica e Data Science, vamos aprender como abrir e usar nossos ambientes de programação, o Jupyter Notebook e o Spyder IDE.

O foco inicial é conhecer e nos ambientar com eles, para nos tutoriais seguintes, começarmos de fato a programar em Python com foco científico.

Lembrando, esses são apenas duas sugestões para você trabalhar (na apostila, fizemos uma terceira sugestão bem interessante), ou seja, você pode usar o ambiente que desejar (porém, terá que fazer algumas configurações).

Como usar o Spyder para programação numérica com Python

Jupyter - A magia dos notebooks

Você já traduziu 'notebook'? Embora venha a mente o seu computador portátil, um notebook na verdade é um caderno de anotações, ou simplesmente caderno. Ou seja, um lugar onde você pode escrever, desenhar, rabiscar, rasurar, fazer coisas importantes ou não...

E isso é a base do Jupyter: ele usa o conceito de notebook, onde vamos poder, no mesmo local e documento, colocar texto, imagens, vídeos, código HTML, código de programação e o mais legal: rodar nossos códigos. E em diversas linguagens: Python, Julia, R, ...

  • Como abrir o Jupyter e criar um Notebook

Então vamos lá, abra o Jupyter. Veja que ele vai abrir, na verdade, uma página no seu navegador web, no endereço http://localhost:8888/tree

Clique em:

  • File -> New -> Notebook:

Curso de Python com Jupyter Notebook

Um novo notebook, em branco, vai ser criado. Ele vai ter o nome Untitled ou Untitled1.
Clique nesse nome, e renomeie seu projeto para Projeto01:
Como criar um projeto no Jupyter

Veja que a extensão dos notebooks é ipynb (vem de IPython Notebook), são formatos do tipo JSON.
Lembrando que o código de um notebook não é um código puro em Python, pois teremos mais coisas em nossos notebooks.

Porém, é possível sim exportar a parte de programaçao para um script puro de Python ou de outra linguagem que você tenha usado: 
  • File -> New -> Save and Export Notebook As... -> Executable Script

Note que, ao criar seu notebook, já existe uma primeira célula em branco criada:
Editar célula no Jupyter Notebook

Clique dentro, no espaço em branco. E depois no seguinte menu, logo acima:
Modos de edição nas células do Jupyter Notebook

Existem três modos de se editar e usar uma célula no Jupyter:
  1. Code: são células que irão receber um código-fonte de programação, no nosso caso, em Python
  2. Markdown: uma espécie de modo texto mais 'chique', onde você pode colocar letras maiores, menores, alterar cor, negrito, itálico, inserir um código HTML (com imagem, gif, vídeo etc), etc
  3. Raw: significa cru em inglês, uma célula sem nenhum tipo de formatação específica

  • Como usar células no modo Markdown
Selecione Markdown, e insira o texto abaixo dentro da célula:
----------------------------------------------------------------------
# Projeto 01
## Como usar o Jupyter notebook
Neste *notebook*, vamos aprender a editar células de um notebook.
Por exemplo: < br >
_texto itálico_ < br >
~texto riscado~ < br >

Agora vamos aprender como inserir um link. < br >
Basta fazer o seguinte padrão: [Texto a ser exibido do link](url do link) < br >
Por exemplo:

[Curso Python Progressivo](www.pythonprogressivo.net)

1. Vamos fazer uma lista?
2. Acima foi o primeiro elemento, este é o segundo
3. E, por fim, este é o terceiro

* Podemos também criar outros tipos de listas
* Como essas
* Que não são enumeradas, basta usar o asterisco


Já para inserir uma imagem, basta usar a tag < img > do HTML: < br >
< img src="https://www.python.org/static/img/python-logo.png" >

Também é possivel fazer tabelas (utilizaremos bastante no Pandas, em data science):
| A | B | C |
|---|---|---|
| 1 | 2 | 3 |
| 4 | 5 | 6 |


Obviamente, também podemos criar e exibir belíssimas fórmulas do Latex:
Inline:$$E = mc^2$$

Na célula abaixo, vamos usar o código: < br >
`print("Curso de Programação Científica com Python")`
----------------------------------------------------------------------

Agora aperte ctrol+Enter ou aperte o símbolo de Play, para o Jupyter 'rodar' o que você escreveu. Ele vai interpretar o seu riquíssimo texto (richtext).
Quando usou um #, você está no nível 1 de cabeçalho.
Se usar dois ##, vai estar no nível 2 de cabeçalho e assim por diante.

Palavras entre * * ficarão em negrito, entre _ _ em itálico e entre ~ ~ ficarão com um risco.
O comando < br > é do HTML, e gera uma quebra de linha. Se preferir, basta dar enter e deixar uma linha em branco para a quebra ou duas para um parágrafo em branco.

Também é possível criar links dentro de seus notebooks, e também mostramos duas maneiras de criar listas no Jupyter.

Depois inserimos a imagem do logo do site oficial do Python, usando mais uma tag do HTML e em seguida mostramos um exemplo de tabela.

Se está fazendo seu TCC, teses e artigos científicos, vai gostar de saber que também é possível inserir código LaTeX direto no seu notebook.

Além de ser possível escrever e ter um código formatado, mesmo dentro do modo Markdown, basta colocar o código entre ` ` (crase)

  • Como usar células no modo Code

Veja que, mesmo no modo texto, foi preciso o Jupyter 'interpretar' seu código, pois inserimos diversos tipos de informação. E dá pra ir bem mais longe nisso, como por exemplo caso você aprenda HTML (Curso HTML Progressivo)

Mas, pouco se usa o modo Markdown apenas, ele é muito bom para deixar seu notebook mais rico e explicativo, o cerne de tudo vai ser, obviamente, a programação! A computação!

Após rodar a célula anterior, você viu que outra célula, abaixo da primeira, foi criada.
Vá lá, e digite:
print("Curso de Programação Científica com Python")

Selecione o modo Code e rode (alt+enter ou no play). Veja que apareceu o resultado abaixo do código, ainda na mesma célula.  Você digitou o código no In[] da célula e o resultado saiu na linha Out[].

  • Mais maneiras de utilizar o Jupyter
Em nossa apostila e livro Programação Científica com Python, vamos um poucos mais além e mostramos mais algumas utilidades do Jupyter.

Por exemplo, podemos usar ele como um terminal de comandos, para dar instruções diretas em Python, assim como faríamos em nosso computador.

E que tal enviar seu notebook para seus alunos ou colegas? Ou então exportar ele para um belíssimo documento HTML e exibir no seu site? Ou um documento PDF formal e bem padronizado. Tudo isso é possível com o Jupyter.

Também é possível criar e plotar belíssimos gráficos, como Gaussianas, Poisson, histogramas etc. Pode importar um txt com dados, exportar seu resultado para arquivos em seu computador ou mesmo na sua nuvem. Você pode usar a ferramenta que indicamos na apostila e integrar ela diretamente com sua conta Google, e por aí vai.

Muitas vezes, temos algum problema para resolver e não sabemos nem que ferramenta usar ou sequer por onde começar. Saber do que o Jupyter é capaz de fazer e facilitar, é de vital importância para não perdermos tempo em nossos estudos, trabalhos e pesquisas.

Vantagens do Spyder IDE para programação científica

Um Jupyter salva muito. Principalmente se você trabalha em casa, na empresa, na faculdade, dá aulas em locais diferentes...se usar a terceira ferramenta indicada, você vai ter tudo online, na nuvem, onde quer que esteja.

Porém, ainda indico muito ter um programa mesmo, um software, que rode no seu computador, para programar.

Se você for fazer coisas 'pesadas', como muitos cálculos e simulações, aí que vai ser indicado mesmo usar um programa para rodar seus códigos. E para programação científica usando Python, temos uma ferramenta ideal, a IDE Spyder.

Veja algumas das vantagens do Spyder para programar em Python:
  • Editor de textos (que mostra erros, cores diferentes para cada coisa)
  • Janela com os dados das variáveis e o que elas armazenam
  • Explorador de arquivos
  • Guia com o resultado da execução do código
  • Debugging
  • Histórico de comandos

E ele é flexível: você pode ir exibindo ou escondendo os painéis e ferramentas que te forem úteis, como uma janelinha para ir mostrando os gráficos que você vai plotando a medida que programa.

Aqui vale um adendo: se não é programador e nunca teve experiência com programação, não precisa ter medo de uma IDE, ao final do curso você será um programador também. E dos bons. E dos raros, pois vai saber usar programação com ciência, que é algo bem escasso, tanto no mercado como na academia.

Como usar o Spyder IDE

Vamos lá, abra seu Spyder. Ele já vai abrir no editor de texto.
Cole o seguinte código (que gera os números da sequência de Fibonacci):

n = int(input("Que termo deseja encontrar: ")) ultimo=1 penultimo=1 if (n==1) or (n==2): print("1") else: for count in range(2,n): termo = ultimo + penultimo penultimo = ultimo ultimo = termo count += 1 print(termo)

Agora, salve seu arquivo, não esqueça da extensão .py, eu usei Fibo.py
Depois de salvo, aperte F5 ou o botão de 'play', para rodar seu código. Nesse momento, o Python vai começar a interpretar seu código.

Note que tem um painel com o nome "Console", e vai aparecer o texto "Que termo deseja encontrar: " e o script está esperando você digitar um valor. Digite 10, para acharmos o décimo termo da sequência de Fibonacci:
Computação numérica e Data Science com Python


No painel de cima, ele mostra toda as variáveis que usamos no script, seus tipos de dados e valores.
É tudo bem simples e intuitivo.

Em nosso livro, por exemplo, mostramos como exibir a integral da função x³, de -1 até 1:

Como fazer cálculo integral no Spyder

E que tal plotar uma bela de uma Gaussiana?
Como plotar gráficos no Spyder

Também é bem simples, e está na apostila.
Veja que ali na lateral ficam salvas as imagens, tanto dos gráficos gaussianos, como das integrais que calculamos antes.

Bem poderosos, essas ferramentas do Jupyter e Spyder, não é mesmo?
Calma que você ainda não viu nada.