TGViewer
OK ML OK ML @okmlai · 978 subscribers
Post #29 379
Инструмент недели. Polars

Когда Pandas начинает «тормозить» на миллионах строк, на помощь приходит Polars - библиотека для анализа данных, написанная на Rust.

Почему стоит попробовать?
😛В разы быстрее Pandas на больших датасетах.
✌️Lazy API - можно строить вычислительные графы и оптимизировать запросы (как в SQL).
👑Поддержка многопоточности «из коробки».
🐰Совместимость с Arrow - легко интегрировать с ML-инструментами.

Кейс
У нас есть датасет vulners_web.csv с колонками cve_id, score, has_exploit, fetched_at.
Нужно понять распределение уязвимостей по уровням риска (Low/Medium/High/Critical) и посмотреть, сколько из них уже имеют эксплойт (на рисунке результат работы кода).

import polars as pl

df = pl.read_csv(
"/content/vulners_web.csv",
columns=["cve_id", "score", "has_exploit"],
n_rows=20000
)

df = df.with_columns([
pl.when(pl.col("score") < 4.0).then(pl.lit("Low"))
.when(pl.col("score") < 7.0).then(pl.lit("Medium"))
.when(pl.col("score") < 9.0).then(pl.lit("High"))
.otherwise(pl.lit("Critical"))
.alias("severity")
])

stats = (
df.group_by("severity")
.agg([
pl.count().alias("n_total"),
pl.sum("has_exploit").alias("n_with_exploit"),
pl.mean("score").alias("avg_score"),
])
.sort("avg_score", descending=True)
)

print(stats)


Такой кейс прям жизненный. Показывает, как Polars помогает быстро агрегировать и строить фичи для анализа киберугроз или для будущей ML-модели.
Polars в одну строчку даёт сводку: сколько уязвимостей в каждой категории, сколько из них имеют эксплойты, средний CVSS-балл.
Такой подход удобно использовать для генерации признаков перед обучением ML-модели (например, для прогноза риска эксплуатации).

⚡ Polars vs Pandas (на 1 млн строк).
import pandas as pd
import polars as pl
import numpy as np
import time

# Генерируем тестовый датасет
N = 1_000_000
scores = np.random.uniform(0, 10, N)
has_exploit = np.random.choice([0, 1], size=N)

# Pandas
df_pd = pd.DataFrame({"score": scores, "has_exploit": has_exploit})
t0 = time.time()
pd_stats = df_pd.groupby(pd.cut(df_pd["score"], [0,4,7,9,10])).agg(
n_total=("score", "count"),
n_with_exploit=("has_exploit", "sum"),
avg_score=("score", "mean")
)
print("Pandas:", time.time() - t0, "сек")

# Polars
df_pl = pl.DataFrame({"score": scores, "has_exploit": has_exploit})
t0 = time.time()
pl_stats = (
df_pl.with_columns([
pl.when(pl.col("score") < 4.0).then(pl.lit("Low"))
.when(pl.col("score") < 7.0).then(pl.lit("Medium"))
.when(pl.col("score") < 9.0).then(pl.lit("High"))
.otherwise(pl.lit("Critical"))
.alias("severity")
])
.group_by("severity")
.agg([
pl.count().alias("n_total"),
pl.sum("has_exploit").alias("n_with_exploit"),
pl.mean("score").alias("avg_score"),
])
)
print("Polars:", time.time() - t0, "сек")


⚡ На ноутбуке с 1 млн строк:
Pandas ≈ 1.5–2.0 сек
Polars ≈ 0.2–0.3 сек
Разница на больших датасетах ещё больше.

Выводы
Polars = скорость + простота + экономия памяти, времени и нервов.
Для ML-инженера это отличный инструмент для EDA и фичер-инжиниринга.
  • ❤ 9
  • 🔥 6
  • 👍 5
  • 👀 2
More from @okmlai
  1. Sep 23, 2026Зачем писать стилер, если у пользователя уже есть ИИ-ассистент с доступом ко всему? Патрик…
  2. Sep 21, 2026ИИ получил доступ к своим весам. ЧБД? 16 сентября Irregular опубликовала исследование agen…
  3. Sep 14, 202610 сентября Anthropic опубликовала Detecting and countering misuse of AI — отчёт о злоупот…
  4. Sep 11, 2026Репозиторий недели. Mantis разделить нельзя объединять 📬 У Google есть Mantis — набор нав…
  5. Sep 9, 2026Пароль сменили. Сессии закрыли. А чужие инструкции остались в памяти ИИ. Именно такой сцен…
  6. Sep 4, 2026AI-агенты начали действовать вне инструкций. Вот что нужно знать разработчикам ⤵️ Недавно…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →