Живой кодинг
Однажды у меня было собеседование с живым кодингом. Даже не буду скрывать компанию. Это был Сбербанк. Они искали аналитика данных со знанием Питона, SQL и опытом проведения A/B тестов в команду для улучшения их банковских приложений.
У меня не было опыта A/B тестов, но я все равно откликнулась ради опыта. Вообще, хочу порекомендовать проходить как можно больше собеседований и относиться к ним как к квесту. Чем больше в вашей копилке прохождений, тем больше опыта и больше вопросов, ответы на которые вы будете потом гуглить, чтобы знать к следующей “битве”!
Итак, эйчар из Сбера предупредила, что это будет живой кодинг, я дала добро и назначили время.
Тестирование было на сайте https://codeinterview.io/
Мне сбросили ссылку, и я зашла.
Задания были следующие:
Создать датафрейм из данных, которые загнаны в словарь exam_data {} из кортежей []
df = pd.DataFrame(exam_data)
Выбрать записи, где число попыток = 3
df[df['attempts'] == 3]['score']
Продолжение 👉
Однажды у меня было собеседование с живым кодингом. Даже не буду скрывать компанию. Это был Сбербанк. Они искали аналитика данных со знанием Питона, SQL и опытом проведения A/B тестов в команду для улучшения их банковских приложений.
У меня не было опыта A/B тестов, но я все равно откликнулась ради опыта. Вообще, хочу порекомендовать проходить как можно больше собеседований и относиться к ним как к квесту. Чем больше в вашей копилке прохождений, тем больше опыта и больше вопросов, ответы на которые вы будете потом гуглить, чтобы знать к следующей “битве”!
Итак, эйчар из Сбера предупредила, что это будет живой кодинг, я дала добро и назначили время.
Тестирование было на сайте https://codeinterview.io/
Мне сбросили ссылку, и я зашла.
Задания были следующие:
Создать датафрейм из данных, которые загнаны в словарь exam_data {} из кортежей []
df = pd.DataFrame(exam_data)
Выбрать записи, где число попыток = 3
df[df['attempts'] == 3]['score']
Продолжение 👉
👍24❤2🔥2
Делала я как-то тестовое на аналитика для Skyeng. Хорошее тестовое, я на нем отлично потренировалась. Им отослала, потом с тим лидом пообщалась. Но как оказалось, им нужен был уровень senior и упор делался на поиск опытного продуктового аналитика.
Самое смешное, что я работала как раз в Skyeng в финансовом отделе и участвовала в карьерном треке. У меня было расписано, что я изучаю, что нужно подтянуть. Программу составляли вместе с нашим эйчаром. По факту я сама ее составила (как-нибудь скину потом), так как я понимала, что мне надо еще подтянуть и что изучить дополнительно.
Продолжение в комментах 👉
Самое смешное, что я работала как раз в Skyeng в финансовом отделе и участвовала в карьерном треке. У меня было расписано, что я изучаю, что нужно подтянуть. Программу составляли вместе с нашим эйчаром. По факту я сама ее составила (как-нибудь скину потом), так как я понимала, что мне надо еще подтянуть и что изучить дополнительно.
Продолжение в комментах 👉
👍25🔥5
На днях из одного отдела поступил крик о помощи. И связан он был с Excel.
Файл весил 125 МБ и был очень тяжел для работы с ним. Меня, как специалиста по Excel (не зря же столько лет с Excel дружу 😜) попросили как-то его уменьшить. И тут настал мой звездный час! 🌟 Я, ничего не удаляя, облегчила файл вдвое до 61 МБ.
Как мне это удалось:
1) Меню Данные -> значок Изменить связи. Выбираем там Разорвать связь. Все данные, что подтягиваются из других файлов сохранятся и превратятся в значения.
2) Сохранить файл в формате (Тип файла) не [книга Excel], выбрать [Двоичная книга Excel]
Еще можно в настройках Excel выбрать Меню Файл – Параметры – Формулы, Вычисления в книге вручную. Тогда пересчет формул осуществляться не будет пока вы его вручную не сделаете и это позволяет работать с файлом, который не будет надолго зависать и тормозить. Но эта настройка индивидуальна для каждого пользователя. Ее нельзя передать в файле.
Подумала, что Вам эта инфа может тоже пригодится. ✅
Файл весил 125 МБ и был очень тяжел для работы с ним. Меня, как специалиста по Excel (не зря же столько лет с Excel дружу 😜) попросили как-то его уменьшить. И тут настал мой звездный час! 🌟 Я, ничего не удаляя, облегчила файл вдвое до 61 МБ.
Как мне это удалось:
1) Меню Данные -> значок Изменить связи. Выбираем там Разорвать связь. Все данные, что подтягиваются из других файлов сохранятся и превратятся в значения.
2) Сохранить файл в формате (Тип файла) не [книга Excel], выбрать [Двоичная книга Excel]
Еще можно в настройках Excel выбрать Меню Файл – Параметры – Формулы, Вычисления в книге вручную. Тогда пересчет формул осуществляться не будет пока вы его вручную не сделаете и это позволяет работать с файлом, который не будет надолго зависать и тормозить. Но эта настройка индивидуальна для каждого пользователя. Ее нельзя передать в файле.
Подумала, что Вам эта инфа может тоже пригодится. ✅
👍52🔥19❤4
Всех с пятницей! 🌟
Поговорим сегодня о красоте, о красоте Сатурна 🪐. Ой, то есть Юпитера.
Это не про планету, а про среду разработки.
В Jupyter Notebook можно вставить картинку. Я обычно стандартным приложением "Ножницы" вырезаю часть картинки, обычно это задание, которое присылают, правой клавишей мыши выбираю копировать (в буфер обмена). Потом в Jupyter меняю тип строки на markdown и вставляю Ctrl+V.
Однако, если выкачать потом файл ноутбука (кому-то отправить захотите), то лучше картинку убрать, а то там вместо нее человек увидит длиннющий код.
Ну и про сами маркдауны напомню. Чтобы выделить заголовки пририсовываем решетки ##
и жмем выполнение ячейки. Я обычно Ctrl + Enter жму.
# Заголовок большой
## Заголовок поменьше
### Заголовок еще меньше
Можно даже с помощью html кода оформлять, но я не пробовала.
Если у Вас есть какой-то красивый бьютихак 💡оформления, то делитесь способами!
Поговорим сегодня о красоте, о красоте Сатурна 🪐. Ой, то есть Юпитера.
Это не про планету, а про среду разработки.
В Jupyter Notebook можно вставить картинку. Я обычно стандартным приложением "Ножницы" вырезаю часть картинки, обычно это задание, которое присылают, правой клавишей мыши выбираю копировать (в буфер обмена). Потом в Jupyter меняю тип строки на markdown и вставляю Ctrl+V.
Однако, если выкачать потом файл ноутбука (кому-то отправить захотите), то лучше картинку убрать, а то там вместо нее человек увидит длиннющий код.
Ну и про сами маркдауны напомню. Чтобы выделить заголовки пририсовываем решетки ##
и жмем выполнение ячейки. Я обычно Ctrl + Enter жму.
# Заголовок большой
## Заголовок поменьше
### Заголовок еще меньше
Можно даже с помощью html кода оформлять, но я не пробовала.
Если у Вас есть какой-то красивый бьютихак 💡оформления, то делитесь способами!
👍16❤1🔥1
Excel vs Google таблицы 🎯
Насколько я люблю Excel, настолько мне не по вкусу работа в Google таблицах. Хотя в них есть и плюсы. Но обо всем поподробнее.
На текущем месте, учитывая, что многие работают удаленно, все пользуются Google таблицами. Общей сети нет (что для меня странно, но сейчас не об этом).
В любимом Excel были горячие клавиши, что ускоряло работу. В нем писать формулы, строить сводные таблицы – одно удовольствие ❤️, а теперь приходится узнавать, где спрятана та или иная функция. Как вариант, можно выкачать файл (Файл – Скачать – Microsoft Excel XLSX) себе на диск (у меня пока есть оплаченный Excel) и уже в скаченном варианте поработать c ним. Я так и делаю, когда мне попадается большой файл и в нем много всего. Потом гружу его обратно (Файл - Импортировать). Каждый раз так играться нет смысла, поэтому будем изучать Гугл таблицы.
Вот тут можете посмотреть, как они выглядят. И не только посмотреть. Я создала этот файл для тренировки. Доступ всем открыла на редактирование. Прода 👉
Насколько я люблю Excel, настолько мне не по вкусу работа в Google таблицах. Хотя в них есть и плюсы. Но обо всем поподробнее.
На текущем месте, учитывая, что многие работают удаленно, все пользуются Google таблицами. Общей сети нет (что для меня странно, но сейчас не об этом).
В любимом Excel были горячие клавиши, что ускоряло работу. В нем писать формулы, строить сводные таблицы – одно удовольствие ❤️, а теперь приходится узнавать, где спрятана та или иная функция. Как вариант, можно выкачать файл (Файл – Скачать – Microsoft Excel XLSX) себе на диск (у меня пока есть оплаченный Excel) и уже в скаченном варианте поработать c ним. Я так и делаю, когда мне попадается большой файл и в нем много всего. Потом гружу его обратно (Файл - Импортировать). Каждый раз так играться нет смысла, поэтому будем изучать Гугл таблицы.
Вот тут можете посмотреть, как они выглядят. И не только посмотреть. Я создала этот файл для тренировки. Доступ всем открыла на редактирование. Прода 👉
👍12❤1🔥1
Метод format 💡
По понедельникам я гружу много разных данных за предыдущую неделю. Это и трафик, и количество лидов, и выручка в разных нишах, и тип продаж (новому клиенту продали или повторному), и количество писем отправленных, и прочее, прочее.
Каждый раз прописывать в SQL даты прошлой недели мне надоело.
Вот так это выглядело:
WHERE created_date >= '2022-08-29' and created_date < '2022-09-05'
Я добавила в скрипт метод format. Ведь он не только меняет форматирование при выводе, но еще и принимает аргументы. Теперь в начале большого скрипта у меня прописаны даты:
start_date_2022 = '2022-08-29'
end_date_2022 = '2022-09-05'
А в самих запросах (тут пример расчета у нас трафика) я уже везде одинаково в WHERE обращаюсь к параметрам.
Это выглядит так:
query = """
select
uniq(visitor_id) visitor_count,
uniqIf(visitor_id, has_registered) register_count
from stat.visit
where started_date >= '{params[0]}' and started_date < '{params[1]}'
""".format(params=[start_date_2022, end_date_2022])
params[0] – это start_date_2022,
params[1] – соответственно end_date_2022.
Короче говоря, оптимизируемся, друзья! ✅
По понедельникам я гружу много разных данных за предыдущую неделю. Это и трафик, и количество лидов, и выручка в разных нишах, и тип продаж (новому клиенту продали или повторному), и количество писем отправленных, и прочее, прочее.
Каждый раз прописывать в SQL даты прошлой недели мне надоело.
Вот так это выглядело:
WHERE created_date >= '2022-08-29' and created_date < '2022-09-05'
Я добавила в скрипт метод format. Ведь он не только меняет форматирование при выводе, но еще и принимает аргументы. Теперь в начале большого скрипта у меня прописаны даты:
start_date_2022 = '2022-08-29'
end_date_2022 = '2022-09-05'
А в самих запросах (тут пример расчета у нас трафика) я уже везде одинаково в WHERE обращаюсь к параметрам.
Это выглядит так:
query = """
select
uniq(visitor_id) visitor_count,
uniqIf(visitor_id, has_registered) register_count
from stat.visit
where started_date >= '{params[0]}' and started_date < '{params[1]}'
""".format(params=[start_date_2022, end_date_2022])
params[0] – это start_date_2022,
params[1] – соответственно end_date_2022.
Короче говоря, оптимизируемся, друзья! ✅
👍23❤3🔥2
З..2..1..ПУСК..ОТКЛЮЧЕНО 💻⏰
На работе обсуждали кто как справляется с попыткой обновления Windows.
Как оказалось, один коллега вообще не выключает ноутбук. Я, прям, пожалела его “железо”. У меня какая-то врожденная установка, что техника тоже должна отдыхать.
Другая коллега нажимает отложить обновление.
А я поискала и нашла такой способ, которым конечно со всеми на работе поделилась:
Заходим в Пуск, жмем букву с, появляются Службы.
Открываем эти Службы и внизу находим Центр обновления Window (на картинке вверху). Жмем правой клавишей на нем и выбираем Свойства.
Выбираем тип запуска: Отключена. И внизу в состоянии я нажала Остановить. После этого выключила ноут и хоть он оранжевым огоньком подсвечивал обновление, но сам процесс не запустился уже. 👌
На работе обсуждали кто как справляется с попыткой обновления Windows.
Как оказалось, один коллега вообще не выключает ноутбук. Я, прям, пожалела его “железо”. У меня какая-то врожденная установка, что техника тоже должна отдыхать.
Другая коллега нажимает отложить обновление.
А я поискала и нашла такой способ, которым конечно со всеми на работе поделилась:
Заходим в Пуск, жмем букву с, появляются Службы.
Открываем эти Службы и внизу находим Центр обновления Window (на картинке вверху). Жмем правой клавишей на нем и выбираем Свойства.
Выбираем тип запуска: Отключена. И внизу в состоянии я нажала Остановить. После этого выключила ноут и хоть он оранжевым огоньком подсвечивал обновление, но сам процесс не запустился уже. 👌
👍4❤1🔥1
HAVING Это Present Continuous в английском, но речь тут не об этом. 😜
Это команда в SQL, которая фильтрует результат группировки. Разберем на рабочем примере.
Казалось бы, у нас же есть уже условие WHERE, куда мы вписываем условия.
Но если нам нужно вывести клиентов с месячным оборотом больше одного миллиона, то WHERE нам тут не поможет. А вот HAVING спасет ситуацию.
Найдем суммы выручки за месяц по каждому клиенту, а потом HAVING отберет тех, у кого сумма avg_amount получилась больше миллиона
select p.ACCOUNT_ID,
sum(case when p.currency in ('RUB','RUR') then p.amount else (p.amount * cr.rate) end)/(MONTH(CURRENT_DATE) - 1) as avg_amount,
from sales.payment p -- вытаскиваем из базы платежей
left join sales.currency c - - присоединяем базу с валютами
on p.currency = c.code - - по совпадающему ключу
left join sales.currency_rate cr - - присоединяем базу с курсами валют
on c.id = cr.currency_id - - по совпадающему ключу
where p.created_at <= CURRENT_DATE group by 1 - - группировка по номеру клиента
having avg_amount > 1000000
Тут, кстати, видно как работает оператор case 👌 когда нужно посчитать выручку в рублях
Это команда в SQL, которая фильтрует результат группировки. Разберем на рабочем примере.
Казалось бы, у нас же есть уже условие WHERE, куда мы вписываем условия.
Но если нам нужно вывести клиентов с месячным оборотом больше одного миллиона, то WHERE нам тут не поможет. А вот HAVING спасет ситуацию.
Найдем суммы выручки за месяц по каждому клиенту, а потом HAVING отберет тех, у кого сумма avg_amount получилась больше миллиона
select p.ACCOUNT_ID,
sum(case when p.currency in ('RUB','RUR') then p.amount else (p.amount * cr.rate) end)/(MONTH(CURRENT_DATE) - 1) as avg_amount,
from sales.payment p -- вытаскиваем из базы платежей
left join sales.currency c - - присоединяем базу с валютами
on p.currency = c.code - - по совпадающему ключу
left join sales.currency_rate cr - - присоединяем базу с курсами валют
on c.id = cr.currency_id - - по совпадающему ключу
where p.created_at <= CURRENT_DATE group by 1 - - группировка по номеру клиента
having avg_amount > 1000000
Тут, кстати, видно как работает оператор case 👌 когда нужно посчитать выручку в рублях
👍12🔥2❤1
SQL + Pandas = ❤️
Вот такой запрос мне недавно прислали.
Отдел продаж просил сформировать группу (почты клиентов), которые отвечают нескольким условиям:
1) Основная платежная система (ПС) – Клаудпеймент.
2) % комиссии выше 3.5%
3) Оборот за август больше 1 млн
4) Минус тех, у кого есть заявка на определенную платежную систему
Сначала я выгрузила SQL запросом:
- оборот за август. Получила таблицу df_aug с номером аккаунта клиента 'account_id', типом ПС - 'type', суммой – 'amount' и комиссией – ' сommission'.
- оборот с августа до текущей даты - df_from_aug, чтобы найти основную платежную систему – то есть ту, через которую прошли максимальные платежи c августа.
df_big = df_from_aug.groupby(by='account_id').last().reset_index()
Потом с помощью пандаса делаем:
Отсортируем базу по тем, у кого основной ПС - cloud_payments.
df_cloud= df_big[df_big['type'] == 'cloud_payments']
Найдем аккаунты, у кот выручка за август больше 1 млн. Берем наш df_aug и суммируем все суммы по каждому аккаунту
df_grouped = df_aug.groupby(['account_id']).agg({'amount':'sum'}).reset_index()
df_more_1mln = df_grouped[df_grouped['amount'] > 1000000]
Создаем кортеж из аккаунтов, которые удовлетворяют условию больше ляма:
account_lst_more_1mln = tuple(df_more_1mln['account_id'])
Теперь из аккаунтов, у которых основная ПС=cloud_payments отбираем те, у которых выручка за август была БОЛЬШЕ 1 млн. Воспользуемся isin и нашим кортежем (можно и списком, но кортеж вроде быстрей срабатывает)
df_cloud_more_1mln = df_cloud[df_cloud['account_id'].isin(account_lst_more_1mln)]
Добавим расчет rate %.
df_cloud_more_1mln['rate'] = df_cloud_more_1mln['сommission']/df_cloud_more_1mln['amount']
Отфильтруем те, у кот rate > 3.5%
df_cloud_more_1mln_rate = df_cloud_more_1mln[df_cloud_more_1mln['rate'] > 0.035]
Потом SQL запросом вытаскиваю аккаунты подключённые к внутренней системе нашей компании
query = """
select DISTINCT ACCOUNT_ID
from sales.checkout_request
"""
params = {}
gp_requests = mql.read_query( connection_gp, query, params )
Вот тут опять загоняем аккаунты в кортеж:
lst_gp_requests = tuple(gp_requests['ACCOUNT_ID'])
Минусуем тех, кто содержится в этом кортеже с помощью isin и значка ~ (кроме)
df_cloud_more_1mln = df_cloud_more_1mln_rate[~df_cloud_more_1mln_rate['account_id'].isin(lst_gp_requests)]
Создаем кортеж из оставшихся аккаунтов клиентов:
accounts_group = tuple((df_cloud_more_1mln['account_id'].drop_duplicates()))
Ну и в финале выгружаем SQL почты владельцев эти аккаунтов в csv формате.
Как-то так..
Вот такой запрос мне недавно прислали.
Отдел продаж просил сформировать группу (почты клиентов), которые отвечают нескольким условиям:
1) Основная платежная система (ПС) – Клаудпеймент.
2) % комиссии выше 3.5%
3) Оборот за август больше 1 млн
4) Минус тех, у кого есть заявка на определенную платежную систему
Сначала я выгрузила SQL запросом:
- оборот за август. Получила таблицу df_aug с номером аккаунта клиента 'account_id', типом ПС - 'type', суммой – 'amount' и комиссией – ' сommission'.
- оборот с августа до текущей даты - df_from_aug, чтобы найти основную платежную систему – то есть ту, через которую прошли максимальные платежи c августа.
df_big = df_from_aug.groupby(by='account_id').last().reset_index()
Потом с помощью пандаса делаем:
Отсортируем базу по тем, у кого основной ПС - cloud_payments.
df_cloud= df_big[df_big['type'] == 'cloud_payments']
Найдем аккаунты, у кот выручка за август больше 1 млн. Берем наш df_aug и суммируем все суммы по каждому аккаунту
df_grouped = df_aug.groupby(['account_id']).agg({'amount':'sum'}).reset_index()
df_more_1mln = df_grouped[df_grouped['amount'] > 1000000]
Создаем кортеж из аккаунтов, которые удовлетворяют условию больше ляма:
account_lst_more_1mln = tuple(df_more_1mln['account_id'])
Теперь из аккаунтов, у которых основная ПС=cloud_payments отбираем те, у которых выручка за август была БОЛЬШЕ 1 млн. Воспользуемся isin и нашим кортежем (можно и списком, но кортеж вроде быстрей срабатывает)
df_cloud_more_1mln = df_cloud[df_cloud['account_id'].isin(account_lst_more_1mln)]
Добавим расчет rate %.
df_cloud_more_1mln['rate'] = df_cloud_more_1mln['сommission']/df_cloud_more_1mln['amount']
Отфильтруем те, у кот rate > 3.5%
df_cloud_more_1mln_rate = df_cloud_more_1mln[df_cloud_more_1mln['rate'] > 0.035]
Потом SQL запросом вытаскиваю аккаунты подключённые к внутренней системе нашей компании
query = """
select DISTINCT ACCOUNT_ID
from sales.checkout_request
"""
params = {}
gp_requests = mql.read_query( connection_gp, query, params )
Вот тут опять загоняем аккаунты в кортеж:
lst_gp_requests = tuple(gp_requests['ACCOUNT_ID'])
Минусуем тех, кто содержится в этом кортеже с помощью isin и значка ~ (кроме)
df_cloud_more_1mln = df_cloud_more_1mln_rate[~df_cloud_more_1mln_rate['account_id'].isin(lst_gp_requests)]
Создаем кортеж из оставшихся аккаунтов клиентов:
accounts_group = tuple((df_cloud_more_1mln['account_id'].drop_duplicates()))
Ну и в финале выгружаем SQL почты владельцев эти аккаунтов в csv формате.
Как-то так..
❤13👏10🔥1
Условное форматирование в Google таблицах. ✨
Я обычно не люблю раскрашивать Excel таблички в цвета "вырви-глаз". Максимум, я красила светло-зеленым заголовки когда работала еще фин.контролером, и на этом все.
А вот теперь наш отдел продаж просил применить разноцветное условное форматирование к их данным. Я им формировала рейтинг менеджеров.
Так неудобно делать правило для каждой колонки отдельно, но я не нашла другого способа. 🙈
Итак, выделяем колонку. Формат -> Условное Форматирование. Выбираем “Градиент”. Щелкаем по нему и выбираем “От зеленого к красному через желтый” (нижний ряд, в середине). Можно и другие цвета выбрать, конечно. Настраиваем цвет для мин.значения, макс.значения и для точки середины. Любуемся своим творением и повторяем те же действия для другой колонки, судорожно вспоминая оттенок цвета выбранного для первой колонки 😂
Продолжение ->
Я обычно не люблю раскрашивать Excel таблички в цвета "вырви-глаз". Максимум, я красила светло-зеленым заголовки когда работала еще фин.контролером, и на этом все.
А вот теперь наш отдел продаж просил применить разноцветное условное форматирование к их данным. Я им формировала рейтинг менеджеров.
Так неудобно делать правило для каждой колонки отдельно, но я не нашла другого способа. 🙈
Итак, выделяем колонку. Формат -> Условное Форматирование. Выбираем “Градиент”. Щелкаем по нему и выбираем “От зеленого к красному через желтый” (нижний ряд, в середине). Можно и другие цвета выбрать, конечно. Настраиваем цвет для мин.значения, макс.значения и для точки середины. Любуемся своим творением и повторяем те же действия для другой колонки, судорожно вспоминая оттенок цвета выбранного для первой колонки 😂
Продолжение ->
🔥9❤1
Найти беглеца! 😂
Формирую я себе спокойненько топ 150 клиентов по выручке в разрезе месяцев (df). У меня есть номер клиента, месяц выручки, еще несколько колонок с разной инфой, ну и сумма естественно.
Мне нужно перевернуть таблицу, чтобы месяцы превратились в столбцы, и на каждого клиента была бы одна строчка. В таком случае всегда используется pivot_table.
В индексы загоняю номер школы (account_id), первую дату оплаты (first_payed_product_at), а в колонки месяцы (columns=['month']). В значения (values) - чем будет заполнена таблица - суммы выручки 'all_sum'.
df2 = pd.DataFrame(df)
df_pivot1 = df2.pivot_table(index = ['account_id','first_payed_product_at'], columns=['month'], values = 'all_sum',aggfunc = 'sum',margins=True).reset_index().rename_axis(None, axis=1)
Смотрю я что получилось и вижу, что вместо 150 клиентов, у меня – 149! Куда делся один не понятно. Оказалось, что когда выгрузилась первоначальная таблица df, то в столбце first_payed_product_at по одному клиенту было пусто (данных не было), и pivot забил на такого клиента и не перевернул по нему данные, полностью его проигнорировав.
Выход из этого – проставить нули везде, где нет данных, тогда никто не будет потерян - fillna(0)
Формирую я себе спокойненько топ 150 клиентов по выручке в разрезе месяцев (df). У меня есть номер клиента, месяц выручки, еще несколько колонок с разной инфой, ну и сумма естественно.
Мне нужно перевернуть таблицу, чтобы месяцы превратились в столбцы, и на каждого клиента была бы одна строчка. В таком случае всегда используется pivot_table.
В индексы загоняю номер школы (account_id), первую дату оплаты (first_payed_product_at), а в колонки месяцы (columns=['month']). В значения (values) - чем будет заполнена таблица - суммы выручки 'all_sum'.
df2 = pd.DataFrame(df)
df_pivot1 = df2.pivot_table(index = ['account_id','first_payed_product_at'], columns=['month'], values = 'all_sum',aggfunc = 'sum',margins=True).reset_index().rename_axis(None, axis=1)
Смотрю я что получилось и вижу, что вместо 150 клиентов, у меня – 149! Куда делся один не понятно. Оказалось, что когда выгрузилась первоначальная таблица df, то в столбце first_payed_product_at по одному клиенту было пусто (данных не было), и pivot забил на такого клиента и не перевернул по нему данные, полностью его проигнорировав.
Выход из этого – проставить нули везде, где нет данных, тогда никто не будет потерян - fillna(0)
👍16🔥1
Смотрите, что я нашла!
В воскресенье будет стрим с лайвкодингом! Школу эту не знаю, это не реклама, если что, но у них будет в качестве учителя аналитик Глеб Михайлов. Мне о нем один дата сайентист рассказывал, что у него классный курс по SQL на Юдеми есть. Курс был платный, но не дорого, около 500р. Очень хвалили его курс, качественный типа. Я хотела купить, но не успела тогда - как раз карты наши не стали работать на иностранных сайтах.
📌 Так вот ЗАВТРА в 19:00 будет стрим и Симулятор «Аналитик данных с Глебом Михайловым с лайвкодингом!
Глеб будет делать распаковку симулятора и решать задачи на SQL.
Обещают каждому участнику доступ к главе и к задачам, чтобы вместе с ним кодить 🤟🏻
Всегда ввязывайтесь во все движухи, хакатоны и такие вот бесплатные штуки!
В воскресенье будет стрим с лайвкодингом! Школу эту не знаю, это не реклама, если что, но у них будет в качестве учителя аналитик Глеб Михайлов. Мне о нем один дата сайентист рассказывал, что у него классный курс по SQL на Юдеми есть. Курс был платный, но не дорого, около 500р. Очень хвалили его курс, качественный типа. Я хотела купить, но не успела тогда - как раз карты наши не стали работать на иностранных сайтах.
📌 Так вот ЗАВТРА в 19:00 будет стрим и Симулятор «Аналитик данных с Глебом Михайловым с лайвкодингом!
Глеб будет делать распаковку симулятора и решать задачи на SQL.
Обещают каждому участнику доступ к главе и к задачам, чтобы вместе с ним кодить 🤟🏻
Всегда ввязывайтесь во все движухи, хакатоны и такие вот бесплатные штуки!
👍19
Долгожданная пятница! 🌟
Как не поговорить в пятницу о..понедельниках 😂
Дело в том, что в одном отчете я вытаскиваю данные за каждую неделю и проставлю там даты понедельников. Надоело это делать вручную и вот какое решение я нашла.
Воспользуемся функцией python strftime() и функцией pandas.date_range() для создания диапазона дат в pandas.
Задаю начальную и конечную дату периода.
start_date = '2022-01-03'
end_date = datetime.datetime.now() - это текущий день
Потом циклом с частотой в 7 дней (7D) проходимся по всем датам в промежутке и собираем понедельники.
week_lst = [d.strftime('%Y-%m-%d') for d in pd.date_range(start_date,end_date, freq = '7D')]
Тип week_lst будет представлять собой лист.
А потом из этого листа делаем dataframe (табличку):
df_weeks = pd.DataFrame({'Пн':week_lst})
Ну и посмотрим, что получилось:
df_weeks.tail() - показать последние строки сформированной таблицы.
На прикрепленной картинке видно как срабатывает запрос - видны последние пять понедельников.
Как не поговорить в пятницу о..понедельниках 😂
Дело в том, что в одном отчете я вытаскиваю данные за каждую неделю и проставлю там даты понедельников. Надоело это делать вручную и вот какое решение я нашла.
Воспользуемся функцией python strftime() и функцией pandas.date_range() для создания диапазона дат в pandas.
Задаю начальную и конечную дату периода.
start_date = '2022-01-03'
end_date = datetime.datetime.now() - это текущий день
Потом циклом с частотой в 7 дней (7D) проходимся по всем датам в промежутке и собираем понедельники.
week_lst = [d.strftime('%Y-%m-%d') for d in pd.date_range(start_date,end_date, freq = '7D')]
Тип week_lst будет представлять собой лист.
А потом из этого листа делаем dataframe (табличку):
df_weeks = pd.DataFrame({'Пн':week_lst})
Ну и посмотрим, что получилось:
df_weeks.tail() - показать последние строки сформированной таблицы.
На прикрепленной картинке видно как срабатывает запрос - видны последние пять понедельников.
👍8🔥2
Дата сайентисты vs аналитики 😜
Работаю я аналитиком данных, а училась на data scientist. Почему же я не пошла сразу в дата сайнтисты? Ответ прост – туда очень сложно пробиться и нужно много знать, а еще иметь уже готовый опыт какого-нибудь проекта для компании. А где его взять? У меня были учебные проекты и они не плохи, но для оффера – “хотелось бы хоть один реальный проект”, как сказала мне одна эйчар. Есть варианты стажировок, но я не могу позволить себе терять в з/пл, да и берут туда в основном выпускников вузов. Кстати, если вы один из них – стажировки – это вообще бомба для вас и реальный шанс.
Так вот, для себя я выбрала путь – через аналитику. Сейчас я практикую Питон, SQL, возможно позже придумаю какой-нибудь DS проект для компании, и тогда буду дальше пробиваться на позиции data scientist. Есть еще вариант, что мне захочется углубиться в анализ (есть разные направления) и я отложу науку о данных. Все возможно.
Кстати, если вам нужна информация, что там твориться у дата сайентистов, то вот вам блог моего одногруппника. Блог про DS, там много нужного и полезного, ссылки, книги, кладезь всего! 🌟 https://t.iss.one/ds1pro
Работаю я аналитиком данных, а училась на data scientist. Почему же я не пошла сразу в дата сайнтисты? Ответ прост – туда очень сложно пробиться и нужно много знать, а еще иметь уже готовый опыт какого-нибудь проекта для компании. А где его взять? У меня были учебные проекты и они не плохи, но для оффера – “хотелось бы хоть один реальный проект”, как сказала мне одна эйчар. Есть варианты стажировок, но я не могу позволить себе терять в з/пл, да и берут туда в основном выпускников вузов. Кстати, если вы один из них – стажировки – это вообще бомба для вас и реальный шанс.
Так вот, для себя я выбрала путь – через аналитику. Сейчас я практикую Питон, SQL, возможно позже придумаю какой-нибудь DS проект для компании, и тогда буду дальше пробиваться на позиции data scientist. Есть еще вариант, что мне захочется углубиться в анализ (есть разные направления) и я отложу науку о данных. Все возможно.
Кстати, если вам нужна информация, что там твориться у дата сайентистов, то вот вам блог моего одногруппника. Блог про DS, там много нужного и полезного, ссылки, книги, кладезь всего! 🌟 https://t.iss.one/ds1pro
Telegram
DataSciencePRO
Все нужное и полезное из мира дата сатанистов)
👍25👏3🔥1
Наткнулась на бесплатный курс по визуализации данных в Нетологии. 🌟
Начался ВЧЕРА! С 7 ноября — 24 ноября. А почему бы и нет, что называется! 👍
https://netology.ru/programs/analyst-bifree?utm_source=ba_sa_analytics&utm_medium=influence&utm_campaign=bds_bifree_bou_tg_ba_sa_analytics&utm_content=2112022#/main
Стек: DataLens - без понятия что это, Excel, Power BI и Tableau.
Начался ВЧЕРА! С 7 ноября — 24 ноября. А почему бы и нет, что называется! 👍
https://netology.ru/programs/analyst-bifree?utm_source=ba_sa_analytics&utm_medium=influence&utm_campaign=bds_bifree_bou_tg_ba_sa_analytics&utm_content=2112022#/main
Стек: DataLens - без понятия что это, Excel, Power BI и Tableau.
🔥11👍4
Yandex DataLens 💡
Вот какой дашборд получилось создать в DataLens. Переходите по ссылке и потыкайте в фильтры. Красотища ведь!
Оказывается Yandex создал свой BI инструмент для визуализации данных. И все - бесплатно. Можно подключиться к базам или просто залить csv файл. На том бесплатном курсе (выше пост) была дана инструкция как сделать такую красоту.
Мне понравилось! Если кто не успел записаться тогда, то вот тут инструкция как создать подключение к базе и как сконструировать дашборд.
Вот какой дашборд получилось создать в DataLens. Переходите по ссылке и потыкайте в фильтры. Красотища ведь!
Оказывается Yandex создал свой BI инструмент для визуализации данных. И все - бесплатно. Можно подключиться к базам или просто залить csv файл. На том бесплатном курсе (выше пост) была дана инструкция как сделать такую красоту.
Мне понравилось! Если кто не успел записаться тогда, то вот тут инструкция как создать подключение к базе и как сконструировать дашборд.
👍28
Задания по Excel.
В каждом втором тестовом на аналитика есть задания по Excel. Так что тренируемся на чем можем. 💪
Сперва необходимо было построить сводную таблицу и создать условное форматирование. Если таблицу сделать не сложно, то вот с условным форматированием, как правило, все мало работают.
Я вот только на этой работе стала им пользоваться по просьбе отдела продаж для определенных отчетов.
Подскажу как я сделала форматирование тут. Сначала построим саму таблицу.
Задание по сводной таблице.
В файле с материалами занятия построить сводную таблицу, в которой отобразить статьи расходов по строкам, а регионы – по столбцам. В значениях нужны суммы расходов.
На картинке видно, что в строки мы поставили Статьи расходов, а в столбцы – Регионы. В значения перетащила суммы. Тут все просто.
Задание по условному форматированию.
Продолжение тут ->
В каждом втором тестовом на аналитика есть задания по Excel. Так что тренируемся на чем можем. 💪
Сперва необходимо было построить сводную таблицу и создать условное форматирование. Если таблицу сделать не сложно, то вот с условным форматированием, как правило, все мало работают.
Я вот только на этой работе стала им пользоваться по просьбе отдела продаж для определенных отчетов.
Подскажу как я сделала форматирование тут. Сначала построим саму таблицу.
Задание по сводной таблице.
В файле с материалами занятия построить сводную таблицу, в которой отобразить статьи расходов по строкам, а регионы – по столбцам. В значениях нужны суммы расходов.
На картинке видно, что в строки мы поставили Статьи расходов, а в столбцы – Регионы. В значения перетащила суммы. Тут все просто.
Задание по условному форматированию.
Продолжение тут ->
🔥11👍4❤1🥰1
🔥Дополнение к hh.ru
Смотрите какой сайт с вакансиями есть! Даже и не знала про него раньше. Тут подборки по странам, по позициям. Вот, что для младших аналитиков есть:
Младший аналитик / Отисифарм
https://careerspace.app/job/52601
Стажер бизнес-аналитик / ЭКОПСИ
https://careerspace.app/job/52641
Младший аналитик / ivi.ru
https://careerspace.app/job/52460
P.S. Не бойтесь отказов. Это нормально. Не упускайте возможность. Вдруг это ваше 🍀
Смотрите какой сайт с вакансиями есть! Даже и не знала про него раньше. Тут подборки по странам, по позициям. Вот, что для младших аналитиков есть:
Младший аналитик / Отисифарм
https://careerspace.app/job/52601
Стажер бизнес-аналитик / ЭКОПСИ
https://careerspace.app/job/52641
Младший аналитик / ivi.ru
https://careerspace.app/job/52460
P.S. Не бойтесь отказов. Это нормально. Не упускайте возможность. Вдруг это ваше 🍀
❤16👏5👍2
Учебный курс «Анализ данных»
Если вам не хватает к резюме каких-то свежих "корочек", то вот, что нашлось на любимом Степике:
Регистрируйтесь на курс до 1 декабря 2022 года и получите удостоверение о повышении квалификации государственного образца от Тюменского Государственного Университета!
https://stepik.org/course/126333/syllabus
Им нужно прислать скан диплома о первом высшем или о среднем профессиональном образовании.
Ну и курс пройти конечно. Пишут в отзывах, что базовый, легкий. По сути ознакомительный.
Мне даже интересно с какой целью Тюменский Университет такую акцию запустил? Может хочет потом базу потенциальных клиентов на уже платный большой курс собрать. А может что-то еще..
Если вам не хватает к резюме каких-то свежих "корочек", то вот, что нашлось на любимом Степике:
Регистрируйтесь на курс до 1 декабря 2022 года и получите удостоверение о повышении квалификации государственного образца от Тюменского Государственного Университета!
https://stepik.org/course/126333/syllabus
Им нужно прислать скан диплома о первом высшем или о среднем профессиональном образовании.
Ну и курс пройти конечно. Пишут в отзывах, что базовый, легкий. По сути ознакомительный.
Мне даже интересно с какой целью Тюменский Университет такую акцию запустил? Может хочет потом базу потенциальных клиентов на уже платный большой курс собрать. А может что-то еще..
👍14🔥1
🔥 Сводная таблица pivot_table().
Очень часто в работе используется эта функция из Pandas библиотеки. Она преобразовывает DataFrame в сводную таблицу. Хоть таблица и называется сводная, но она не сводит все ваши проблемы на “нет”. А вот задачи преобразования табличных данных решает на “ура”.
Разберемся как она работает на примере. Есть таблица с визитами на страницы. В ней есть дата захода на конкретную страницу, номер юзера, который зашел, сайт самой страницы и ее название.
| created_date | user | page | title
| 2022 – 11 – 01 | 3548329123|https://… | Как добавить счётчик Яндекс.Метрики на страницу
| 2022 – 11 – 02 | 3596921140|https://… | Новый редактор автовебинаров
💡 Задача – подсчитать кол-во заходов и кол-во уникальных юзеров (какое кол-во человек заходили на данную страницу)
df = df.pivot_table(
index = ['title','page'], # в строках будет сайт страницы и его название
columns = 'created_date' , # в колонках - дата захода (если дата не важна, то можно не прописывать)
values = 'user', # подсчитываем по юзерам
aggfunc=('count','nunique')) # как именно подсчитываем, тут считаем кол-во и уникальность.
В качестве aggfunc можно использовать в других задачах 'sum' если нужно подсчитать сумму, допустим выручки по клиентам.
В результате получим таблицу c такой структурой:
| title | page | count | nunique
| Как добавить ... |https://… | 22 | 17
| Новый редактор автовебинаров|https://… | 10 | 10
Очень часто в работе используется эта функция из Pandas библиотеки. Она преобразовывает DataFrame в сводную таблицу. Хоть таблица и называется сводная, но она не сводит все ваши проблемы на “нет”. А вот задачи преобразования табличных данных решает на “ура”.
Разберемся как она работает на примере. Есть таблица с визитами на страницы. В ней есть дата захода на конкретную страницу, номер юзера, который зашел, сайт самой страницы и ее название.
| created_date | user | page | title
| 2022 – 11 – 01 | 3548329123|https://… | Как добавить счётчик Яндекс.Метрики на страницу
| 2022 – 11 – 02 | 3596921140|https://… | Новый редактор автовебинаров
💡 Задача – подсчитать кол-во заходов и кол-во уникальных юзеров (какое кол-во человек заходили на данную страницу)
df = df.pivot_table(
index = ['title','page'], # в строках будет сайт страницы и его название
columns = 'created_date' , # в колонках - дата захода (если дата не важна, то можно не прописывать)
values = 'user', # подсчитываем по юзерам
aggfunc=('count','nunique')) # как именно подсчитываем, тут считаем кол-во и уникальность.
В качестве aggfunc можно использовать в других задачах 'sum' если нужно подсчитать сумму, допустим выручки по клиентам.
В результате получим таблицу c такой структурой:
| title | page | count | nunique
| Как добавить ... |https://… | 22 | 17
| Новый редактор автовебинаров|https://… | 10 | 10
👍17
✅ Сегодня вышел бесплатный курс по SQL у Карпова! Это офигеть событие в условиях, что качественное обучение, как правило платно. Еще и скачивать ничего не нужно.
Чему можно научиться:
- Составлять простые и продвинутые SQL-запросы к базам данных.
- Выгружать данные, анализировать их и визуализировать результаты.
- Проверять гипотезы и принимать решения на основе данных. (вот это очень хочу, практики в таком очень мало)
А на десерт будет раздел с продуктовыми задачами.
Там 60+ SQL-ЗАДАЧ! https://karpov.courses/simulator-sql
Чему можно научиться:
- Составлять простые и продвинутые SQL-запросы к базам данных.
- Выгружать данные, анализировать их и визуализировать результаты.
- Проверять гипотезы и принимать решения на основе данных. (вот это очень хочу, практики в таком очень мало)
А на десерт будет раздел с продуктовыми задачами.
Там 60+ SQL-ЗАДАЧ! https://karpov.courses/simulator-sql
karpov.courses
Симулятор SQL | karpov.courses
Запишитесь на бесплатный интерактивный симулятор SQL онлайн для практики: online-training в школе Karpov Courses.
👍34🔥19❤10💘1