Аналитика данных / Data Study


Гео и язык канала: Россия, Русский
Категория: Технологии


Помогаю аналитикам расти в профессии и доходе
Курс по продвинутому SQL и автоматизации потоков данных https://datastudy.ru/sql_advanced
По всем вопросам: @daniildzheparov
Канал в MAX https://max.ru/id591908196110_biz

Связанные каналы  |  Похожие каналы

Гео и язык канала
Россия, Русский
Категория
Технологии
Статистика
Фильтр публикаций


CTE + рекурсия: когда нужно «пройтись» по иерархии данных

Есть задачи, где данных недостаточно «плоских» таблиц: нужно подняться по иерархии (от подчинённого к руководителю), спуститься по дереву категорий или пройти по цепочке транзакций. Тут выручают рекурсивные CTE — мощная штука, про которую многие вспоминают только тогда, когда обычный JOIN уже не спасает.

Конструкция простая по форме, но очень эффективная:
WITH RECURSIVE имя_cte AS (
-- Базовый случай (с чего начинаем)
SELECT ...
UNION ALL
-- Рекурсивный шаг (как переходим дальше)
SELECT ... FROM имя_cte JOIN ...
)
SELECT * FROM имя_cte;


Есть типичный формат иерархической таблицы, где фиксируется сам объект и его родительский id. К примеру давайте посмотрим на категории товаров, когда например для товара есть целый путь категорий ("Для мужчин" - "Верхняя одежда" - "Зима" - "Куртки"). В итоге с помощью рекурсии для каждого объекта можно сразу достать весь путь его родительских категорий).

WITH RECURSIVE category_path AS (
SELECT
category_id,
parent_category_id,
name,
name AS full_path,
1 AS depth
FROM categories
WHERE parent_category_id IS NULL -- корневые категории

UNION ALL

SELECT
c.category_id,
c.parent_category_id,
c.name,
cp.full_path || ' > ' || c.name,
cp.depth + 1
FROM category_path cp
JOIN categories c ON c.parent_category_id = cp.category_id
)
SELECT category_id, full_path, depth
FROM category_path;

Другими словами, рекурсия с cte - это некая реализация цикла с помощью SQL. Ставь 👍 если узнал новое


Мой любимый, но редкий вид офиса

Спасибо моей профессии, что она позволяет работать из любой точки 🙏

В целом по жизни заметил, что моя одна из основных ценностей - это свобода. Терпеть не могу, когда нужно быть загнанным в работе, жизни, отдыхе, досуге в какие-то рамки. Хочу принимать решение сам, делать то что я внутри себя желаю и хочу, но при этом это никогда не выражается во мне как «бунтарство», или не выполнение своих обязанностей. Когда процессы выстроены правильно, они в любом случае оставляют человеку свободу выбора, частичку творчества и разнообразие решений, будь то рабочие процессы или бытовые вопросы.

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

Желаю каждому из вас вокруг себя по максимуму создавать и удерживать ту уютную и спокойную среду, на которую можно повлиять напрямую и которая зависит только от вас самих ♥️


Видео недоступно для предпросмотра
Смотреть в Telegram
Кормили нутрий в Туле, рекомендую 😉


Применяю SQL потому что лень писать на Python)

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

Преобразования сами по себе стандартные: фильтрация, агрегация, сортировка. Можно взять написать все эти операции с помощью pandas к уже имеющемуся датафрейму.

Но мне так стало лень писать несколько строк кода на python, что для меня было проще написать всю логику в одном select запросе на sql 😁
Вы спросите
"нафига так делать???" чтобы применить sql данные нужно положить в базу данных

Нет, точнее не всегда) Данные остались в том же датафрейме, а обработку я сделал с помощью pandasql.

Простой пример применения и сравнения pandas VS pandasql 👇
import pandas as pd
from pandasql import sqldf

data = {
'product_id': [1, 2, 1, 3, 2, 3, 1],
'sale_date': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04'],
'amount': [100, 200, 150, 300, 250, 350, 400]
}

df = pd.DataFrame(data)

# логика с pandas (фильтруем по датам, группируем по product_id, считаем агрегат суммы по полю amount и сортируем по нему же)
result_df = (
df[df['sale_date'].between('2023-01-02', '2023-01-03')]
.groupby('product_id', as_index=False)['amount']
.sum()
.sort_values(by='amount', ascending=False)
)

# или применяя sqldf
query = """
SELECT product_id, SUM(amount) as total_amount
FROM df
WHERE sale_date BETWEEN '2023-01-02' AND '2023-01-03'
GROUP BY product_id
ORDER BY total_amount DESC
"""

sql_result = sqldf(query, globals())

