순위와 상관관계 계산

Polars로 하는 데이터 변환

Liam Brannigan

Data Scientist & Polars Contributor

순위 매기기

월드컵 우승 횟수 표.

Polars로 하는 데이터 변환

순위 매기기

순위 열이 포함된 월드컵 우승 횟수 표.

Polars로 하는 데이터 변환

순위 매기기

서로 다른 방법으로 계산한 두 개의 순위 열이 있는 월드컵 우승 횟수 표.

Polars로 하는 데이터 변환

우리의 venues 데이터

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로 하는 데이터 변환

순위: 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        |
Polars로 하는 데이터 변환

어떤 순위 방식을 쓸까요?

$$

기본 순위
  • 부동소수점 출력
  • 분석에 적합

$$

Min 순위
  • 정수형 출력
  • 상위 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로 하는 데이터 변환

user 열 추가

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...