Capítulo 4.1
Í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
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
intna 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.
- Um
floatpode representar números extremamente grandes e extremamente pequenos. Existem limites, mas você raramente os encontrará. - Um
floatrepresenta 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. - Após combinar valores
floatcom 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 → |