Я на работе настолько привык крутить все данные с помощью SQL, что в голове любые преобразования я продумываю на логике sql-запросов, а потом если все таки нужно могу переложить это на python скрипты.

Это как с разговорными языками. Если например переезжаете в другую страну и начинаете разговаривать/писать/слушать на другом языке, то у вас мозг со временем начинает мыслить на этом же языке. У меня так было с английским 🇬🇧, когда учеба и работа была полностью на английском, при этом жил в Москве, но все равно замечал что формулирую предложения сначала на английском, а потом уже осознаю что можно на русском)

P.S. sqldf применяет диалект SQLite, поэтому можно использовать все функции которые доступны для этой базы.

👍 если узнали новенькое для себя из поста


Data Warehouse, Data Lake, Data Lakehouse, Data Fabric, Data Mesh – что это такое, и в чем разница между концепциями

Есть классная историческая справка про появление понятия DWH (сможете похвастаться перед коллегами или на собесах знанием истории концепций хранилищ данных 😎). Если кто-то думает, что аналитика данных и Big Data зародились когда все об этом начали в рекламе курсов кричать, то вы далеко ошибаетесь, история уходит еще в 20 век.

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

Читать статью


Без реального опыта попасть в IT ОЧЕНЬ трудно

У каждого человека, кто пытается найти свою первую позицию аналитиком, возникает сложность при поиске и понятный аргумент:

Работодатель требует реальный опыт, а у меня только курсы за плечами


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

Но для этого недостаточно
❌ навайбкодить без понимания процессов в проекте
❌ взять готовый датасет и покрутить его в юпитер-ноутбуке
❌ взять чужой проект с GitHub и выдать его за свой

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

✅ тебе нужно знать фундаментальные инструменты работы с данными - SQL, Python, BI. быть знакомым со статистическими методами исследования данных

✅ уметь пользоваться LLM как своим помощником и "турбо-кнопкой" для ускорения своей работе, а не отдавать ему всю работу целиком. ты должен понимать суть проекта, какие данные используются, как они обрабатываются, хранятся, какие метрики считаются и какие выводы мы можем из этого сделать

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


За что аналитики получают 300к+ в месяц?

Далеко не каждый аналитик получает такие суммы, а только те, кто имеет сильные технические компетенции. И получают за то, что другие специалисты сами сделать не могут, или если спец может сделать работу за 2-их или 3-их людей, которые суммарно будут дороже стоить компании.

Поэтому совмещение компетенций аналитики и инженерии данных в одном специалисте ценят, ищут, и готовы за это платить выше чем тем, кто только знает "базовые запросы sql, собрать ручную выгрузку" или "я могу только в excel это сделать"

Поэтому если хочешь больше 💰, то можешь даже не рассчитывать, что базовых навыков SQL или Python тебе для этого будет достаточно. Нужно копать глубже, иметь техническую насмотренность.

➡️А получить это ты можешь вместе со мной на курсе, стартуем уже завтра


Как хранить исторические данные и отличать их от актуальных данных

В аналитике всегда есть потребность работать с историческим объемом данных, чтобы уметь отвечать на вопросы бизнеса на всем интервале времени, а не только знать ситуацию в текущий момент.

Есть разные варианты хранения и обновления исторических данных, которые описываются типами SCD.
🔎 SCD или Slowly Changing Dimensions - медленно меняющиеся измерения, когда некоторые атрибуты в данных могут меняться со временем, тем самым возникает необходимость добавлять новую версию записи данных.

🔵 SCD type 0
Данные попадают в таблицу только один раз и становятся статичными, нет версионности и изменения данных. Подходит для хранения конкретных справочников, например названия и ISO коды стран

🔵 SCD type 1
Данные перезаписываются новым значением, что также не позволяет хранить версионность. Механизм простой, вместо старых значений в ту же строку перезаписываются новые значения измененных атрибутов, это позволяет не "раздувать" объем таблицы, но не дает доступа к историчности данных.

🔵 SCD type 2
Данный тип заключается в том, что в таблицу добавляется новая запись по измененным данным. Это реализовано с помощью специальных атрибутов, которые позволяют управлять версионностью. Обычно эти атрибуты выглядят так:
- Дата Начала версии
- Дата Конца версии
- Актуальность записи

🔵 SCD type 3
Реализация выглядит таким образом, что в таблице добавляется атрибут со старым значением.
- Историческое значение
- Новое значение
Есть большой недостаток, что невозможно добавлять много новых столбцов для хранения всех версий данных, поэтому история обычно ограничивается только предыдущей версией.

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

