EasyData
925 subscribers
149 photos
10 videos
22 files
76 links
Добро пожаловать!
Меня зовут Мария Жарова, и это мой блог про науку о данных

Лайфхаки из будней MLщика, полезности по Data Science и ответы на вопросы, которые волнуют новичков и не только🌝

Автор @NaNCat
加入频道
Head_First_GIT.pdf
127.7 MB
Какой инструмент объединяет всех программистов?👀
С помощью него мы можем создавать большие проекты, удобно работать в команде, версионировать код…

Конечно, это git (не путать с GitHub:))
И помимо git + {add, commit -m “:)”, push} у него есть ещё масса полезных свойств, которые подробно описаны на 466 страницах книги Р. Ганди.
Здесь вы найдёте всё про основы Git, свойства ветвлений, слияние, коммиты, устройство репозитория, отмену действий и исправление ошибок🐈
Также в отдельном разделе рассказывается про командную работу, методы и советы по эффективной организации взаимодействия.

Всем слияний без конфликтов👨‍💻

#mlops@data_easy
#лайфхаки@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
👍105🔥3🐳1🤪1
Наверное, многие слышали выражение в духе "модель в вакууме бесполезна". Имеется в виду, что как бы ни была хорошо обучена модель, пока её не внедрят "в production", обычный пользователь не сможет ею воспользоваться - а значит, и никакого смысла в её создании пока нет🥲
В этот момент может показаться, что обязательно должна найтись какая-то компания, которая возьмёт вашу модель и начнёт её использовать на реальных пользователях. Но вообще говоря, это не совсем так😉 Под выражением "этап вывода в production" (особенно в учебной практике) подразумевается просто обёртка в какое-нибудь простое приложение, развёрнутое на локальном сервере (т.е. на вашем компьютере). Пример можно увидеть на скрине - это полноценная веб-страница, на которой можно интерактивно получить предсказание вида ириса по его характеристикам (да-да, это модель, обученная на датасете iris.csv🌸). 
Смысл такой "локальной" демонстрации в том, что можно как минимум наглядно показать людям, далёким от программирования (например, это могут быть те же заказчики ваших ml-решений на работе) возможности и принцип работы модели. А если ещё заморочиться с дизайном покрасивее и развернуть приложение на удалённом сервере (это, кстати, можно сделать бесплатно, но, как правило, с ограниченным числом запросов к нему) - то получится настоящая демо-версия проекта👑
Такую вещь, на самом деле, легко реализовать при помощи библиотеки Flask на Python буквально в 20 строчек кода, ловите шаблон этого мини-проекта в архиве☄️
🚀 запускать из папки flask_example командой python app.py
🚀 после этого приложение запустится и будет доступно по локальному адресу http://localhost:5000 - можно открыть его в браузере и протестировать
🚀 в файле index.html хранится html-шаблон веб-страницы: по надписям, которые мы видим на ней в браузере, можно определить, какие места в коде за них отвечают, и изменить их:)

Из альтернативных способов «вывода в production», которые можно реализовать в домашних условиях - телеграмм-бот или приложение streamlit, про них расскажем в следующих выпусках🤗

#mlops@data_easy
🔥9👍5💘2
➡️НАВИГАЦИЯ ⬅️
Добавила хэштеги ко всем актуальным постам канала🤩

🖱 Технические посты по направлениям:

#python@data_easy
#математика@data_easy
#аналитика@data_easy
#classic_ml@data_easy
#dl@data_easy
#cv@data_easy
#nlp@data_easy
#аудио@data_easy
#mlops@data_easy

🖱Маленькие технические полезности, которые не попали в предыдущие рубрики:
#лайфхаки@data_easy

🖱 Всё про поиск работы - лайфхаки, каналы с вакансиями, задачи для собеседований:
#карьера@data_easy

🖱Новости в сфере ИИ и обзоры на полезные нейросети:
#полезный_ии@data_easy

🖱Важная рубрика, которой оказалось очень мало в канале, будем исправлять
ситуацию!

