Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение
18.8K subscribers
2.23K photos
111 videos
64 files
4.63K links
Все самое полезное для дата сайентиста в одном канале.

По рекламе: @proglib_adv

Курс по ML: https://clc.to/4hNluQ

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5b03124c8ba6dcaa121c9
Download Telegram
💻 Топ-вакансий для дата-сайентистов за неделю

Data Scientist / Ведущий специалист по NLP/LLM — от 300 000 ₽, удалёнка

Senior MLE (SE) — от 5000 до 9000 $, удаленно по миру

Lead Data Scientist (RecSys) — от 6 000 до 8 000 $, удалёнка

ML Developer [OctAPI, МТС Веб Сервисы], удалёнка

Data Scientist (Python, Hadoop, MLFlow, ETL) — до 269 000 ₽, удалёнка

Дата-инженер, удалёнка

➡️ Еще больше топовых вакансий — в нашем канале Data jobs

Библиотека дата-сайентиста
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1
✔️ How to: выбирать метод импутации пропущенных значений

При работе с пропущенными данными важно не просто «заполнить пробелы», а сохранить структуру, вариативность и точность данных.

Вот 3 популярных метода:

Deterministic Regression
Заполняет пропущенные значения точным предсказанием по регрессионной модели.
🏮 Просто и быстро
Игнорирует естественную вариативность
Плохо работает с нелинейными зависимостями

Stochastic Regression
Добавляет шум к регрессионным предсказаниям
🏮 Сохраняет разброс значений
Всё ещё зависит от предположений модели
С трудом улавливает нелинейность

Predictive Mean Matching (PMM)
Подбирает реальное наблюдение из данных, которое ближе всего к предсказанному значению
🏮 Значения выглядят реалистично
🏮 Сохраняет вариативность и структуру
🏮 Отлично подходит для нелинейных данных

📊 На графике:
• Слева — Deterministic Regression: розовые точки строго на линии, игнорируют форму данных
• В центре — Stochastic Regression: немного разброса, но всё равно не отражает настоящую структуру
• Справа — PMM: значения естественно «вписаны» в данные

🎯 Вывод:
Если ваши данные нелинейны и вы хотите сохранить реализм и разброс — PMM будет наилучшим выбором.
Но всегда учитывайте специфику задачи и данных.

Библиотека дата-сайентиста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4🔥1
🤔 Зачем вообще понимать, как работает ML?

Сейчас многие просто запускают модельку в sklearn — и радуются точности 0.92.

Вроде всё работает… но почему?
А когда сломается — что делать?


Машинное обучение — это система, которую можно понять.

Если знаешь, что делает градиентный спуск, зачем нужен бустинг и как дерево принимает решения — ты не просто «запускаешь», ты управляешь моделью.

👉 Мы сделали курс, чтобы в это было реально въехать:

— без сложных формул;
— с интуитивными объяснениями;
— от простого к сложному.

Если хочешь перейти от «гуглю код» к «понимаю, как это работает» — ты по адресу!

Стартуем в сентябре — бронируй место на курсе уже сейчас
📱 Работа с API ChatGPT: руководство

В этом кратком руководстве мы разберём всё: от настройки проекта и получения ключа API до отправки запросов к языковым модели и понимания ключевых параметров.

👉 Это идеальный старт для тех, кто хочет интегрировать возможности OpenAI в свои приложения.

Библиотека дата-сайентиста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍2🔥1
🔖 Команда дня: продвинутые техники масштабирования признаков в Python

Часто мы используем стандартизацию или нормализацию — и этого достаточно.

Но если данные:

• имеют выбросы
• сильно смещены
• не похожи на нормальное распределение
➡️ тогда пора достать тяжёлую артиллерию.

Вот 4 метода масштабирования, которые спасают в таких ситуациях:

1️⃣ Квантильное преобразование (Quantile Transformer)

Преобразует распределение признака в нормальное или равномерное, используя эмпирические квантили:
from sklearn.preprocessing import QuantileTransformer
import numpy as np

