EDA con Polars Guía paso a paso para funciones de agregación y analíticas (Parte 2)

EDA con Polars Guía paso a paso (Parte 2)

Agregados avanzados y promedios móviles a alta velocidad con Polars

Foto de Spencer Davis en Unsplash

Introducción

En la primera parte de esta serie hemos cubierto los conceptos básicos de Polars y hemos comparado sus funcionalidades y sintaxis con Pandas. En esta parte llevaremos la complejidad de nuestras consultas un poco más lejos, por lo que veremos cómo realizar algunos agregados bastante complejos, estadísticas móviles y más. Si no estás familiarizado con Polars o sientes que necesitas un repaso, asegúrate de revisar la parte anterior. De lo contrario, ¡continuemos explorando Polars!

Configuración

Al igual que en la última parte, asegúrate de clonar/actualizar este repositorio de GitHub ya que tiene todo el código que necesitas para este artículo. En particular, estaremos cubriendo este cuaderno, así que asegúrate de obtenerlo si quieres seguirlo.

Los datos utilizados en este proyecto se pueden descargar de Kaggle (CC0: Dominio público). Supongo que ya tienes instalado Polars, así que solo asegúrate de actualizarlo a la última versión usando pip install -U polars.

Procesamiento de datos

Lectura de datos

Similar al último artículo, vamos a leer el conjunto de datos de tendencias en el Reino Unido y los mapeos para las columnas category_id.

csv_path  = './youtube/GBvideos.csv'json_path = './youtube/US_category_id.json'df = pl.read_csv(csv_path)with open(json_path, 'r') as f:    categories = json.load(f)    id_to_category = {}for c in categories['items']:    id_to_category[int(c['id'])] = c['snippet']['title']

Limpieza de datos

A continuación, vamos a analizar las fechas y asignar los nombres de categoría a los IDs de categoría. Para hacerlo más adecuado para producción, voy a poner el código de análisis de fechas en una función generalizable.

def parse_dates(df: pl.DataFrame, date_cols: Dict[str, str]) -> pl.DataFrame:    expressions = []    for date_col, format in date_cols.items():        expressions.append(pl.col(date_col).str.to_date(format=format))            df = df.with_columns(expressions)    return df# Nombre de columna con formato de fecha esperadoformato_columna_fecha = {    "trending_date": '%y.%d.%m',    "publish_time"…