#мем@data_easy

🖱Уютный чат для общения:
https://yangx.top/+v1fdmoHV3JwyYTJi

🖱YouTube канал EasyData:
https://youtube.com/@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥4👍1
Привет, друзья!🌞
Сегодня обсудим тему хранения данных🗃 При работе с ML или аналитикой часто приходится сохранять промежуточные и конечные результаты в виде файлов - от датасетов до чекпоинтов моделей. И обычные базы данных, а тем более локальные диски и файловые системы быстро становятся неудобными... В таких случаях отлично подходит Amazon S3 (Simple Storage Service) - надёжное облачное хранилище, которое стало стандартом в индустрии.

📂 Что такое S3 и как оно устроено?
S3 - это объектное хранилище, в котором данные организуются не в файлы и папки, а в бакеты (buckets) - контейнеры, внутри которых хранятся объекты (файлы любого типа). У каждого объекта есть свой уникальный ключ (путь, по нему можно получить доступ к файлу) и метаданные.

📂Главные принципы работы с S3:
➡️ Бакеты - это аналог корневых папок, в них лежат файлы (объекты).
➡️ Объекты - это загружаемые файлы (CSV, JSON, изображения, модели и т. д.), доступные по URL.
➡️ Политики доступа - гибко настраиваются, можно делать файлы публичными или закрытыми.
➡️ Версионирование - можно хранить несколько версий одного файла.
➡️ Архивы - для экономии места можно настроить автоматическое перемещение старых данных в архивное хранилище Glacier.

📂 Как развернуть S3 у себя?
➡️ Можно воспользоваться облачной версией (AWS S3), для этого:
- зарегистрируйтесь на AWS
- в консоли AWS создайте новый S3-бакет
- настройте права доступа (приватно или публично)
- загружайте файлы и работайте с ними через API или веб-интерфейс
Первые 5 ГБ хранилища бесплатны, дальше - зависит от объёма (около $0.023 за 1 ГБ).
➡️ Или полностью бесплатные аналоги S3 для локальной работы - MinIO и LocalStack, можно запустить их через Docker.

К слову, S3 легко интегрируется с Python, Spark, MLflow и другими инструментами для анализа данных и машинного обучения.

Хорошего вечера! 🚀

#mlops@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥164👍1👨‍💻1
boto3_examples.py
2 KB
Привет, друзья!
Долго об этом думала и решилась — пора менять вектор развития. Сколько можно настраивать гиперпараметры, бороться с переобучением, разгребать логи и объяснять, что "предсказание — это не стопроцентная гарантия!" Хочется чего-то более осязаемого…

С сегодняшнего дня я становлюсь фермером. Буду выращивать клубнику, бороться с вредителями и обучать нейросети отличать спелые ягоды от неспелых (ладно, все-таки Data Science совсем бросить не получится😁).

В продолжение предыдущего поста держите небольшую шпаргалку по библиотеке boto3 для работы с S3 на Python. Составляла для себя, чтобы быстрее обрабатывать данные об урожае — возможно, пригодится и вам 🔆

🔗Ссылка на официальную документацию тут.

Солнечного дня!🌅

#mlops@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21🤣10👍54🤔3
Изучаем_Spark_Молниеносный_анализ_данных_by_Захария_М_,_Венделл.pdf
15.7 MB
Привет, друзья!
Сегодня поговорим про Apache Spark - один из самых мощных инструментов для обработки больших данных😎

💡 Что это такое?
Apache Spark - это платформа для быстрой и распределённой работы с большими данными. Она делит их на части и параллельно обрабатывает на нескольких серверах (кластере).

💡 Чем Spark хорош?
1. Быстрота: в отличие от других традиционных систем, Spark держит данные в оперативной памяти, что позволяет выполнять цепочки преобразований в разы быстрее.
Для сравнения: многие классические SQL-базы хранят данные на диске и только частично кэшируют их в памяти для ускорения запросов.
К слову, Pandas тоже работает в памяти, как и Spark, но рассчитан на обработку только на одной машине - если данные не помещаются в память, начинаются проблемы с производительностью.

