Capítulo 5.2
Índice
- 1. O que é Ciência de Dados?
- 2. Causalidade e Experimentos
- 3. Progamando em Python
- 4. Tipos de Dados
- 5. Sequências
- 6. Tabelas
- 7. Visualização
- 8. Funções e Tabelas
- 9. Aleatoriedade
- 10. Amostragem e Distribuições Empíricas
- 11. Testando Hipóteses
- 12. Comparando Duas Amostras
- 13. Estimação
- 14. Por que a Média é Importante
- 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 é
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 π.
Calcularemos essa soma finita adicionando todos os termos positivos primeiro e depois subtraindo a soma de todos os termos negativos [1]:
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 → |
