Data Science: SQL и Аналитика данных
37.6K subscribers
267 photos
57 videos
1 file
327 links
№ 6205468675

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

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

Менеджер: @Spiral_Yuri
Download Telegram
🔥 Гайд: как настроить WAL, чтобы отслеживать изменения в PostgreSQL?

Возможно, кто-то из прочитавших заголовок скажет — зачем возиться с WAL, если есть более простые способы. NOTIFY, например.

Да, действительно, и, если вам нужно мониторить изменения в небольшой, не слишком часто обновляющейся таблице, то это отличный вариант. Но дело в том, что все уведомления NOTIFY падают в одну очередь, и если таких уведомлений много, то они затормозят работу всей БД.

Кроме того, их размер ограничен 8000 байтов, чего может быть недостаточно. А еще, если сервис-получатель был по какой-то причине не доступен и сообщение не дошло, повторное через NOTIFY не отправляется — то есть данные просто потеряются.

В общем, не идеальный вариант.

➡️ Альтернатива — это настроить Write-Ahead Log или WAL, чтобы получать уведомления из него.

Спойлер: этот вариант тоже не идеальный. Как минимум, придется повозиться:
⏺️Изменить wal_level на logical со стандартного replica — так он начнет делать более подробные записи о том, как и что конкретно изменилось в базе.
⏺️Создать publications (то есть, расписать, какие таблицы и действия вы хотите отслеживать) и репликационный слот (то есть отдельную копию WAL, которая гарантирует, что никакие важные данные из лога не удалятся, пока уведомление не будет отправлено).
⏺️Создать listener, который будет получать уведомления и перенаправлять их дальше — в очередную таблицу, в приложение или мессенджер. Или вообще распечатать.

➡️ Но если вам нужно настроить отправку уведомлений и другие способы не подходят, это может быть вполне рабочее решение. Как воплотить его в жизнь, по шагам описано в подробном (очень подробном) гайде.

Всё про Data Science

🇷🇺 Читайте нас в MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Государство, вузы и бигтех: кто развивает ИИ-образование в мире?

Этим вопросом задалась команда J'son & Partners Consulting, которая сравнила подходы к подготовке ИИ-специалистов в России, США и Китае. Во всех трех странах ключевой вызов один — образование не успевает за темпами развития технологий, поэтому важно его адаптировать.

Какие меры предпринимают:

⏺️В Китае ИИ-образование взяло под свой контроль государство: оно задает стандарты обучения, выделяет финансирование на проекты, направленные на популяризацию технологий искусственного интеллекта, и вводит уроки по работе с ним в школьную программу.

⏺️В США ситуация противоположная: за подготовку ИИ-кадров отвечают топовые вузы, обучение в которых может стоить десятки тысяч долларов. Вместо массовости они делают ставку на обучение небольшого числа специалистов очень высокого уровня.

⏺️Россия пошла по своему пути: здесь ключевую роль играют бигтехи. Технологические компании совместно с вузами задают ориентиры подготовки ИИ-специалистов. Сегодня обучение развивается в формате партнерских программ — университеты дают фундамент, а бизнес приносит экспертизу в тех областях технологий, о которых еще на написаны учебники. По этой модели, например, запущен бакалавриат AI360 — совместный проект двух ведущих компаний и пяти университетов.

➡️ У всех трех моделей есть свои плюсы. Но если у вас стоит выбор STEM-вуза, смотрите и на конкретных партнеров, с кем он делает свои программы.

Всё про Data Science

🇷🇺 Читайте нас в MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Продвинутый SQL совет - всегда проверяй, можно ли заменить SELECT DISTINCT на правильный JOIN или EXISTS.

Очень часто DISTINCT добавляют просто чтобы убрать дубли после неудачного join. Запрос вроде работает, но по факту ты сначала раздуваешь результат, а потом заставляешь базу его чистить. На больших таблицах это легко убивает производительность.

Плохой вариант:


SELECT DISTINCT u.id, u.name
FROM users u
JOIN orders o ON o.user_id = u.id;



Лучше так:


SELECT u.id, u.name
FROM users u
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.user_id = u.id
);


Почему это сильный приём:
EXISTS останавливается, как только находит первое совпадение
не нужно тащить лишние строки
не нужно потом убирать дубли
логика запроса становится честной - ты проверяешь наличие, а не собираешь мусор

Это один из самых частых hidden performance fixes в SQL. Если видишь DISTINCT, сразу спрашивай себя: он тут реально нужен или просто маскирует плохую логику JOIN.

Всё про Data Science

🇷🇺 Читайте нас в MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Сколько денег приносит ИИ?

Amazon, Google, Microsoft и другие технокомпании вкладывают в ИИ огромные деньги: они выпускают все новые продукты на его основе и активно — иногда слишком — продвигают их среди клиентов и даже собственных сотрудников. Учитывая их рвение, может показаться, что это приносит им большие доходы, но, кажется, это не так. По крайней мере пока.

➡️ Здесь собрали данные о затратах и прибылях передовых ИИ-компаний: кроме уже упомянутых, там есть запрещенная в России Meta, Nvidia, OpenAI, Anthropic, Oracle, xAI, Mistral, Cohere и Deepseek.

В плюсе пока только Nvidia, которая с 2023 заработала на ИИ-чипах 253 миллиардов. Никто больше к таким результатам даже не приблизился, и в основном все в глубоком минусе.

Выглядит не очень, но стоит учитывать три фактора:
⏺️На графиках только затраты и доходы, связанные с ИИ, а не финансовые показатели компании в целом. То есть Copilot не привел Microsoft к банкротству.
⏺️Цифры приблизительные и основанные во многом на предположениях, оценках экспертов и слитых данных. Список источников внизу страницы.
⏺️Многие денежные потоки в индустрии движутся по кругу: от Google в Anthropic, от Anthropic в Nvidia и от Nvidia в Google. Это тоже влияет на точность оценки прибыльности ИИ-проектов.

В любом случае, выглядят данные любопытно и доля правды в них точно есть. Отсюда вопрос: как думаете, когда ИИ начнет окупаться?

Всё про Data Science

🇷🇺 Читайте нас в MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 SQL против мошенников

Интересная статья про паттерны, по которым можно выявить случаи мошенничества и подозрительной активности на банковских счетах с помощью простого советского SQL.

Большинство признаков, на которые надо обращать внимание, известны или интуитивно понятны, но автор еще и сами SQL-запросы показывает, и это уже может пригодиться.
⏺️Скорость снятия денег. Большое количество операций за короткий срок говорит о том, что мошенник пытается поскорее опустошить карту, пока владелец не заметил.
⏺️Телепортация — в течение небольшого промежутка времени карта использовалась в двух местах, между которыми физически невозможно переместиться с такой скоростью.
⏺️Снятия подозрительных сумм. Небольшие, круглые суммы — у автор это 1-5-10 долларов — говорят о том, что мошенник проверяет, работает ли карта. Сомнения должны вызывать и частые покупки на суммы ниже пределов, после которых требуется подтверждение личности или пин-код.
⏺️Внезапный рост числа уникальных карт у одного мерчанта. Если раньше через него проходили 200 карт в день, а потом их число подскочило до 1000+, это повод присмотреться к нему повнимательнее.
⏺️Операции в нетипичное для пользователя время. Например, если человек всегда платит днем, а потом внезапно начинает активно пользоваться картой в 3 ночи.

Чтобы выявлять все эти сигналы было проще, автор предлагает заранее материализовать их с помощью оконных функций:
SELECT
cardholder_id,
timestamp,
amount,
merchant_id,

timestamp - LAG(timestamp) OVER w AS time_since_last,

CASE WHEN merchant_id <> LAG(merchant_id) OVER w
THEN 'changed' ELSE 'same' END AS merchant_change,

sum(amount) OVER (
PARTITION BY cardholder_id
ORDER BY timestamp
RANGE BETWEEN INTERVAL '24 hours' PRECEDING AND CURRENT ROW
) AS running_24h_total,

ROW_NUMBER() OVER (
PARTITION BY cardholder_id, date(timestamp)
ORDER BY timestamp
) AS tx_of_day

FROM transactions
WINDOW w AS (PARTITION BY cardholder_id ORDER BY timestamp)
ORDER BY cardholder_id, timestamp;

И после этого уже прогонять проверки с помощью WHERE:
SELECT *
FROM tx_with_windows
WHERE tx_of_day >= 5
AND time_since_last < INTERVAL '60 seconds'
AND merchant_change = 'changed';


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

Всё про Data Science