🔵 SCD type 5
Это некий гибрид типов 1 и 4. Если таблица имеет много атрибутов, то ее могут разбить на более мелкие таблицы справочники, которые будут статичны. Но если в этом маленьком справочнике будет перезапись значений по типу 1, то также необходимо будет перезаписать данные в связанной с этим справочнике более большой таблице измерений с помощью перезаписи ключа

🔵 SCD type 6
Гибрид типов 1,2,3. Здесь используется комбинация вышеперечисленных методов, где хранится полная историчность данных с доступом к актуальной версии и всем историческим значениям. Будут добавлены следующие столбцы для управления историчностью:
- Дата Начала версии
- Дата Конца версии
- Актуальность записи
- Историческое значение
- Новое значение

Если пост полезен, ставь реакции и делись им с другими 👨‍💻

Больше технических моментов про хранение и обработку данных в базе данных разбираем на курсе по Продвинутому SQL и ETL автоматизации

➡️Начни практическое обучение 27 июля


Зачем я спросил вас про заработок

1️⃣ оцените свой текущий уровень. всегда есть потенциал роста, почти половина получают меньше 150к в месяц (в Москве только съем нормальной квартиры 120к+ стоит, но даже для регионов этого мало). даже просто находясь в одном этом канале, ты уже имеешь окружение, к которому можно подтягиваться

2️⃣ мотивация что-то менять. мало увидеть, нужно менять свои мысли, действия чтобы вырасти. не бойтесь учить новое, пробовать новые сферы деятельности, переходите на другие профессии где больше платят

3️⃣как бы больно не было вам это осознать, но многие в своей сфере могут работать уже больше 5 лет, но получать на уровне junior/middle аналитика. а аналитики за 1-2 года доходят до такого уровня. несправедливо? такого быть не должно? им повезло, а тебе нет?

А ЧТО ТЕБЕ МЕШАЕТ СДЕЛАТЬ ТАКЖЕ?


Просто кто-то видит возможности и использует их, а кто-то видит причины неудачи раньше, чем попробует

Они тоже боятся, сомневаются, раздумывают, НО ДЕЙСТВУЮТ

А те кто сейчас 200-250 получает - задайте себе вопрос "что мне нужно развить в себе чтобы получать 400+?"

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

ВСЕ, ДЕЙСТВУЙТЕ, ВЕРЮ В ВАС!

Кто я | Навигация | Обучение




Бесплатные материалы на сайте

Добавил материалы по развитию hard-навыков, карьере в data на сайт. Там есть как посты, видео, вебинары, статьи.

В ленте канала многое теряется, хочется чтобы самый сок был у вас всегда под рукой 😉

➡️ https://datastudy.ru/materials


Готовы к просмотру финала?) 🏆


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

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

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

❌ пишут неправильный порядок условий
❌ не пишут ELSE

ЗАПОМНИ ЗОЛОТОЕ ПРАВИЛО ПОРЯДКА CASE УСЛОВИЙ
Условия указываются от частного к общему. CASE проверяет условия сверху вниз и останавливается на первом совпадении. Если сначала написать "заказы в статусе confirmed", а после "заказы в статусе confirmed и сделанные через app", то первое условие применится для всех строк, в том числе для тех заказов, которые попадают под второе более детальное условие

— ТАК ПИСАТЬ НЕПРАВИЛЬНО, ПОРЯДОК КРИВОЙ
SELECT
order_id,
CASE
WHEN status = 'confirmed' THEN 'подтвержден' — попадут все строки со статусом confirmed
WHEN status = 'confirmed' AND interface = 'app' THEN 'подтвержден через app' — не попадут никакие строки, потому что все учтутся в первом условии
END AS order_group
FROM orders

— ПИШИ ТАК, ОТ ЧАСТНОГО К ОБЩЕМУ. ДОБАВЬ ELSE ЧТОБЫ НЕ БЫЛО NULL, КОТОРЫЕ МОЖЕШЬ ПОТЕРЯТЬ НА ОТЧЕТЕ
SELECT
order_id,
CASE
WHEN status = 'confirmed' AND interface = 'app' THEN 'подтвержден через app' — попадут строки, которые подходят под комплексное условие по полям status и interface
WHEN status = 'confirmed' THEN 'подтвержден' — попадут все оставшиеся строки, которые не попали в первое условие, но у которых выполняется условие по status
ELSE 'не определена' — если не выполняется ни одно из условий, значит все остальные строки попадут сюда
END AS order_group
FROM orders

✅ Соблюдай порядок условий от частного к общему
✅ Указывай ELSE чтобы не поймать еще других проблем с NULL значениями, если условия не выполнились


