Вычисление рангов и корреляций

Преобразование данных с помощью Polars

Liam Brannigan

Data Scientist & Polars Contributor

Ранжирование

Таблица с количеством побед на чемпионатах мира.

Преобразование данных с помощью Polars

Ранжирование

Таблица с количеством побед на чемпионатах мира и столбцом рангов.

Преобразование данных с помощью Polars

Ранжирование

Таблица с количеством побед на чемпионатах мира и двумя столбцами рангов, полученными разными методами.

Преобразование данных с помощью Polars

Наши данные о заведениях

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              |
Преобразование данных с помощью Polars

Ранжирование заведений по цене

venues.with_columns(

)
Преобразование данных с помощью Polars

Ранжирование заведений по цене

venues.with_columns(
    pl.col("price").rank()
)
Преобразование данных с помощью Polars

Ранжирование заведений по цене

venues.with_columns(
    pl.col("price").rank(descending=False)
)
Преобразование данных с помощью Polars

Ранжирование заведений по цене

venues.with_columns(
    pl.col("price").rank(descending=False).alias("rank_default")
)
Преобразование данных с помощью Polars

Заведения с рангами

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          |
Преобразование данных с помощью Polars

Ранжирование заведений: добавляем минимальный ранг

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        |
Преобразование данных с помощью Polars

Какой стиль ранжирования выбрать?

$$

Стандартный ранг
  • Вывод в виде числа с плавающей точкой
  • Подходит для аналитики

$$

Минимальный ранг
  • Вывод в виде целого числа
  • Подходит для отображения топ-N
Преобразование данных с помощью Polars

Корреляция оценок пользователей

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       |
Преобразование данных с помощью Polars

Вычисление корреляций

correlations = user_reviews.select(                    )

Преобразование данных с помощью Polars

Вычисление корреляций

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

Преобразование данных с помощью Polars

Вычисление корреляций

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     |
Преобразование данных с помощью Polars

Добавление столбца пользователя

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    |
Преобразование данных с помощью Polars

Быстрая сводка с помощью .describe()

venues.select("review", "price").describe(                   )
Преобразование данных с помощью Polars

Быстрая сводка с помощью .describe()

venues.select("review", "price").describe(percentiles=[0.33, 0.67])
Преобразование данных с помощью Polars

Быстрая сводка с помощью .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     |
Преобразование данных с помощью Polars

Давайте потренируемся!

Преобразование данных с помощью Polars

Preparing Video For Download...