Capítulo 3.4

Í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 *
path_data = '../../../assets/data/'
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plots
plots.style.use('fivethirtyeight')

cones = Table.read_table(path_data + 'cones.csv')
nba = Table.read_table(path_data + 'nba_salaries.csv').relabeled(3, 'SALARY')
movies = Table.read_table(path_data + 'movies_by_year.csv')

 

Introdução às Tabelas

Agora podemos aplicar o Python para analisar dados. Trabalharemos com dados armazenados em estruturas de Tabela.

As Tabelas são uma forma fundamental de representar conjuntos de dados. Uma tabela pode ser vista de duas maneiras:

  • uma sequência de colunas nomeadas que descrevem cada uma um único atributo de todas as entradas em um conjunto de dados, ou
  • uma sequência de linhas que contêm todas as informações sobre um único indivíduo em um conjunto de dados.

Estudaremos as tabelas em grande detalhe nos próximos capítulos. Por enquanto, apenas introduziremos alguns métodos sem entrar em detalhes técnicos.

A tabela cones foi importada para nós; mais tarde veremos como, mas aqui vamos apenas trabalhar com ela. Primeiro, vamos dar uma olhada nela.

cones
Flavor Color Price
strawberry pink 3.55
chocolate light brown 4.75
chocolate dark brown 5.25
strawberry pink 5.25
chocolate dark brown 5.25
bubblegum pink 4.75

 

A tabela tem seis linhas. Cada linha corresponde a um cone de sorvete. Os cones de sorvete são os indivíduos.

Cada cone tem três atributos: sabor, cor e preço. Cada coluna contém os dados de um desses atributos, e assim todas as entradas de qualquer coluna única são do mesmo tipo. Cada coluna tem um rótulo. Nos referiremos às colunas pelos seus rótulos.

Um método de tabela é como uma função, mas deve operar em uma tabela. Então a chamada parece

nome_da_tabela.método(argumentos)

Por exemplo, se você quiser ver apenas as duas primeiras linhas de uma tabela, você pode usar o método da tabela show.

cones.show(2)
Flavor Color Price
strawberry pink 3.55
chocolate light brown 4.75

 

Você pode substituir 2 por qualquer número de linhas. Se você pedir mais do que seis, você só obterá seis, porque cones tem apenas seis linhas.

Escolhendo Conjuntos de Colunas

O método select cria uma nova tabela consistindo apenas das colunas especificadas.

cones.select('Flavor')
Flavor
strawberry
chocolate
chocolate
strawberry
chocolate
bubblegum

 

Isso deixa a tabela original inalterada.

cones
Flavor Color Price
strawberry pink 3.55
chocolate light brown 4.75
chocolate dark brown 5.25
strawberry pink 5.25
chocolate dark brown 5.25
bubblegum pink 4.75

 

Você pode selecionar mais de uma coluna, separando os rótulos das colunas por vírgulas.

cones.select('Flavor', 'Price')
Flavor Price
strawberry 3.55
chocolate 4.75
chocolate 5.25
strawberry 5.25
chocolate 5.25
bubblegum 4.75

 

Você também pode remover colunas que não deseja. A tabela acima pode ser criada removendo a coluna Color.

cones.drop('Color')
Flavor Price
strawberry 3.55
chocolate 4.75
chocolate 5.25
strawberry 5.25
chocolate 5.25
bubblegum 4.75

 

Você pode nomear esta nova tabela e olhar para ela novamente apenas digitando seu nome.

no_colors = cones.drop('Color')

no_colors
Flavor Price
strawberry 3.55
chocolate 4.75
chocolate 5.25
strawberry 5.25
chocolate 5.25
bubblegum 4.75

 

Assim como select, o método drop cria uma tabela menor e deixa a tabela original inalterada. Para explorar seus dados, você pode criar qualquer número de tabelas menores escolhendo ou removendo colunas. Isso não causará nenhum dano à sua tabela de dados original.

Ordenando Linhas

O método sort cria uma nova tabela arranjando as linhas da tabela original em ordem crescente dos valores na coluna especificada. Aqui, a tabela cones foi ordenada em ordem crescente do preço dos cones.

