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

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

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

Менеджер: @Spiral_Yuri
Download 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
➡️ SQL хитрый трюк

Хотите быстро найти дубликаты в таблице — но не просто значения, а ещё и сразу оставить только уникальные строки?

Вместо сложных подзапросов используйте `ROW_NUMBER()` с PARTITION BY:


WITH numbered AS (
SELECT
id,
email,
ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn
FROM users
)
SELECT id, email
FROM numbered
WHERE rn = 1;



📌 Что происходит:
- PARTITION BY email группирует строки по email
- ROW_NUMBER() нумерует их внутри группы
- WHERE rn = 1 оставляет только первую запись (а все дубликаты убираются)

💡 Так можно элегантно чистить таблицы от дублей без лишних вложенных запросов.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🔥На чистом SQL запустили легендарный DOOM — прямо внутри базы данных CedarDB!

Игра не просто работает, а поддерживает многопользовательский режим, отрисовывая всё с помощью ASCII-графики.
Каждый компонент — от рендера до синхронизации игроков — написан исключительно на SQL-запросах.

➡️ GitHub для настоящих ценителей извращённого кода: https://github.com/cedardb/DOOMQL

🫡 Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥SQL: использование оконных функций для накопительных сумм

Хотите посчитать «бегущую сумму» или ранжирование без подзапросов?
Используйте WINDOW FUNCTIONS — они считаются построчно, не сворачивая данные.


SELECT 
customer_id,
order_date,
amount,
SUM(amount) OVER (
PARTITION BY customer_id
ORDER BY order_date
) AS running_total
FROM orders;



➡️ Здесь для каждого клиента мы получаем накопительную сумму по мере добавления заказов.
Оконные функции позволяют легко строить кумулятивные метрики, рейтинги и скользящие средние прямо в одном запросе.

🫡 Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Неочевидный SQL-совет

Иногда нужно выбрать строки с первыми или последними значениями внутри группы — например, последний заказ каждого клиента.
Вместо вложенных подзапросов используйте DISTINCT ON (PostgreSQL):


SELECT DISTINCT ON (customer_id)
customer_id, order_id, created_at
FROM orders
ORDER BY customer_id, created_at DESC;


➡️ Результат: по каждому customer_id вернётся только одна строка — с самым свежим заказом.
Очень компактная и быстрая альтернатива оконным функциям или JOIN-ам.

🫡 Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Предотвращаем потерю данных с ACID-транзакциями в DuckDB!

Без транзакций:

⏺️Списание у Alice прошло
⏺️ Пополнение у Bob сломалось
➡️ Итог: деньги «пропали».

С транзакцией (ACID):


⏺️ Оба обновления либо проходят вместе, либо откатываются
⏺️ Баланс остаётся консистентным
⏺️ Никаких «висящих» операций

Пример:

conn.execute("BEGIN TRANSACTION")
try:
conn.execute("UPDATE accounts SET balance = balance - 200 WHERE name = 'Alice'")
conn.execute("UPDATE accounts SET balance = balance + 200 WHERE name = 'Bob'")
conn.execute("COMMIT")
except:
conn.execute("ROLLBACK")



⏺️ Atomicity — либо всё, либо ничего
⏺️ Consistency — база не ломается
⏺️ Isolation — параллельные операции не мешают
⏺️ Durability — данные не теряются

ACID гарантирует надёжность даже при сбоях.

🫡 Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Chroma — база данных для эмбеддингов с открытым исходным кодом

Если строишь чат-бота или RAG-систему — Chroma даст твоему приложению память и быстрый поиск по векторным представлениям.

➡️ Что умеет:

- Поддержка Python и JavaScript
- Быстрый поиск и фильтрация по embeddings
- Интеграция с LangChain и LlamaIndex
- Простое API для добавления документов и метаданных

➡️ Установка:


pip install chromadb
# или
npm install chromadb
chroma run --path ./chroma_db



➡️ Пример на Python:

import chromadb
client = chromadb.Client()
col = client.create_collection("docs")
col.add(documents=["Doc1","Doc2"], ids=["1","2"])
res = col.query(query_texts=["найди похожее"], n_results=1)



⏺️ Github
⏺️ Colab

🫡 Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Амбассадоры Tableau 2025

Tableau регулярно обновляет список своих амбассадоров— людей, которые делают большой вклад в сообщество, делятся своими знаниями и навыками и вообще всячески популяризуют этот тул. В 2025 году звания удостоились 386 человек из 48 стран.

➡️ Список можно увидеть на сайте, но намного интереснее — потыкать в кнопки на дашборде. Он позволяет отфильтровать людей по странам, городам и специализациям.

⏺️Пишут, что в этом году получился самый разнообразный состав амбассадоров с точки зрения географии, и это нагляднее видно на другом дашборде. Он не такой удобный, как первый, зато с картой.

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

🫡 Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Зачем нужен Delta Lake, если есть Parquet

Обычный Parquet хранит только одно состояние таблицы.
Если вы сохранили отфильтрованный DataFrame, то старые данные исчезли навсегда.

Отката (rollback) нет → потеряли 10 000 строк, осталось только 3 500.

Delta Lake работает иначе:

⏺️ каждый раз создаётся новая версия данных
⏺️ можно вернуться к любой версии в прошлом
⏺️ данные всегда под контролем и без потерь

Пример:

⏺️Parquet → фильтр → оригинал стёрт
⏺️Delta Lake → версия 0 (10 000 строк) + версия 1 (3 500 строк) → всегда можно вернуться к версии 0

Итог: с Delta Lake данные становятся версионируемыми и надёжными.

🫡 Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM