Simulative – Telegram
7.37K subscribers
1.71K photos
71 videos
1 file
1.27K links
Привет! Мы — образовательная платформа в сфере аналитики Simulative: simulative.ru

Создаём курсы-симуляторы, где обучаем не на «апельсинках», а на кейсах из реального бизнеса.

Наш уютный чат: @itresume_chat
Поддержка: @simulative_support
Download Telegram
👍245🤩2
Как сделать экселевский ВПР (VLOOKUP) с помощью Pandas? 🔥

Типичная задача: дано 2 датафрейма и необходимо связать их по ключу. Как сделать это в Excel, уже наверно все знают - на помощь приходит функция ВПР. А как быть в Pandas? На помощь приходит функция merge!

Сегодня мы на примере реальной задачи разобрали, как пользоваться Pandas-функцией merge, какие у нее параметры и как это работает.

Кстати, на днях стартанул первый поток нашего бесплатного курса по Pandas! А если вы еще не успели присоединиться, но хотите освоить Pandas, то скорее записывайтесь на курс!

🔗 Записаться на курс: ссылка
👍12🔥92
🔥 Разбираем тестовое задание в СБЕР на позицию junior-аналитика

26 декабря в 19:00 по Мск Андрон Алексанян, CEO IT Resume & Simulative, проведет бесплатный новогодний интенсив, где в прямом эфире будет разбирать настоящее тестовое задание на junior-аналитика в компанию Сбербанк.

Это будет последний обучающий интенсив в этом году.

Нам предстоит проанализировать историю договоров клиентов банка, провести аналитику и сформулировать бизнес-выводы.

Что будем делать на интенсиве:

◾️ Решать задания с помощью SQL

◾️ Писать хитрые запросы на SCD, pivot table и другие

◾️ Подробно разбирать каждый шаг

◾️ Считать retention банка и проводить сегментацию

◾️ Проводить аналитику и составлять бизнес-выводы

В прямом эфире мы также расскажем о частых ошибках новичков и поделимся лайфхаками — как достойно пройти собеседование и удивить ревьюера крутыми фишками 🤩

❗️ Записи интенсива не будет. Только один раз и только в live-формате.

А вы готовы бустануть свои знания и скиллы в аналитике?

🔗 Зарегистрироваться на интенсив: ссылка
👍83🔥3
🔥 Не пропустите новогодний интенсив!

Уже завтра, 26 декабря в 19:00 по Мск, состоится интенсив, где мы вместе будем разбирать настоящее тестовое задание в СБЕР на junior-аналитика данных!

На интенсиве мы вместе с Андроном будем:

◾️ Решать задания с помощью SQL

◾️ Писать хитрые запросы на SCD, pivot table и другие

◾️ Подробно разбирать каждый шаг

◾️ Считать retention банка и проводить сегментацию

◾️ Проводить аналитику и составлять бизнес-выводы

❗️ Всех участников ждут: насыщенная лекция, много практики и лайфхаки по работе с кодом.

❗️ Записи интенсива не будет. Обязательно приходите на эфир!

👉🏻 Регистрируйтесь по ссылке → ссылка
🔥8👍21
Ошибка целочисленного деления в SQL 🔥

Проверяя работы наших студентов в Симуляторе, мы раз за разом сталкиваемся с одними и теми же ошибками. И сейчас мы расскажем вам об одной из таких ошибок при написании SQL-запросов в PostgreSQL.

Описание проблемы

Мы привыкли, что в математике можно просто разделить одно число на другое и получить результат, даже если нацело числа не делятся - получится десятичная дробь. Однако SQL не всегда работает так, как мы ожидаем…

Например, в PostgreSQL, если вы делите два целых числа, результат будет целым числом, без дробной части:

SELECT a/b FROM demo
# если a и b целые, получаем столбец целых чисел

SELECT 1 / 2
# такое деление вернет 0


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

Примечание: В большинстве других СУБД, таких как MySQL, подобные запросы вернут десятичные дроби, как и ожидается.

Решение проблемы

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

