Панды не виноваты, что ты их боишься
или почему Pandas на собеседовании выглядит страшнее, чем он есть на самом деле
[1] Добро пожаловать в зоопарк
Есть особый вид боли на собеседованиях аналитиков
SQL еще ладно
Там хотя бы все плюс-минус понятно:
SQL еще ладно
Там хотя бы все плюс-минус понятно:
SELECT
FROM
WHERE
GROUP BY
и дальше молимся, чтобы не спросили рекурсию
Но потом собеседующий такой:
> А теперь давайте на Python/Pandas
И у кандидата в голове сразу включается режим:
> так, где там эта команда, которая удаляет дубликаты, но не совсем удаляет, а оставляет последний, но только если там не null, господи забери меня
И начинается магия:
Но потом собеседующий такой:
> А теперь давайте на Python/Pandas
И у кандидата в голове сразу включается режим:
> так, где там эта команда, которая удаляет дубликаты, но не совсем удаляет, а оставляет последний, но только если там не null, господи забери меня
И начинается магия:
df.groupby(...).agg(...)
потом 40 секунд молчания
потом нервный взгляд в потолок
потом фраза:
> Я обычно гуглю синтаксис
И в целом это нормальная фраза
Проблема только в том, что на собесе ты не на работе
На работе ты можешь гуглить
На собесе ты играешь в цирк с конями, где нужно показать, что ты хотя бы понимаешь, куда этот конь бежит
потом нервный взгляд в потолок
потом фраза:
> Я обычно гуглю синтаксис
И в целом это нормальная фраза
Проблема только в том, что на собесе ты не на работе
На работе ты можешь гуглить
На собесе ты играешь в цирк с конями, где нужно показать, что ты хотя бы понимаешь, куда этот конь бежит
[2] Pandas это не про знание всех методов
Самая большая ошибка в подготовке к Pandas:
учить его как список заклинаний из Гарри Поттера
учить его как список заклинаний из Гарри Поттера
dropna
fillna
merge
pivot_table
melt
explode
cumcount
transform
apply
и вот это все
В итоге человек вроде знает 100500 методов, но когда ему дают обычную задачу:
> Найди для каждого пользователя первую покупку и посчитай, сколько дней прошло до второй
он такой:
> А можно я лучше расскажу, чем inner join отличается от left join?
Нет, братан, нельзя
Мы уже в другом биоме
На собесе по Pandas проверяют не то, что ты помнишь все аргументы `pd.read_csv`
Проверяют, можешь ли ты мыслить табличками
А именно:
- отфильтровать строки
- сгруппировать данные
- посчитать агрегаты
- соединить таблицы
- отсортировать внутри группы
- найти первое/последнее событие
- обработать пропуски
- не размазать данные по стенке кривым `merge`
- объяснить, почему у тебя после join'а стало в 10 раз больше строк
Последний пункт, кстати, особенно важный
Потому что именно так рождаются отчеты, после которых бизнес думает, что выручка выросла на 700%
В итоге человек вроде знает 100500 методов, но когда ему дают обычную задачу:
> Найди для каждого пользователя первую покупку и посчитай, сколько дней прошло до второй
он такой:
> А можно я лучше расскажу, чем inner join отличается от left join?
Нет, братан, нельзя
Мы уже в другом биоме
На собесе по Pandas проверяют не то, что ты помнишь все аргументы `pd.read_csv`
Проверяют, можешь ли ты мыслить табличками
А именно:
- отфильтровать строки
- сгруппировать данные
- посчитать агрегаты
- соединить таблицы
- отсортировать внутри группы
- найти первое/последнее событие
- обработать пропуски
- не размазать данные по стенке кривым `merge`
- объяснить, почему у тебя после join'а стало в 10 раз больше строк
Последний пункт, кстати, особенно важный
Потому что именно так рождаются отчеты, после которых бизнес думает, что выручка выросла на 700%
[3] SQL в шапке панды
Если ты нормально знаешь SQL, то Pandas учится сильно легче
Потому что 80% собесных задач это просто SQL, которому надели шапку панды
SQL:
Потому что 80% собесных задач это просто SQL, которому надели шапку панды
SQL:
SELECT user_id, sum(revenue)
FROM orders
WHERE status = 'paid'
GROUP BY user_id
Pandas:
orders[orders['status'] == 'paid'] \
.groupby('user_id')['revenue'] \
.sum()
Все
Никакой черной магии
Никакого "я не программист, я аналитик, отстаньте"
Просто другая форма записи
И вот тут важный момент
Если ты в SQL не понимаешь, что происходит на уровне данных, Pandas тебя добьет
Потому что SQL хотя бы делает вид, что он дружелюбный
А Pandas такой:
> Ой, ты хотел копию, а я дал view
> Ой, ты хотел одну строку на пользователя, а получил 15
> Ой, ты забыл reset_index, теперь живи с этим
Никакой черной магии
Никакого "я не программист, я аналитик, отстаньте"
Просто другая форма записи
И вот тут важный момент
Если ты в SQL не понимаешь, что происходит на уровне данных, Pandas тебя добьет
Потому что SQL хотя бы делает вид, что он дружелюбный
А Pandas такой:
> Ой, ты хотел копию, а я дал view
> Ой, ты хотел одну строку на пользователя, а получил 15
> Ой, ты забыл reset_index, теперь живи с этим
[4] Что реально нужно уметь
Если готовиться к Pandas на собес, я бы не учил "весь Pandas"
Это как учить весь английский язык, чтобы спросить в аэропорту, где туалет
Я бы закрыл базовый боевой набор:
Это как учить весь английский язык, чтобы спросить в аэропорту, где туалет
Я бы закрыл базовый боевой набор:
1. Фильтрация
df[df['revenue'] > 0]
df[(df['city'] == 'Moscow') & (df['status'] == 'paid')]
2. Группировки (банды йоу)
df.groupby('user_id').agg(
orders=('order_id', 'nunique'),
revenue=('revenue', 'sum')
)
3. Join'ы
orders.merge(users, on='user_id', how='left')
И обязательно понимать, что будет, если в правой таблице `user_id` не уникальный
Спойлер: будет боль
Спойлер: будет боль
4. Работа с датами
df['created_at'] = pd.to_datetime(df['created_at'])
df['month'] = df['created_at'].dt.to_period('M')
5. Пропуски и дубли
df.isna().sum()
df.drop_duplicates()
df.fillna(0)
6. Умение читать ошибку
Это вообще отдельный навык
Половина людей видит traceback и сразу превращается в овощное рагу
Хотя там часто буквально написано:
> братан, у тебя такой колонки нет
Половина людей видит traceback и сразу превращается в овощное рагу
Хотя там часто буквально написано:
> братан, у тебя такой колонки нет
[5] Самая тупая подготовка
Самая тупая подготовка к Pandas выглядит так:
открыть шпаргалку
посмотреть 200 методов
закрыть шпаргалку
испытать тревогу
открыть курс на 40 часов
посмотреть 2 урока
умереть внутри
Нормальная подготовка выглядит иначе:
Берешь датасет заказов
Там должны быть:
открыть шпаргалку
посмотреть 200 методов
закрыть шпаргалку
испытать тревогу
открыть курс на 40 часов
посмотреть 2 урока
умереть внутри
Нормальная подготовка выглядит иначе:
Берешь датасет заказов
Там должны быть:
user_id
order_id
created_at
revenue
status
category
И решаешь 30 маленьких задач
Например:
Например:
- топ-5 категорий по выручке
- средний чек по месяцам
- доля отмененных заказов
- первая покупка каждого пользователя
- повторная покупка в течение 30 дней
- пользователи, у которых больше 3 заказов
- категории, где средний чек выше общего среднего
- выручка накопительным итогом по дням
- средний чек по месяцам
- доля отмененных заказов
- первая покупка каждого пользователя
- повторная покупка в течение 30 дней
- пользователи, у которых больше 3 заказов
- категории, где средний чек выше общего среднего
- выручка накопительным итогом по дням
Вот это уже похоже на собес
А не "давайте выучим все параметры метода pivot_table, потому что вдруг пригодится"
А не "давайте выучим все параметры метода pivot_table, потому что вдруг пригодится"
[6] Главная мысль
Pandas на собеседовании это не экзамен на библиотекаря
Тебя не спрашивают, чтобы проверить, помнишь ли ты 700 методов
Тебя спрашивают, чтобы понять:
можно ли тебе дать грязную табличку
и получить на выходе нормальный ответ
а не Excel-файл `final_final_v3_точно_последний.xlsx`
Поэтому готовиться нужно не к Pandas
А к решению задач на данных с помощью Pandas
Разница примерно такая же, как между:
> я знаю, что такое молоток
и
> я могу повесить полку, и она не убьет кота ночью
На этом все
Берите датасет, открывайте ноутбук, решайте руками
И помните: если после merge'а строк стало больше, чем было, это не Pandas плохой
это жизнь пытается вам что-то сказать
думайте
Тебя не спрашивают, чтобы проверить, помнишь ли ты 700 методов
Тебя спрашивают, чтобы понять:
можно ли тебе дать грязную табличку
и получить на выходе нормальный ответ
а не Excel-файл `final_final_v3_точно_последний.xlsx`
Поэтому готовиться нужно не к Pandas
А к решению задач на данных с помощью Pandas
Разница примерно такая же, как между:
> я знаю, что такое молоток
и
> я могу повесить полку, и она не убьет кота ночью
На этом все
Берите датасет, открывайте ноутбук, решайте руками
И помните: если после merge'а строк стало больше, чем было, это не Pandas плохой
это жизнь пытается вам что-то сказать
думайте
-----
Братишка, этот пост написал CODEX, какое же это высер получился
Никогда не буду писать такие посты без души
Ну и вам урок, что не стоит всякий высер в интернетах читать)
Братишка, этот пост написал CODEX, какое же это высер получился
Никогда не буду писать такие посты без души
Ну и вам урок, что не стоит всякий высер в интернетах читать)