Capítulo 6.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

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 →