Calculando quantis e histogramas

Transformação de Dados com Polars

Liam Brannigan

Data Scientist & Polars Contributor

Quantis e histogramas

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    |
Transformação de Dados com Polars

Categorização por quantis

Gráfico de barras mostrando preços de restaurantes em ordem crescente.

Transformação de Dados com Polars

Categorização por quantis

Gráfico de barras mostrando preços de restaurantes em ordem crescente com o 33º percentil como linha de referência.

Transformação de Dados com Polars

Categorização por quantis

Gráfico de barras mostrando preços de restaurantes em ordem crescente com o 33º e 67º percentis como linhas de referência.

Transformação de Dados com Polars

Conjunto de reviews

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    |
Transformação de Dados com Polars

Calcular quantis

reviews.select(


)
Transformação de Dados com Polars

Calcular quantis

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

)
Transformação de Dados com Polars

Calcular quantis

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

)
Transformação de Dados com Polars

Calcular quantis

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

)
Transformação de Dados com Polars

Calcular quantis

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       |
Transformação de Dados com Polars

Usando quantis para criar categorias

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


)
Transformação de Dados com Polars

Usando quantis para criar categorias

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

)
Transformação de Dados com Polars

Usando quantis para criar categorias

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     |
| ...              | ...           | ...    | ...   | ...        |
Transformação de Dados com Polars

Quantis vs. quebras fixas

$$

Limiares por quantis

  • Baseados nos dados atuais
  • Tamanhos de grupos balanceados
  • Adapta conforme os dados mudam

$$

Limiares fixos

  • Ex.: 10 e 20 libras
  • Tamanhos de grupos incertos
  • Fáceis de entender
Transformação de Dados com Polars

Categorias com limiares fixos

reviews.with_columns(


)
Transformação de Dados com Polars

Categorias com limiares fixos

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

)
Transformação de Dados com Polars

Categorias com limiares fixos

reviews.with_columns(
    pl.col("price")
    .cut(
)
Transformação de Dados com Polars

Categorias com limiares fixos

reviews.with_columns(
    pl.col("price")
    .cut(breaks=[10, 20] 
)
Transformação de Dados com Polars

Categorias com limiares fixos

reviews.with_columns(
    pl.col("price")
    .cut(breaks=[10, 20], labels=["budget", "mid", "premium"]) 
)
Transformação de Dados com Polars

Categorias com limiares fixos

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    |
| ...              | ...           | ...    | ...   | ...        |
Transformação de Dados com Polars

Construir um histograma

reviews["price"]
Transformação de Dados com Polars

Construir um histograma

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     |
Transformação de Dados com Polars

Histograma com nº de bins definido

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     |
Transformação de Dados com Polars

Histograma com quebras definidas

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     |
Transformação de Dados com Polars

Plotar o histograma

import plotly.express as px


hist = reviews["price"].hist(bins=[0, 10, 20, 100])
Transformação de Dados com Polars

Plotar o histograma

import plotly.express as px

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

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

fig.show()
Transformação de Dados com Polars

Plotar o histograma

Transformação de Dados com Polars

Vamos praticar!

Transformação de Dados com Polars

Preparing Video For Download...