🎓 Продвинутая аналитика Яндекс.Метрики для маркетологов — теперь бесплатно на Stepik!
Ровно год назад я вынашивала идею: а можно ли поиграться с Яндекс.Метрикой, не создавая полноценный сайт? 📊
Ответ нашёлся — можно! Я прикрутила счётчик к каналу на Дзене и начала изучать поведение пользователей прямо оттуда: сколько людей пришли, что читали, какие статьи заходят лучше всего.
➡️ Об этом я подробно писала в посте:
А теперь хочу поделиться крутым бесплатным курсом, который отлично дополнит этот опыт.
👨🏫 Друг моего друга запустил курс на Stepik: "SQL для маркетинга. Продвинутая аналитика данных Яндекс.Метрики".
Да, бесплатно, да, полезно, да, от души — таких инициатив всегда хочется поддержать ❤️
Если вы работаете с метрикой, хотите прокачать SQL именно под задачи анализа трафика, понимать поведение пользователей и строить крутые отчёты — загляните. Уверена, вам понравится!
📌 Учим тут https://stepik.org/course/192052
Ровно год назад я вынашивала идею: а можно ли поиграться с Яндекс.Метрикой, не создавая полноценный сайт? 📊
Ответ нашёлся — можно! Я прикрутила счётчик к каналу на Дзене и начала изучать поведение пользователей прямо оттуда: сколько людей пришли, что читали, какие статьи заходят лучше всего.
А теперь хочу поделиться крутым бесплатным курсом, который отлично дополнит этот опыт.
👨🏫 Друг моего друга запустил курс на Stepik: "SQL для маркетинга. Продвинутая аналитика данных Яндекс.Метрики".
Да, бесплатно, да, полезно, да, от души — таких инициатив всегда хочется поддержать ❤️
Если вы работаете с метрикой, хотите прокачать SQL именно под задачи анализа трафика, понимать поведение пользователей и строить крутые отчёты — загляните. Уверена, вам понравится!
📌 Учим тут https://stepik.org/course/192052
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥28🔥18❤6🥰3👍1
Удалёнка — кайф или кому как? 🧳🏡
На днях подписчик попросил рассказать про удалёнку — мол, есть ли у меня пост на эту тему. Кажется, я как-то упоминала, что работаю удалённо, но без подробностей, как к этому пришла. А тут и правда есть о чём подумать.
Когда-то мне искренне нравился офис: обеды в кафешках с коллегами 🍝, кофе-брейки ☕️, живые разговоры, лица в метро, смена обстановки, движ — всё это давало ощущение движения, жизни, причастности.
Но как только появилась возможность быть ближе к детям — забирать их из школы 🏫, готовить дома 🍳, водить на кружки 🎨 — я даже не сомневалась. Удалёнка — это просто спасение для родителей. Реально шик, топ, красота!
Иногда скучаю по «поболтать с коллегами в кафешке». Но сейчас это как бизнес-класс — красиво, но мимо.
Удалёнка — не универсальный кайф, но для меня в этом этапе жизни — это то, что нужно.
💬 Кто-то обожает полный ремоут. Кто-то прётся от офисной движухи.
А вы как работаете? Какой ритм вам комфортен? А может у вас гибрид?
На днях подписчик попросил рассказать про удалёнку — мол, есть ли у меня пост на эту тему. Кажется, я как-то упоминала, что работаю удалённо, но без подробностей, как к этому пришла. А тут и правда есть о чём подумать.
Когда-то мне искренне нравился офис: обеды в кафешках с коллегами 🍝, кофе-брейки ☕️, живые разговоры, лица в метро, смена обстановки, движ — всё это давало ощущение движения, жизни, причастности.
Но как только появилась возможность быть ближе к детям — забирать их из школы 🏫, готовить дома 🍳, водить на кружки 🎨 — я даже не сомневалась. Удалёнка — это просто спасение для родителей. Реально шик, топ, красота!
Иногда скучаю по «поболтать с коллегами в кафешке». Но сейчас это как бизнес-класс — красиво, но мимо.
Удалёнка — не универсальный кайф, но для меня в этом этапе жизни — это то, что нужно.
💬 Кто-то обожает полный ремоут. Кто-то прётся от офисной движухи.
А вы как работаете? Какой ритм вам комфортен? А может у вас гибрид?
❤11🔥6
📊 Голосуем как сейчас работаете:
Anonymous Poll
41%
Только удалёнка — свобода, тишина, тапочки
11%
Только офис — люблю людей, рутину и кофе в коридоре
48%
Гибрид — и туда, и сюда
❤🔥1
«Я в режиме реального времени поясняла структуру запросов / ответов в Postman и разбирала документацию в Swagger», — пишет аналитик, который прошел наш курс, а потом два технических собеседования в международные компании. Приятно, конечно ❤️
Если в 2025 году вы хотите:
— научиться выбирать стиль интеграции под вашу задачу;
— начать проектировать с нуля и описывать интеграции в современных стилях (API: REST, SOAP, gRPC и других, + брокеры сообщений);
— узнать как правильно собирать требования и моделировать в UML;
— подготовиться к собеседованию, решив более 100 заданий;
— запустить свой API на Python.
Значит наш курс для вас!
🚀 Начните с открытых бесплатных
уроков — переходите в бот курса и жмите «Старт»
👇
@studyit_help_bot
🚀 Скидка на курс
от канала — 1 000₽ на Stepik по промокоду ANALYST до конца апреля.
Если в 2025 году вы хотите:
— научиться выбирать стиль интеграции под вашу задачу;
— начать проектировать с нуля и описывать интеграции в современных стилях (API: REST, SOAP, gRPC и других, + брокеры сообщений);
— узнать как правильно собирать требования и моделировать в UML;
— подготовиться к собеседованию, решив более 100 заданий;
— запустить свой API на Python.
Значит наш курс для вас!
🚀 Начните с открытых бесплатных
уроков — переходите в бот курса и жмите «Старт»
👇
@studyit_help_bot
🚀 Скидка на курс
от канала — 1 000₽ на Stepik по промокоду ANALYST до конца апреля.
❤🔥4👍2✍1🐳1
🐍 Полюбила функцию .map() — за что и почему?
Ну что, опять рабочий пример. Не сложный - все таки пятница! Недавно нужно было привести разные payment_system к человекочитаемым типам оплаты — карты РФ, карты не РФ, кредиты, оплата частями и т.д. Задача вроде простая — но очень частая: 🧹 "почистить" и структурировать данные.
💡 Решение через .map()
✅ Я сделала категоризацию платежных систем! Круто звучит, правда? А если просто - то, применила словарь к данным в столбце. В вашем случае он заменяет названия платежных систем на их категории. Преобразование занимает одну строку — читаемо, быстро и лаконично.
🔍 Что такое .map() вообще?
.map() — метод в pandas, который применяется к Series (одному столбцу) и возвращает новую Series.
Он может принимать:
➖ словарь — для замены значений (value: new_value) как мы и сделали
➖ функцию — для произвольной логики
⚠️ Нюансы использования:
- Работает только с одной колонкой
- Для нескольких — нужно использовать apply().
Решение через .apply()
☝️ Вывод:
Если нужно быстро заменить или классифицировать значения в одном столбце — .map() 🔥
Особенно удобно с категорией платежей, типов устройств, источников трафика и т.п.
Теперь это один из моих go-to инструментов 💼
Ну что, опять рабочий пример. Не сложный - все таки пятница! Недавно нужно было привести разные payment_system к человекочитаемым типам оплаты — карты РФ, карты не РФ, кредиты, оплата частями и т.д. Задача вроде простая — но очень частая: 🧹 "почистить" и структурировать данные.
💡 Решение через .map()
Выглядело это примерно так:
data = {'payment_system': ['sberbank', 'tinkoff', 'stripe', 'tinkoffcredit', 'alpha_bank_podeli'],
'amount': [1000, 2000, 1500, 3000, 2500]}
df = pd.DataFrame(data)
map_dict = {
'sberbank': 'Оплата картами РФ',
'tinkoff': 'Оплата картами РФ',
'stripe': 'Оплата картами не РФ',
'tinkoffcredit': 'Т-Банк кредит',
'alpha_bank_podeli': 'Подели (Альфа-Банк)'
}
df['payment_type'] = df['payment_system'].map(map_dict)
✅ Я сделала категоризацию платежных систем! Круто звучит, правда? А если просто - то, применила словарь к данным в столбце. В вашем случае он заменяет названия платежных систем на их категории. Преобразование занимает одну строку — читаемо, быстро и лаконично.
🔍 Что такое .map() вообще?
.map() — метод в pandas, который применяется к Series (одному столбцу) и возвращает новую Series.
Он может принимать:
⚠️ Нюансы использования:
- Работает только с одной колонкой
- Для нескольких — нужно использовать apply().
Решение через .apply()
def get_payment_type(ps):
if ps in ['sberbank', 'tinkoff']:
return 'Оплата картами РФ'
elif ps == 'stripe':
return 'Оплата картами не РФ'
elif ps == 'tinkoffcredit':
return 'Т-Банк кредит'
elif ps == 'alpha_bank_podeli':
return 'Подели (Альфа-Банк)'
return 'Другое'
df['payment_type'] = df['payment_system'].apply(get_payment_type)
Если нужно быстро заменить или классифицировать значения в одном столбце — .map() 🔥
Особенно удобно с категорией платежей, типов устройств, источников трафика и т.п.
Теперь это один из моих go-to инструментов 💼
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥9❤🔥5❤4🐳1
Как не попасть в ловушку собственных выводов? 🧠
Знакомо ли вам чувство, когда кажется, что все факты подтверждают вашу гипотезу — но вдруг оказывается, что вы упустили что-то важное?
В аналитике (да и в жизни) это называется "ошибкой подтверждения" — когда мы подсознательно игнорируем данные, которые противоречат нашим убеждениям. Очень опасная штука! 🔥
Подробнее о ней писал(а) Оля в своем канале — рекомендую к прочтению.
Кстати, Оля — продуктовый аналитик с 3+ годами опыта, и у нее огромный багаж знаний о собеседованиях:
✅ Прошла отбор в 20+ компаний (включая бигтехи)
✅ Провела 50+ технических интервью как интервьюер
✅ Пишет крутые разборы, например, как получить оффер после собеседования
Еще один пост, который меня впечатлил — про парадокс выбора. Это про то, почему больше возможностей — не всегда лучше. Очень близко тем, кто, как и я, долго выбирал между разными карьерными путями.
Её канал — как уютный диванчик в мире аналитики: мало шума, много смысла. Там реально есть, над чем подумать! 💡Диванные Данные 💫"
Знакомо ли вам чувство, когда кажется, что все факты подтверждают вашу гипотезу — но вдруг оказывается, что вы упустили что-то важное?
В аналитике (да и в жизни) это называется "ошибкой подтверждения" — когда мы подсознательно игнорируем данные, которые противоречат нашим убеждениям. Очень опасная штука! 🔥
Подробнее о ней писал(а) Оля в своем канале — рекомендую к прочтению.
Кстати, Оля — продуктовый аналитик с 3+ годами опыта, и у нее огромный багаж знаний о собеседованиях:
✅ Прошла отбор в 20+ компаний (включая бигтехи)
✅ Провела 50+ технических интервью как интервьюер
✅ Пишет крутые разборы, например, как получить оффер после собеседования
Еще один пост, который меня впечатлил — про парадокс выбора. Это про то, почему больше возможностей — не всегда лучше. Очень близко тем, кто, как и я, долго выбирал между разными карьерными путями.
Её канал — как уютный диванчик в мире аналитики: мало шума, много смысла. Там реально есть, над чем подумать! 💡Диванные Данные 💫"
❤🔥8👍5⚡2✍1
Умный LIKE: как искать по множеству URL в SQL без боли
Праздники закончились и вот уже третий день суровых будней. Давайте честно признаемся, что после стольких дней отдыха работать ну оочень лень? Я вот честно признаю - мне лениво, но приходится собирать себя по частям и делать дело, много дел, вот еще одно дело, а вот это тоже надо. То запрос на аналитику, то отчёт, то внезапные «срочно-очень-важно» Знакомо? Ну, что ж, у всех примерно такое состояние, так что ничего - выживем.
Расскажу интересный рабочий кейс — как эффективно искать записи по сотням URL в SQL. Покажу на простом примере, как избежать горы OR условий.
Допустим, у нас есть большой список URL-адресов (например, из Excel-файла), и нам нужно найти все посещения этих страниц в нашей базе данных.
Сначала создаем тестовые данные.
Список интересующих нас блогов (как будто вы это выгрузили из excel файлика, который вам прислали коллеги, представьте что тут более 100 ссылок)
🌳Стандартный подход🌳
🍀Автоматизированное решение 🍀
Динамически генерируем условия LIKE
Если понравился способ - поставь лайк, а если вам тоже сложно работать после праздников, то добавь там еще каких-нибудь смайликов🤪 😀
Праздники закончились и вот уже третий день суровых будней. Давайте честно признаемся, что после стольких дней отдыха работать ну оочень лень? Я вот честно признаю - мне лениво, но приходится собирать себя по частям и делать дело, много дел, вот еще одно дело, а вот это тоже надо. То запрос на аналитику, то отчёт, то внезапные «срочно-очень-важно» Знакомо? Ну, что ж, у всех примерно такое состояние, так что ничего - выживем.
Расскажу интересный рабочий кейс — как эффективно искать записи по сотням URL в SQL. Покажу на простом примере, как избежать горы OR условий.
Допустим, у нас есть большой список URL-адресов (например, из Excel-файла), и нам нужно найти все посещения этих страниц в нашей базе данных.
Сначала создаем тестовые данные.
import pandas as pd
from pandasql import sqldf
# Мини-датасет для демонстрации
data = {
'page_url': [
'https://site.com/blog/101',
'https://site.com/blog/102',
'https://site.com/blog/103',
'https://site.com/news/101',
'https://site.com/news/102',
'https://site.com/help',
'https://site.com/blog/201',
'https://site.com/blog/202',
'https://site.com/about',
'https://site.com/contact'
],
'visitor_id': [1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010],
'visit_date': pd.date_range('2024-01-01', periods=10)
}
df_visits = pd.DataFrame(data)
Список интересующих нас блогов (как будто вы это выгрузили из excel файлика, который вам прислали коллеги, представьте что тут более 100 ссылок)
df_blogs = pd.DataFrame({
'blog_path': ['blog/101', 'blog/102', 'blog/201']
})🌳Стандартный подход🌳
SELECT * FROM visits
WHERE page_url LIKE '%blog/101%'
OR page_url LIKE '%blog/102%'
OR page_url LIKE '%blog/201%'
🍀Автоматизированное решение 🍀
Динамически генерируем условия LIKE
conditions = " OR ".join([f"page_url LIKE '%{path}%'" for path in df_blogs['blog_path']])
query = f"""
SELECT
page_url,
visitor_id,
visit_date
FROM df_visits
WHERE {conditions}
"""
result = sqldf(query)Если понравился способ - поставь лайк, а если вам тоже сложно работать после праздников, то добавь там еще каких-нибудь смайликов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤31🔥9👏3❤🔥2⚡1🐳1🌚1
🔥 Ах, это чувство «я ничего не успела»
Знакомо чувство, когда вроде бы что-то делаешь, а к обеду/вечеру понимаешь, что «серьезные» задачи так и остались нетронутыми?
Вместо углубления в python — читала статьи, а то и в youtube залипала, вместо разбора сложных кейсов — читала телеграмм каналы других аналитиков , maybe даже мемчики по аналитике (ну а что, тоже развитие? 😅).
Короче, вместо жёсткого фокуса — растекалась по смежным темам, домашним делам... И вот оно — накатывает: «Я опять потратила время зря!»
Но стоп-стоп! Мы же не роботы, чтобы безостановочно генерить код и умные мысли. 🧠 Мозгу нужно «лениться», переваривать инфу, иногда просто смотреть в потолок, и даже — о ужас! — заниматься ерундой.
Это не просто норма — это необходимость!
Нельзя учиться и работать 24/7 без «пустых» промежутков — это путь к выгоранию. Даже «бесполезное» чтение иногда даёт неожиданные инсайты, да хотя бы просто отдых мозгу.
И вообще перфекционизм — главный враг прогресса. Лучше медленно, но без ненависти к себе.
Так что если вы сегодня не выжали из себя все соки и:
❌ не стали гуру SQL
❌ не переписали все свои запросы на оптимизированные
❌ вообще ничего не сделали из «важного» списка
— это не провал!
Завтра будет новый день (и, возможно, опять без подвигов — и это ок 🤫)
Главное — не превращать развитие в бесконечный марафон с чувством вины!
Как вы справляетесь с мыслями что недостаточно продуктивны? 👇 Делитесь в комах — соберём коллекцию лайфхаков!
Я вот - пост написала и мне полегче стало 😂😜🤪
Знакомо чувство, когда вроде бы что-то делаешь, а к обеду/вечеру понимаешь, что «серьезные» задачи так и остались нетронутыми?
Вместо углубления в python — читала статьи, а то и в youtube залипала, вместо разбора сложных кейсов — читала телеграмм каналы других аналитиков , maybe даже мемчики по аналитике (ну а что, тоже развитие? 😅).
Короче, вместо жёсткого фокуса — растекалась по смежным темам, домашним делам... И вот оно — накатывает: «Я опять потратила время зря!»
Но стоп-стоп! Мы же не роботы, чтобы безостановочно генерить код и умные мысли. 🧠 Мозгу нужно «лениться», переваривать инфу, иногда просто смотреть в потолок, и даже — о ужас! — заниматься ерундой.
Это не просто норма — это необходимость!
Нельзя учиться и работать 24/7 без «пустых» промежутков — это путь к выгоранию. Даже «бесполезное» чтение иногда даёт неожиданные инсайты, да хотя бы просто отдых мозгу.
И вообще перфекционизм — главный враг прогресса. Лучше медленно, но без ненависти к себе.
Так что если вы сегодня не выжали из себя все соки и:
— это не провал!
Завтра будет новый день (и, возможно, опять без подвигов — и это ок 🤫)
Главное — не превращать развитие в бесконечный марафон с чувством вины!
Как вы справляетесь с мыслями что недостаточно продуктивны? 👇 Делитесь в комах — соберём коллекцию лайфхаков!
Я вот - пост написала и мне полегче стало 😂😜
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22❤10❤🔥6👍4⚡3
Из разных утюгов много говорят про оптимизации и сокращения (и это факты), стагнацию зарплат и сложности в росте. Особенно в шоке те, кто давно не выходил на рынок или попал в айтишный бум и не успел застать прошлые кризисы.
Обсуждали, что сейчас происходит на рынке с Олей, у нее 9+ лет опыта в it-компаниях, ex. консультант по обучению и развитию в Райффайзенбанке, 4+ года менторит по карьере и помогает разобраться с вопросами профессиональной самореализации. Пишет про адекватную карьеру https://t.iss.one/olga_career
🎯 Чтобы поддержать тех, кому это сейчас нужно, мы решили подарить две консультации. Обращаться можно с любыми карьерными запросами: построить карьерный трек, написать классное резюме, подготовить самопрезентацию к интервью, выбрать новое направление для развития, поработать со страхами/ самозванцем/ выгоранием.
Что еще можно найти в канале?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤🔥2🔥1
📍 Я собрала для вас подборку своих постов, которые вы могли пропустить. Даже если некоторые из них вышли давно — они всё ещё огонь! Hard skills — это серьёзно, а не мемы разгонять 🤪 .
🐍🔤 🔤 🔤 🔤 🔤 🔤 ✨
- Рабочий пример отчета для отдела продаж – формирование группы клиентов по разным условиям
- Особенности pivot_table на питоне
- Примеры сводной таблица pivot_table()
- Создание диапазона дат на питоне
- Рабочий скрипт по отвалу клиентов
- Отвал клиентов с доп.условиями
- Три топ клиента за год в каждой нише
- Кумулятивная функция сumsum()
- Примеры функции transform()
- Вопросы с собеседований по Python и Pandas
- Как определить к какой стране относится номер телефона? библиотека Phonenumbers
- Скрипт по когортному анализу (часть на SQL, часть на пандасе)
- Примеры np.where()
- Регулярные выражения на Питоне. модуль re
- Как ускорить обработку 50 млн строк: переход с Python на Clickhouse. (Регулярки и оптимизация больших данных)
- Исследование среднего ценового сегмента в разрезе определенных категорий. Биннинг с помощью функции cut
- Генерация синтетических данных: разбор тестового от OZON. (Практика с NumPy и Pandas)
- Регулярки в Python: как вытащить нужные данные из текста. (Рабочий пример с re.findall)
- Группировка данных в Pandas: объединяем значения через запятую. (Полезный трюк для отчётов)
- Как правильно выбирать топ-клиентов с прерываемыми индексами? Loc и iloc
- Поиск клиентов с подпиской без перерывов с помощью shift()
- Ищу пользователей, покупающих новый тариф задолго до окончания старого
- Категоризация платежных систем с помощью map
✨🔤 🔤 🔤 ✨ ✨
- Трафик, лиды, конверсия
- SQL Between
- Вопросы с собеседований по SQL
- Тестовое с решением
- Скрипт по когортному анализу (часть на SQL, часть на пандасе)
- Примеры использования CASE
- Group by на примере из курса Карпова и на рабочем примере.
- Регулярка для Clickhouse
- Библиотека Pandasql для написания SQL кода в Jupyter Notebook
- Оконные функции в PostgreSQL: считаем рабочие часы сотрудников. Разбор LAG и FILTER
- Тестовое на SQL: отделы и зарплаты руководителей (JOIN с подзапросами и агрегация)
- Установка PostgreSQL и DBeaver: инструкция для новичков. Как работать с CSV и писать запросы локально)
- LEFT JOIN с условием в ON или WHERE: в чём разница?
- Как извлечь домены почт клиентов: хитрости SUBSTRING_INDEX
- Задача с LeetCode: находим менеджеров с 5+ подчинёнными
- Расчёт коэффициента подтверждения: разбор задачи с LeetCode
- Задача Hard на LeetCode! Department Top Three Salaries
- Задача со stratascratch про перелеты
Ну и просто лёгкое и вдохновляющее:
✨☹️ ☹️ 😙 🤑 😓 😓 ✨
- Как я сменила профессию
- Какие бывают аналитики
- Мотивация
- Теория вероятности на минималках
- Как заходить в LinkedIn без VPN
- YandexGPT 2 рассказал почему стоит выбрать карьеру в аналитике данных
- Поддержка в IT: как не сдаться на пути к офферу
- Яндекс.Метрика для чайников: как анализировать трафик в Дзене
- Как войти в IT без опыта
- Прокрастинация и баланс в жизни: как не сгореть в аналитике
p.s. И не забываем про возможность выиграть консультацию, вот пост.
🐍
- Рабочий пример отчета для отдела продаж – формирование группы клиентов по разным условиям
- Особенности pivot_table на питоне
- Примеры сводной таблица pivot_table()
- Создание диапазона дат на питоне
- Рабочий скрипт по отвалу клиентов
- Отвал клиентов с доп.условиями
- Три топ клиента за год в каждой нише
- Кумулятивная функция сumsum()
- Примеры функции transform()
- Вопросы с собеседований по Python и Pandas
- Как определить к какой стране относится номер телефона? библиотека Phonenumbers
- Скрипт по когортному анализу (часть на SQL, часть на пандасе)
- Примеры np.where()
- Регулярные выражения на Питоне. модуль re
- Как ускорить обработку 50 млн строк: переход с Python на Clickhouse. (Регулярки и оптимизация больших данных)
- Исследование среднего ценового сегмента в разрезе определенных категорий. Биннинг с помощью функции cut
- Генерация синтетических данных: разбор тестового от OZON. (Практика с NumPy и Pandas)
- Регулярки в Python: как вытащить нужные данные из текста. (Рабочий пример с re.findall)
- Группировка данных в Pandas: объединяем значения через запятую. (Полезный трюк для отчётов)
- Как правильно выбирать топ-клиентов с прерываемыми индексами? Loc и iloc
- Поиск клиентов с подпиской без перерывов с помощью shift()
- Ищу пользователей, покупающих новый тариф задолго до окончания старого
- Категоризация платежных систем с помощью map
✨
- Трафик, лиды, конверсия
- SQL Between
- Вопросы с собеседований по SQL
- Тестовое с решением
- Скрипт по когортному анализу (часть на SQL, часть на пандасе)
- Примеры использования CASE
- Group by на примере из курса Карпова и на рабочем примере.
- Регулярка для Clickhouse
- Библиотека Pandasql для написания SQL кода в Jupyter Notebook
- Оконные функции в PostgreSQL: считаем рабочие часы сотрудников. Разбор LAG и FILTER
- Тестовое на SQL: отделы и зарплаты руководителей (JOIN с подзапросами и агрегация)
- Установка PostgreSQL и DBeaver: инструкция для новичков. Как работать с CSV и писать запросы локально)
- LEFT JOIN с условием в ON или WHERE: в чём разница?
- Как извлечь домены почт клиентов: хитрости SUBSTRING_INDEX
- Задача с LeetCode: находим менеджеров с 5+ подчинёнными
- Расчёт коэффициента подтверждения: разбор задачи с LeetCode
- Задача Hard на LeetCode! Department Top Three Salaries
- Задача со stratascratch про перелеты
Ну и просто лёгкое и вдохновляющее:
✨
- Как я сменила профессию
- Какие бывают аналитики
- Мотивация
- Теория вероятности на минималках
- Как заходить в LinkedIn без VPN
- YandexGPT 2 рассказал почему стоит выбрать карьеру в аналитике данных
- Поддержка в IT: как не сдаться на пути к офферу
- Яндекс.Метрика для чайников: как анализировать трафик в Дзене
- Как войти в IT без опыта
- Прокрастинация и баланс в жизни: как не сгореть в аналитике
p.s. И не забываем про возможность выиграть консультацию, вот пост.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥35❤8😍4
Мир аналитика данных pinned «📍 Я собрала для вас подборку своих постов, которые вы могли пропустить. Даже если некоторые из них вышли давно — они всё ещё огонь! Hard skills — это серьёзно, а не мемы разгонять 🤪 . 🐍 🔤 🔤 🔤 🔤 🔤 🔤 ✨ - Рабочий пример отчета для отдела продаж – формирование…»
🐍 Pandas: Объединяем значения в группах с groupby + join
Сейчас покажу то, что стопудово вы будете часто использовать!
Когда нужно собрать в кучу разрозненные текстовые значения для каждой группы из одной колонки. Например:
☑️ Собрать все платформы, на которых работал рекламный аккаунт
☑️ Объединить теги товаров из одной категории
☑️ Соединить комментарии пользователей
Вот 3 способа как это сделать.
Допустим, у нас есть DataFrame с рекламными расходами:
1️⃣ groupby + lambda + join 💡
lambda x: ... - это анонимная функция. Можно читать как: "Для каждого x (где x — это группа платформ) выполнить join"
Не забываем именно в groupby добавлять as_index=False, а не потом .reset_index(), так как это оптимальнее. Ну и к тому же раз уж в функции groupby есть такой способ, то им надо пользоваться.
2️⃣ agg() с join 🔄
А если обернуть x в set(x), то можно убрать дубликаты если они там есть: df.groupby('account_id',as_index=False).agg({'platform':lambda x:','.join(set(x))})
3️⃣ Краткая запись ⚡️
Короче, это реально удобно! Вместо нескольких строк с одним account_id получаем одну строку и видим все платформы аккаунта сразу.
А какой способ используете вы? Делитесь⬇️
Сейчас покажу то, что стопудово вы будете часто использовать!
Когда нужно собрать в кучу разрозненные текстовые значения для каждой группы из одной колонки. Например:
Вот 3 способа как это сделать.
Допустим, у нас есть DataFrame с рекламными расходами:
import pandas as pd
data = { 'account_id': [100, 100, 100, 200, 200, 300, 300, 300, 400, 500],
'platform': ['yandex', 'telegram', 'vk', 'yandex', 'telegram',
'vk', 'yandex', 'telegram', 'yandex', 'vk'],
'amount': [600, 300, 200, 1500, 800, 1200, 600, 400, 900, 750]
}
df = pd.DataFrame(data)
df_grouped = df.groupby('account_id',as_index=False)['platform'].apply(lambda x: ', '.join(x))lambda x: ... - это анонимная функция. Можно читать как: "Для каждого x (где x — это группа платформ) выполнить join"
Не забываем именно в groupby добавлять as_index=False, а не потом .reset_index(), так как это оптимальнее. Ну и к тому же раз уж в функции groupby есть такой способ, то им надо пользоваться.
df_grouped2 = df.groupby('account_id',as_index=False).agg({'platform': lambda x: ', '.join(x)})А если обернуть x в set(x), то можно убрать дубликаты если они там есть: df.groupby('account_id',as_index=False).agg({'platform':lambda x:','.join(set(x))})
df_grouped3 = df.groupby('account_id',as_index=False)['platform'].apply(', '.join)Короче, это реально удобно! Вместо нескольких строк с одним account_id получаем одну строку и видим все платформы аккаунта сразу.
А какой способ используете вы? Делитесь
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥11👍1🌚1
🔥 Аналитики vs нейросети: кто останется на плаву?
Небольшие страшилки вам тут принесла. Пугаться можно, но не сильно. А то потом на психологов тратиться еще придется.
У hh вот такая статистика по количеству вакансий на рынке труда. Почему эта метрика стремительно падает, а не ключевая, блин, ставка?
Короче, в IT количество вакансий сильно сократилось, а вот количество резюме увеличилось. Вот вам и конкуренция!
Да еще и опасение, что скоро нейросети всех заменят! Но заменят ли они нас полностью? Я считаю, что нет. Но сметут тех, кто не готов расти.
GPT сегодня (туда же deepseek и прочие)— как стажер-вундеркинд: то гениальные инсайты выдает, то несет такую дичь, что хоть стой, хоть падай. И вот тут-то пригодятся те, кто умеет его "дрессировать" — проверять, допиливать и направлять. Такие специалисты не пропадут. Остальным стоит задуматься: а что, если завтра вашу работу можно будет автоматизировать за два клика?
Рутину заберут нейросети, а работу получат только те, кто:
➡️ Глубоко разбирается в своей области (хороший жирный плюс),
➡️ Умеет думать, а не просто кликать (хотя и нейронка может думать так-то..),
➡️ Эффективно работает с ИИ и живыми людьми (огромный плюс).
📉 Почему вкатиться стало сложнее?
Раньше хватало 100 откликов на hh, чтобы получить оффер. Сейчас джуны ищут работу полгода и больше, и это если активно прокачивать соцсети и нетворкинг.
Почему так?
🔜 Компании теперь хотят мидлов или джунов с опытом (где бы им его взять, да?).
🔜 Экономика тормозит — бюджеты режут.
🔜 Конкуренция выросла: вузы и курсы за компанию штампуют конкурентов.
🔜 ИИ пока не забирает вакансии, но скоро начнет. По ощущениям в ближайшую пятилетку. В магазинах уже кассиров почти нет, одни автоматы стоят.
🔜 На рынок выходит поколение мат.капитала — будет еще жестче. Те, прям со школы уже и питон и статистику изучают.
🛡 Вывод: не жди, действуй.
ИИ не остановить, но можно стать тем, кого не заменят. Учись, адаптируйся, ищи сильные стороны.
Думаете, будет еще какой-то вывод? Нет, финал открыт, как говорится.
Но есть и радостная новость - впереди 4 выходных дня и это ВАУ!😀 😀 😀 Да, мы не нейронки и нам хочется отдыхать!
Небольшие страшилки вам тут принесла. Пугаться можно, но не сильно. А то потом на психологов тратиться еще придется.
У hh вот такая статистика по количеству вакансий на рынке труда. Почему эта метрика стремительно падает, а не ключевая, блин, ставка?
Короче, в IT количество вакансий сильно сократилось, а вот количество резюме увеличилось. Вот вам и конкуренция!
Да еще и опасение, что скоро нейросети всех заменят! Но заменят ли они нас полностью? Я считаю, что нет. Но сметут тех, кто не готов расти.
GPT сегодня (туда же deepseek и прочие)— как стажер-вундеркинд: то гениальные инсайты выдает, то несет такую дичь, что хоть стой, хоть падай. И вот тут-то пригодятся те, кто умеет его "дрессировать" — проверять, допиливать и направлять. Такие специалисты не пропадут. Остальным стоит задуматься: а что, если завтра вашу работу можно будет автоматизировать за два клика?
Рутину заберут нейросети, а работу получат только те, кто:
📉 Почему вкатиться стало сложнее?
Раньше хватало 100 откликов на hh, чтобы получить оффер. Сейчас джуны ищут работу полгода и больше, и это если активно прокачивать соцсети и нетворкинг.
Почему так?
🛡 Вывод: не жди, действуй.
ИИ не остановить, но можно стать тем, кого не заменят. Учись, адаптируйся, ищи сильные стороны.
Думаете, будет еще какой-то вывод? Нет, финал открыт, как говорится.
Но есть и радостная новость - впереди 4 выходных дня и это ВАУ!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤🔥4🔥3🤬3❤1
Можно немного личного? 🌧
Сегодня пятница, а за окном — мокро, серо и… совсем не летнее настроение. Казалось бы, мелочь: ну подумаешь, дождь! Но как же сложно иногда управлять своими эмоциями, когда реальность не совпадает с ожиданиями.
Лето мечты? Пока что «лето в режиме акварели» — размытое и невнятное. 😄 Но ведь так не только с погодой: бывает и в работе, и в отношениях, и даже в хобби. Жизнь любит сюрпризы!
Кстати, о хобби. Кто бы мог подумать, что меня затянет в аквариумистику? Но так зацепило! Рыбки стали неожиданными антистресс-терапевтами. 🐠💙
Давайте делиться настроением!
Как спасаетесь от хандры? Кидайте фото питомцев или ваших «залипательных» хобби — согреем ленту теплом!
И да, аналитика данных никуда не делась - будет настроение и появится новый разбор. А пока посмотрите на моих тернеций 😜
Сегодня пятница, а за окном — мокро, серо и… совсем не летнее настроение. Казалось бы, мелочь: ну подумаешь, дождь! Но как же сложно иногда управлять своими эмоциями, когда реальность не совпадает с ожиданиями.
Лето мечты? Пока что «лето в режиме акварели» — размытое и невнятное. 😄 Но ведь так не только с погодой: бывает и в работе, и в отношениях, и даже в хобби. Жизнь любит сюрпризы!
Кстати, о хобби. Кто бы мог подумать, что меня затянет в аквариумистику? Но так зацепило! Рыбки стали неожиданными антистресс-терапевтами. 🐠💙
Давайте делиться настроением!
Как спасаетесь от хандры? Кидайте фото питомцев или ваших «залипательных» хобби — согреем ленту теплом!
И да, аналитика данных никуда не делась - будет настроение и появится новый разбор. А пока посмотрите на моих тернеций 😜
❤🔥13❤6🔥4🤯1
📌 Разбор реальной задачи с собеседования
Недавно мне прислали одну из задач, которую дают на собеседованиях. Делитесь в комментариях, сталкивались ли с подобным - а если у вас есть другие тестовые задания (или интересные кейсы из практики), кидайте в личку! Разберём вместе.👍
Есть таблица просмотров видео с полями:
user_id - идентификатор пользователя,
video_id - идентификатор видео,
date - дата просмотра.
1 строка - это 1 просмотр видео
Задача: Вывести список пользователей, которые:
✅ Смотрели видео 1 и 3,
❌ Но не смотрели видео 2.
Создадим датафреймчик
Есть разные способы решения:
Способ 1: Подзапрос с исключением
Исключаем пользователей, которые смотрели видео 2.
Оставляем только тех, у кого ровно 2 уникальных просмотра (то есть 1 и 3). Это будет user_id=5
Способ 2: Фильтрация в HAVING
Конструкция FILTER (WHERE ...) очень удобна в задачах, где нужно проверить несколько условий одновременно. Просто шик, блеск, красота!
Способ 3 : CASE в HAVING (по сути замена Filter, в MySQL например)
Какой способ лучше?
Первый — лаконичный, но это если нет других вариантов video_id.
Второй и третий — более читаемые и гибкие, особенно если нужно добавить дополнительные условия.
P.S. Если хотите добавить что-то своё или знаете альтернативные способы решения — пишите! А если у вас есть похожие задачи — присылайте, сделаем разбор. 💪🤪
Недавно мне прислали одну из задач, которую дают на собеседованиях. Делитесь в комментариях, сталкивались ли с подобным - а если у вас есть другие тестовые задания (или интересные кейсы из практики), кидайте в личку! Разберём вместе.
Есть таблица просмотров видео с полями:
user_id - идентификатор пользователя,
video_id - идентификатор видео,
date - дата просмотра.
1 строка - это 1 просмотр видео
Задача: Вывести список пользователей, которые:
✅ Смотрели видео 1 и 3,
❌ Но не смотрели видео 2.
Создадим датафреймчик
data = {
'user_id': [1, 1, 1, 2, 2, 3, 4, 5, 5],
'video_id': [1, 2, 3, 1, 2, 4, 1, 1, 3]
}
df = pd.DataFrame(data)Есть разные способы решения:
Способ 1: Подзапрос с исключением
query = f"""
SELECT user_id
FROM df
WHERE user_id NOT IN (SELECT user_id FROM df WHERE video_id = 2)
GROUP BY user_id
HAVING COUNT(DISTINCT video_id) = 2
result = sqldf(query)
Исключаем пользователей, которые смотрели видео 2.
Оставляем только тех, у кого ровно 2 уникальных просмотра (то есть 1 и 3). Это будет user_id=5
Способ 2: Фильтрация в HAVING
query = f"""
SELECT user_id
FROM df
GROUP BY user_id
HAVING COUNT(*) FILTER (WHERE video_id = 1) > 0
AND COUNT(*) FILTER (WHERE video_id = 3) > 0
AND COUNT(*) FILTER (WHERE video_id = 2) = 0
result = sqldf(query)
Конструкция FILTER (WHERE ...) очень удобна в задачах, где нужно проверить несколько условий одновременно. Просто шик, блеск, красота!
Способ 3 : CASE в HAVING (по сути замена Filter, в MySQL например)
query = f"""
SELECT user_id
FROM df
GROUP BY user_id
HAVING COUNT(CASE WHEN video_id = 1 THEN 1 END) > 0
AND COUNT(CASE WHEN video_id = 3 THEN 1 END) > 0
AND COUNT(CASE WHEN video_id = 2 THEN 1 END) = 0
"""
result = sqldf(query)
Какой способ лучше?
Первый — лаконичный, но это если нет других вариантов video_id.
Второй и третий — более читаемые и гибкие, особенно если нужно добавить дополнительные условия.
P.S. Если хотите добавить что-то своё или знаете альтернативные способы решения — пишите! А если у вас есть похожие задачи — присылайте, сделаем разбор. 💪
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤5❤🔥1
📊 Задачка с собеседования: Самый дорогой товар в первой покупке
Всем привет! Сегодня разберём еще одну интересную задачку, которую часто дают на собеседованиях.
🎯 Условие задачи:
Для каждого пользователя нужно найти наименование и цену самого дорогого товара в его первой транзакции.
🔍 Исходные данные:
У нас есть:
Таблица с покупками (df_orders) - кто, когда и что покупал (user_id, transaction_datetime, item_id, order_id)
Табличка товаров (df_items) - информация о товарах и их ценах (item_id, brand, name, price)
💡 Решение с подзапросами:
🎯 Как это работает?
1️⃣ Внутренний подзапрос:
- DENSE_RANK() нумерует все покупки пользователя по времени.
- Если в одной транзакции куплено несколько товаров, у них будет одинаковый number_bought (например, все =1 для первой покупки).
2️⃣ Средний подзапрос
- Оставляет только товары из первых покупок (WHERE number_bought = 1).
- ROW_NUMBER() сортирует эти товары по цене (дорогие — выше).
3️⃣ Внешний подзапрос выбирает самый дорогой товар из первой покупки (most_expensive=1)
✨ Альтернатива с CTE:
Какой вариант вам ближе — подзапросы или CTE?
P.S. Я сейчас в отпуске 🌴☀️ и принципиально не думаю о SQL. Просто лень не только думать, но и писать.🤪
(Но код всё равно проверила и протестила)
Всем привет! Сегодня разберём еще одну интересную задачку, которую часто дают на собеседованиях.
🎯 Условие задачи:
Для каждого пользователя нужно найти наименование и цену самого дорогого товара в его первой транзакции.
🔍 Исходные данные:
У нас есть:
Таблица с покупками (df_orders) - кто, когда и что покупал (user_id, transaction_datetime, item_id, order_id)
Табличка товаров (df_items) - информация о товарах и их ценах (item_id, brand, name, price)
💡 Решение с подзапросами:
select user_id,name,price
from
(
select user_id,order_id,transaction_datetime,price,name,item_id,number_bought,
row_number() OVER (partition by user_id order by price desc) as most_expensive
from(
select user_id,order_id,transaction_datetime, price,name, di.item_id,
dense_rank() OVER (PARTITION BY user_id order by transaction_datetime ) as number_bought
from df_orders do
left join df_items di on di.item_id = do.item_id
) tt
where number_bought=1
)
where most_expensive=1
🎯 Как это работает?
- DENSE_RANK() нумерует все покупки пользователя по времени.
- Если в одной транзакции куплено несколько товаров, у них будет одинаковый number_bought (например, все =1 для первой покупки).
dense_rank() OVER (PARTITION BY user_id order by transaction_datetime ) as number_bought
- Оставляет только товары из первых покупок (WHERE number_bought = 1).
- ROW_NUMBER() сортирует эти товары по цене (дорогие — выше).
row_number() OVER (partition by user_id order by price desc) as most_expensive
✨ Альтернатива с CTE:
WITH first_purchases AS (
SELECT
user_id, price, name,
DENSE_RANK() OVER (PARTITION BY user_id ORDER BY transaction_datetime) AS number_bought
FROM df_orders
LEFT JOIN df_items USING (item_id)
),
most_expensive_items AS (
SELECT
user_id, name, price,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY price DESC) AS price_rank
FROM first_purchases
WHERE number_bought = 1
)
SELECT user_id, name, price
FROM most_expensive_items
WHERE price_rank = 1
Какой вариант вам ближе — подзапросы или CTE?
P.S. Я сейчас в отпуске 🌴☀️ и принципиально не думаю о SQL. Просто лень не только думать, но и писать.
(Но код всё равно проверила и протестила)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍5❤🔥1🔥1
🔥 Вернулась из отпуска, хватит отдыхать!
Ну что, отпуск пролетел быстро, как и положено отпуску. Немного грустно...
Но зато вчера я узнала про бесплатный интенсив по А/B-тестам от ШАД! И это не реклама. Я сама записалась и уже посмотрела первую лекцию.
📌 Что крутого?
✅ Программа – огонь: бутстрап, линеаризация, CUPED и другие важные темы.
✅ Можно подключиться по записи (первая лекция уже есть, но всё ещё успеваешь!).
✅ Есть ноутбуки с кодом - поковыряться, потестить циферки для практики, а это я уважаю. 💪
📅 Регистрация открыта до 25 июля. Ну грех не поделиться ХАЛЯВОЙ!
Сертификат дают только после отбора, но, честно, главное – знания, а не бумажка. 🚀
Кому совсем лень, гляньте первый ноутбук - там же красотища вообще🎁
p.s. Если после строчки import scipy.stats у вас чешутся руки запустить симуляции — вы тот ещё симулянт!🤪
Ну что, отпуск пролетел быстро, как и положено отпуску. Немного грустно...
Но зато вчера я узнала про бесплатный интенсив по А/B-тестам от ШАД! И это не реклама. Я сама записалась и уже посмотрела первую лекцию.
📌 Что крутого?
📅 Регистрация открыта до 25 июля. Ну грех не поделиться ХАЛЯВОЙ!
Сертификат дают только после отбора, но, честно, главное – знания, а не бумажка. 🚀
Кому совсем лень, гляньте первый ноутбук - там же красотища вообще
p.s. Если после строчки import scipy.stats у вас чешутся руки запустить симуляции — вы тот ещё симулянт!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤3❤🔥1