Мир аналитика данных
4.59K subscribers
139 photos
3 videos
114 links
Пишу о рабочих буднях аналитика. Тут много рабочего кода, прохождение собеседований и еще много всего полезного.
https://www.linkedin.com/in/valeriashuvaeva
Автор канала: @Valeria_Shuvaeva
Download Telegram
Что вы делали позапрошлым летом?

Я вот тогда решила сменить профессию.
Работала много лет финансовым контролером в разных компаниях. Делала управленческую отчетность. И везде одно и тоже – вечные переработки. В дни отчетов нас финансистов из офиса на такси по ночам развозили по домам. Меняла компанию – и там то же самое. И ладно бы это мы плохо работали, не знали бы тонкостей Excel, тупили, но дело было абсолютно не в нашем отделе.

Сложность отчетности, которую нужно автоматизировать, а не состыковывать миллион отчетов от разных отделов, не идеальная 1С бухгалтерия, в которой то, что нам финансистам было нужно, собиралось не так, а вкривь и вкось. А еще аудиторы, которым (честно и откровенно) всегда все рисуют..

И так это все надоело. Мне нравилось придумывать как сделать быстрее хотя бы в тех рамках, в которых позволено было творить, я чувствовала, что могу даже не столько БОЛЬШЕ, сколько ПО- ДРУГОМУ.

Продолжение в комментариях ->
👏21👍1🔥1
Аналитики на вкус и цвет..

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

Итак, аналитики бывают:

Бизнес аналитики. Они должны понимать потребность бизнеса, проводить анализ всех внутренних процессов. Их задача - разобраться в потребностях заказчиков, фиксировать бизнес-требования и их решения по реализации в виде бизнес-процессов. Короче, у них много бумажной работы.

Системный аналитик отвечает за автоматизацию этих бизнес процессов. Он является фильтром и преобразователем между бизнесом и разработкой. Мало чего там бизнес аналитики с заказчиками напридумывают. Реально ли это все воплотить – вот в чем вопрос. Он выбирает какую систему ставить, какое программное обеспечение должно быть, какие приложения будут использоваться.
Продолжение в комментариях 👉
👍111🔥1
Мотивация 🎯

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

Вот чтобы вы ели, вас нужно мотивировать? А для сна вам нужна мотивация? А чтобы любить? Если у вас есть ЖЕЛАНИЕ, то вам не нужна мотивация! Просто ЖЕЛАНИЕ🌟, ХОТЕЛКА так сказать. Меняя одну работу на другую, нужно понимать ради чего ты это делаешь. Если только ради денег или престижа, или чего-то, что идет от головы, а не от сердца, то вот тут начинают требоваться “плюшки” и “морковки” и этим пользуются те, кто пишет такие мотивационные книги. Именно ОНИ зарабатывают на Вас, давая вам ложные цели и навязывают те стремления, которых у вас возможно и не было.

Продолжение 👉
👍202🔥2
Базовые понятия: трафик, лиды и конверсия.

Разберем сегодня эти понятия на рабочих примерах.
Трафик. Что же это такое? Это количество посетителей на сайте за определённый период времени. В sql можно подсчитать как count(distinct visitor_id)
Count – подсчет количества, distinct – убирает дубликаты. Как пример, у нас Иванов зашел два раза на сайт с большим промежутком времени, Петров зашел один раз, а потом и Сидоров раза три зашел, но в течение нескольких минут. У нас посчитается, что трафик равен (2+1+1) четырем. Потому что visitor_id (присвоенный номер при заходе на сайт) будет у Иванова разным, хоть он один и тот же человек, но из-за большого промежутка времени захода (допустим час) visitor_id будет уже другой присвоен.
У Петрова будет один заход и visitor_id будет какой-то один, а вот Иванов заходил три раза, но быстро выходил, а потом опять заходил и ему на сайте присвоится одинаковый номер.

Не берусь отвечать за все компании, но в нашей именно такой подход. Если у вас по-другому, то расскажите. Интересно будет сравнить методику.

А теперь разберем понятие лид.
Лид — это потенциальный клиент, который заинтересовался товаром или услугой и оставил свои контакты: оформил заявку, заказал звонок или указал email в форме обратной связи. В нашей компании это тот, кто зарегистрировался на сайте. То есть если Иванов решил зарегистрироваться, то ему присваивается определенный номер в специальной базе данных (user_id), не тот номер посетителя, а прям уже номер пользователя, так сказать.
сount (user_id) – подсчитает нам количество лидов, здесь уже не нужно убирать дубликаты, так как каждая строчка в этой базе – уникальный номер зарегистрировавшегося человека.

Конверсия трафика в лиды звучит устрашающе. На самом деле это просто кол-во лидов деленное на трафик. Как правило, указывается в %. Чем выше, тем лучше. Показатель показывает в % сколько клиентов не просто заходят на сайт, а регистрируются с целью использования/покупки и прочее. Если, допустим на сайт за какой-то период (например за неделю) зашли 20 000 человек, а зарегистрировались 1 200, то конверсия получится шесть процентов: (1 200/20 000)*100=6%
👍21🔥21
Мир аналитика данных pinned «Всем привет! Меня зовут Лера и я с недавнего времени – аналитик данных! От любого процесса нужно получать удовольствие. Особенно если этот процесс – ваша работа. Поэтому я сменила свою профессию. От работы, к которой не лежит душа, можно уйти, найти другую…»
Between преткновения

