Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение
Все самое полезное для дата сайентиста в одном канале. Учиться у нас: clc.to/6qVHgg По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5b03124c8ba6dcaa121c9
Больше📈 Аналитический обзор Telegram-канала Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение
Канал Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение (@dsproglib) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 18 453 подписчиков, занимая 7 203 место в категории Технологии и приложения и 36 416 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 18 453 подписчиков.
Согласно последним данным от 30 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -69, а за последние 24 часа — -1, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 7.26%. В первые 24 часа после публикации контент обычно набирает 4.10% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 1 340 просмотров. В течение первых суток публикация набирает 756 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 7.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как сайентиста, llm, буст, навигация, openai.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“Все самое полезное для дата сайентиста в одном канале.
Учиться у нас: clc.to/6qVHgg
По рекламе: @proglib_adv
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5b03124c8ba6dcaa121c9”
Благодаря высокой частоте обновлений (последние данные получены 01 июля, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
● При покупке VIP-тарифа (осталось 4 места) нового потока «Разработка ИИ-агентов» получаете в подарок курс «AgentOps» + ещё один любой курс Академии (например, «Математика для разработки AI», чтобы глубже освоить направление). ● Три курса обойдутся вам всего в 134.000 ₽ вместо 263.000 ₽. ● Доступна удобная беспроцентная рассрочка, платеж можно разбить на несколько комфортных частей.Хотите прокачать свое портфолио продакшн-кейсом, но пока сомневаетесь? Пройдите наш бесплатный демо-урок, чтобы протестировать формат перед покупкой. 👉 Забрать 3 курса по цене 1 и получить демо-урок
# x: [B, F, N, D] # Temporal attention — последовательность это кадры x_t = rearrange(x, "b f n d -> (b n) f d") x_t = temporal_attention(x_t, x_t, x_t) x = rearrange(x_t, "(b n) f d -> b f n d", n=N) # Spatial attention — последовательность это патчи x_s = rearrange(x, "b f n d -> (b f) n d") x_s = spatial_attention(x_s, x_s, x_s) x = rearrange(x_s, "(b f) n d -> b f n d", f=F)Просто перекладываем тензор — и стандартный attention блок работает нужным образом. 🔗 Ссылка на пост 📍 Навигация: Вакансии • Задачи • Собесы Библиотека дата-сайентиста #буст
from category_encoders import TargetEncoder
enc = TargetEncoder()
X_train['city'] = enc.fit_transform(X_train['city'], y_train)
📊 Frequency encoding — заменяем категорию её частотой в данных. Просто, без утечки, хорошо работает с деревьями:
freq = df['city'].value_counts(normalize=True)
df['city_freq'] = df['city'].map(freq)
🌀 Cyclic encoding — для часа, дня недели, месяца. Синус и косинус сохраняют цикличность:
df['hour_sin'] = np.sin(2 * np.pi * df['hour'] / 24)
df['hour_cos'] = np.cos(2 * np.pi * df['hour'] / 24)
📋 Шпаргалка выбора
- Мало уникальных значений (< 15) → one-hot
- Есть порядок → ordinal encoding
- Высокая кардинальность → target или frequency encoding
- Временные признаки → cyclic encoding
- XGBoost / LightGBM → нативная поддержка категорий, можно не кодировать вообще
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст— При покупке VIP-тарифа (осталось 4 места) нового потока «ИИ-агенты» вы получаете в подарок доступ к курсу «AgentOps» + ещё один любой курс Академии на выбор — В деньгах это два топовых курса по автоматизации и контролю ИИ всего за 134.000 ₽ вместо 263.000 ₽ 🔥 А за счет третьего курса (например, можно выбрать «Математику») вы соберете мощный стек и освоите целое востребованное направление. — Платеж можно разбить на несколько частей с помощью беспроцентной рассрочки.👉 Получить демо-урок и зафиксировать спецпредложение 3 в 1
A AND NOT(A)
— x > 5 AND x <= 5
— is_in([]) — пустое множество
— a > 5 AND a < 3 — несовместимые диапазоны
— два непересекающихся is_between
— a == 5 AND a > 10
Полезно при программно генерируемых фильтрах где параметры могут дать low > high или взаимоисключающие условия. Никаких изменений в коде не нужно.
3️⃣ is_sorted() для DataFrame и Expr
Series.is_sorted() давно есть, теперь добавили для DataFrame и выражений:
df.is_sorted("a") # True/False
df.is_sorted("b", descending=True)
df.select(pl.col("a").is_sorted()) # внутри select/filter
Поддерживает descending и nulls_last. Пока помечено как unstable.
🔛 Релиз-блог
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст
df.query("age > 30 and city == 'Moscow'")
df.query("category in @my_list") # переменные через @
Новые колонки
np.select() для нескольких условий вместо вложенных np.where():
conditions = [df.score > 90, df.score > 70, df.score > 50]
choices = ["A", "B", "C"]
df["grade"] = np.select(conditions, choices, default="F")
Пропуски
Процент null по каждой колонке — одной строкой:
df.isnull().mean().sort_values(ascending=False)
Удалить колонки где больше 50% null:
df.dropna(thresh=len(df) * 0.5, axis=1)
Агрегация
Именованные агрегации — результат сразу с нужными именами:
df.groupby("region").agg(
total_sales=("sales", "sum"),
avg_rating=("rating", "mean"),
n_orders=("order_id", "count"),
)
transform() — добавить агрегат как колонку не теряя строки:
df["pct_of_region"] = df["sales"] / df.groupby("region")["sales"].transform("sum")
Feature engineering
Процентильный ранг:
df["rank"] = df["sales"].rank(pct=True)
Биннинг:
df["bucket"] = pd.cut(df["age"], bins=[0,18,35,60,100],
labels=["teen","young","mid","senior"])
Z-score для поиска выбросов:
from scipy import stats
df["zscore"] = stats.zscore(df["value"])
outliers = df[df["zscore"].abs() > 3]
Даты
Компоненты даты сразу все:
df["year"] = df["date"].dt.year
df["month"] = df["date"].dt.month
df["weekday"] = df["date"].dt.day_name()
df["is_weekend"] = df["date"].dt.dayofweek >= 5
✔️ Больше хитростей в прикрепленной шпаргалке
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст
# было:
# optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3)
# стало:
from gefen import Gefen
optimizer = Gefen(model.parameters(), lr=1e-3)
➡️ Gefen квантизирует состояния оптимизатора до 8 бит используя подход основанный на блочно-диагональном приближении матрицы Гессиана. Это не просто округление — точность квантизации подбирается так чтобы не ронять качество обучения.
➡️ Работает с PyTorch DDP, FSDP, DeepSpeed ZeRO. Интегрируется в Hugging Face Trainer через optimizer_cls_and_kwargs. Есть версия GefenMuon — Muon с 4-кратным сокращением памяти оптимизатора.
pip install gefen
🔗 Ссылка на Gefen
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#бустRNN → простая, страдает от vanishing gradient LSTM → long + short memory, 3 гейта, решает vanishing GRU → упрощённый LSTM, 2 гейта, быстрее обучается Bi-RNN → читает последовательность в обе стороныКогда что брать — Короткие последовательности → RNN (или вообще не RNN) — Длинные зависимости → LSTM — Скорость важнее качества → GRU — Нужен контекст с обеих сторон → Bi-LSTM / Bi-GRU — Очень длинные последовательности → Transformer PyTorch — минимально
lstm = nn.LSTM(input_size=10, hidden_size=64,
num_layers=2, batch_first=True)
out, (h_n, c_n) = lstm(x) # x: (batch, seq_len, input_size)
Типичные проблемы
— Vanishing gradient → LSTM/GRU + gradient clipping
— Exploding gradient → clip_grad_norm_ с порогом 1.0
— Переобучение → dropout между слоями
— Медленно → GRU вместо LSTM, или Transformer
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст500 байт/запись × 10 000 запросов/с × 100 записей/запрос = 500 МБ/с Лимит одной партиции = 24 МБ/с Нужно минимум 21 партицияНаивные решения и почему они не работают Случайный суффикс → нельзя искать по значению, не знаешь в какой партиции данные. Хэш от значения → данные распределены равномерно, но порядок потерян. Нельзя вернуть отсортированный результат. Первый символ → 5 400 уникальных символов в реальных данных (Unicode), часть символов всё равно не помещается в одну партицию. Правильное решение: границы по перцентилям Разбить отсортированные данные на N равных диапазонов и сохранить граничные значения:
import bisect, unicodedata
# Предварительно вычисленные границы из реальных данных
BOUNDARIES = ['', 'agartha', 'barstow', 'can you', ...]
def shard_id(title):
normalized = unicodedata.normalize('NFKD', title.lower())
return bisect.bisect(BOUNDARIES, normalized) - 1
Поиск границы — O(log n) через bisect, константа с предвычисленным списком.
Урок для дата сайнтиста
Это та же проблема что при партиционировании данных в pandas, Spark или Polars: если партиции неравномерные — одни воркеры простаивают, другие перегружены (data skew).
Решение одинаковое: не делить по первому символу или хэшу, а вычислять границы по перцентилям реального распределения данных. В Spark это называется range partitioning, в pandas — pd.qcut.
Данные всегда распределены неравномерно. Проектировать партиции нужно под реальное распределение, а не под удобство.
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#бустДля этого курса мы ищем классных спикеров-практиков.➡️ Что требуется от вас? ● BigTech бэкграунд: опыт работы разработчиком, тимлидом или архитектором в крупных технологических компаниях. ● Опыт управляемой разработки с ИИ: вы на практике знаете, как встроить AI-инструменты в личный или командный workflow (от постановки задачи до ревью AI-кода). ● Системный подход: умение превращать хаотичную генерацию кода в предсказуемый инженерный процесс (работа с архитектурой, чек-листами, легаси и покрытием тестами). ➡️ Что мы предлагаем? ● Достойную оплату за подготовку материалов и проведение занятий. ● Мощное продвижение личного бренда через медиаресурсы Proglib (наша аудитория — 1 млн+ айтишников). ● Возможность публиковать свои экспертные материалы и статьи на наших площадках. ● Доступ к сильному и закрытому профессиональному сообществу. Также мы ищем консультанта программы. Если вы практикующий эксперт и готовы помочь нам отвалидировать программу курса, дать рекомендации по актуальности тем и финальным результатам обучения — мы вас очень ждем. ➡️ Как с нами связаться: Telegram: @alinaa_kh E-mail: alina@proglib.io
«AI-инструменты в разработке: пишем код быстрее»Мы покажем живой разбор реального проекта: как с помощью AI-ассистентов мгновенно разбираться в чужой кодовой базе, искать нужные участки и собирать Pull Request. Только рабочие промпты, которые сэкономят вам часы рутины. 🎙 Спикер — Ольга Лукьянова, руководитель команды в SourceCraft (18+ лет развивала инструменты в JetBrains и Huawei). 👉 Узнать, как ускорить разработку с AI
tinystories_tokenized = default_tokenize(
name="roneneldan/TinyStories",
tokenizer=llama3_tokenizer,
)
model = default_train(
name="marin-nano-tinystories",
tokenized=tinystories_tokenized, # зависимость явная
model_config=llama_nano,
train_config=nano_train_config,
)
С помощью Marin обучили первую open-source 8B модель которая превзошла Llama 3.1 8B. Скрипт обучения и ретроспектива опубликованы — можно воспроизвести самостоятельно.
➡️ Фреймворк
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
