분위수와 히스토그램 계산

Polars로 하는 데이터 변환

Liam Brannigan

Data Scientist & Polars Contributor

분위수와 히스토그램

reviews = pl.read_csv("restaurants_quantiles.csv")
shape: (15, 4)
| business         | location      | review | price |
| ---              | ---           | ---    | ---   |
| str              | str           | f64    | i64   |
|------------------|---------------|--------|-------|
| 7burgers         | Wakey Wakey   | 4.2    | 15    |
| Bang Bang Burger | Forest Rd.    | 3.8    | 12    |
| ...              | ...           | ...    | ...   |
| The Old Ivy      | Angel         | 4.1    | 28    |
| Franco Manca     | Brixton Rd.   | 4.0    | 22    |
Polars로 하는 데이터 변환

분위수 기반 범주화

레스토랑 가격을 오름차순으로 보여주는 막대 차트.

Polars로 하는 데이터 변환

분위수 기반 범주화

레스토랑 가격을 오름차순으로 보여주며 33퍼센트 분위수를 기준선으로 표시한 막대 차트.

Polars로 하는 데이터 변환

분위수 기반 범주화

레스토랑 가격을 오름차순으로 보여주며 33퍼센트와 67퍼센트 분위수를 기준선으로 표시한 막대 차트.

Polars로 하는 데이터 변환

리뷰 데이터셋

reviews = pl.read_csv("restaurants_quantiles.csv")
shape: (15, 4)
| business         | location      | review | price |
| ---              | ---           | ---    | ---   |
| str              | str           | f64    | i64   |
|------------------|---------------|--------|-------|
| 7burgers         | Wakey Wakey   | 4.2    | 15    |
| Bang Bang Burger | Forest Rd.    | 3.8    | 12    |
| ...              | ...           | ...    | ...   |
| The Old Ivy      | Angel         | 4.1    | 28    |
| Franco Manca     | Brixton Rd.   | 4.0    | 22    |
Polars로 하는 데이터 변환

분위수 계산

reviews.select(


)
Polars로 하는 데이터 변환

분위수 계산

reviews.select(
    pl.col("price")

)
Polars로 하는 데이터 변환

분위수 계산

reviews.select(
    pl.col("price").quantile(0.33)

)
Polars로 하는 데이터 변환

분위수 계산

reviews.select(
    pl.col("price").quantile(0.33).alias("budget_cutoff"),

)
Polars로 하는 데이터 변환

분위수 계산

reviews.select(
    pl.col("price").quantile(0.33).alias("budget_cutoff"),
    pl.col("price").quantile(0.67).alias("mid_cutoff")
)
shape: (1, 2)
| budget_cutoff | mid_cutoff |
| ---           | ---        |
| f64           | f64        |
|---------------|------------|
| 14.0          | 20.0       |
Polars로 하는 데이터 변환

분위수로 범주 만들기

reviews.with_columns(
    pl.when(pl.col("price") <= pl.col("price").quantile(0.33)).then(pl.lit("budget"))


)
Polars로 하는 데이터 변환

분위수로 범주 만들기

reviews.with_columns(
    pl.when(pl.col("price") <= pl.col("price").quantile(0.33)).then(pl.lit("budget"))
    .when(pl.col("price") <= pl.col("price").quantile(0.67)).then(pl.lit("mid"))

)
Polars로 하는 데이터 변환

분위수로 범주 만들기

reviews.with_columns(
    pl.when(pl.col("price") <= pl.col("price").quantile(0.33)).then(pl.lit("budget"))
    .when(pl.col("price") <= pl.col("price").quantile(0.67)).then(pl.lit("mid"))
    .otherwise(pl.lit("premium")).alias("price_band")
)
shape: (15, 5)
| business         | location      | review | price | price_band |
| ---              | ---           | ---    | ---   | ---        |
| str              | str           | f64    | i64   | str        |
|------------------|---------------|--------|-------|------------|
| 7burgers         | Wakey Wakey   | 4.2    | 15    | mid        |
| Bang Bang Burger | Forest Rd.    | 3.8    | 12    | budget     |
| ...              | ...           | ...    | ...   | ...        |
Polars로 하는 데이터 변환