2. Распределённость и масштабируемость: упомянутую выше проблему Spark решает! Он умеет распределять данные и обработку между множеством серверов в кластере, масштабируя работу на необходимый объем ресурсов.

3. Универсальность: Spark поддерживает сразу несколько сценариев работы с данными.
Можно писать SQL-запросы (Spark SQL), строить пайплайны машинного обучения (Spark MLlib), обрабатывать потоковые данные в реальном времени (Spark Structured Streaming) и работать с графовыми структурами (Spark GraphX).

4. Поддержка нескольких языков: можно писать код на Python (через библиотеку PySpark, причём она поддерживает и синтаксис SQL), Scala, Java и R.

💡 Как писать код для Spark?
Синтаксис для Python реализован через библиотеку PySpark, он очень напоминает по логике работу с Pandas и Polars.
Данные также представлены в виде таблиц (DataFrame), а операции можно писать цепочкой методов (select, filter, groupBy и т.д.). Можно даже писать чистые SQL-запросы к таблицам.
Главное отличие: в PySpark все операции "ленивые", они накапливаются в план выполнения и запускаются только при явном запросе результата (collect, show, write).

💡 И, конечно, полезные материалы!
1. Методичка ИТМО по Spark.
2. Хорошее обучающее видео на русском.
3. Книга "Learning Spark" от O’Reilly во вложении - очень крутое введение в тему (возможно, вам удастся найти более новую версию:)).
4. Документация Databricks по PySpark (тут много базовых примеров).
5. И официальная документация PySpark.

Удачи с большими данными, друзья! 🌟

#mlops@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
17🔥11❤‍🔥7👍1🐳1
Методичка_кафка.pdf
8.7 MB
Привет, друзья!
Не так давно в LinkedIn завирусилась очень полезная методичка по Apache Kafka - не смогла пройти мимо😁

Пару слов что такое Kafka и зачем она нужна...

Это распределённая платформа потоковой передачи сообщений, которая позволяет:
1️⃣ Собирать данные из разных источников (логов, БД, API...) в реальном времени.
2️⃣ Сохранять события в виде сообщений, которые можно читать многократно, разными потребителями и спустя время (в отличие от RabbitMQ).
3️⃣ Подключать обработчики (консьюмеры), которые анализируют или трансформируют поток данных - например, для аналитики, мониторинга или ETL.
4️⃣Организовывать обмен сообщениями между микросервисами так, чтобы они не зависели напрямую друг от друга - каждый подписывается на нужный поток и обрабатывает события независимо.

Ещё ссылки...
✴️ Официальная документация Kafka
✴️ Интерактивный учебник от Confluent
✴️ Документация confluent-kafka (обёртка для работы на Python)
✴️ И во вложении та самая методичка:)

Солнечной недели!🔆

#mlops@data_easy
16🔥8
This media is not supported in your browser
VIEW IN TELEGRAM
Привет, друзья!
Если вам нравится автоматическая аналитика по типу YData Profiling, то, возможно, придётся по душе и Evidently!
Эта библиотека активно развивается и содержит множество удобных обёрток для мониторинга качества данных в проде.

💡Вот что она умеет:
- Анализировать качество данных: пропуски, типы данных, распределения... похоже на возможности YData.
- Отслеживать дрифт признаков и таргета: сравнивает две выборки по ключевым статистическим характеристикам (например, train и prod датасеты).
- Мониторить метрики моделей во времени: можно встроить в пайплайны (Airflow, Prefect, CI/CD), чтобы отслеживать изменения в качестве.
- Оценивать входы и выходы LLM: есть специальные отчёты для анализа prompt-response (длина, токсичность, повторяемость и т.п.)
- Работать локально или в облаке: можно использовать просто в ноутбуке или развернуть Evidently UI для команды.
- И самое главное:) Она создаёт интерактивные HTML-отчёты за пару строк кода.