cones.sort('Price')
Flavor Color Price
strawberry pink 3.55
chocolate light brown 4.75
bubblegum pink 4.75
chocolate dark brown 5.25
strawberry pink 5.25
chocolate dark brown 5.25

 

Para ordenar em ordem decrescente, você pode usar um argumento opcional para sort. Como o nome indica, argumentos opcionais não precisam ser usados, mas podem ser usados se você quiser alterar o comportamento padrão de um método.

Por padrão, sort ordena em ordem crescente dos valores na coluna especificada. Para ordenar em ordem decrescente, use o argumento opcional descending=True.

cones.sort('Price', descending=True)
Flavor Color Price
chocolate dark brown 5.25
strawberry pink 5.25
chocolate dark brown 5.25
bubblegum pink 4.75
chocolate light brown 4.75
strawberry pink 3.55

 

Assim como select e drop, o método sort deixa a tabela original inalterada.

Selecionando Linhas que Satisfazem uma Condição

O método where cria uma nova tabela consistindo apenas das linhas que satisfazem uma determinada condição. Nesta seção, trabalharemos com uma condição muito simples, que é que o valor em uma coluna especificada deve ser igual a um valor que também especificamos. Assim, o método where tem dois argumentos.

O código na célula abaixo cria uma tabela consistindo apenas das linhas correspondentes a cones de chocolate.

cones.where('Flavor', 'chocolate')
Flavor Color Price
chocolate light brown 4.75
chocolate dark brown 5.25
chocolate dark brown 5.25

 

Os argumentos, separados por vírgula, são o rótulo da coluna e o valor que estamos procurando nessa coluna. O método where também pode ser usado quando a condição que as linhas devem satisfazer é mais complicada. Nessas situações, a chamada também será um pouco mais complicada.

É importante fornecer o valor exatamente. Por exemplo, se especificarmos Chocolate em vez de chocolate, então where encontrará corretamente nenhuma linha em que o sabor seja Chocolate.

cones.where('Flavor', 'Chocolate')
Flavor Color Price

 

Assim como todos os outros métodos de tabela desta seção, where deixa a tabela original inalterada.

Exemplo: Salários na NBA

“A NBA é a liga esportiva profissional que mais paga no mundo,” informou a CNN em março de 2016. A tabela nba contém os salários de todos os jogadores da National Basketball Association em 2015-2016.

Cada linha representa um jogador. As colunas são:

Column Label Description
PLAYER Player’s name
POSITION Player’s position on team
TEAM Team name
SALARY Player’s salary in 2015-2016, in millions of dollars

O código para as posições é PG (Armador), SG (Ala-armador), PF (Ala-pivô), SF (Ala) e C (Pivô). Mas o que segue não envolve detalhes sobre como o basquete é jogado.

A primeira linha mostra que Paul Millsap, Ala-pivô do Atlanta Hawks, teve um salário de quase $\$18.7$ milhões em 2015-2016.

nba
PLAYER POSITION TEAM SALARY
Paul Millsap PF Atlanta Hawks 18.6717
Al Horford C Atlanta Hawks 12
Tiago Splitter C Atlanta Hawks 9.75625
Jeff Teague PG Atlanta Hawks 8
Kyle Korver SG Atlanta Hawks 5.74648
Thabo Sefolosha SF Atlanta Hawks 4
Mike Scott PF Atlanta Hawks 3.33333
Kent Bazemore SF Atlanta Hawks 2
Dennis Schroder PG Atlanta Hawks 1.7634
Tim Hardaway Jr. SG Atlanta Hawks 1.30452
… (407 rows omitted)

 

Os fãs de Stephen Curry podem encontrar sua linha usando where.

nba.where('PLAYER', 'Stephen Curry')
PLAYER POSITION TEAM SALARY
Stephen Curry PG Golden State Warriors 11.3708

 

Também podemos criar uma nova tabela chamada ‘warriors’, que consiste apenas nos dados dos Golden State Warriors.