🇷🇺 Читайте нас в MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 NornicDB: База данных, которая объединяет Graph + Vector и летает в sub-ms


Это гибрид: Graph + Vector + Temporal MVCC в одном ядре
заточен под AI-агентов и knowledge systems

Что внутри:

⏺️ HNSW поиск <1ms
⏺️ graph traversal без тормозов
⏺️ writes тоже быстрые, не только чтение

Из хорошего, это не Frankenstein из разных сервисов, а единая система.

Под капотом:

⏺️Neo4j-compatible (Bolt + Cypher)
⏺️ vector search как first-class citizen
⏺️ GPU acceleration
⏺️ T- emporal модель с версионированием данных

То есть ты можешь:

⏺️ искать эмбецдинги
⏺️ ходить по графу
⏺️ делать time-travel запросы
⏺️ всё это в одном запросе.

Фактически это попытка сделать “память для AI”:
где есть связи, смысл и история изменений, а не просто таблицы.

Если делаешь RAG, multi-agent системы или сложные knowledge graph - будет полезно.

➡️ GitHub: https://github.com/orneryd/NornicDB

Всё про Data Science

🇷🇺 Читайте нас в MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Edit Banana редактирует текст прямо на картинках за пару кликов.

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

Модель уверенно справляется с таблицами, формулами и диаграммами, сохраняет исходные цвета, шрифты и позиции элементов. Готовый результат экспортируется в DrawIO, SVG или PowerPoint.
Проект полностью открытый, ставится локально с GitHub.

Забираем, пока не закрыли:

➡️ https://github.com/BIT-DataLab/Edit-Banana

Всё про Data Science

🇷🇺 Читайте нас в MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Text-to-SQL ломается не из-за модели. Он ломается из-за схемы

Большинство думает, что проблема в LLM или плохом промпте. На практике всё проще. Модель не видит правильные связи между таблицами.

Пример. Запрос вроде “какие издатели получили выплаты выше 5000”. Векторный поиск подтянет publisher и royalty_ledger. Всё логично. Но пропустит vendor_agreement, ту самую таблицу, которая их связывает.

В итоге SQL выглядит валидно. Но возвращает ноль строк.

Это системная проблема всех решений на embeddings. Они ищут по смыслу, но не понимают структуру базы.

Нормальный подход другой. Схему нужно рассматривать как граф.

Таблицы это узлы. Foreign keys это связи. Запрос решается не поиском похожих слов, а обходом графа и поиском join-пути.

Именно так работает QueryWeaver.

Он строит граф базы и при запросе сам находит весь путь, включая промежуточные таблицы. Даже если это цепочка из нескольких шагов.

На практике это выглядит так. В тесте с базой на 60 таблиц он разобрал 5-шаговый запрос через цепочку superpower → capability_matrix → stakeholder_registry → resource_requisition → budget_allocation.

Векторный поиск увидел только начало и конец. Всё между ними потерял, потому что “stakeholder” никак не связан по смыслу с “superpower”.

Графу на это всё равно. Он просто находит единственный путь между сущностями.

И это меняет всё.

Open-source, можно развернуть у себя и наконец получить text-to-SQL, который реально работает.

➡️ https://github.com/FalkorDB/QueryWeaver

сё про Data Science

🇷🇺 Читайте нас в MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Продвинутый SQL совет - всегда проверяй, можно ли заменить SELECT DISTINCT на правильный JOIN или EXISTS.

Очень часто DISTINCT добавляют просто чтобы убрать дубли после неудачного join. Запрос вроде работает, но по факту ты сначала раздуваешь результат, а потом заставляешь базу его чистить. На больших таблицах это легко убивает производительность.

Плохой вариант:


SELECT DISTINCT u.id, u.name
FROM users u
JOIN orders o ON o.user_id = u.id;


Лучше так:


SELECT u.id, u.name
FROM users u
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.user_id = u.id
);


Почему это сильный приём:
EXISTS останавливается, как только находит первое совпадение
не нужно тащить лишние строки
не нужно потом убирать дубли
логика запроса становится честной - ты проверяешь наличие, а не собираешь мусор

Это один из самых частых hidden performance fixes в SQL. Если видишь DISTINCT, сразу спрашивай себя: он тут реально нужен или просто маскирует плохую логику JOIN.

➡️ https://github.com/FalkorDB/QueryWeaver

