Data Science: SQL и Аналитика данных
28.2K subscribers
234 photos
46 videos
1 file
283 links
№ 6205468675

На простом языке: про работу с данными, современные технологии, AI, машинное обучение и, немного, SQL.

Сотрудничество: @niktwix

Менеджер: @Spiral_Yuri
Download Telegram
Каждый месяц — битва с бесконечными таблицами и версиями «финальной» цифры.

В какой-то момент кажется, что всё сошлось, но уверенности нет. Хватит ли вам сил и времени на этот хаос? 😓

9 сентября, на вебинаре от Дельта BI, Navicon и Денвик Аналитика вы
узнаете, как навести порядок в данных и автоматизировать процессы, чтобы стать настоящим чемпионом аналитики.

Представьте, что вы:
📍 Быстро и безопасно выгружаете данные из 1С, словно по волшебству.
📍 Объединяете таблицы Excel с другими источниками с помощью удобного low-code ELT, словно это детская игра.
📍 Создаёте дашборд в Дельта BI, который работает сам по себе, освобождая ваше время для важных дел.

Умение правильно использовать аналитику — ключ к успеху.

Это возможность быть на шаг или два впереди конкурентов, быстро реагировать на изменения рынка и принимать обоснованные решения.

🔗 Присоединяйтесь к нам! Зарегистрируйтесь по ссылке

После этого вебинара вы наконец-то скажете: «Теперь я понимаю, как сделать аналитику простой и эффективной!»🚀
This media is not supported in your browser
VIEW IN TELEGRAM
➡️Вы когда-нибудь задумывались, как лучше всего нарезать лук?

Американский шеф и писатель J. Kenji López-Alt, а затем и издание The Pudding собрали математическую модель, которая отвечает на этот вопрос. В проекте рассматриваются разные виды надрезов — вертикальные, радиальные, надрезы к воображаемой точке под луковицей: всё, чтобы получить кусочки минимально отличающиеся по размерам.

⏺️Да, в реальной жизни никто не переживает, что луковые дольки для салата получаются разного размера. Но The Pudding снова сделали шоу: все способы нарезки можно настроить и сразу посмотреть, какие кусочки получатся на выходе.

🫡 Всё пиз-Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 SQL-задача с подвохом: почему COUNT(*) считает не так, как ты думаешь?

➡️ Условие:

У тебя есть две таблицы:


users
---------
id | name
---|-----
1 | Alice
2 | Bob
3 | Charlie


orders
----------
id | user_id | total
----|---------|-------
1 | 1 | 100
2 | 1 | 200
3 | 2 | 300



Нужно вывести всех пользователей и количество их заказов, включая тех, у кого заказов нет вообще.

Ты пишешь:


SELECT u.id, u.name, COUNT(o.id) AS order_count
FROM users u
JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name;



⏺️ Результат:


1 | Alice   | 2  
2 | Bob | 1
А где Charlie? 😡



⏺️Подвох: JOIN убирает строки без соответствий — Charlie не попадает в результат вообще.
Нужно использовать LEFT JOIN, чтобы сохранить всех пользователей.

➡️ Правильное решение:


SELECT u.id, u.name, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name;



Теперь результат:


1 | Alice   | 2  
2 | Bob | 1
3 | Charlie | 0



➡️ Вывод:

Хочешь сохранить всех из "левой" таблицы — используй LEFT JOIN. А COUNT(о.id) не считает NULL — и это хорошо: ты получаешь реальное число заказов, а не просто 1 за NULL.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🔥SQL ТРЮК: Как выбрать первые N строк в каждой группе

Вот полезный трюк: используем функцию роз намбер с патришн бай чтобы нумеровать строки внутри каждой группы, а потом фильтруем по номеру.

Ты получишь первые два события для каждого пользователя. Можно легко адаптировать под «топ‑пять товаров в каждой категории.

Этот трюк работает в большинстве современных СУБД, поддерживающих оконные функци


sql
WITH ranked AS (
SELECT
user_id,
event_time,
event_type,
ROW_NUMBER() OVER (
PARTITION BY user_id
ORDER BY event_time ASC
) AS rn
FROM user_events
)
SELECT *
FROM ranked
WHERE rn <= 2;



⏺️Этот запрос выберет первые 2 события *по каждому пользователю*. Просто, чисто и кросс‑совместимо — работает в PostgreSQL, MySQL 8+, SQL Server и других.