warriors = nba.where('TEAM', 'Golden State Warriors')
warriors
PLAYER POSITION TEAM SALARY
Klay Thompson SG Golden State Warriors 15.501
Draymond Green PF Golden State Warriors 14.2609
Andrew Bogut C Golden State Warriors 13.8
Andre Iguodala SF Golden State Warriors 11.7105
Stephen Curry PG Golden State Warriors 11.3708
Jason Thompson PF Golden State Warriors 7.00847
Shaun Livingston PG Golden State Warriors 5.54373
Harrison Barnes SF Golden State Warriors 3.8734
Marreese Speights C Golden State Warriors 3.815
Leandro Barbosa SG Golden State Warriors 2.5
… (4 rows omitted)

 

Por padrão, as primeiras 10 linhas de uma tabela são exibidas. Você pode usar show para exibir mais ou menos. Para exibir a tabela inteira, use show sem nenhum argumento entre parênteses.

warriors.show()
PLAYER POSITION TEAM SALARY
Klay Thompson SG Golden State Warriors 15.501
Draymond Green PF Golden State Warriors 14.2609
Andrew Bogut C Golden State Warriors 13.8
Andre Iguodala SF Golden State Warriors 11.7105
Stephen Curry PG Golden State Warriors 11.3708
Jason Thompson PF Golden State Warriors 7.00847
Shaun Livingston PG Golden State Warriors 5.54373
Harrison Barnes SF Golden State Warriors 3.8734
Marreese Speights C Golden State Warriors 3.815
Leandro Barbosa SG Golden State Warriors 2.5
Festus Ezeli C Golden State Warriors 2.00875
Brandon Rush SF Golden State Warriors 1.27096
Kevon Looney SF Golden State Warriors 1.13196
Anderson Varejao PF Golden State Warriors 0.289755

 

A tabela nba está ordenada em ordem alfabética dos nomes dos times. Para ver como os jogadores foram pagos em 2015-2016, é útil ordenar os dados por salário. Lembre-se que por padrão, a ordenação é em ordem crescente.

nba.sort('SALARY')
PLAYER POSITION TEAM SALARY
Thanasis Antetokounmpo SF New York Knicks 0.030888
Jordan McRae SG Phoenix Suns 0.049709
Cory Jefferson PF Phoenix Suns 0.049709
Elliot Williams SG Memphis Grizzlies 0.055722
Orlando Johnson SG Phoenix Suns 0.055722
Phil Pressey PG Phoenix Suns 0.055722
Keith Appling PG Orlando Magic 0.061776
Sean Kilpatrick SG Denver Nuggets 0.099418
Erick Green PG Utah Jazz 0.099418
Jeff Ayres PF Los Angeles Clippers 0.111444
… (407 rows omitted)

 

Esses números são um tanto difíceis de comparar, pois alguns desses jogadores mudaram de time durante a temporada e receberam salários de mais de um time; apenas o salário do último time aparece na tabela.

O relatório da CNN é sobre o outro extremo da escala salarial – os jogadores que estavam entre os mais bem pagos do mundo. Para identificar estes jogadores podemos classificá-los por ordem decrescente de salário e olhar para as primeiras linhas.

nba.sort('SALARY', descending=True)
PLAYER POSITION TEAM SALARY
Kobe Bryant SF Los Angeles Lakers 25
Joe Johnson SF Brooklyn Nets 24.8949
LeBron James SF Cleveland Cavaliers 22.9705
Carmelo Anthony SF New York Knicks 22.875
Dwight Howard C Houston Rockets 22.3594
Chris Bosh PF Miami Heat 22.1927
Chris Paul PG Los Angeles Clippers 21.4687
Kevin Durant SF Oklahoma City Thunder 20.1586
Derrick Rose PG Chicago Bulls 20.0931
Dwyane Wade SG Miami Heat 20
… (407 rows omitted)

 

O falecido Kobe Bryant foi o jogador da NBA que mais ganhou em 2015-2016.

← Capítulo 3.3 – Chamadas Capítulo 4 – Tipos de Dados →