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

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

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

Менеджер: @Spiral_Yuri
Download 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
This media is not supported in your browser
VIEW IN TELEGRAM
🔥Нужен один «топ-элемент» на группу без оконных функций и лишних джойнов?

В PostgreSQL есть недооценённый приём: DISTINCT ON. Он берёт первую строку в каждой группе по указанным полям, какую именно, ты задаёшь через ORDER BY.

Так за один проход можно выбрать, например, последний заказ клиента, самую дорогую позицию в категории или актуальную запись по состоянию. Важно: в ORDER BY сначала идут поля из DISTINCT ON, а следом — критерий «топа» (например, created_at DESC).

Для скорости добавь составной индекс в том же порядке (ключи группировки → поле сортировки).


-- Возьмём по 1 строке на группу (g1, g2), выбирая «лучшую» по metric DESC
SELECT DISTINCT ON (g1, g2) *
FROM some_table
ORDER BY g1, g2, metric DESC;

-- Пример: последний заказ каждого пользователя
SELECT DISTINCT ON (o.user_id)
o.user_id, o.id AS order_id, o.created_at, o.total
FROM orders o
ORDER BY o.user_id, o.created_at DESC;

-- Рекомендуемый индекс для скорости (соответствует ORDER BY)
CREATE INDEX ON orders (user_id, created_at DESC);

-- Ещё пример: самая дорогая товарная позиция в категории
SELECT DISTINCT ON (p.category_id)
p.category_id, p.id, p.price
FROM products p
ORDER BY p.category_id, p.price DESC;

-- Индекс под этот запрос
CREATE INDEX ON products (category_id, price DESC);


🫡 Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
Как люди используют ChatGPT

OpenAI выпустили большое исследование, где рассказали, как люди используют их модели. Что показалось интересным мне:

⏺️Модель — не инструмент, модель — друг. В июне 2024 года сообщений, очевидно связанных с работой, было 47%, а к июню 2025 их доля снизилась до 27%! Касается это как новых пользователей, так и тех, кто пользуется нейронкой уже давно.

⏺️Три самых частых темы: советы «как что-то сделать», запрос фактов и работа с текстом.

⏺️Запросы всё больше про «попросить совета», а не «сделай за меня». Количество сообщений в категории Asking растёт, а Doing — падает. То есть люди всё чаще обсуждают и советуются с моделью, а не просто поручают ей задачу.

⏺️Самый высокий уровень удовлетворённости — в личных разговорах. Пользователи чаще всего довольны, когда обсуждают свои мысли и эмоции, а не решают технические задачи. В таких диалогах соотношение положительных реакций к отрицательным превышает 7 к 1 — для сравнения, в технических темах оно около 2 к 1.

⏺️В начале ChatGPT был почти полностью «мужским клубом» (80 % имён — мужские). Однако сейчас — баланс, женских имён 52%.

🫡 Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️Пошаговый план: как стать аналитиком данных в 2025

Хотите попасть в аналитику, но теряетесь в море информации и не понимаете, какие навыки действительно важны? Боитесь, что без опыта вас не возьмут на работу? И да, ещё один популярный вопрос — а что, если мне 30/40/50+ лет?

Андрон Алексанян — эксперт по аналитике с 8 летним опытом и по совместительству CEO Simulative — покажет рабочие схемы и четкий план, как устроиться в аналитику быстрее, даже если у вас нет опыта.

Что будет на вебинаре?
🟠 Разберем полный роадмап: что учить, в каком порядке, до какого уровня;
🟠 Лайфхаки трудоустройства:
— Покажем реальные примеры, как оформить резюме и портфолио, чтобы привлекать внимание;
— Обсудим какие отклики работают, а какие сразу отправляют в корзину;
— Изнанка найма: инсайдерский взгляд на процессы отбора
🟠 Практические техники для новичков: разберём, как компенсировать недостаток опыта и быстро закрывать пробелы в знаниях.


🕗 Важно досмотреть вебинар до конца, чтобы получить бонус от нас, который поможет бустануть карьеру.

😶Зарегистрироваться на бесплатный вебинар
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
➡️ no-code база данных, которая сама превращает SQL в Airtable-стиль интерфейс

Что умеет:

⏺️ Подключается к MySQL, Postgres, SQLite, MSSQL и сразу показывает данные в виде удобных таблиц
⏺️ Делает представления: таблицы, календари, канбан, формы, Гантт
⏺️ Генерирует готовые REST и GraphQL API прямо поверх базы
⏺️ Делится видами: публично или под паролем, поддерживает загрузку файлов и картинок
⏺️ Настраивает роли и доступ до уровня отдельного столбца

Плюс интеграции со Slack, Discord, мессенджерами, почтой и десятками сервисов.

По сути — Airtable, но напрямую поверх твоей базы.

➡️ Затестить можно по этой ссылке: CLICK

🫡 Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Прими участие в Хакатоне от ИТ-холдинга Т1 в Новосибирске и поборись за призовой фонд 800 000 рублей!

Когда: 23–26 октября
Формат: онлайн + финал на площадке

Участвуй, если ты:
🔹обучаешься на технической или ИТ-специальности;
🔹развиваешься в направлении разработки, аналитики, CV, ML или DevOps;
🔹сможешь быть в Новосибирске 26 октября.

Выбери свой кейс:

✴️Цифровой дресс-код: фон, который выделяет вас. Создай локальный ML-модуль сегментации видео и генератор персонализированных фонов.

✴️CodeMetrics: метрики, которые помогают расти. Разработай систему автооценки эффективности команд через анализ Git-метрик.


Почему стоит участвовать:
🔘Кейс в портфолио и полезная обратная связь от менторов Т1;
🔘Шанс проявить себя, чтобы начать карьеру в одной из крупнейших ИТ-компаний;
🔘Реальный опыт командной работы;
🔘Мерч и атмосфера сильного комьюнити — в Т1 более 5 000 джунов из 580+ вузов России и Беларуси.

Регистрация открыта!
➡️ Успей до 21 октября по ссылке.

erid: 2Vtzqwmd32u
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Догадаетесь, что на этих картинках?

А это работы участников первого российского конкурса датавиза Data Kids. ❤️

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

🔜 Регистрируйтесь на сайте конкурса.

А если нет детей или не хотите участвовать, то просто заходите посмотреть на галерею работ.

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