Capítulo 4.1

Í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

Números

Os computadores são projetados para realizar cálculos numéricos, mas existem alguns detalhes importantes sobre como trabalhar com números que todo programador que trabalha com dados quantitativos deve conhecer. O Python (como a maioria das outras linguagens de programação) faz distinção entre dois tipos diferentes de números:

  • Inteiros são chamados de valores int na linguagem Python. Eles só podem representar números inteiros (negativos, zero ou positivos) que não têm uma parte fracionária.
  • Números reais são chamados de valores float (ou valores de ponto flutuante) na linguagem Python. Eles podem representar números inteiros ou fracionários, mas têm algumas limitações.

O tipo de um número é evidente pela forma como ele é exibido: os valores int não têm ponto decimal e os valores float sempre têm um ponto decimal.

# Alguns valores inteiros
2
Out[1]: 2

 

1 + 3
Out[2]: 4

 

-1234567890000000000
Out[3]: -1234567890000000000

 

# Alguns valores de ponto flutuante
1.2
Out[4]: 1.2

 

3.0
Out[5]: 3.0

 

Quando um valor float é combinado com um valor int usando algum operador aritmético, então o resultado é sempre um valor float. Na maioria dos casos, dois inteiros se combinam para formar outro inteiro, mas qualquer número (int ou float) dividido por outro será um valor float. Valores float muito grandes ou muito pequenos são exibidos usando notação científica.

1.5 + 2
Out[6]: 3.5

 

3 / 1
Out[7]: 3.0

 

-12345678900000000000.0
Out[8]: -1.23456789e+19

 

A função type pode ser usada para encontrar o tipo de qualquer número.

type(3)
Out[9]: int

 

type(3 / 1)
Out[10]: float

 

O type de uma expressão é o tipo de seu valor final. Portanto, a função type nunca indicará que o tipo de uma expressão é um nome, porque os nomes sempre são avaliados para seus valores atribuídos.

x = 3
type(x) # O tipo de x é um int, não um nome
Out[11]: int

 

type(x + 2.5)
Out[12]: float

 

Mais Sobre Valores de Ponto Flutuante

Os valores de ponto flutuante são muito flexíveis, mas têm limites.

  1. Um float pode representar números extremamente grandes e extremamente pequenos. Existem limites, mas você raramente os encontrará.
  2. Um float representa apenas 15 ou 16 dígitos significativos para qualquer número; a precisão restante é perdida. Essa precisão limitada é suficiente para a grande maioria das aplicações.
  3. Após combinar valores float com aritmética, os últimos dígitos podem estar incorretos. Pequenos erros de arredondamento muitas vezes são confusos quando encontrados pela primeira vez.

O primeiro limite pode ser observado de duas maneiras. Se o resultado de um cálculo for um número muito grande, ele será representado como infinito. Se o resultado for um número muito pequeno, ele será representado como zero.

2e306 * 10
Out[13]: 2e+307

 

2e306 * 100
Out[14]: inf

 

2e-322 / 10
Out[15]: 2e-322

 

2e-322 / 100
Out[16]: 0.0

 

O segundo limite pode ser observado por uma expressão que envolve números com mais de 15 dígitos significativos. Esses dígitos extras são descartados antes que qualquer aritmética seja realizada.

0.6666666666666666 - 0.6666666666666666123456789
Out[17]: 0.0

 

O terceiro limite pode ser observado ao fazer a diferença entre duas expressões que deveriam ser equivalentes. Por exemplo, a expressão 2 ** 0.5 calcula a raiz quadrada de 2, mas elevar esse valor ao quadrado não recupera exatamente 2.

2 ** 0.5
Out[18]: 1.4142135623730951

 

(2 ** 0.5) * (2 ** 0.5)
Out[19]: 2.0000000000000004

 

O segundo limite pode ser observado por uma expressão que envolve números com mais de 15 dígitos significativos. Esses dígitos extras são descartados antes que qualquer aritmética seja realizada.

(2 ** 0.5) * (2 ** 0.5) - 2
Out[20]: 4.440892098500626e-16

 

O resultado final acima é 0.0000000000000004440892098500626, um número que está muito próximo de zero. A resposta correta para esta expressão aritmética é 0, mas um pequeno erro no último dígito significativo aparece de forma muito diferente na notação científica. Este comportamento aparece em quase todas as linguagens de programação porque é o resultado da forma padrão como a aritmética é realizada em computadores.

Embora os valores float nem sempre sejam exatos, eles são certamente confiáveis e funcionam da mesma maneira em todos os diferentes tipos de computadores e linguagens de programação.

← Capítulo 4 – Tipos de Dados Capítulo 4.2 – Strings →