Calcul des rangs et des corrélations

Transformation de données avec Polars

Liam Brannigan

Data Scientist & Polars Contributor

Classement

Tableau montrant le nombre de victoires en Coupe du monde.

Transformation de données avec Polars

Classement

Tableau montrant le nombre de victoires en Coupe du monde avec une colonne de classement.

Transformation de données avec Polars

Classement

Tableau montrant le nombre de victoires en Coupe du monde avec deux colonnes de classement dérivées par différentes méthodes.

Transformation de données avec Polars

Nos données de lieux

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              |
Transformation de données avec Polars

Classer les lieux par prix

venues.with_columns(

)
Transformation de données avec Polars

Classer les lieux par prix

venues.with_columns(
    pl.col("price").rank()
)
Transformation de données avec Polars

Classer les lieux par prix

venues.with_columns(
    pl.col("price").rank(descending=False)
)
Transformation de données avec Polars

Classer les lieux par prix

venues.with_columns(
    pl.col("price").rank(descending=False).alias("rank_default")
)
Transformation de données avec Polars

Lieux classés

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          |
Transformation de données avec Polars

Classer les lieux : ajouter le rang min

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        |
Transformation de données avec Polars

Quel style de classement utiliser ?

$$

Rang par défaut
  • Sortie en flottant
  • Utile pour l’analytique

$$

Rang min
  • Sortie entière
  • Utile pour les affichages top-N
Transformation de données avec Polars

Corréler les avis utilisateurs

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       |
Transformation de données avec Polars

Calculer les corrélations

correlations = user_reviews.select(                    )

Transformation de données avec Polars

Calculer les corrélations

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

Transformation de données avec Polars

Calculer les corrélations

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     |
Transformation de données avec Polars

Ajouter une colonne utilisateur

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    |
Transformation de données avec Polars

Résumé rapide avec .describe()

venues.select("review", "price").describe(                   )
Transformation de données avec Polars

Résumé rapide avec .describe()

venues.select("review", "price").describe(percentiles=[0.33, 0.67])
Transformation de données avec Polars

Résumé rapide avec .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     |
Transformation de données avec Polars

Passons à la pratique !

Transformation de données avec Polars

Preparing Video For Download...