Capítulo 5.2

Índice

  1. 1. O que é Ciência de Dados?
  2. 2. Causalidade e Experimentos
  3. 3. Progamando em Python
  4. 4. Tipos de Dados
  5. 5. Sequências
  6. 6. Tabelas
  7. 7. Visualização
  8. 8. Funções e Tabelas
  9. 9. Aleatoriedade
  10. 10. Amostragem e Distribuições Empíricas
  11. 11. Testando Hipóteses
  12. 12. Comparando Duas Amostras
  13. 13. Estimação
  14. 14. Por que a Média é Importante
  15. 15. Previsão

import numpy as np
path_data = '../../../assets/data/'

 

Ranges

Um range é um array de números em ordem crescente ou decrescente, cada um separado por um intervalo regular.
Ranges são úteis em um número surpreendentemente grande de situações, então vale a pena aprendê-los.

Ranges são definidos usando a função np.arange, que aceita um, dois ou três argumentos: um início, um fim e um ‘passo’.

Se você passar um argumento para np.arange, este se torna o valor de end, com start=0 e step=1 assumidos. Dois argumentos fornecem o start e o end, com step=1 assumido. Três argumentos fornecem start, end e step explicitamente.

Um range sempre inclui o valor do start, mas não inclui o valor do end. Ele conta pelo step e para antes de chegar ao end.

np.arange(end): Um array começando com 0 de inteiros consecutivos crescentes, parando antes do fim.
np.arange(5)
Out[2]: array([0, 1, 2, 3, 4])

 

Observe como o array começa em 0 e vai até 4, não até o valor final de 5.

np.arange(início, fim): Um array de inteiros consecutivos crescentes a partir do início, parando antes do fim.
np.arange(3, 9)
Out[3]: array([3, 4, 5, 6, 7, 8])

 

np.arange(início, fim, passo): Um range com uma diferença de passo entre cada par de valores consecutivos, começando a partir do início e parando antes do fim.
np.arange(3, 30, 5)
Out[4]: array([ 3, 8, 13, 18, 23, 28])

 

Este array começa em 3, então dá um passo de 5 para chegar a 8, depois outro passo de 5 para chegar a 13, e assim por diante.

Quando você especifica um passo, o início, o fim e o passo podem todos ser positivos ou negativos e podem ser números inteiros ou frações.

np.arange(1.5, -2, -0.5)
Out[5]: array([ 1.5, 1. , 0.5, 0. , -0.5, -1. , -1.5])

 

Exemplo: Fórmula de Leibniz para π

O grande matemático e filósofo alemão Gottfried Wilhelm Leibniz (1646 – 1716) descobriu uma fórmula maravilhosa para π como uma soma infinita de frações simples. A fórmula é

π = 4 ⋅ (1 – 13 + 1517 + 19111 + …)

 

Embora seja necessário um pouco de matemática para estabelecer isso, podemos usar arrays para nos convencer de que a fórmula funciona. Vamos calcular os primeiros 5000 termos da soma infinita de Leibniz e ver se está perto de π.

4 ⋅ (1 – 13 + 1517 + 19111 + … – 19999)

 

Calcularemos essa soma finita adicionando todos os termos positivos primeiro e depois subtraindo a soma de todos os termos negativos [1]:

4 ⋅ ((1 + 15 + 19 + … + 19997) – (13 + 17 + 111 + … + 19999))

 

Os termos positivos na soma têm 1, 5, 9 e assim por diante nos denominadores. O array by_four_to_20 contém esses números até 17:

by_four_to_20 = np.arange(1, 20, 4)
by_four_to_20
Out[6]: array([ 1, 5, 9, 13, 17])

 

Para obter uma aproximação precisa de π, usaremos o array muito mais longo positive_term_denominators.

positive_term_denominators = np.arange(1, 10000, 4)
positive_term_denominators
Out[7]: array([ 1, 5, 9, …, 9989, 9993, 9997])

 

Os termos positivos que realmente queremos somar são apenas 1 sobre esses denominadores:

positive_terms = 1 / positive_term_denominators

 

Os termos negativos têm 3, 7, 11 e assim por diante em seus denominadores. Este array é apenas 2 adicionado a positive_term_denominators.

negative_terms = 1 / (positive_term_denominators + 2)

 

A soma total é

4 * ( sum(positive_terms) - sum(negative_terms) )
Out[10]: 3.1413926535917955

 

Isso está muito próximo de π = 3.14159…. A fórmula de Leibniz parece estar correta!

 

Notas de Rodapé

[1] Surpreendentemente, quando adicionamos infinitamente muitas frações positivas e negativas, a ordem pode importar! Mas nossa aproximação para π usa apenas um número grande e finito de frações, então está tudo bem adicionar os termos em qualquer ordem conveniente.

← Capítulo 5.1 – Arrays Capítulo 5.3 – Mais sobre Arrays →