➡️ https://www.youtube.com/shorts/X5CJn1eLW20

🫡 Всё пиз-Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Open-source инструмент для просмотра CSV, JSON, Excel и других таблиц прямо в терминале — без потери форматирования, аккуратно и читабельно.

Что умеет:

⏺️ Встроенный SQL-движок: фильтры, джойны и анализ прямо в терминале;
⏺️ Vim-подобные хоткеи (для фанатов, да 😁);
⏺️ Быстрый поиск, работа с несколькими таблицами, поддержка тем (Monokai, Nord и др.).

➡️ Посмотреть на GitHub

🫡 Всё пиз-Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ RisingLight — образовательная OLAP-база данных.

Этот проект разрабатывается как учебная реализация OLAP-системы с поддержкой SQL-запросов, включая выполнение TPC-H тестов.

Для тех, кто хочет заглянуть под капот аналитических баз данных, RisingLight предлагает отличную возможность изучить их устройство на практике. Хотя проект пока не готов для production, он уже даёт представление о ключевых компонентах СУБД: от парсера запросов до исполнителя. Сообщество активно развивается: есть Discord, Telegram и даже WeChat-чат для обсуждения. Авторы приветствуют вклад новичков и предлагают список "good first issues" для первых PR.

➡️ Посмотреть на GitHub

🫡 Всё пиз-Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Продвинутая задача по SQL (Oracle): найти «бычьи серии» продаж и момент разворота

Задача
Есть таблица продаж по дням:

sales(day_date DATE, customer_id NUMBER, amount NUMBER)

Нужно для каждого клиента найти интервалы из не меньше 3 подряд идущих дней, где сумма amount строго возрастает каждый день, а на следующий день после интервала происходит разворот вниз (т.е. amount меньше, чем в последний день серии). Для каждого такого интервала вернуть:
- customer_id
- start_date, end_date серии
- length (длина серии в днях)
- last_amount (сумма в последний день серии)
- drop_amount (сумма в день разворота)
- drop_pct (процент падения относительно last_amount)

Решение (Oracle 12c+): используем MATCH_RECOGNIZE


SELECT *
FROM sales
MATCH_RECOGNIZE (
PARTITION BY customer_id
ORDER BY day_date
MEASURES
FIRST(day_date) AS start_date,
LAST(day_date) AS end_date,
COUNT(A.*) AS length,
LAST(amount) AS last_amount,
NEXT(amount) AS drop_amount,
ROUND( (LAST(amount) - NEXT(amount)) / NULLIF(LAST(amount),0) * 100, 2 ) AS drop_pct
ONE ROW PER MATCH
AFTER MATCH SKIP PAST LAST ROW
PATTERN (A{3,} D)
DEFINE
A AS ( PREV(amount) IS NULL OR amount > PREV(amount) ),
D AS amount < PREV(amount)
);



Пояснение
- PATTERN (A{3,} D) — ищем подпоследовательность из минимум трёх строго возрастающих дней A, за которой сразу идёт день падения D.
- DEFINE A — рост относительно предыдущего дня в группе клиента.
- DEFINE D — падение относительно предыдущего дня (последнего A).
- MEASURES — извлекаем границы серии и метрики, NEXT(amount) берёт сумму в день разворота.
- AFTER MATCH SKIP PAST LAST ROW — не пересекаем серии.

Бонус: защита от «лестниц» с пропусками дат
Если в данных бывают пропуски дней, а вам нужны подряд идущие даты, добавьте проверку календарной последовательности:


DEFINE
A AS ( (PREV(amount) IS NULL OR amount > PREV(amount))
AND (PREV(day_date) IS NULL OR day_date = PREV(day_date) + 1) ),
D AS ( amount < PREV(amount) AND day_date = PREV(day_date) + 1 )



Зачем так делать:

⏺️MATCH_RECOGNIZE — мощный инструмент Oracle для поиска сложных паттернов по времени (распознавание трендов, разрывов, «голова-плечи», аномалий). Он заменяет громоздкие CTE с аналитиками и делает запрос короче, быстрее и точнее при работе с последовательностями.

🫡 Всё пиз-Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
❤️ Учим SQL через захватывающую аркадную игру

