Capítulo 6.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/'
np.set_printoptions(threshold=50)

Exemplo: Tendências Populacionais

Agora estamos prontos para trabalhar com grandes tabelas de dados. O arquivo abaixo contém “Estimativas anuais da população residente por ano único de idade e sexo para os Estados Unidos.” Observe que read_table pode ler dados diretamente de um URL.

# A partir de agosto de 2021, este arquivo do censo está online aqui:
data = 'http://www2.census.gov/programs-surveys/popest/technical-documentation/file-layouts/2010-2019/nc-est2019-agesex-res.csv'

# Uma cópia local pode ser acessada aqui caso o census.gov mova o arquivo:
# data = path_data + 'nc-est2019-agesex-res.csv'

full_census_table = Table.read_table(data)
full_census_table
SEX AGE CENSUS2010POP ESTIMATESBASE2010 POPESTIMATE2010 POPESTIMATE2011 POPESTIMATE2012 POPESTIMATE2013 POPESTIMATE2014 POPESTIMATE2015 POPESTIMATE2016 POPESTIMATE2017 POPESTIMATE2018 POPESTIMATE2019
0 0 3944153 3944160 3951430 3963092 3926570 3931258 3954787 3983981 3954773 3893990 3815343 3783052
0 1 3978070 3978090 3957730 3966225 3977549 3942698 3948891 3973133 4002903 3972711 3908830 3829599
0 2 4096929 4096939 4090621 3970654 3978925 3991740 3958711 3966321 3991349 4020045 3987032 3922044
0 3 4119040 4119051 4111688 4101644 3981531 3991017 4005928 3974351 3982984 4006946 4033038 3998665
0 4 4063170 4063186 4077346 4121488 4111490 3992502 4004032 4020292 3989750 3997280 4018719 4043323
0 5 4056858 4056872 4064521 4087054 4131049 4121876 4004576 4017589 4035033 4003452 4008443 4028281
0 6 4066381 4066412 4072904 4074531 4096631 4141126 4133372 4017388 4031568 4048018 4014057 4017227
0 7 4030579 4030594 4042990 4082821 4084175 4106756 4152666 4145872 4030888 4044139 4058370 4022319
0 8 4046486 4046497 4025501 4052773 4092559 4094513 4118349 4165033 4158848 4042924 4054236 4066194
0 9 4148353 4148369 4125312 4035319 4062726 4103052 4106068 4130887 4177895 4170813 4053179 4061874
… (296 rows omitted)

Apenas as 10 primeiras linhas da tabela são exibidas. Mais tarde, veremos como exibir a tabela inteira; no entanto, isso geralmente não é útil com tabelas grandes.

Uma descrição da tabela está disponível online.

A coluna SEX contém códigos numéricos: 0 representa o total, 1 para masculino e 2 para feminino. As suposições subjacentes a essa categorização binária são questionáveis. Discutiremos isso na próxima seção.

Nesta seção, nos concentraremos na idade e no tamanho da população.

A coluna AGE contém idades em anos completos, mas o valor especial 999 é a soma da população total. A “idade” 100 também tem um status especial. Nessa categoria, o Census Bureau inclui todas as pessoas com 100 anos ou mais.

As outras colunas contêm estimativas da população dos EUA em cada categoria de sexo e idade nos anos de 2010 a 2019. O Censo é decenal: ocorre a cada 10 anos. O Censo mais recente foi realizado em 2020 e o anterior em 2010. O Census Bureau também estima mudanças na população a cada ano. Conforme explicado na descrição da metodologia do Bureau aqui, ele “adiciona [as mudanças estimadas] ao último censo decenal para produzir estimativas de população atualizadas a cada ano.”

Tipicamente, uma tabela de acesso público conterá mais informações do que o necessário para uma investigação ou análise específica. Para tornar a tabela grande mais utilizável, precisamos fazer alguma limpeza de dados.

Suponha que estamos interessados apenas nas mudanças populacionais de 2014 a 2019. Vamos select as colunas relevantes.

partial_census_table = full_census_table.select('SEX', 'AGE', 'POPESTIMATE2014', 'POPESTIMATE2019')
partial_census_table
SEX AGE POPESTIMATE2014 POPESTIMATE2019
0 0 3954787 3783052
0 1 3948891 3829599
0 2 3958711 3922044
0 3 4005928 3998665
0 4 4004032 4043323
0 5 4004576 4028281
0 6 4133372 4017227
0 7 4152666 4022319
0 8 4118349 4066194
0 9 4106068 4061874
… (296 rows omitted)

Podemos simplificar os rótulos das colunas selecionadas.

us_pop = partial_census_table.relabeled('POPESTIMATE2014', '2014').relabeled('POPESTIMATE2019', '2019')
us_pop
SEX AGE 2014 2019
0 0 3954787 3783052
0 1 3948891 3829599
0 2 3958711 3922044
0 3 4005928 3998665
0 4 4004032 4043323
0 5 4004576 4028281
0 6 4133372 4017227
0 7 4152666 4022319
0 8 4118349 4066194
0 9 4106068 4061874
… (296 rows omitted)

