Data Science: SQL и Аналитика данных
№ 6205468675 На простом языке: про работу с данными, современные технологии, AI, машинное обучение и, немного, SQL. Сотрудничество: @niktwix Менеджер: @Spiral_Yuri
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام Data Science: SQL и Аналитика данных
تُعد قناة Data Science: SQL и Аналитика данных (@pizdatascience) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 38 443 مشتركاً، محتلاً المرتبة 3 573 في فئة التكنولوجيات والتطبيقات والمرتبة 16 832 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 38 443 مشتركاً.
بحسب آخر البيانات بتاريخ 10 يونيو, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -1 444، وفي آخر 24 ساعة بمقدار 15، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 13.17%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 10.93% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 5 057 مشاهدة. وخلال اليوم الأول يجمع عادةً 4 197 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 0.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل sql, индекс, sqlite, строка, index.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“№ 6205468675
На простом языке: про работу с данными, современные технологии, AI, машинное обучение и, немного, SQL.
Сотрудничество: @niktwix
Менеджер: @Spiral_Yuri”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 11 يونيو, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
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
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
🇷🇺 Читайте нас в MAXNOTIFY, например.
Да, действительно, и, если вам нужно мониторить изменения в небольшой, не слишком часто обновляющейся таблице, то это отличный вариант. Но дело в том, что все уведомления NOTIFY падают в одну очередь, и если таких уведомлений много, то они затормозят работу всей БД.
Кроме того, их размер ограничен 8000 байтов, чего может быть недостаточно. А еще, если сервис-получатель был по какой-то причине не доступен и сообщение не дошло, повторное через NOTIFY не отправляется — то есть данные просто потеряются.
В общем, не идеальный вариант.
➡️ Альтернатива — это настроить Write-Ahead Log или WAL, чтобы получать уведомления из него.
Спойлер: этот вариант тоже не идеальный. Как минимум, придется повозиться:
⏺️Изменить wal_level на logical со стандартного replica — так он начнет делать более подробные записи о том, как и что конкретно изменилось в базе.
⏺️Создать publications (то есть, расписать, какие таблицы и действия вы хотите отслеживать) и репликационный слот (то есть отдельную копию WAL, которая гарантирует, что никакие важные данные из лога не удалятся, пока уведомление не будет отправлено).
⏺️Создать listener, который будет получать уведомления и перенаправлять их дальше — в очередную таблицу, в приложение или мессенджер. Или вообще распечатать.
➡️ Но если вам нужно настроить отправку уведомлений и другие способы не подходят, это может быть вполне рабочее решение. Как воплотить его в жизнь, по шагам описано в подробном (очень подробном) гайде.
Всё про Data Science
🇷🇺 Читайте нас в MAXviking://
Память, ресурсы и навыки организованы как директории с уникальными URI.
Агент может ls, find и навигировать по контексту, как разработчик в терминале.
Главный прорыв — многоуровневая загрузка контекста:
- L0 — одно предложение для быстрого поиска
- L1 — обзор ~2000 токенов для принятия решений
- L2 — полные детали, загружаются только когда действительно нужны
Большинство агентов просто загружает всё в контекст и надеется на лучшее.
OpenViking загружает только нужные данные и только в нужный момент.
Результат:
- меньше расходов на токены
- выше точность
- быстрее работа агентов
Retrieval теперь тоже работает логичнее.
Вместо одного плоского семантического поиска:
1. сначала происходит позиционирование на уровне директорий
2. затем рекурсивный поиск внутри наиболее релевантных директорий
Можно буквально видеть траекторию поиска — это больше не чёрный ящик.
Есть и механизм самоэволюции агента.
В конце каждой сессии система автоматически:
- извлекает новые знания
- обновляет память агента
- обновляет память пользователя
То есть агент становится умнее с каждым использованием.
Проект уже имеет:
- 9K звёзд на GitHub
- 13 контрибьюторов
Разработан командой ByteDance Viking, которая строит инфраструктуру векторного поиска с 2019 года.
Проект полностью open-source под лицензией Apache 2.0.
Всё про Data Science
🇷🇺 Читайте нас в MAXТы случайно «подсматриваешь» в тест. Примеры: 👉 нормализация на всём датасете до split 👉 target encoding на всех данных 👉 feature, напрямую связанная с таргетом Модель показывает космический скор, а в проде — провал.Случайный split там, где нельзя
Ты делаешь random split… но данные зависимы. Примеры: 👉 временные ряды 👉 пользователи (один и тот же user в train и test) 👉 сессии Модель узнаёт данные, а не обобщает.Игнорирование времени
В задачах с временем: 👉 ❌ случайный split 👉 ✅ train = прошлое, test = будущее Иначе ты: 👉 обучаешься на будущем 👉 предсказываешь прошлое Это не ML. Это читерство.4️⃣ Дисбаланс классов в split
Ты сделал split и получил: 👉 train: 5% positive 👉 test: 1% positive Метрики начинают врать. Решение: 👉 stratified splitСлишком маленький test
Test = 50 объектов Accuracy = 90% Звучит круто. Но это статистический шум. Маленький test = ненадёжная оценка.Тест используется как валидация
Классическая ошибка: 👉 обучился 👉 посмотрел на test 👉 подкрутил модель 👉 снова посмотрел Это уже не test. Это validation 2.0.Дубликаты в train и test
Если один и тот же объект попал в обе выборки: Модель просто запоминает. Особенно критично: 👉 CV 👉 e-commerce 👉 табличные данные с IDНеправильный split в CV
Cross-validation тоже можно сломать: 👉 leakage между фолдами 👉 группы не учитываются 👉 time-series перемешаны Используй: 👉 GroupKFold 👉 TimeSeriesSplitГлавный инсайт Train/test split — это не про «разделить данные». Это про симуляцию реального мира. Если split не отражает прод — все метрики бесполезны. В одном предложении Плохой split может сделать плохую модель «идеальной» — до момента, когда она выйдет в прод. Всё про Data Science 🇷🇺 Читайте нас в MAX
DATEDIFF
DATEDIFF: эта функция вычисляет разницу между двумя датами. Она используется для того, чтобы обеспечить сравнение именно «сегодняшних» и «вчерашних» температур.
Если сформулировать обычным языком следующий запрос, то окажется, что он выражает следующую идею: нужно выбрать такие идентификаторы, чтобы температура, соответствующая представляемым ими датам, была бы больше, чем температура на «вчерашние» по отношению к ним даты.
SELECT DISTINCT a.Id
FROM Weather a, Weather b
WHERE a.Temperature > b.Temperature
AND DATEDIFF(a.Recorddate, b.Recorddate) = 1
Всё про Data Science
🇷🇺 Читайте нас в MAXClient
↓
Query layer
↓
SSD / memory cache (горячие данные)
↓
Object storage (источник истины)
То есть:
⏺️ холодные данные хранятся дешево в object storage
⏺️ часто используемые попадают в SSD или RAM cache
⏺️ запросы остаются быстрыми (<100ms), но стоимость инфраструктуры падает на порядок
Vector search становится ключевой частью AI-систем:
⏺️ RAG
⏺️ AI-ассистенты
⏺️ semantic search
⏺️recommendation systems
Но именно retrieval слой часто становится самой дорогой частью AI-инфраструктуры.
Архитектура turbopuffer показывает, что:
> дешевый storage + умный cache
> может заменить дорогие memory-based search системы.
Будущее AI-поиска может выглядеть так:
⏺️ object storage как источник данных
⏺️ stateless compute
⏺️ дешёвый storage
⏺️ кэш для hot data
И тогда поиск по миллиардам документов становится почти “zero-cost” инфраструктурой.
Подробнее:
https://turbopuffer.com/blog/zero-cost
Всё про Data Science
🇷🇺 Читайте нас в MAX
Установка Google Chrome (Ubuntu / Debian)
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install -y ./google-chrome-stable_current_amd64.deb
Запуск браузера
google-chrome
Обновление системы (включая браузер)
sudo apt update && sudo apt upgrade -y
Проверка версии
google-chrome --version
Всё про Data Science
🇷🇺 Читайте нас в MAX
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