Разработчики замутили настоящий олдскульный
шедевр, который сделает из вас МАСТЕРА баз данных и точно не даст заскучать.

⏺️ Проходим уровни, собираем пазлы вместе с уткой DuckDB и прокачиваем SQL на максимум.
⏺️ Квесты, задачи, подсказки — всё как в настоящем приключении.
⏺️ Работает прямо в браузере и даже на телефоне.

Любые запросы к базам — щёлкаем как семечки

➡️ https://dbquacks.com/

🫡 Всё пиз-Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
🔥 Jupyter Agent 2

Этот агент умеет:

⏺️ Загружать данные
⏺️ Запускать код
⏺️ Строить графики прямо в Jupyter — быстрее, чем вы успеете прокрутить экран!

⏺️ Основан на движке Qwen3-Coder
⏺️ Работает на Cerebras
⏺️ Запускается в E2B
⏺️ Поддерживает загрузку файлов

➡️ Попробовать можно здесь: клик

Всё пиз-Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ DOOMQL: Doom на SQL

Doom на чем только ни запускали — на картошке, калькуляторе и тесте на беременность. Кажется, эта игра будет жить вечно, и через сотни лет ее будут запускать на кибернетических имплантах, космических кораблях или Пип-боях — в зависимости от того, куда в итоге повернет цивилизация. Ну а пока будущее не наступило, предлагаем оценить очередное воплощение бессмертной игры — теперь полностью на SQL.

У Лукаса Вогеля была CedarBD, месяц отпуска по уходу за ребенком и источник вдохновения — DuckDB-Doom. Да, это еще один Doom на SQL с вкраплениями JavaScript.

Лукас решил, что он может усовершенствовать эту идею:
⏺️отказаться от JS и написать все полностью на SQL,
⏺️улучшить производительность,
⏺️добавить мультиплеерный элемент.

Собственно, все это у него и получилось.
⏺️Все данные о мире игры — карта, мобы, игроки — размещены в таблицах. Все события — перемещения, выстрелы, убийства мобов, респавны — учитываются скриптом, который запускается 30 раз в секунду.
⏺️Визуал — это SQL-представления, отрисованные в 3D c помощью рейкастинга.
⏺️Можно не только играть с друзьями, но и даже читерить.
⏺️И все это с уверенными 30 FPS при разрешении 128 x 64 пикселей.

В общем, очередное доказательство превосходства как Doom, так и SQL. Если хотите своими глазами посмотреть, как вообще это работает, код лежит на гитхабе.

Всё пиз-Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
👀 Классический поиск по ключевым словам даёт ограниченные результаты.

Нашёл только одно совпадение: "Machine Learning Overview".

А вот pgvector ищет по смыслу и находит связанные концепции.

Пример запроса возвращает 5 релевантных документов:

⏺️ Machine Learning Overview
⏺️ Data Mining Basics
⏺️ Introduction to AI
⏺️ Deep Learning Guide

Семантический поиск > ключевого 🔥

🫡 Всё пиз-Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
Как эффективно выгружать данные из 1С в систему BI аналитики.

💹 Анализ продаж и задолженности, оборот товара, управление запасами, план продаж – это и многое другое можно анализировать в PIX BI, получив данные из 1С.

1C — это закрытая проприетарная система, подключиться к которой напрямую и просто выгрузить данные без нарушения лицензионной политики нельзя.
📊 Как загрузить данные из 1С в PIX BI мы расскажем на вебинаре вместе с нашим партнером «PIX BI».

1) Разберем - основные проблемы получения данных из 1С;
2) Рассмотрим - разные способы выгрузки данных из 1С в PIX BI;
3) Продемонстрируем - выгрузку из 1С в PIX BI без написания кода;
4) Покажем - как быстро визуализировать загруженные данные.

📌Бесплатный партнерский вебинар с тремя компаниями: Денвик Аналитика, PIX BI, Первый Бит.

Заполните заявку для регистрации на мероприятие:
https://webinar-denvic.ru/?utm_campaign=pdatascience&utm_content=target_telegram
🔥Python + таблички = PySheets

PySheets — онлайн-инструмент, в который можно загружать таблицы, анализировать их с помощью pandas и рисовать графики с помощью Matplotlib (и их потом можно куда-нибудь встроить). Про ИИ тоже не забыли ­— без него сейчас никуда. Он помогает писать код и выводит на консоль подсказки, как работать с PySheets. В платной версии это все можно делать вместе с коллегами.

➡️ И все это в браузере — не надо ничего разворачивать, устанавливать или платить за облако. Интерфейс очень простой: есть таблица, окошко для кода, консоль, кнопка для вызова ИИ-ассистента.

В полной мере ознакомиться с функционалом инструмента позволяет весьма подробный туториал аж из 7 частей. Доступен бесплатно, но после регистрации.

🫡 Всё пиз-Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Почему одни команды с AI делают релизы за неделю, а другие откладывают их на месяцы?

Секрет не только в выборе модели или ассистента. Главное — как встроить ИИ в процессы: от кода и тестов до общения с заказчиком. Ускорение в 2–3 раза возможно не потому что нейросеть сработает с одного промпта, а благодаря правильной организации — когда команда работает с ИИ как с полноценным членом команды.

➡️ Об этом и пойдёт речь на AI Boost 2025 (3 октября, Москва, ДК «Рассвет»).
Лидеры из Яндекса, Сбера, Альфа-Банка, Surf, T-Tech и других бигтехов расскажут, как реально меняется разработка в их продуктах.

Вы узнаете:

⏺️ Как приучить десятки разработчиков к вайбкодингу и при этом сохранить мир в команде

⏺️ Почему shift-left подход и автогенерация тестов уже стали стандартом QA

⏺️ Чем автономные AI-агенты отличаются от Copilot и как они берут на себя весь SDLC

Кроме выступлений, вас ждут два круглых стола:

⚔️ «ИИ vs Безопасность» — где баланс между скоростью релизов и критичными рисками в проектах с высокими требованиями к безопасности

🏗 «ИИ в продакшн» — можно ли доверить моделям архитектуру и код без потери качества и получения спагетти-кода

У участников будет возможность получить бесплатную консультацию с CTO Surf по внедрению ИИ в конкретные проекты.

🗓 Когда: 3 октября 2025 года, 12:00
📍 Где: Москва, ДК «Рассвет»
🎟 Регистрация

Реклама. ИНН 3665812625, erid: 2VtzqvoJxBn
➡️ SQL: условные агрегаты через CASE !!!

Хотите посчитать сумму только по условию прямо внутри агрегата?
Для этого не нужен отдельный WHERE — используйте CASE WHEN.


SELECT
customer_id,
SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END) AS completed_sum,
SUM(CASE WHEN status = 'pending' THEN amount ELSE 0 END) AS pending_sum
FROM orders
GROUP BY customer_id;



👀 В одном запросе можно посчитать суммы по разным статусам — и не делать несколько JOIN или подзапросов.
Работает также с COUNT(), AVG() и другими агрегатами.

🫡 Всё пиз-Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Мир по версии Google Street View

Каждая линия на графике показывает улицу, панораму которой можно посмотреть на Google Street View. И как много в этом смыслов! И развитость инфраструктуры, и политика.

Кстати, а кто понимает, что за внезапные панорамы в Антарктике?

Интерактив: https://sv-map.netlify.app/

🫡 Всё пиз-Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ C++ обертка для SQLite с расширенными возможностями

Библиотека boost_sqlite предоставляет удобный интерфейс для работы с SQLite в C++. Она поддерживает типизированные запросы, подготовленные выражения, функции на основе JSON и пользовательские функции. Библиотека не скрывает C-API SQLite, а дополняет его.

Основные моменты:


⏺️ Типизированные запросы и подготовленные выражения
⏺️ Поддержка JSON и пользовательских функций
⏺️ Виртуальные таблицы и хуки событий
⏺️ Легкая интеграция с существующими проектами

🫡 Всё пиз-Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Задача из интервью TikTok по SQL

Найдите пользователей, которые не подтвердили регистрацию в день регистрации, но подтвердили на следующий день.

Исходные таблицы:
- emails(email_id, user_id, signup_date)
- texts(text_id, email_id, signup_action {'Confirmed','Not confirmed'}, action_date)

Решение (универсально для Postgres/MySQL):

SELECT DISTINCT e.user_id
FROM emails e
WHERE EXISTS (
SELECT 1
FROM texts t1
WHERE t1.email_id = e.email_id
AND t1.signup_action = 'Confirmed'
AND DATE(t1.action_date) = DATE(e.signup_date + INTERVAL '1 day') -- подтвердил на 2-й день
)
AND NOT EXISTS (
SELECT 1
FROM texts t0
WHERE t0.email_id = e.email_id
AND t0.signup_action = 'Confirmed'
AND DATE(t0.action_date) = DATE(e.signup_date) -- не подтвердил в день регистрации
);


