Подписчик прислал мне интересную задачку с stratascratch.com, и я не могла устоять, чтобы не решить её.
Нужно найти самый дешёвый путь между городами, учитывая варианты с пересадками (до двух).
📌 Дано:
Есть таблица da_flights, в которой:
✈️ origin – пункт отправления
✈️ destination – пункт назначения
✈️ cost – стоимость перелёта
Чтобы найти маршруты с пересадками, нам нужно соединить таблицу саму с собой (self-join).
🛠 Решение
1️⃣ Прямые рейсы (без пересадок) — просто берём origin, destination, cost.
2️⃣ Рейсы с одной пересадкой — соединяем таблицу саму с собой (JOIN), где f1.destination = f2.origin. Это значит, что первый рейс прилетает в город, из которого отправляется второй.
3️⃣ Рейсы с двумя пересадками — соединяем таблицу трижды (JOIN), добавляя ещё один уровень соединения (f2.destination = f3.origin).
4️⃣ Объединение всех маршрутов:
Используем UNION для объединения всех трех типов маршрутов (прямые, с одной и двумя пересадками).
5️⃣ Группируем GROUP BY origin, destination и выбираем минимальную цену MIN(total_cost). Жаль нельзя по таким ценам реально на морюшко улететь 🌊 🌊 🌊
6️⃣ Сортируем результат по городу отправления и городу назначения.
Создадим табличку с данными:
Ну и сам основной запрос:
Большое решение, но если по частям разобрать, то разобраться проще. Для этого вот вам ноутбук с этим скриптом. экспериментируйте!
Ну и всем отдыха на море в этом году!🏖 🏖🐠🌊
Нужно найти самый дешёвый путь между городами, учитывая варианты с пересадками (до двух).
📌 Дано:
Есть таблица da_flights, в которой:
✈️ origin – пункт отправления
✈️ destination – пункт назначения
✈️ cost – стоимость перелёта
Чтобы найти маршруты с пересадками, нам нужно соединить таблицу саму с собой (self-join).
🛠 Решение
Используем UNION для объединения всех трех типов маршрутов (прямые, с одной и двумя пересадками).
Создадим табличку с данными:
import pandas as pd
from pandasql import sqldf
data = {
'id': [1, 2, 3, 4, 5, 6],
'origin': ['SFO', 'SFO', 'SFO', 'DFW', 'DFW', 'JFK'],
'destination': ['JFK', 'DFW', 'MCO', 'MCO', 'JFK', 'LHR'],
'cost': [500, 200, 400, 100, 200, 1000]
}
da_flights = pd.DataFrame(data)
Ну и сам основной запрос:
query = """
SELECT
origin,
destination,
MIN(total_cost) AS min_price
FROM (
-- Прямые рейсы
SELECT origin, destination, cost AS total_cost
FROM da_flights
UNION
-- Рейсы с одной пересадкой
SELECT f1.origin, f2.destination, f1.cost + f2.cost AS total_cost
FROM da_flights f1
JOIN da_flights f2 ON f1.destination = f2.origin
UNION
-- Рейсы с двумя пересадками
SELECT f1.origin, f3.destination, f1.cost + f2.cost + f3.cost AS total_cost
FROM da_flights f1
JOIN da_flights f2 ON f1.destination = f2.origin
JOIN da_flights f3 ON f2.destination = f3.origin
) AS all_flights
GROUP BY origin, destination
ORDER BY origin, destination
"""
result = sqldf(query)
print(result)
Большое решение, но если по частям разобрать, то разобраться проще. Для этого вот вам ноутбук с этим скриптом. экспериментируйте!
Ну и всем отдыха на море в этом году!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤3❤🔥3👌1
🎈 Два года, 4000 человек и неожиданный результат
✨ Друзья, нас уже больше 4000! 🎊 И для меня это просто невероятно!
Этот канал живёт без контент-плана — я пишу что хочу и когда хочу.✏️ Это моё хобби, которое за два с лишним года превратилось в приятный источник дополнительного дохода. 💫 Когда я создавала канал чуть больше двух лет назад, даже не думала, что ко мне будут приходить рекламодатели. 🤯 Некоторых я отсеиваю, проверенных рекламирую, а кого-то — вообще бесплатно.
Помните, я писала модуль курса аналитики для SkillFactory? 📚 Меня пригласили туда благодаря этому каналу. Сейчас многие говорят про личный бренд, про то, что чем активнее ты в инфополе, тем больше возможностей к тебе приходит. И это правда!
Но ведь всё началось с простого желания выразиться. ✍️ Хотелось рассказать свои мысли, показать, что я умею, поделиться тем, как я к этому пришла. Я люблю цифры, но люблю и слово — ведь именно слово способно вдохновить… или, наоборот, сломать и обрубить крылья.🦋
И вообще спасибо, что вы здесь. 😊 За то, что читаете, комментируете, делитесь мыслями.❤️
Часто спрашивают: «Стоит ли заводить свой канал, если я ничего особенного не знаю и не умею?»
Отвечаю: ДА, стоит!💚 Определённо стоит!
Ведь каналы ценны не только скриптами и лайфхаками. Они отражают вашу уникальность, ваш путь, который может вдохновить других. Не боги горшки обжигают! 😉 Все мы неидеальны, все сомневаемся, все волнуемся перед сложными задачами… Но мы продолжаем, потому что нам нравится то, что мы делаем. 💖
🚀 Так что, если у вас есть желание выразиться - дерзайте! Ваш уникальный голос может стать источником вдохновения для многих.🌟
📡 А если у вас уже есть канал, пусть даже маленький – кидайте его в комментарии! Давайте поддерживать друг друга! 🌍🤗
✨ Друзья, нас уже больше 4000! 🎊 И для меня это просто невероятно!
Этот канал живёт без контент-плана — я пишу что хочу и когда хочу.
Помните, я писала модуль курса аналитики для SkillFactory? 📚 Меня пригласили туда благодаря этому каналу. Сейчас многие говорят про личный бренд, про то, что чем активнее ты в инфополе, тем больше возможностей к тебе приходит. И это правда!
Но ведь всё началось с простого желания выразиться. ✍️ Хотелось рассказать свои мысли, показать, что я умею, поделиться тем, как я к этому пришла. Я люблю цифры, но люблю и слово — ведь именно слово способно вдохновить… или, наоборот, сломать и обрубить крылья.🦋
И вообще спасибо, что вы здесь. 😊 За то, что читаете, комментируете, делитесь мыслями.
Часто спрашивают: «Стоит ли заводить свой канал, если я ничего особенного не знаю и не умею?»
Отвечаю: ДА, стоит!
Ведь каналы ценны не только скриптами и лайфхаками. Они отражают вашу уникальность, ваш путь, который может вдохновить других. Не боги горшки обжигают! 😉 Все мы неидеальны, все сомневаемся, все волнуемся перед сложными задачами… Но мы продолжаем, потому что нам нравится то, что мы делаем. 💖
🚀 Так что, если у вас есть желание выразиться - дерзайте! Ваш уникальный голос может стать источником вдохновения для многих.
📡 А если у вас уже есть канал, пусть даже маленький – кидайте его в комментарии! Давайте поддерживать друг друга! 🌍🤗
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24❤20👏7❤🔥5🖕1
📚 Бесплатное приложение для любителей книг!
Ребята из Whattoread – друзья моих друзей, и я с радостью рассказываю о их проекте. Они создали классное книжное приложение, которое помогает найти именно вашу книгу – не просто популярную, а ту, которая действительно вам понравится, ориентируясь на ваш вкус.
🔥 Скачать на Android
От команды:
"Мы верим, что хорошая книга должна увлекать с первых страниц. Поэтому сделали систему, которая подбирает книги именно под вас. Будем рады вам и вашим отзывам!"
В телеграме можно познакомиться с командой, следить за развитием и участвовать в тестировании.
🧐 А еще они написали классную статью на Хабр:
📌 "Где взять опыт в ИТ?" О том, как создать свой первый проект, с какими трудностями сталкиваются новички и что из этого выходит. Полезно и вдохновляюще!
Короче, рекомендую! 💡📖
P.S. А завтра разберем интересную рабочую задачу. Сегодня — читаем, завтра — кодим. Идеальный ведь баланс? 🤓🚀
Ребята из Whattoread – друзья моих друзей, и я с радостью рассказываю о их проекте. Они создали классное книжное приложение, которое помогает найти именно вашу книгу – не просто популярную, а ту, которая действительно вам понравится, ориентируясь на ваш вкус.
🔥 Скачать на Android
От команды:
"Мы верим, что хорошая книга должна увлекать с первых страниц. Поэтому сделали систему, которая подбирает книги именно под вас. Будем рады вам и вашим отзывам!"
В телеграме можно познакомиться с командой, следить за развитием и участвовать в тестировании.
🧐 А еще они написали классную статью на Хабр:
📌 "Где взять опыт в ИТ?" О том, как создать свой первый проект, с какими трудностями сталкиваются новички и что из этого выходит. Полезно и вдохновляюще!
Короче, рекомендую! 💡
P.S. А завтра разберем интересную рабочую задачу. Сегодня — читаем, завтра — кодим. Идеальный ведь баланс? 🤓🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
Google Play
What to read? - Apps on Google Play
The books recommendation system
❤🔥8👍4
📊 Как найти пользователей, покупающих новый тариф задолго до окончания старого?
Сегодня я хочу поделиться интересной задачей, с которой столкнулась в работе.
Нужно было найти пользователей, которые купили новый тариф до того, как закончился их текущий. Вот такое вот бывает, ага.
Давайте разберем, как это можно сделать с помощью Python и библиотеки Pandas. 🐼
1️⃣ Создание тестового DataFrame с данными о пользователях, их тарифах, датах заказа и окончания тарифов. 📝
2️⃣ Сортировка данных: Сортируем по пользователю и дате заказа
3️⃣ Использование функции shift:
Для каждого пользователя находим дату следующей покупки с помощью функции shift. Это позволяет нам сравнить дату окончания текущего тарифа с датой следующей покупки.
4️⃣ Вычисляем разницу в днях между окончанием текущего тарифа и следующей покупкой.
5️⃣ Проверка на изменение тарифа: Проверяем, что новый тариф отличается от старого. Для этого с помощью shift проставляем следующий тариф напротив текущего
6️⃣ Оставляем только тех пользователей, которые купили новый тариф задолго до окончания текущего (например, за 7 дней до окончания).
Вот мы и нашли одного пользователя user_id=1, который меняет тариф c Тарифа А на Тариф B, не дожидаясь окончания первого.
Такой анализ можно применять для таргетированной рекламы, персонализированных предложений, ну и далее по списку..
Кто уже использовал shift() — жмем 🤝, кто взял на заметку — ✍️.
Сегодня я хочу поделиться интересной задачей, с которой столкнулась в работе.
Нужно было найти пользователей, которые купили новый тариф до того, как закончился их текущий. Вот такое вот бывает, ага.
Давайте разберем, как это можно сделать с помощью Python и библиотеки Pandas. 🐼
import pandas as pd
data = {
'user_id': [1, 1, 2, 2, 3, 3],
'title': ['Тариф A', 'Тариф B', 'Тариф A', 'Тариф A', 'Тариф C', 'Тариф C'],
'дата заказа': pd.to_datetime(['2024-03-01', '2024-03-20', '2024-03-05', '2024-03-25', '2024-03-10', '2024-03-15']),
'finish_at': pd.to_datetime(['2024-04-01', '2024-05-01', '2024-04-02', '2024-04-30', '2024-04-10', '2024-05-10'])
}
df = pd.DataFrame(data)
df = df.sort_values(by=['user_id', 'дата заказа'])
Для каждого пользователя находим дату следующей покупки с помощью функции shift. Это позволяет нам сравнить дату окончания текущего тарифа с датой следующей покупки.
df['next_created_at'] = df.groupby('user_id')['дата заказа'].shift(-1)df['time_difference'] = (df['finish_at'] - df['next_created_at']).dt.days
df = df.copy()
df['next_title'] = df.groupby('user_id')['title'].shift(-1)
df_filtered = df[(df['time_difference'] > 7)]
df_filtered = df_filtered[df_filtered['title'] != df_filtered['next_title']]
Вот мы и нашли одного пользователя user_id=1, который меняет тариф c Тарифа А на Тариф B, не дожидаясь окончания первого.
Такой анализ можно применять для таргетированной рекламы, персонализированных предложений, ну и далее по списку..
Кто уже использовал shift() — жмем 🤝, кто взял на заметку — ✍️.
Please open Telegram to view this post
VIEW IN TELEGRAM
✍17🤝9❤🔥4👍1😴1
🔥 Тестовая задача по SQL! 🔥
На собеседованиях встречаются задачки, где нужно ранжировать данные, но без оконок RANK() и DENSE_RANK(). Как такое решать? Давайте разберём её шаг за шагом!
🏆 Задача:
Есть таблица с именами и баллами. Нужно проставить ранги участников в порядке убывания баллов без использования оконных функций.
Как это работает?
1️⃣ Соединяем таблицу (LEFT JOIN) саму с собой, чтобы сравнить баллы. Сравниваем каждую строку с другими, чтобы найти, у скольких участников балл выше.
2️⃣ Группировка (GROUP BY) – для каждого имени считаем, сколько раз его балл меньше других.
3️⃣ Ранжирование (COUNT + 1) – Чтобы не с нуля ранг был. Например если у участника балл меньше, чем у 2 других, его ранг будет 3 (т.к. он третий). Вот и готов порядок мест!
✅ Полезная и прикольная задачка. Тут и условие ON t1.score < t2.score помогает лучше понять как соединяются таблицы.
Умение решать такое "вручную" ценится.
🎯Попробуйте сами! Меняйте данные, добавляйте условия – это отличный способ закрепить знания.
На собеседованиях встречаются задачки, где нужно ранжировать данные, но без оконок RANK() и DENSE_RANK(). Как такое решать? Давайте разберём её шаг за шагом!
🏆 Задача:
Есть таблица с именами и баллами. Нужно проставить ранги участников в порядке убывания баллов без использования оконных функций.
import pandas as pd
import sqlite3
from pandasql import sqldf
# Данные для таблицы
data1 = {
'name': ['Владимир', 'Иван', 'Кирилл', 'Марк', 'Алексей', 'Максим'],
'score': [20, 16, 4, 7, 11, 18]
}
df = pd.DataFrame(data1)
query1 = """
SELECT
t1.name,
t1.score,
COUNT(t2.score) + 1 AS rank -- +1 потому что считаем количество строк с большим баллом
FROM df t1
LEFT JOIN df t2 ON t1.score < t2.score -- соединяем таблицы, чтобы сравнить баллы
GROUP BY t1.name -- группируем по имени
ORDER BY t1.score DESC; -- сортируем по убыванию баллов
"""
result = sqldf(query1)
Как это работает?
1️⃣ Соединяем таблицу (LEFT JOIN) саму с собой, чтобы сравнить баллы. Сравниваем каждую строку с другими, чтобы найти, у скольких участников балл выше.
2️⃣ Группировка (GROUP BY) – для каждого имени считаем, сколько раз его балл меньше других.
3️⃣ Ранжирование (COUNT + 1) – Чтобы не с нуля ранг был. Например если у участника балл меньше, чем у 2 других, его ранг будет 3 (т.к. он третий). Вот и готов порядок мест!
✅ Полезная и прикольная задачка. Тут и условие ON t1.score < t2.score помогает лучше понять как соединяются таблицы.
Умение решать такое "вручную" ценится.
🎯Попробуйте сами! Меняйте данные, добавляйте условия – это отличный способ закрепить знания.
❤9👍8❤🔥4👏4
🔥 Выгорание в моде?
Вижу, как многие жалуются на выгорание. Особенно молодые. Те, кто уже стал лидом или начальником какого-то направления. И у меня каждый раз один и тот же вопрос: а о чём вы думали раньше?
Быть руководителем — это не «теперь у меня зарплата пятьсот и свой проект». Это — постоянная тревожность, дедлайны в голове даже по выходным, ответственность за людей, стресс, от которого не отключиться. Чем выше залез — тем сильнее бьют. Ну правда.
Куда вы так спешите? В 25 — уже «бАльшой начальник», а в 30 — выгоревший, с пустыми глазами и отсутствием желания вообще что-то делать. Деньги? Да, хочется. Но их хочется всегда! Только лучше прийти к ним с опытом, крепкой психикой и осознанностью, чем на износе, полуживым и без удовольствия от жизни.
Амбиции — это хорошо, но если слишком тяжело выносить работу, могут и вынести вперёд ногами. А оно нам надо?
Быстрые взлёты только выглядят красиво. И психологам, кстати, выгодно — поток клиентов стабильный.
Отдыхайте, не геройствуйте — выходные уже на подходе!🆒 🆒 🆒
Вижу, как многие жалуются на выгорание. Особенно молодые. Те, кто уже стал лидом или начальником какого-то направления. И у меня каждый раз один и тот же вопрос: а о чём вы думали раньше?
Быть руководителем — это не «теперь у меня зарплата пятьсот и свой проект». Это — постоянная тревожность, дедлайны в голове даже по выходным, ответственность за людей, стресс, от которого не отключиться. Чем выше залез — тем сильнее бьют. Ну правда.
Куда вы так спешите? В 25 — уже «бАльшой начальник», а в 30 — выгоревший, с пустыми глазами и отсутствием желания вообще что-то делать. Деньги? Да, хочется. Но их хочется всегда! Только лучше прийти к ним с опытом, крепкой психикой и осознанностью, чем на износе, полуживым и без удовольствия от жизни.
Амбиции — это хорошо, но если слишком тяжело выносить работу, могут и вынести вперёд ногами. А оно нам надо?
Быстрые взлёты только выглядят красиво. И психологам, кстати, выгодно — поток клиентов стабильный.
Отдыхайте, не геройствуйте — выходные уже на подходе!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30❤🔥9❤6💯5
🎓 Продвинутая аналитика Яндекс.Метрики для маркетологов — теперь бесплатно на 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 — это серьёзно, а не мемы разгонять 🤪 . 🐍 🔤 🔤 🔤 🔤 🔤 🔤 ✨ - Рабочий пример отчета для отдела продаж – формирование…»