Calculando rankings e correlações

Transformação de Dados com Polars

Liam Brannigan

Data Scientist & Polars Contributor

Ranking

Tabela mostrando número de títulos da Copa do Mundo.

Transformação de Dados com Polars

Ranking

Tabela mostrando número de títulos da Copa do Mundo com uma coluna de ranking.

Transformação de Dados com Polars

Ranking

Tabela mostrando número de títulos da Copa do Mundo com duas colunas de ranking derivadas por métodos diferentes.

Transformação de Dados com Polars

Nossos dados de locais

venues
shape: (4, 6)
| business        | location    | review | price | type       | hygiene_rating |
| ---             | ---         | ---    | ---   | ---        | ---            |
| str             | str         | f64    | i64   | str        | i64            |
|-----------------|-------------|--------|-------|------------|----------------|
| 7burgers        | Wakey Wakey | 4.2    | 15    | restaurant | 4              |
| Costa Coffee    | City Point  | 4.5    | 8     | café       | 5              |
| The Queens Head | Denman St.  | 4.7    | 25    | bar        | 5              |
| Costa Coffee    | Waterloo    | 4.1    | 8     | café       | 3              |
Transformação de Dados com Polars

Rankear locais por preço

venues.with_columns(

)
Transformação de Dados com Polars

Rankear locais por preço

venues.with_columns(
    pl.col("price").rank()
)
Transformação de Dados com Polars

Rankear locais por preço

venues.with_columns(
    pl.col("price").rank(descending=False)
)
Transformação de Dados com Polars

Rankear locais por preço

venues.with_columns(
    pl.col("price").rank(descending=False).alias("rank_default")
)
Transformação de Dados com Polars

Locais ranqueados

shape: (4, 7)
| business        | location    | review | price | ...   | rank_default |
| ---             | ---         | ---    | ---   | ---   | ---          |
| str             | str         | f64    | i64   | ...   | f64          |
|-----------------|-------------|--------|-------|-------|--------------|
| 7burgers        | Wakey Wakey | 4.2    | 15    | ...   | 3.0          |
| Costa Coffee    | City Point  | 4.5    | 8     | ...   | 1.5          |
| The Queens Head | Denman St.  | 4.7    | 25    | ...   | 4.0          |
| Costa Coffee    | Waterloo    | 4.1    | 8     | ...   | 1.5          |
Transformação de Dados com Polars

Rankear locais: adicionar ranking mínimo

venues.with_columns(
    pl.col("price").rank(descending=False).alias("rank_default"),
    pl.col("price").rank(method="min", descending=False).alias("rank_min")
)
shape: (4, 8)
| business        | ... | price | rank_default | rank_min |
| ---             | --- | ---   | ---          | ---      |
| str             | ... | i64   | f64          | i64      |
|-----------------|-----|-------|--------------|----------|
| 7burgers        | ... | 15    | 3.0          | 3        |
| Costa Coffee    | ... | 8     | 1.5          | 1        |
| The Queens Head | ... | 25    | 4.0          | 4        |
| Costa Coffee    | ... | 8     | 1.5          | 1        |
Transformação de Dados com Polars

Qual estilo de ranking usar?

$$

Ranking padrão
  • Saída em ponto flutuante
  • Bom para análises

$$

Ranking mínimo
  • Saída estilo inteiro
  • Bom para mostrar top N
Transformação de Dados com Polars

Correlacionando avaliações de usuários

user_reviews = pl.read_csv("user_reviews.csv")
shape: (4, 4)
| business        | Alice | Bob  | Charlie |
| ---             | ---   | ---  | ---     |
| str             | i64   | i64  | i64     |
|-----------------|-------|------|---------|
| 7burgers        | 9     | 6    | 8       |
| Costa Coffee    | 3     | 9    | 5       |
| The Queens Head | 9     | 7    | 9       |
| Nando's         | 7     | 8    | 8       |
Transformação de Dados com Polars

Calculando correlações

correlations = user_reviews.select(                    )

Transformação de Dados com Polars

Calculando correlações

correlations = user_reviews.select(pl.selectors.integer())

Transformação de Dados com Polars

Calculando correlações

correlations = user_reviews.select(pl.selectors.integer()).corr()
correlations
shape: (3, 3)
| Alice   | Bob     | Charlie |
| ---     | ---     | ---     |
| f64     | f64     | f64     |
|---------|---------|---------|
| 1.0     | -0.913  | 0.953   |
| -0.913  | 1.0     | -0.745  |
| 0.953   | -0.745  | 1.0     |
Transformação de Dados com Polars

Adicionando coluna de usuário

correlations.with_columns(pl.Series("user", correlations.columns))
shape: (3, 4)
| user    | Alice   | Bob     | Charlie |
| ---     | ---     | ---     | ---     |
| str     | f64     | f64     | f64     |
|---------|---------|---------|---------|
| Alice   | 1.00    | -0.91   | 0.95    |
| Bob     | -0.91   | 1.00    | -0.74   |
| Charlie | 0.95    | -0.74   | 1.00    |
Transformação de Dados com Polars

Resumo rápido com .describe()

venues.select("review", "price").describe(                   )
Transformação de Dados com Polars

Resumo rápido com .describe()

venues.select("review", "price").describe(percentiles=[0.33, 0.67])
Transformação de Dados com Polars

Resumo rápido com .describe()

shape: (8, 3)
| statistic  | review   | price    |
| ---        | ---      | ---      |
| str        | f64      | f64      |
|------------|----------|----------|
| count      | 4.0      | 4.0      |
| null_count | 0.0      | 0.0      |
| mean       | 4.3      | 15.0     |
| std        | 0.391578 | 7.25718  |
| min        | 3.8      | 8.0      |
| 33%        | 4.2      | 12.0     |
| 67%        | 4.5      | 15.0     |
| max        | 4.7      | 25.0     |
Transformação de Dados com Polars

Vamos praticar!

Transformação de Dados com Polars

Preparing Video For Download...