Calcul des rangs et des corrélations

Transformation de données avec Polars

Liam Brannigan

Data Scientist & Polars Contributor

Classement

Tableau indiquant le nombre de victoires en Coupe du monde.

Transformation de données avec Polars

Classement

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

Transformation de données avec Polars

Classement

Tableau indiquant le nombre de victoires en Coupe du monde avec deux colonnes de classement selon 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 choisir ?

$$

Rang par défaut
  • Valeurs à virgule flottante
  • Utile pour l'analytique

$$

Rang minimal
  • Sortie de type entier
  • Utile pour les affichages top‑N
Transformation de données avec Polars

Corréler les évaluations des 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

Calcul des corrélations

correlations = user_reviews.select(                    )

Transformation de données avec Polars

Calcul des corrélations

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

Transformation de données avec Polars

Calcul des 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 d'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...