Вот, казалось бы, как можно накосячить с оператором between в SQL? Легко, ребята 😊

Да, оператор включает границы диапазона. На курсе это проходили. Да и сама я когда училась раньше, использовала его часто “для красоты”.

Допустим нужно мне ограничить дату выгрузки, и я ставлю условие
where date between '2022-07-01' and '2022-07-31'. Чего проще?
Понятно же, что выкачка будет с первого июля по 31 июля включительно, то есть за целый месяц.
А вот и не всегда! Вернее конечно всегда, но с нюансами.
Если у вас дата в базе идет с компонентом времени, то есть вот так: 01.07.2022 17:40:03, то between хихикает над вами и не загружает последний день, так как считает, что вы ввели '2022-07-31 00:00:00, а нужно было тогда вписывать '2022-07-31 23:59:59'
Короче я теперь всегда и везде использую простое сравнение.
where date >= '2022-07-01' and date < '2022-08-01'
👍31👏32🔥2
Живой кодинг

Однажды у меня было собеседование с живым кодингом. Даже не буду скрывать компанию. Это был Сбербанк. Они искали аналитика данных со знанием Питона, SQL и опытом проведения A/B тестов в команду для улучшения их банковских приложений.

У меня не было опыта A/B тестов, но я все равно откликнулась ради опыта. Вообще, хочу порекомендовать проходить как можно больше собеседований и относиться к ним как к квесту. Чем больше в вашей копилке прохождений, тем больше опыта и больше вопросов, ответы на которые вы будете потом гуглить, чтобы знать к следующей “битве”!

Итак, эйчар из Сбера предупредила, что это будет живой кодинг, я дала добро и назначили время.
Тестирование было на сайте https://codeinterview.io/
Мне сбросили ссылку, и я зашла.

Задания были следующие:

Создать датафрейм из данных, которые загнаны в словарь exam_data {} из кортежей []
df = pd.DataFrame(exam_data)

Выбрать записи, где число попыток = 3
df[df['attempts'] == 3]['score']

Продолжение 👉
👍242🔥2
Делала я как-то тестовое на аналитика для Skyeng. Хорошее тестовое, я на нем отлично потренировалась. Им отослала, потом с тим лидом пообщалась. Но как оказалось, им нужен был уровень senior и упор делался на поиск опытного продуктового аналитика.

Самое смешное, что я работала как раз в Skyeng в финансовом отделе и участвовала в карьерном треке. У меня было расписано, что я изучаю, что нужно подтянуть. Программу составляли вместе с нашим эйчаром. По факту я сама ее составила (как-нибудь скину потом), так как я понимала, что мне надо еще подтянуть и что изучить дополнительно.

Продолжение в комментах 👉
👍25🔥5
На днях из одного отдела поступил крик о помощи. И связан он был с Excel.

Файл весил 125 МБ и был очень тяжел для работы с ним. Меня, как специалиста по Excel (не зря же столько лет с Excel дружу 😜) попросили как-то его уменьшить. И тут настал мой звездный час! 🌟 Я, ничего не удаляя, облегчила файл вдвое до 61 МБ.

Как мне это удалось:
1) Меню Данные -> значок Изменить связи. Выбираем там Разорвать связь. Все данные, что подтягиваются из других файлов сохранятся и превратятся в значения.
2) Сохранить файл в формате (Тип файла) не [книга Excel], выбрать [Двоичная книга Excel]

Еще можно в настройках Excel выбрать Меню ФайлПараметрыФормулы, Вычисления в книге вручную. Тогда пересчет формул осуществляться не будет пока вы его вручную не сделаете и это позволяет работать с файлом, который не будет надолго зависать и тормозить. Но эта настройка индивидуальна для каждого пользователя. Ее нельзя передать в файле.

Подумала, что Вам эта инфа может тоже пригодится.
👍52🔥194
Всех с пятницей! 🌟

Поговорим сегодня о красоте, о красоте Сатурна 🪐. Ой, то есть Юпитера.
Это не про планету, а про среду разработки.

В Jupyter Notebook можно вставить картинку. Я обычно стандартным приложением "Ножницы" вырезаю часть картинки, обычно это задание, которое присылают, правой клавишей мыши выбираю копировать (в буфер обмена). Потом в Jupyter меняю тип строки на markdown и вставляю Ctrl+V.
Однако, если выкачать потом файл ноутбука (кому-то отправить захотите), то лучше картинку убрать, а то там вместо нее человек увидит длиннющий код.

Ну и про сами маркдауны напомню. Чтобы выделить заголовки пририсовываем решетки ##
и жмем выполнение ячейки. Я обычно Ctrl + Enter жму.