X = np.array([[10], [200], [30], [40], [5000]])
qt = QuantileTransformer(output_distribution='normal', random_state=0)
X_trans = qt.fit_transform(X)


Преимущества:
• Устойчив к выбросам
• Не требует предположений о распределении
• Полезен перед алгоритмами, ожидающими нормальность (например, лин. регрессия)

2️⃣ Степенное преобразование (PowerTransformer)

Преобразует данные, делая их более похожими на нормальное распределение:
from sklearn.preprocessing import PowerTransformer
X = np.array([[1.0], [2.0], [3.0], [4.0], [5.0]])

pt = PowerTransformer(method='box-cox')
X_trans = pt.fit_transform(X)


method='box-cox' — только для положительных значений
• Есть вариант yeo-johnson, если есть нули или отрицательные значения

Полезно, когда:
• Требуется нормальность для моделей
• Данные положительные или симметричные

3️⃣ Робастное масштабирование (RobustScaler)

Центрирует по медиане, масштабирует по интерквартильному размаху (IQR):
from sklearn.preprocessing import RobustScaler
X = np.array([[10], [20], [30], [40], [1000]])

scaler = RobustScaler()
X_trans = scaler.fit_transform(X)


Преимущества:
• Идеально при наличии выбросов
• Не страдает от смещения из-за экстремальных значений
• Альтернатива StandardScaler

4️⃣ Нормализация векторов (Unit Vector Scaling)

Масштабирует каждую строку так, чтобы её длина была равна 1 (L1 или L2-норма):
from sklearn.preprocessing import Normalizer
X = np.array([[1, 2, 3], [4, 5, 6]])

normalizer = Normalizer(norm='l2')
X_trans = normalizer.transform(X)


Когда использовать:
• При работе с векторами признаков
• Для алгоритмов, чувствительных к направлению, а не к масштабу (например, KNN, косинусное сходство)

Библиотека дата-сайентиста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74🔥2😁1
💹 Чек-лист: как обрабатывать большие объёмы данных

Если ваш DataFrame больше, чем ваша оперативка — вам сюда 👇

How to: использовать Dask — Pandas на стероидах

— Обрабатывает данные по частям и параллельно
— Работает даже с файлами, не помещающимися в память
— Использует отложенные вычисления (операции запускаются только после .compute())
import dask.dataframe as dd

df = dd.read_csv("large_file.csv")
result = df.groupby("category")["sales"].mean().compute()


How to: ускориться с помощью Polars

— Библиотека на Rust → невероятная скорость
— Ленивое API + оптимизация вычислений
— Отлично подходит для локальных ETL/дашбордов
import polars as pl

result = (
pl.read_csv("large_file.csv").lazy()
.filter(pl.col("sales") > 1000)
.groupby("region")
.agg(pl.col("sales").mean().alias("avg_sales"))
.sort("avg_sales", descending=True)
.collect()
)


How to: передавать данные без копирования с Apache Arrow

— Формат хранения в памяти, оптимизированный под скорость
— Позволяет быстро передавать данные между Pandas, Polars и другими
import pandas as pd
import pyarrow as pa
import polars as pl

df_pandas = pd.DataFrame({"region": ["West", "East"], "sales": [100, 200]})
arrow_table = pa.Table.from_pandas(df_pandas)
df_polars = pl.from_arrow(arrow_table)


How to: запускать SQL-запросы с DuckDB

— Работает как SQLite, но для аналитики
— Поддерживает прямой SQL по CSV/Parquet без загрузки в память
— Отличный выбор, если вы «мысленно на SQL»
import duckdb

query = """
SELECT category, AVG(sales) AS avg_sales
FROM 'data/transactions.parquet'
WHERE transaction_date >= '2023-01-01'
GROUP BY category
ORDER BY avg_sales DESC
"""
result = duckdb.query(query).to_df()


How to: масштабировать обработку с PySpark

