Tính phân vị và biểu đồ tần suất

Biến đổi dữ liệu với Polars

Liam Brannigan

Data Scientist & Polars Contributor

Phân vị và biểu đồ tần suất

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    |
Biến đổi dữ liệu với Polars

Phân loại theo phân vị

Biểu đồ cột hiển thị giá nhà hàng tăng dần.

Biến đổi dữ liệu với Polars

Phân loại theo phân vị

Biểu đồ cột hiển thị giá nhà hàng tăng dần với đường tham chiếu phân vị 33.

Biến đổi dữ liệu với Polars

Phân loại theo phân vị

Biểu đồ cột hiển thị giá nhà hàng tăng dần với các đường tham chiếu phân vị 33 và 67.

Biến đổi dữ liệu với Polars

Bộ dữ liệu đánh giá

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    |
Biến đổi dữ liệu với Polars

Tính phân vị

reviews.select(


)
Biến đổi dữ liệu với Polars

Tính phân vị

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

)
Biến đổi dữ liệu với Polars

Tính phân vị

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

)
Biến đổi dữ liệu với Polars

Tính phân vị

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

)
Biến đổi dữ liệu với Polars

Tính phân vị

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       |
Biến đổi dữ liệu với Polars

Dùng phân vị để tạo hạng mục

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


)
Biến đổi dữ liệu với Polars

Dùng phân vị để tạo hạng mục

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"))

)
Biến đổi dữ liệu với Polars

Dùng phân vị để tạo hạng mục

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     |
| ...              | ...           | ...    | ...   | ...        |
Biến đổi dữ liệu với Polars

Phân vị vs. ngưỡng cố định

$$

Ngưỡng theo phân vị

  • Dựa trên dữ liệu hiện có
  • Cỡ nhóm cân bằng
  • Tự điều chỉnh khi dữ liệu đổi

$$

Ngưỡng cố định

  • Ví dụ: 10 và 20 bảng Anh
  • Cỡ nhóm không biết trước
  • Dễ hiểu
Biến đổi dữ liệu với Polars

Hạng mục với ngưỡng cố định

reviews.with_columns(


)
Biến đổi dữ liệu với Polars

Hạng mục với ngưỡng cố định

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

)
Biến đổi dữ liệu với Polars

Hạng mục với ngưỡng cố định

reviews.with_columns(
    pl.col("price")
    .cut(
)
Biến đổi dữ liệu với Polars

Hạng mục với ngưỡng cố định

reviews.with_columns(
    pl.col("price")
    .cut(breaks=[10, 20] 
)
Biến đổi dữ liệu với Polars

Hạng mục với ngưỡng cố định

reviews.with_columns(
    pl.col("price")
    .cut(breaks=[10, 20], labels=["budget", "mid", "premium"]) 
)
Biến đổi dữ liệu với Polars

Hạng mục với ngưỡng cố định

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    |
| ...              | ...           | ...    | ...   | ...        |
Biến đổi dữ liệu với Polars

Tạo biểu đồ tần suất (histogram)

reviews["price"]
Biến đổi dữ liệu với Polars

Tạo biểu đồ tần suất

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     |
Biến đổi dữ liệu với Polars

Tạo biểu đồ tần suất với số thùng xác định

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     |
Biến đổi dữ liệu với Polars

Tạo biểu đồ tần suất với mốc chia xác định

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     |
Biến đổi dữ liệu với Polars

Vẽ biểu đồ tần suất

import plotly.express as px


hist = reviews["price"].hist(bins=[0, 10, 20, 100])
Biến đổi dữ liệu với Polars

Vẽ biểu đồ tần suất

import plotly.express as px

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

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

fig.show()
Biến đổi dữ liệu với Polars

Vẽ biểu đồ tần suất

Biến đổi dữ liệu với Polars

Ayo berlatih!

Biến đổi dữ liệu với Polars

Preparing Video For Download...