Idades 97-100

Como aquecimento, vamos examinar a população total, rotulada pelo código SEX 0. Como todas essas linhas terão o mesmo valor 0 na coluna SEX, eliminaremos essa coluna.

us_pop_by_age = us_pop.where('SEX', are.equal_to(0)).drop('SEX')
us_pop_by_age
AGE 2014 2019
0 3954787 3783052
1 3948891 3829599
2 3958711 3922044
3 4005928 3998665
4 4004032 4043323
5 4004576 4028281
6 4133372 4017227
7 4152666 4022319
8 4118349 4066194
9 4106068 4061874
… (92 rows omitted)

Agora vamos olhar para a população nas idades mais avançadas.

us_pop_by_age.where('AGE', are.between(97, 101))
AGE 2014 2019
97 82948 116969
98 59546 86150
99 41277 57124
100 70685 100322

Como era de se esperar, o número de pessoas em idades mais avançadas é menor. Por exemplo, há menos pessoas de 99 anos do que de 98 anos.

Mas os números para a idade AGE 100 são bastante maiores do que aqueles para a idade 99. Isso ocorre porque a linha com AGE 100 não representa apenas pessoas de 100 anos. Também inclui aquelas que têm mais de 100 anos.

Mudança Percentual

Cada coluna da tabela us_pop_by_age é uma matriz do mesmo comprimento, e assim as colunas podem ser combinadas usando aritmética. A matriz abaixo contém a mudança na população entre 2014 e 2019. Há uma entrada correspondente a cada linha de us_pop_by_age.

change = us_pop_by_age.column('2019') - us_pop_by_age.column('2014')
change
Out[]: array([-171735, -119292, -36667, …, 15847, 29637, 9938515])

Podemos aumentar us_pop_by_age com uma coluna que contenha essas mudanças, tanto em termos absolutos quanto como porcentagens relativas ao valor em 2014.

us_pop_change = us_pop_by_age.with_columns(
    'Change', change,
    'Percent Change', change/us_pop_by_age.column('2014')
)
us_pop_change.set_format('Percent Change', PercentFormatter)
AGE 2014 2019 Change Percent Change
0 3954787 3783052 -171735 -4.34%
1 3948891 3829599 -119292 -3.02%
2 3958711 3922044 -36667 -0.93%
3 4005928 3998665 -7263 -0.18%
4 4004032 4043323 39291 0.98%
5 4004576 4028281 23705 0.59%
6 4133372 4017227 -116145 -2.81%
7 4152666 4022319 -130347 -3.14%
8 4118349 4066194 -52155 -1.27%
9 4106068 4061874 -44194 -1.08%
… (92 rows omitted)

Quase todas as entradas exibidas na coluna Percent Change são negativas, demonstrando uma queda na população nas faixas etárias mais jovens. No entanto, a população total cresceu em cerca de 9,9 milhões de pessoas, um aumento percentual de pouco mais de 3%.

us_pop_change.where('AGE', are.equal_to(999))
AGE 2014 2019 Change Percent Change
999 318301008 328239523 9938515 3.12%

Vamos comparar isso com a mudança em cada idade. Para facilitar a interpretação, ordenaremos a tabela em ordem decrescente da mudança absoluta na população, contida na coluna CHANGE.

us_pop_change.where(
    'AGE', are.below(999)
).sort('Change', descending=True)
AGE 2014 2019 Change Percent Change
72 2191642 3191048 999406 45.60%
68 2567511 3345475 777964 30.30%
69 2530460 3252423 721963 28.53%
70 2461426 3136704 675278 27.43%
71 2516392 3083083 566691 22.52%
76 1692960 2222392 529432 31.27%
62 3677408 4156645 479237 13.03%
28 4345247 4818725 473478 10.90%
64 3481789 3950578 468789 13.46%
38 3848856 4305576 456720 11.87%
… (91 rows omitted)

Dê uma olhada nas primeiras linhas. Enquanto a mudança percentual é cerca de 3% para a população geral, ela salta para bem mais de 20% para as pessoas em seus finais dos sessenta e início dos setenta anos. Essa mudança impressionante contribui para o que é conhecido como o envelhecimento da América.

O que poderia explicar esse grande aumento? Podemos explorar essa questão examinando os anos em que os grupos relevantes nasceram.

  • Aqueles que estavam na faixa etária de 69 a 72 anos em 2014 nasceram nos anos de 1942 a 1945. O ataque a Pearl Harbor ocorreu no final de 1941 e, em 1942, as forças dos EUA estavam fortemente envolvidas em uma guerra massiva que terminou em 1945.
  • Aqueles que tinham de 69 a 72 anos em 2019 nasceram nos anos de 1947 a 1950, no auge do baby boom do pós-Segunda Guerra Mundial nos Estados Unidos.

O salto pós-guerra nos nascimentos é uma das principais razões para as grandes mudanças que observamos.

← Capítulo 6.2 – Selecionando Linhas Capítulo 6.4 – Exemplo: Proporções de Sexos →