Вариант через агрегацию (Postgres)🧩


SELECT e.user_id
FROM emails e
JOIN texts t ON t.email_id = e.email_id
GROUP BY e.user_id, e.signup_date
HAVING COUNT(*) FILTER (
WHERE t.signup_action = 'Confirmed' AND DATE(t.action_date) = DATE(e.signup_date)
) = 0
AND COUNT(*) FILTER (
WHERE t.signup_action = 'Confirmed' AND DATE(t.action_date) = DATE(e.signup_date + INTERVAL '1 day')
) >= 1;


🫡 Всё пиз-Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Sqlite-vector: простой и удобный векторный поиск в SQLite

SQLite тоже умеет в векторный поиск — для этого уже есть несколько расширений. Но их главная проблема в том, что в основном они либо медленные, либо неудобные.

А ведь, наверное, главное, чего хотят от SQLite — чтобы он был легким, простым и быстрым. И, конечно, нашлись люди, которые попробовали разработать свое решение, отвечающее этим требованиям.

➡️ sqlite-vector — бесплатное кросс-платформенное расширение, которое обходится 30 МБ памяти, складывает векторы в обычные таблицы (без возни с виртуальными и сложными SQL-запросами), хранит данные локально и работает оффлайн. Ему не нужен дополнительный сервер и долгая нудная подготовка, настройка и преиндексиование.

Разработчики сравнили свое решение с популярными аналогами (точнее только с одним по факту) — если очень захотеть, то sqlite-vector может быть аж в 17 раз быстрее sqlite-vec. Да, названия у них не очень креативные и перепутать легко. С libsql сравнить не удалось, потому что он так долго возился с созданием индекса, что всем надоело ждать.

Расширение распространяется по Elastic License 2.0. Скачать можно с гитхаба.

🫡 Всё пиз-Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Удобный инструмент для управления кластерами Postgres

Ivory — это инструмент с открытым исходным кодом, который упрощает работу с кластерами Postgres, предоставляя удобный интерфейс для разработчиков и администраторов баз данных. Он позволяет управлять конфигурацией кластера, выполнять запросы и контролировать состояние в одном месте.

Основные моменты:

⏺️Упрощает управление Postgres кластерами
⏺️Интуитивно понятный интерфейс для основных функций Patroni
⏺️Возможность работы локально или в виртуальной машине
⏺️Поддержка редактирования конфигурации кластера
⏺️Инструменты для диагностики и устранения проблем

➡️ GitHub: https://github.com/veegres/ivory

🫡 Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
Стань LLM-инженером: от fine-tuning до запуска продуктивных ИИ-систем вместе с Газпромбанком и X5🚀

Курс «Инженер LLM» — про то, как на практике собирать рабочие архитектуры под реальные задачи, адаптировать open‑source решения и запускать продукты с ИИ, которые действительно работают.

Создан GIGASCHOOL, совместно с крупнейшей магистратурой по искусственному интеллекту AI Talent Hab.


Ты научишься:
➡️дообучать модели (fine-tuning, PEFT, LoRA / QLoRA, RLHF);
➡️работать с LangChain, LangGraph и векторными базами;
➡️собирать рабочие архитектуры под реальные задачи;
➡️строить RAG‑системы, реализовывать инфопоиск и защищать LLM;
➡️собирать пайплайны, деплоить, трекать, версионировать;
➡️проектировать мультиагентные решения и ассистентов.

Тебя будут обучать лиды и хеды ИИ-команд:
- Желтова Кристина, директор по разработке моделей в Газпромбанке;
- Потехин Александр, NLP Lead X5 Tech;
- Андреева Дарья, ML Engineer (NLP) X5 Tech.

▪️252 часа теории и практики;
▪️диплом о профессиональной подготовке;
▪️старт 15 октября | 25 недель онлайна с заранее продуманными каникулами;
▪️36 450₽/мес (рассрочка);
▪️повышение цены — 3 октября.


Посмотреть программу и оставить заявку
Please open Telegram to view this post
VIEW IN TELEGRAM