Всё про Data Science

🇷🇺 Читайте нас в MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
За год число вакансий с требованиями ИИ-навыков значительно выросло.

Работодатели всё чаще ожидают, что специалисты умеют использовать нейросети в работе.

У Яндекс Практикума есть курсы по ИИ для разных задач: от работы с нейросетями и автоматизации процессов до создания AI-агентов и разработки с помощью ИИ.

Начать можно бесплатно.

→ Освоить AI-навыки

Erid: 2SDnjeasE1x
Название: ООО "ЯНДЕКС"
ИНН: 7736207543
Лето — время начать: освойте Data Science на выгодных условиях

Хотите не просто теоретически разбираться в устройстве нейросетей, а уметь создавать их самостоятельно? Центр непрерывного образования ФКН НИУ ВШЭ предлагает присоединиться к структурированному и выстроенному практикующими экспертами обучению науке о данных.

Станьте специалистом по Data Science высокого уровня:
🟣первая программа профессиональной переподготовки, получившая аккредитацию Альянса в сфере искусственного интеллекта;
🟣вы пройдете весь путь: от высшей математики и программирования до нейросетей и работы с большими данными.

Программа включает курсы по ключевым дисциплинам:
🟣Математика для анализа данных;
🟣Алгоритмы и структуры данных;
🟣Программирование и автоматизация;
🟣Прикладная статистика для машинного обучения;
🟣Машинное и глубинное обучение.

Специальное предложение для тех, кто запишется на ближайший запуск:
⭐️ Скидка 10% на обучение
⭐️ Курс по BI в подарок

📁Старт: 30 июня.

Подробнее о программе 📍
Please open Telegram to view this post
VIEW IN TELEGRAM
SQL-прием: EXISTS часто лучше, чем COUNT(*) > 0

Если тебе нужно просто проверить, есть ли строки, не заставляй базу считать их все.

Плохо:


SELECT COUNT(*) > 0
FROM orders
WHERE user_id = 42;



База может пройти по всем подходящим строкам, чтобы посчитать количество.

Лучше:

SELECT EXISTS (
SELECT 1
FROM orders
WHERE user_id = 42
);



EXISTS останавливается сразу, как только нашел первую подходящую строку. Для больших таблиц это может быть заметно быстрее, особенно если есть индекс по условию:


CREATE INDEX idx_orders_user_id ON orders(user_id);



Если тебе нужен ответ “есть или нет”, используй EXISTS. COUNT(*) оставь для случаев, когда реально нужно точное количество строк.

Всё про Data Science

🇷🇺 Читайте нас в MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Линейный график как искусство

Этот график в любом современном BI-инструменте можно сделать за несколько кликов Да что BI — его можно нарисовать без особых проблем даже в обычном Экселе.

Но у автора он отнял 50 часов — больше стандартной рабочей недели. Он все нарисовал от руки, с помощью карандашей, туши, линеек и набора для леттеринга. В своем посте про этот опыт он поделился набором классических книг про визуализацию для вдохновения, списком инструментов и практическими советами: например, как нарисовать четкие, аккуратные линии.

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

Он рассказывает, как лучше выстроить процесс, и как работать с разными инструментами. Единственный вопрос, на который он не дает ответ — зачем вообще этим заниматься? Зачем тратить 50 часов на то, что намного проще и быстрее сделать на компьютере?

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

Кстати, даже если не планируете рисовать графики карандашами и чернилами, в посте есть ссылки на онлайн-версии книг, которые все еще стоят внимания. несмотря на возраст.

🫡 Всё про Data Science

🇷🇺 Читайте нас в MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
➡️ SQL можно учить не по скучным таблицам, а через игру в стиле «Матрицы»

Разработчик сделал тренажёр, где вы проходите уровни, находите терминалы и «взламываете» их SQL-запросами.

Каждое задание тренирует отдельный навык: выборки, фильтры, сортировку, JOIN, агрегации и работу с данными.

Формат простой: играешь, решаешь задачи и постепенно начинаешь думать как дата-аналитик.

Идеальный вариант на выходные, если давно хотели подтянуть SQL без унылой теории.

http://sqlprotocol.com/

🫡 Всё про Data Science

🇷🇺 Читайте нас в MAX
Please open Telegram to view this post
VIEW IN TELEGRAM