— Обработка огромных данных (даже в кластере)
— Поддержка отказоустойчивости и параллелизма из коробки
— Интерфейс похож на Pandas, но всё работает распределённо
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, avg

spark = SparkSession.builder.appName("SalesAnalysis").getOrCreate()
df = spark.read.csv("large_sales.csv", header=True, inferSchema=True)

result = (
df.filter(col("region") == "West")
.groupBy("category")
.agg(avg("sales").alias("avg_sales"))
.orderBy("avg_sales", ascending=False)
)

result.show()


How to: ускориться локально с Vaex

— Поддерживает 100+ млн строк без загрузки в память
— Использует memory-mapped файлы и ленивые вычисления
— Удобен для локальной аналитики, визуализации, препроцессинга
import vaex

df = vaex.open("big_data.csv")
result = df[df.sales > 1000].groupby("category", agg=vaex.agg.mean("sales"))


How to: стримить вручную с генераторами

— Идеально, если памяти совсем мало
— Построчная обработка без загрузки всего файла
— Полный контроль + низкий overhead
def process_csv(path):
with open(path, "r") as f:
header = next(f).strip().split(",")
for line in f:
row = line.strip().split(",")
record = dict(zip(header, row))
if float(record["sales"]) > 1000:
yield {
"region": record["region"],
"sales": float(record["sales"]) * 1.1
}

for item in process_csv("large_file.csv"):
print(item)


Библиотека дата-сайентиста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍4🤩3🥰1
🫣 Боитесь математики в ML?

Думаете, для этого нужно вспоминать университетские интегралы и решать сложные уравнения?

У нас хорошая новость: машинное обучение — это в первую очередь инженерная практика, а не математическая олимпиада. Здесь важнее понимать суть, а не выводить формулы.

Именно на таком подходе — через логику, интуицию и наглядные примеры — и построен наш курс «ML для старта в Data Science», где мы объясняем всё на пальцах, без боли и зубрёжки.

Регистрируйтесь, пока есть свободные места 😉
💬 Опыт подписчика: как потратить часы на очистку данных после парсинга

Один из наших подписчиков поделился своим опытом очистки грязных данных после веб-скрейпинга. Делимся его историей — вдруг вы узнаете в ней себя.

Думал, самое сложное — спарсить данные. А оказалось — привести их в порядок.

На выходных я собрал датасет для своего сайд-проекта. Парсинг прошёл без особых проблем — за пару часов всё было готово. А вот дальше началось настоящее веселье.

С чем я столкнулся:
— Пропуски в случайных местах
— Дубли из-за повторных запусков
— Даты в абсолютно разном формате
— Цены, записанные как строки, иногда даже словами ("twenty")


Потратив несколько часов на эксперименты (и выпив больше кофе, чем хотел бы признать), я кое-как вычистил всё с помощью Pandas. Делюсь, что сработало:

1️⃣ Работа с пропущенными значениями

Удалять всё подряд не хотелось, поэтому подход был аккуратным:
# Удаляю строки, где вообще нет данных
df_clean = df.dropna(how='all')

# Остальное заполняю заглушками
df_filled = df.fillna("N/A")


2️⃣ Удаление дублей

Повторные запуски скрипта дали одинаковые строки. Решается в одну строку:
df_unique = df.drop_duplicates()


3️⃣ Приведение к нужным форматам

Это спасло меня от последующих багов:
# Привожу названия товаров к нижнему регистру
df['product_name'] = df['product_name'].str.lower()

# Преобразую даты (если ошибка — получаю NaT)
df['date'] = pd.to_datetime(df['date'], errors='coerce')

# Преобразую цену в числовой формат
df['price'] = pd.to_numeric(df['price'], errors='coerce')


4️⃣ Очистка шума

Избавился от ненужного мусора:
# Удаляю колонку, если она вообще есть
df = df.drop(columns=['unnecessary_column'], errors='ignore')

# Оставляю товары только с ценой > 10
df_filtered = df[df['price'] > 10]