분위수 vs 고정 구간

$$

분위수 기준 임계값

  • 현재 데이터 기반
  • 그룹 크기 균형
  • 데이터 변화에 적응

$$

고정 임계값

  • 예: 10, 20파운드
  • 그룹 크기 불명확
  • 이해하기 쉬움
Polars로 하는 데이터 변환

고정 임계값으로 범주화

reviews.with_columns(


)
Polars로 하는 데이터 변환

고정 임계값으로 범주화

reviews.with_columns(
    pl.col("price")

)
Polars로 하는 데이터 변환

고정 임계값으로 범주화

reviews.with_columns(
    pl.col("price")
    .cut(
)
Polars로 하는 데이터 변환

고정 임계값으로 범주화

reviews.with_columns(
    pl.col("price")
    .cut(breaks=[10, 20] 
)
Polars로 하는 데이터 변환

고정 임계값으로 범주화

reviews.with_columns(
    pl.col("price")
    .cut(breaks=[10, 20], labels=["budget", "mid", "premium"]) 
)
Polars로 하는 데이터 변환

고정 임계값으로 범주화

reviews.with_columns(
    pl.col("price")
    .cut(breaks=[10, 20], labels=["budget", "mid", "premium"]).alias("price_band")
)
shape: (15, 5)
| business         | location      | review | price | price_band |
| ---              | ---           | ---    | ---   | ---        |
| str              | str           | f64    | i64   | cat        |
|------------------|---------------|--------|-------|------------|
| 7burgers         | Wakey Wakey   | 4.2    | 15    | mid        |
| Costa Coffee     | City Point    | 4.5    | 8     | budget     |
| The Queens Head  | Denman St.    | 4.7    | 25    | premium    |
| ...              | ...           | ...    | ...   | ...        |
Polars로 하는 데이터 변환

히스토그램 만들기

reviews["price"]
Polars로 하는 데이터 변환

히스토그램 만들기

reviews["price"].hist()
shape: (10, 3)
| breakpoint | category     | count |
| ---        | ---          | ---   |
| f64        | cat          | u32   |
|------------|--------------|-------|
| 8.4        | [6.0, 8.4]   | 3     |
| 10.8       | (8.4, 10.8]  | 1     |
| ...        | ...          | ...   |
| 27.6       | (25.2, 27.6] | 0     |
| 30.0       | (27.6, 30.0] | 2     |
Polars로 하는 데이터 변환

빈 개수 지정해 히스토그램 만들기

reviews["price"].hist(bin_count=5)
shape: (5, 3)
| breakpoint | category      | count |
| ---        | ---           | ---   |
| f64        | cat           | u32   |
|------------|---------------|-------|
| 10.8       | [6.0, 10.8]   | 4     |
| 15.6       | (10.8, 15.6]  | 3     |
| 20.4       | (15.6, 20.4]  | 3     |
| 25.2       | (20.4, 25.2]  | 3     |
| 30.0       | (25.2, 30.0]  | 2     |
Polars로 하는 데이터 변환

구간 경계 지정해 히스토그램 만들기

reviews["price"].hist(bins=[0, 10, 20, 100])
shape: (3, 3)
| breakpoint | category       | count |
| ---        | ---            | ---   |
| f64        | cat            | u32   |
|------------|----------------|-------|
| 10.0       | [0.0, 10.0]    | 4     |
| 20.0       | (10.0, 20.0]   | 6     |
| 100.0      | (20.0, 100.0]  | 5     |
Polars로 하는 데이터 변환

히스토그램 그리기

import plotly.express as px


hist = reviews["price"].hist(bins=[0, 10, 20, 100])
Polars로 하는 데이터 변환

히스토그램 그리기

import plotly.express as px

hist = reviews["price"].hist(bins=[0, 10, 20, 100])

fig = px.bar(hist, x="category", y="count")

fig.show()
Polars로 하는 데이터 변환

히스토그램 그리기

Polars로 하는 데이터 변환

Ayo berlatih!

Polars로 하는 데이터 변환

Preparing Video For Download...