💡Полезные материалы:
- официальная документация (сразу ссылка на quickstart)
- youtube-канал с видео-туториалами
- репозиторий библиотеки на github


Пусть дрифт остаётся на треке, а не в проде 🚙

#аналитика@data_easy
#mlops@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍5❤‍🔥3
Привет, друзья!
Во многих задачах - от классификации и кластеризации до поиска похожих объектов и генерации рекомендаций - важно уметь эффективно находить ближайшие векторы в высокоразмерном пространстве. Но как только число векторов превышает несколько тысяч, простые методы из sklearn и numpy начинают работать непозволительно медленно🐌 При масштабах же в миллионы объектов стоит задуматься уже не только про быстроту, но и про оптимизацию, балансируя между точностью, скоростью и потреблением памяти.

В таких случаях приходят на помощь библиотеки для быстрого KNN в высокоразмерных пространствах. Самая известная, пожалуй, Faiss от Facebook AI Research. Вот её главные преимущества:

🔠 Подкапотная реализация на C++ с SIMD-оптимизациями и продуманным управлением памятью в Python-обёртке. А ещё это значит, что Faiss не блокируется GIL'ом и отлично масштабируется по потокам: можно параллелить поиск через joblib.Parallel или ThreadPoolExecutor.
🔠 Поддержка GPU, что также даёт прирост скорости в десятки раз.
🔠 Гибкость индексов: от точного поиска (Flat) до приближённых структур с квантованием и кластеризацией.

Рассмотрим основные типы индексов:

🔠 IndexFlat - базовая реализация, которая хранит все векторы в RAM и выполняет точный линейный поиск. Работает быстро на малых объемах (<100K векторов), также идеален для отладки или в случаях, если поиск каждый раз нужно осуществлять в разных ограниченных подпространствах векторов (тогда просто запускаете с тем же Parallel:)).
🔠 IndexIVF (Inverted File Index) - предварительно перед поиском он кластеризует всё пространство векторов (например, с помощью k-means).
При поиске сначала выбираются N ближайших кластеров, а затем производится поиск заданной глубины K внутри них.
На моей практике, даже с учётом времени на обучение индекса, IVF ускорил процесс поиска в ~8 раз по сравнению с Flat+Parallel, при этом точность результата по метрикам проявилась только в 5-м знаке после запятой (ещё и в бОльшую сторону! 😎)
Но есть уже озвученное "НО" - такой индекс требует предварительного обучения, и на это нужно время. Поэтому имеет смысл его использовать, если запросы каждый раз делаются из одинакового и фиксированного пространства.
Если захотите воспользоваться IVF, то упомянутые N и K лучше брать как √d и 2–4*(размер топа, который вы ищете) соответственно, где d - количество векторов в базе для поиска.
🔠 IndexIVFPQ (Product Quantization) добавляет к IVF еще одно ускорение - сжимает векторы до компактного кода (например, 8 байт вместо 128 float32). Работает ещё быстрее и экономит память при минимуме потерь в точности. Имеет смысл посмотреть в сторону этого подхода, если у вас порядка миллиарда векторов.
🔠HNSW-семейство индексов (Hierarchical Navigable Small World) - индексы на основе графов малого мира, где каждый вектор представляется как вершина, связанная с соседями в многослойной структуре. Поиск происходит за счёт навигации по графу: сначала на грубом уровне, затем всё точнее.
Такие индексы не требуют предварительного обучения и хорошо подходят для динамических баз, где данные часто добавляются на лету. Отличаются высокой точностью даже при небольшой глубине поиска, но потребляют больше памяти и не поддерживаются на GPU.

Полезные ссылки:
🔠 Официальный репозиторий Faiss.
Там же ссылка на quick start и базу jupyter-ноутбуков с примерами кода на Python
🔠 Ещё пара хороших туториалов с примерами кода тут и тут
⚠️Если решите установить версию с поддержкой GPU, лучше использовать эту

Лёгкой и солнечной недели! ☀️

#mlops@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥112🙏1