5️⃣ Первые инсайты

Когда всё стало чисто, можно было наконец-то что-то анализировать:
# Средняя цена по категориям
avg_price = df_filtered.groupby('category')['price'].mean()
print(avg_price)

# Гистограмма распределения цен
df_filtered['price'].plot(kind='hist', bins=20, title='Price Distribution')
plt.xlabel("Price")
plt.show()


Что я понял:
🟣 Парсинг — это только начало. Основная боль начинается после.
🟣 Pandas — суперсила. С его помощью можно разгрести 80% хаоса.
🟣 errors='coerce' — спасение. Преобразования не падают, если формат неожиданный.
🟣 В следующий раз сначала изучу практики очистки данных, а потом буду парсить.

Сейчас ищу хорошие подходы к:
🟣 Распознаванию цен, написанных словами ("forty-two" и т.п.)
🟣 Объединению разных форматов дат (особенно с названиями месяцев в разных языках)

💬 Если у вас есть свои фишки по чистке «грязных» парсинг-данных — расскажите в комментариях.

Библиотека дата-сайентиста #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍2😁2
Proglib Academy — это место, где вы превращаете теорию в практику. Здесь ваши знания становятся проектами для портфолио, а вы — более уверенным специалистом.

Выберите курс, который поможет сделать следующий шаг ⬇️

🚀 Для тех, кто начинает путь в IT:

Основы IT для непрограммистов
Программирование на Python (обновлённый)
Frontend-разработчик с нуля: HTML, CSS, JavaScript

🧠 Для будущих и настоящих Data Scientist'ов:

ML для старта в Data Science (начинается в сентябре)
Базовые модели ML и приложения
Математика для Data Science
AI-агенты для DS-специалистов (скоро второй поток)

🛠️ Для опытных разработчиков, готовых к росту:

Алгоритмы и структуры данных
Архитектуры и шаблоны проектирования

Независимо от вашей цели, у нас есть курс, который поможет её достичь. Переходите в Proglib Academy, выбирайте свой путь и инвестируйте в навыки, которые всегда будут в цене!
📹 Что посмотреть: OpenAI представила GPT-5

Прошла трансляция с официальным анонсом новой модели — GPT-5.

➡️ GPT-5 уже здесь. Новая ИИ-система от OpenAI собрала в себе всё лучшее от моделей o1 и o3. Обновлённая архитектура стала адаптивной и объединила опыт прошлых версий в единую платформу.

Что показали:
— Улучшения в reasoning и пошаговой логике
— Новый уровень качества в генерации текста и кода
— Улучшенное управление памятью и контекстом
— Демки в реальном времени
— И немного о будущем ChatGPT и API

🔗 Смотреть запись презентации: https://clc.to/vNmVGg

Библиотека дата-сайентиста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4🔥3
🐬 Dolphin — превращает PDF в структурированные данные

Dolphin (Document Image Parsing via Heterogeneous Anchor Prompting) — 100% open source-модель для автоматического разбора PDF и сканов.

Зачем нужен:
— Конвертирует документы в готовые форматы: Markdown, HTML, LaTeX, JSON.
— Извлекает текст, таблицы, формулы и изображения.
— Полезен как для подготовки данных для LLM, так и для любых автоматизированных систем, архивов, поиска и аналитики.

Как работает:
1️⃣ Анализ макета страницы — определяет все элементы в естественном порядке чтения.
2️⃣ Параллельный парсинг — с «якорями» и промптами под каждый тип контента.

Представьте, что у вас есть 500 отчётов в PDF с финансовыми таблицами и графиками. Dolphin превращает их в аккуратный CSV или JSON, готовый для анализа в Pandas или загрузки в базу данных — без ручного копипаста и правок.


💡 Лёгкая архитектура + параллельная обработка = высокая скорость без потери качества.

🔗 Репозиторий с кодом и моделями: https://clc.to/6gPIwA

Библиотека дата-сайентиста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍4🔥1