SELECT a::NUMERIC/b FROM demo
SELECT a*1.0/b FROM demo
SELECT CAST(1 AS FLOAT)/2 FROM demo


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

Заключение

Если вы хотите узнать еще больше классных фишек про SQL на реальных примерах - обязательно приходите сегодня в 19:00 по Мск на наш вебинар «Разбор тестового задания в СБЕР на junior-аналитика»! Будем писать SQL-запросы, решать задачи и проводить аналитику.

Записывайтесь по ссылке 👉🏻 ссылка
👍10🔥51
Поиск аномалий с помощью SQL-запроса 🔥

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

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

Переходите по ссылке, чтобы прочитать туториал 👉🏻 ссылка
👍161🔥1
Использование else в циклах for в Python 🔥

Недавно мы проводили небольшой опрос и выяснили, что 68% опрошенных не знают, что в цикле FOR можно использовать конструкцию ELSE. Поэтому сегодня мы решили вам про это рассказать!

Как это работает

Все привыкли использовать ELSE с условием IF. Однако в Python блок ELSE можно использовать и с циклами FORWHILE тоже, кстати).

ELSE проверяет, каким образом завершился выход из цикла. Если цикл был прерван оператором BREAK или RETURN, то условие ELSE не сработает. Если же цикл закончился «естественным» образом, т.к. закончились элементы для дальнейшего перебора, то после цикла отработает блок ELSE.

Примеры

Приведем простой пример, где ELSE не сработает, потому что цикл был прерван оператором BREAK.

for i in range(3):
break
else:
print("No else!")


А вот еще один, но здесь уже ELSE сработает, потому что цикл завершился сам:

for i in range(3):
print(i)
else:
print("Yes else!")


Как применить на практике

Мы привели несколько понятных, но синтетических примеров. Однако вы можете применить это на практике. Например:

>>> Напишите функцию, которая принимает на вход массив с ID пользователей и начинает их перебирать в цикле. Если вдруг мы встретили один из заранее заданных ID, мы прерываем цикл с помощью BREAK и начинаем как-то работать с этим ID. В противном случае мы должны сгененировать новый ID - это условие как раз будет в блоке ELSE.

#python
👍13🔥52
Что на новый год загадывают аналитики? 🎁

Друзья, мы всей нашей командой IT Resume & Simulative поздравляем вас с Новым 2024 годом! Спасибо, что были с нами все это время - читали наши посты, смотрели наши вебинары, проходили наши платные и бесплатные программы, решали задачки и оставляли классный фидбек. Мы вас любим - вы у нас лучшие ❤️

Мы спросили у аналитиков, какие письма они писали Деду Морозу в этом году. Вот, что получилось:

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

Надоело работать в этой душной конторе, поскорей бы в Ozon аналитиком!...

Пусть все мои JOIN-ы в SQL-запросах будут правильными с первого раза

Пусть lifetime будет не интегралом от retention, а чем-то попроще

Пусть CAC наконец-то будет в 3 раза меньше, чем LTV

Пусть на следующем собеседовании я сразу получу оффер!

Хочу закончить курс и стать «паровозиком который смог» аналитиком


Это, конечно, не все, что они просили - но наверняка вы нашли здесь что-то и про себя 😁 Желаем вам, чтобы все эти пункты, а еще все, что вы загадаете дополнительно, сбудется в 2024. А мы вам в этом поможем! 😌

Всегда ваша, команда IT Resume & Simulative
17🔥6👍3🎉1
Ошибка в SQL: WHERE vs HAVING 🔥

Часто встречается ошибка — оператор HAVING используется вместо WHERE в запросах с агрегацией. И это неверно! Давайте разберемся, в чем же разница.

В чем разница

- WHERE выполняет фильтрацию строк в исходном наборе данных, отсеивая неподходящие записи до группировки
- GROUP BY формирует группы на основе значений в столбце
- HAVING применяется к уже сгруппированному набору данных и фильтрует их на основе агрегированных данных, т.е. после группировки

Пример

Давайте рассмотрим типовой пример:

SELECT date, COUNT(*)
FROM transactions t
WHERE date >= '2019-01-01'
GROUP BY date
HAVING COUNT(*) = 2


Здесь мы сначала отфильтровываем строки, оставляя только те, в которых дата больше или равна 2019-01-01. Затем формируем группы по дате (из тех, которые остались) и оставляем только те, в которых ровно две записи.

Некоторые, не понимая этой разницы, пишут так:

SELECT date, COUNT(*)
FROM transactions t
GROUP BY date
HAVING COUNT(*) = 2 AND date >= '2019-01-01'


В данном случае мы берем весь набор данных, группируем по всем датам, затем оставляем только те даты, в которых ровно 2 записи и только после этого фильтруем нужные даты.

Результат, в целом, получается одинаковый. Но насколько больше действий мы сделали. А представьте, что речь идет о миллионе строк!

Важное дополнение

Более того, в данном примере мы в HAVING указывали те же столбцы, что используются в группировке (date). А если мы укажем столбец, который не используется в GROUP BY или внутри агрегатной функции, то мы просто получим ошибку - запрос не отработает.

Пример:

SELECT date, COUNT(*)
FROM transactions t
GROUP BY date
HAVING COUNT(*) = 2  AND type_id >= 5


#sql
👍30
В декабре мы обновили формат бесплатного курса по Pandas, и уже успешно провели первый поток! Мы получили много положительной обратной связи от наших студентов, и сейчас вовсю идет запись на второй поток курса.

Ранее мы сделали об этом анонс, но если вы еще не успели или забыли записаться на грядущее обучение, то сегодня последний шанс это сделать  💪

Ведь второй поток стартует завтра, 4 января!

Что нового в курсе:

◾️ Теперь есть чат преподавателей и студентов, где можно задать любой вопрос по материалам

◾️ Добавили новые практические задания

◾️ В программе бесплатного курса будет проходить живой закрытый мастер-класс с разбором бизнес-задачи на Pandas в формате группового созвона

Еще раз – обучение начинается завтра, 4 января. Даты под третий поток пока не определены. Поэтому не откладывайте обучение в долгий ящик - скорее записывайтесь на обучение пока есть места 👇

🔗 Записаться на курс - ссылка

Если вы уже проходили курс или записывались на него - не беда, приходите еще раз, вы найдете для себя массу полезного!

А еще есть возможность вписаться в курс в VIP-тарифе, чтобы получить максимум эффективности (но бесплатное участие тоже супер классное 😁).

🔗 Записаться на курс - ссылка
👍5🔥5
3 крутых лайфхака в Pandas 🔥

В нашем Симуляторе мы стараемся делиться всеми фишками и лайфхаками, которые знаем сами на многолетнем опыте. И сегодня хотим поделиться с вами некоторыми из них.

Игнорирование предупреждений

Наверняка, если вы работали с Pandas, вы сталкивались с бесячими warnings по поводу и без. Так вот - добавив всего лишь одну строчку в самое начало вашего кода, вы можете избавиться от них навсегда:

import warnings
warnings.simplefilter(action='ignore', category=Warning)


Задаем количество столбцов

Замечали, что если в вашем датафрейме много столбцов, то вы не увидите те, которые находятся посередине? Раздражает, согласитесь?

Но проблему легко решить - с помощью всего лишь одной строки можно менять стандартное поведение Pandas - например, разрешить показывать до 500 столбцов.

pd.set_option('display.max_columns', 500)


Биннинг данных

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

Обычно все это делают с помощью apply или сложных циклов. Но все намного проще - с помощью cut вы легко можете сделать такой биннинг, например:

df['age_group'] = pd.cut(
df['age'],
bins=[0, 18, 35, 50, 100],
labels=['<18', '18-35', '35-50', '50+']
)


Заключение

Если вы хотите прокачаться в Pandas, порешать реальные аналитические кейсы, узнать другие фишки и принять участие в закрытом мастер-классе - записывайтесь на второй поток нашего бесплатного курса по Pandas!

Старт потока уже сегодня 👉🏻 записаться на бесплатный курс
🔥11👍85