Capítulo 5.3

Í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

from datascience import *
import numpy as np
path_data = '../../../assets/data/'

 

Mais sobre Arrays

Muitas vezes, é necessário calcular algo que envolve dados de mais de um array. Se dois arrays têm o mesmo tamanho, o Python facilita a realização de cálculos envolvendo ambos os arrays.

Para o nosso primeiro exemplo, voltamos mais uma vez aos dados de temperatura. Desta vez, criamos arrays de médias diárias de temperaturas máximas e mínimas para as décadas em torno de 1850, 1900, 1950 e 2000.

baseline_high = 14.48
highs = make_array(baseline_high - 0.880,
                   baseline_high - 0.093,
                   baseline_high + 0.105,
                   baseline_high + 0.684)
highs
Out[2]: array([13.6 , 14.387, 14.585, 15.164])

 

baseline_low = 3.00
lows = make_array(baseline_low - 0.872, baseline_low - 0.629,
                  baseline_low - 0.126, baseline_low + 0.728)
lows
Out[3]: array([2.128, 2.371, 2.874, 3.728])

 

Suponha que gostaríamos de calcular a média diária de alcance de temperaturas para cada década. Ou seja, queremos subtrair a média diária de alta nos anos 1850 da média diária de baixa nos anos 1850, e o mesmo para cada outra década.

Poderíamos escrever isso laboriosamente usando .item:

make_array(
    highs.item(0) - lows.item(0),
    highs.item(1) - lows.item(1),
    highs.item(2) - lows.item(2),
    highs.item(3) - lows.item(3)
)
Out[4]: array([11.472, 12.016, 11.711, 11.436])

 

Como quando convertemos um array de temperaturas de Celsius para Fahrenheit, o Python fornece uma maneira muito mais limpa de escrever isso:

highs - lows
Out[5]: array([11.472, 12.016, 11.711, 11.436])

 

O que vimos nesses exemplos são casos especiais de uma característica geral dos arrays.

Aritmética elemento a elemento em pares de arrays numéricos

Se um operador aritmético age sobre dois arrays do mesmo tamanho, então a operação é realizada em cada par correspondente de elementos nos dois arrays. O resultado final é um array.

Por exemplo, se array1 e array2 têm o mesmo número de elementos, então o valor de array1 * array2 é um array. Seu primeiro elemento é o primeiro elemento de array1 vezes o primeiro elemento de array2, seu segundo elemento é o segundo elemento de array1 vezes o segundo elemento de array2, e assim por diante.

Exemplo: Fórmula de Wallis para π

O número π é importante em muitas áreas diferentes da matemática. Séculos antes que os computadores fossem inventados, os matemáticos trabalhavam para encontrar maneiras simples de aproximar o valor numérico de π. Já vimos a fórmula de Leibniz para π. Cerca de meio século antes de Leibniz, o matemático inglês John Wallis (1616-1703) também expressou π em termos de frações simples, como um produto
infinito.

π = 2 ⋅ (212343456567 ⋅ …)

 

Este é um produto de frações “par/impar”. Vamos usar arrays para multiplicar um milhão delas e ver se o produto está próximo de π.

Lembre-se de que a multiplicação pode ser feita em qualquer ordem [1], então podemos ajustar nosso cálculo para:

π ≈ 2 ⋅ (214365 ⋅ … ⋅ 1,000,000999999)⋅(234567 ⋅ … ⋅ 1,000,0001,000,001)

 

Agora estamos prontos para fazer o cálculo. Começamos criando um array de números pares 2, 4, 6, e assim por diante até 1,000,000. Em seguida, criamos duas listas de números ímpares: 1, 3, 5, 7, … até 999,999, e 3, 5, 7, … até 1,000,001.

even = np.arange(2, 1000001, 2)
one_below_even = even - 1
one_above_even = even + 1

 

Lembre-se de que np.prod multiplica todos os elementos de um array juntos. Agora podemos calcular o produto de Wallis, para uma boa aproximação.

2 * np.prod(even/one_below_even) * np.prod(even/one_above_even)
Out[7]: 3.1415910827951143

 

Isso é π corrigido para cinco casas decimais. Wallis claramente criou uma grande fórmula.

 

Notas de rodapé

[1] Como vimos no exemplo sobre a fórmula de Leibniz, quando adicionamos infinitamente muitas frações, a ordem pode importar. O mesmo acontece com a multiplicação de frações, como estamos fazendo aqui. Mas nossa aproximação para π usa apenas um grande número finito de frações, então está tudo bem multiplicar os termos em qualquer ordem conveniente.

← Capítulo 5.2 – Ranges Capítulo 6 – Tabelas →