Capítulo 6.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
from datascience import *
import numpy as np
path_data = '../../../assets/data/'
np.set_printoptions(threshold=50)
Ordenando Linhas
“A NBA é a liga esportiva profissional mais bem paga do mundo,” relatou a CNN em março de 2016. A tabela nba_salaries contém os salários de todos os jogadores da National Basketball Association na temporada 2015-2016.
Cada linha representa um jogador. As colunas são:
| Rótulo da Coluna | Descrição |
|---|---|
JOGADOR |
Nome do jogador |
POSICAO |
Posição do jogador na equipe |
EQUIPE |
Nome da equipe |
'15-'16 SALARIO |
Salário do jogador em 2015-2016, em milhões de dólares |
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, tinha um salário de quase $18.7 milhões em 2015-2016.
# Esta tabela pode ser encontrada online: https://www.statcrunch.com/app/index.php?dataid=1843341
nba_salaries = Table.read_table(path_data + 'nba_salaries.csv')
nba_salaries
| PLAYER | POSITION | TEAM | ’15-’16 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) | |||
A tabela contém 417 linhas, uma para cada jogador. Apenas 10 das linhas são exibidas. O método show nos permite especificar o número de linhas, com o padrão (sem especificação) sendo todas as linhas da tabela.
nba_salaries.show(3)
| PLAYER | POSITION | TEAM | ’15-’16 SALARY |
|---|---|---|---|
| Paul Millsap | PF | Atlanta Hawks | 18.6717 |
| Al Horford | C | Atlanta Hawks | 12 |
| Tiago Splitter | C | Atlanta Hawks | 9.75625 |
| … (414 rows omitted) | |||
Passe rapidamente por cerca de 20 linhas ou mais e você verá que as linhas estão em ordem alfabética pelo nome da equipe. Também é possível listar as mesmas linhas em ordem alfabética pelo nome do jogador usando o método sort. O argumento para sort é um rótulo de coluna ou índice.
nba_salaries.sort('PLAYER').show(5)
| PLAYER | POSITION | TEAM | ’15-’16 SALARY |
|---|---|---|---|
| Aaron Brooks | PG | Chicago Bulls | 2.25 |
| Aaron Gordon | PF | Orlando Magic | 4.17168 |
| Aaron Harrison | SG | Charlotte Hornets | 0.525093 |
| Adreian Payne | PF | Minnesota Timberwolves | 1.93884 |
| Al Horford | C | Atlanta Hawks | 12 |
| … (412 rows omitted) | |||
Para examinar os salários dos jogadores, seria muito mais útil se os dados fossem ordenados por salário.
Para fazer isso, primeiro simplificaremos o rótulo da coluna de salários (apenas por conveniência) e depois ordenaremos pelo novo rótulo SALARY.
Isso organiza todas as linhas da tabela em ordem crescente de salário, com o salário mais baixo aparecendo primeiro. A saída é uma nova tabela com as mesmas colunas da original, mas com as linhas reorganizadas.
nba = nba_salaries.relabeled("'15-'16 SALARY", 'SALARY')
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 equipe durante a temporada e receberam salários de mais de uma equipe; apenas o salário da última equipe aparece na tabela. O armador Phil Pressey, por exemplo, mudou de Filadélfia para Phoenix durante o ano e pode estar se mudando novamente para o Golden State Warriors.
O relatório da CNN trata do outro extremo da escala salarial – os jogadores que estão entre os mais bem pagos do mundo.
Para ordenar as linhas da tabela em ordem decrescente de salário, devemos usar sort com a opção descending=True.
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) | |||
Kobe Bryant, em sua temporada final com os Lakers, foi o mais bem pago, com um salário de US$\$25$ milhões. Observe que o MVP Stephen Curry não aparece entre os 10 primeiros. Ele está bem mais abaixo na lista, como veremos mais tarde.
Argumentos Nomeados
A parte descending=True desta expressão de chamada é chamada de argumento nomeado. Quando uma função ou método é chamado, cada argumento possui tanto uma posição quanto um nome. Ambos são evidentes no texto de ajuda de uma função ou método.
help(nba.sort)
Ajuda sobre classificação de método no módulo datascience.tables:
sort(column_or_label, descendente=False, distinto=False) método de datascience.tables.Table instance
Retorna uma tabela de linhas ordenadas de acordo com os valores de uma coluna.
Args:
``column_or_label``: a coluna cujos valores são usados para classificação.
``descending``: se True, a classificação será decrescente, em vez de
crescente.
``distinct``: se True, valores repetidos em ``column_or_label`` irão
ser omitidos
Returns:
Uma instância de ``Table`` contendo linhas ordenadas com base nos valores
de ``column_or_label``.
>>> marbles = Table().with_columns(
... "Color", make_array("Red", "Green", "Blue", "Red", "Green", "Green"),
... "Shape", make_array("Round", "Rectangular", "Rectangular", "Round", "Rectangular", "Round"),
... "Amount", make_array(4, 6, 12, 7, 9, 2),
... "Price", make_array(1.30, 1.30, 2.00, 1.75, 1.40, 1.00))
>>> marbles
Color | Shape | Amount | Price
Red | Round | 4 | 1.3
Green | Rectangular | 6 | 1.3
Blue | Rectangular | 12 | 2
Red | Round | 7 | 1.75
Green | Rectangular | 9 | 1.4
Green | Round | 2 | 1
>>> marbles.sort("Amount")
Color | Shape | Amount | Price
Green | Round | 2 | 1
Red | Round | 4 | 1.3
Green | Rectangular | 6 | 1.3
Red | Round | 7 | 1.75
Green | Rectangular | 9 | 1.4
Blue | Rectangular | 12 | 2
>>> marbles.sort("Amount", descending = True)
Color | Shape | Amount | Price
Blue | Rectangular | 12 | 2
Green | Rectangular | 9 | 1.4
Red | Round | 7 | 1.75
Green | Rectangular | 6 | 1.3
Red | Round | 4 | 1.3
Green | Round | 2 | 1
>>> marbles.sort(3) # the Price column
Color | Shape | Amount | Price
Green | Round | 2 | 1
Red | Round | 4 | 1.3
Green | Rectangular | 6 | 1.3
Green | Rectangular | 9 | 1.4
Red | Round | 7 | 1.75
Blue | Rectangular | 12 | 2
>>> marbles.sort(3, distinct = True)
Color | Shape | Amount | Price
Green | Round | 2 | 1
Red | Round | 4 | 1.3
Green | Rectangular | 9 | 1.4
Red | Round | 7 | 1.75
Blue | Rectangular | 12 | 2
No topo deste texto de help, aparece a assinatura do método sort:
sort(column_or_label, descending=False, distinct=False)
Isso descreve as posições, nomes e valores padrão dos três argumentos para sort. Ao chamar este método, você pode usar argumentos posicionais ou nomeados, então as seguintes três chamadas fazem exatamente a mesma coisa.
sort('SALARY', True)
sort('SALARY', descending=True)
sort(column_or_label='SALARY', descending=True)
Quando um argumento é simplesmente True ou False, é uma convenção útil incluir o nome do argumento para que seja mais óbvio o que o valor do argumento significa.
| ← Capítulo 6 – Tabelas | Capítulo 6.2 – Selecionando Linhas → |