➡️Если хочешь творить с данными магию с помощью SQL и выполнять бизнес-задачи любой сложности, приходи на курс "Продвинутый SQL и автоматизация витрин данных". Там разбираем как писать сложные аналитические запросы, оптимизировать их, проверять данные на качество и автоматизировать ETL процессы.

Запись в группу 27 июля


3 года как муж этой красотки, самой лучшей и заботливой жены, близкого и родного мне человека, самого лучшего стоматолога-ортодонта ♥️♥️♥️

P.S. кому нужна красивая, здоровая улыбка, пишите, Полина полечит)


Желаю тебе умиротворения и наслаждения от вкусного ужина в эту пятницу как у панды 🐼 😉


Запустил Data Study Club

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

В сообществе
💻Взаимная практическая поддержка (готовы помочь друг другу по рабочим вопросам)
🏆Открыто делимся опытом и достижениями
💸Обмениваемся карьерными возможностями (рекомендации в компании и закрытые вакансии)

➡️ Доступ в сообщество только после обучения https://datastudy.ru/courses


Ломаем баррикады рынка труда!

Еще одно трудоустройство, поздравим Максима! 🎉

У Максима есть опыт с 2023 года в менеджменте и стратегическом консалтинге, на этих позициях он уже сталкивался частично с задачами визуализации данных и подготовки презентаций.

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

Созданные на курсе в рамках практики витрины данных использовали в процессе менторинга чтобы BI инструменты изучить. В общем отличное комбо получилось, результативное 👍

#кейс
#менторинг
#отзыв_курс

Кто я | Навигация | Обучение


💃От чего я кайфую на работе

Захотелось поделиться мыслями с вами почему я обожаю свою работу

1️⃣Смесь задач аналитики и инженерии данных
Обожаю разнообразие задач, особенно когда задача внутри себя содержит аналитику и инженерную часть. Например, когда нужно построить витрину данных, прогнать скрипт сборки локально, задеплоить все это в тестовое окружение, протестировать логику сборки и определения инкремента данных. После этого приступить к аналитике: расчет метрик, построение отчета, документация и общение с заказчиком. Обширный список задач и применение разных инструментов - это то, что не дает повязнуть в рутинных задачах 🔥

2️⃣Открытое общение в компании на "ты"
Очень круто, что в целом в IT общение на ты принято за норму и приветствуется в большинстве компаний, такое же общение выстраивается на мероприятиях/конференциях/митапах. С ужасом думаю, что где-то это работает не так, например на производствах, в гос. органах, даже в общении ассистента со стоматологом в частной клинике. Примеров вокруг меня много, слышу это от родителей, жены, друзей, что им приходится общаться в некой иерархии на работе, обращаться к руководителю по имени отчеству. В целом в этом ничего плохого нет, если выстроены нормальные человеческие взаимоотношения, но как правило руководители там чувствуют себя "начальниками" и "боссами", а от этого и коммуникация идет не на равных.

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

3️⃣Возможность удаленки
Конечно же это оооочень жирный плюс. Писал уже об этом много раз, еще раз подствечу в чем он заключается
🔹 я люблю долго спать (9 часов обычно, если не засиживаюсь ночью). вот эти мемы, что ты в 8:59 еще спишь, а в 9:00 сидишь уже работаешь - прямо в точку про меня)
🔹 нет чувства "обязан ехать". вспоминаю школу, когда ты должен был вставать, в любую плохую погоду и темноту утром идти до школы. сейчас чувство свободы выбора само по себе прекрасно
🔹 больше возможность путешествовать и нет привязанности к одному месту. даже если в путешествии все равно нужно работать, у тебя есть ноут и это и есть твой рабочий инструмент. опять же сравниваю с женой, что ей нужно обязательно для работы ездить в клинику, иначе ты работать не можешь.

ITшники, поддерживаете эти плюсы? Ставьте 🧑‍💻 если тоже любите за это свою работу (ну или хотели бы любить 😅)


Моя статья на Habr про построение потока данных с serverless технологиями в облаке

Собрал там информацию о реальном примере работы с excel/csv файлами, когда есть потребность загружать данные из них в базу данных для хранения и анализа. В статье расписал как использую

🔹Object Storage
🔹Managed Service PostgreSQL
🔹Cloud Functions
🔹Cloud Triggers

Довольно подробная инструкция, можно все максимально повторить по шагам

А полный цикл разработки и автоматизации потоков данных проходим на курсе "Продвинутый SQL и автоматизация витрин данных" - вся практика и навыки, которые требуют сейчас работодатели от аналитиков данных.

➡️Ближайшая группа 27 июля, пиши в ЛС или оставляй заявку через сайт


Я стал крестным!

Показано 20 последних публикаций.