# Заголовок большой
## Заголовок поменьше
### Заголовок еще меньше

Можно даже с помощью html кода оформлять, но я не пробовала.
Если у Вас есть какой-то красивый бьютихак 💡оформления, то делитесь способами!
👍161🔥1
Excel vs Google таблицы 🎯

Насколько я люблю Excel, настолько мне не по вкусу работа в Google таблицах. Хотя в них есть и плюсы. Но обо всем поподробнее.
На текущем месте, учитывая, что многие работают удаленно, все пользуются Google таблицами. Общей сети нет (что для меня странно, но сейчас не об этом).
В любимом Excel были горячие клавиши, что ускоряло работу. В нем писать формулы, строить сводные таблицы – одно удовольствие ❤️, а теперь приходится узнавать, где спрятана та или иная функция. Как вариант, можно выкачать файл (Файл – Скачать – Microsoft Excel XLSX) себе на диск (у меня пока есть оплаченный Excel) и уже в скаченном варианте поработать c ним. Я так и делаю, когда мне попадается большой файл и в нем много всего. Потом гружу его обратно (Файл - Импортировать). Каждый раз так играться нет смысла, поэтому будем изучать Гугл таблицы.

Вот тут можете посмотреть, как они выглядят. И не только посмотреть. Я создала этот файл для тренировки. Доступ всем открыла на редактирование. Прода 👉
👍121🔥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.

Короче говоря, оптимизируемся, друзья!
👍233🔥2
З..2..1..ПУСК..ОТКЛЮЧЕНО 💻

На работе обсуждали кто как справляется с попыткой обновления Windows.
Как оказалось, один коллега вообще не выключает ноутбук. Я, прям, пожалела его “железо”. У меня какая-то врожденная установка, что техника тоже должна отдыхать.
Другая коллега нажимает отложить обновление.

А я поискала и нашла такой способ, которым конечно со всеми на работе поделилась:

Заходим в Пуск, жмем букву с, появляются Службы.
Открываем эти Службы и внизу находим Центр обновления Window (на картинке вверху). Жмем правой клавишей на нем и выбираем Свойства.

Выбираем тип запуска: Отключена. И внизу в состоянии я нажала Остановить. После этого выключила ноут и хоть он оранжевым огоньком подсвечивал обновление, но сам процесс не запустился уже. 👌
👍41🔥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 👌 когда нужно посчитать выручку в рублях
👍12🔥21
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 формате.
Как-то так..
13👏10🔥1
Условное форматирование в Google таблицах.

Я обычно не люблю раскрашивать Excel таблички в цвета "вырви-глаз". Максимум, я красила светло-зеленым заголовки когда работала еще фин.контролером, и на этом все.

А вот теперь наш отдел продаж просил применить разноцветное условное форматирование к их данным. Я им формировала рейтинг менеджеров.

Так неудобно делать правило для каждой колонки отдельно, но я не нашла другого способа. 🙈

Итак, выделяем колонку. Формат -> Условное Форматирование. Выбираем “Градиент”. Щелкаем по нему и выбираем “От зеленого к красному через желтый” (нижний ряд, в середине). Можно и другие цвета выбрать, конечно. Настраиваем цвет для мин.значения, макс.значения и для точки середины. Любуемся своим творением и повторяем те же действия для другой колонки, судорожно вспоминая оттенок цвета выбранного для первой колонки 😂
Продолжение ->
🔥91
Найти беглеца! 😂

Формирую я себе спокойненько топ 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.
Обещают каждому участнику доступ к главе и к задачам, чтобы вместе с ним кодить 🤟🏻
Всегда ввязывайтесь во все движухи, хакатоны и такие вот бесплатные штуки!
👍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() - показать последние строки сформированной таблицы.

На прикрепленной картинке видно как срабатывает запрос - видны последние пять понедельников.
👍8🔥2
Дата сайентисты vs аналитики 😜
Работаю я аналитиком данных, а училась на data scientist. Почему же я не пошла сразу в дата сайнтисты? Ответ прост – туда очень сложно пробиться и нужно много знать, а еще иметь уже готовый опыт какого-нибудь проекта для компании. А где его взять? У меня были учебные проекты и они не плохи, но для оффера – “хотелось бы хоть один реальный проект”, как сказала мне одна эйчар. Есть варианты стажировок, но я не могу позволить себе терять в з/пл, да и берут туда в основном выпускников вузов. Кстати, если вы один из них – стажировки – это вообще бомба для вас и реальный шанс.

Так вот, для себя я выбрала путь – через аналитику. Сейчас я практикую Питон, SQL, возможно позже придумаю какой-нибудь DS проект для компании, и тогда буду дальше пробиваться на позиции data scientist. Есть еще вариант, что мне захочется углубиться в анализ (есть разные направления) и я отложу науку о данных. Все возможно.
Кстати, если вам нужна информация, что там твориться у дата сайентистов, то вот вам блог моего одногруппника. Блог про DS, там много нужного и полезного, ссылки, книги, кладезь всего! 🌟 https://t.iss.one/ds1pro
👍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.
🔥11👍4