Calcular cuantiles e histogramas

Transformación de datos con Polars

Liam Brannigan

Data Scientist & Polars Contributor

Cuantiles 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    |
Transformación de datos con Polars

Categorización por cuantiles

Gráfico de barras con precios de restaurantes en orden ascendente.

Transformación de datos con Polars

Categorización por cuantiles

Gráfico de barras con precios de restaurantes en orden ascendente y el percentil 33 como línea de referencia.

Transformación de datos con Polars

Categorización por cuantiles

Gráfico de barras con precios de restaurantes en orden ascendente y los percentiles 33 y 67 como líneas de referencia.

Transformación de datos con Polars

Conjunto de reseñas

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    |
Transformación de datos con Polars

Calcular cuantiles

reviews.select(


)
Transformación de datos con Polars

Calcular cuantiles

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

)
Transformación de datos con Polars

Calcular cuantiles

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

)
Transformación de datos con Polars

Calcular cuantiles

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

)
Transformación de datos con Polars

Calcular cuantiles

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       |
Transformación de datos con Polars

Usar cuantiles para crear categorías

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


)
Transformación de datos con Polars

Usar cuantiles para crear categorías

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

)
Transformación de datos con Polars

Usar cuantiles para crear categorías

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     |
| ...              | ...           | ...    | ...   | ...        |
Transformación de datos con Polars

Cuantiles vs. cortes fijos

$$

Umbrales por cuantiles

  • Basados en los datos actuales
  • Tamaños de grupo equilibrados
  • Se adaptan si cambian los datos

$$

Umbrales fijos

  • Ejemplo: 10 y 20 libras
  • Tamaños de grupo desconocidos
  • Fáciles de entender
Transformación de datos con Polars

Categorías con umbrales fijos

reviews.with_columns(


)
Transformación de datos con Polars

Categorías con umbrales fijos

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

)
Transformación de datos con Polars

Categorías con umbrales fijos

reviews.with_columns(
    pl.col("price")
    .cut(
)
Transformación de datos con Polars

Categorías con umbrales fijos

reviews.with_columns(
    pl.col("price")
    .cut(breaks=[10, 20] 
)
Transformación de datos con Polars

Categorías con umbrales fijos

reviews.with_columns(
    pl.col("price")
    .cut(breaks=[10, 20], labels=["budget", "mid", "premium"]) 
)
Transformación de datos con Polars

Categorías con umbrales fijos

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    |
| ...              | ...           | ...    | ...   | ...        |
Transformación de datos con Polars

Crear un histograma

reviews["price"]
Transformación de datos con Polars

Crear un 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     |
Transformación de datos con Polars

Histograma con número 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     |
Transformación de datos con Polars

Histograma con puntos de corte definidos

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     |
Transformación de datos con Polars

Dibujar el histograma

import plotly.express as px


hist = reviews["price"].hist(bins=[0, 10, 20, 100])
Transformación de datos con Polars

Dibujar el 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()
Transformación de datos con Polars

Dibujar el histograma

Transformación de datos con Polars

¡Vamos a practicar!

Transformación de datos con Polars

Preparing Video For Download...