Всем привет! Меня зовут Лера и я с недавнего времени – аналитик данных! От любого процесса нужно получать удовольствие. Особенно если этот процесс – ваша работа. Поэтому я сменила свою профессию.
От работы, к которой не лежит душа, можно уйти, найти другую и прежняя ни слова не скажет против. Любимая работа поддержит Вас, накормит и вдохновит. Но это сложное искусство - поиск именно той своей работы. Этому процессу нужно уделять время и дарить немного любви.
О том как работается аналитику, с чем он сталкивается и вообще о пути к мечте – мой блог.
Я люблю цифры, графики, данные. С ними просто и легко. Их можно собирать, обрабатывать (хоть это и не грибы), по-разному структурировать. За ними прячется смысл, который интересно искать и находить. От этого я получаю удовольствие, за которое мне теперь еще и платят. Конечно, на работе не бывает безоблачно. Нужно много тренироваться, постоянно совершенствовать навыки, иногда ошибаться и считать себя чайником, пополнять копилку знаний SQL и Pandas – шикарной библиотеки Python.
От работы, к которой не лежит душа, можно уйти, найти другую и прежняя ни слова не скажет против. Любимая работа поддержит Вас, накормит и вдохновит. Но это сложное искусство - поиск именно той своей работы. Этому процессу нужно уделять время и дарить немного любви.
О том как работается аналитику, с чем он сталкивается и вообще о пути к мечте – мой блог.
Я люблю цифры, графики, данные. С ними просто и легко. Их можно собирать, обрабатывать (хоть это и не грибы), по-разному структурировать. За ними прячется смысл, который интересно искать и находить. От этого я получаю удовольствие, за которое мне теперь еще и платят. Конечно, на работе не бывает безоблачно. Нужно много тренироваться, постоянно совершенствовать навыки, иногда ошибаться и считать себя чайником, пополнять копилку знаний SQL и Pandas – шикарной библиотеки Python.
👍48❤17🔥8💘2
Я работаю полностью удаленно. 🌟 Моя работа началась с того, что мне выдали ноут и доступы в dbeawer и Jupiter notebook. Cъездить в офис, забрать, настроить все дома – на это и ушел первый день. Чтобы удобнее было работать подключила клаву и монитор и погрузилась в непонятный пока еще мир. Мне сказали какие основные базы использует компания, но описаний к ним в компании не было. Я изучала их, пробовала разные выгрузки, в excel выстроила себе систему связей по ключам между базами. Конечно не все было понятно. Баз оочень много. Основных – где-то штук 15. Как формируется выручка, почему есть несколько колонок в базах с похожим смыслом, что значит user_id и чем он отличается от account_ id, почему иногда что-то пытаюсь выгрузить, но оно не выгружается (оказывается если ставить доп условия по id, то запрос срабатывает быстрее). Очень удобно, что Jupiterу нас bi, а значит общий и я вижу скрипты коллег. Есть стандартные скрипты для выгрузки тех или иных данных. Это очень помогает. 👍
👍29🔥1
Как выглядит реальный скрипт?
Это пример по расчету выручки по разным нишам (в компании могут быть свои срезы, критерии и т.п).
В Jupiter прописываем сначала SQL запрос, в query = """ запрос""", а потом питоном вытаскиваем данные и либо обрабатываем пандасом (как-то группируем строки, меняем колонки, объединяем таблицы по условию), либо выгружаем в Excel файл. Названия баз я конечно изменила, чтобы был понятен смысл.
query = """
select fv.string_val as name,
sum(case when p.currency = 'RUB' then p.amount when p.currency = 'RUR' then p.amount else (p.amount * cr.rate) end) as 'all_sum'
from База_платежей p
join База_счетов sa ON p.ACCOUNT_ID = sa.id
left join База_с_нишами fv ON sa.form_value_set_id=fv.form_value_set_id
left join База_курсов c on p.currency = c.code
left join База_курсов2 cr on c.id = cr.currency_id and substring(p.created_at,1,10) = substring(cr.created_at,1,10)
where p.id > 23000000
and p.deleted=0 and p.status='accepted'
and p.created_at >= '2022-06-01'
and p.created_at < '2022-07-01'
group by 1
"""
params = {}
df = mql.read_query( connection, query, params )
df.to_excel('Revenue.xls')
df.head()
Как видите, ничего сложного. SQL можно изучить самим, не только на курсах. Но об этом позже..
Это пример по расчету выручки по разным нишам (в компании могут быть свои срезы, критерии и т.п).
В Jupiter прописываем сначала SQL запрос, в query = """ запрос""", а потом питоном вытаскиваем данные и либо обрабатываем пандасом (как-то группируем строки, меняем колонки, объединяем таблицы по условию), либо выгружаем в Excel файл. Названия баз я конечно изменила, чтобы был понятен смысл.
query = """
select fv.string_val as name,
sum(case when p.currency = 'RUB' then p.amount when p.currency = 'RUR' then p.amount else (p.amount * cr.rate) end) as 'all_sum'
from База_платежей p
join База_счетов sa ON p.ACCOUNT_ID = sa.id
left join База_с_нишами fv ON sa.form_value_set_id=fv.form_value_set_id
left join База_курсов c on p.currency = c.code
left join База_курсов2 cr on c.id = cr.currency_id and substring(p.created_at,1,10) = substring(cr.created_at,1,10)
where p.id > 23000000
and p.deleted=0 and p.status='accepted'
and p.created_at >= '2022-06-01'
and p.created_at < '2022-07-01'
group by 1
"""
params = {}
df = mql.read_query( connection, query, params )
df.to_excel('Revenue.xls')
df.head()
Как видите, ничего сложного. SQL можно изучить самим, не только на курсах. Но об этом позже..
👍21🔥2❤1💩1
Что вы делали позапрошлым летом?
Я вот тогда решила сменить профессию.
Работала много лет финансовым контролером в разных компаниях. Делала управленческую отчетность. И везде одно и тоже – вечные переработки. В дни отчетов нас финансистов из офиса на такси по ночам развозили по домам. Меняла компанию – и там то же самое. И ладно бы это мы плохо работали, не знали бы тонкостей Excel, тупили, но дело было абсолютно не в нашем отделе.
Сложность отчетности, которую нужно автоматизировать, а не состыковывать миллион отчетов от разных отделов, не идеальная 1С бухгалтерия, в которой то, что нам финансистам было нужно, собиралось не так, а вкривь и вкось. А еще аудиторы, которым (честно и откровенно) всегда все рисуют..
И так это все надоело. Мне нравилось придумывать как сделать быстрее хотя бы в тех рамках, в которых позволено было творить, я чувствовала, что могу даже не столько БОЛЬШЕ, сколько ПО- ДРУГОМУ.
Продолжение в комментариях ->
Я вот тогда решила сменить профессию.
Работала много лет финансовым контролером в разных компаниях. Делала управленческую отчетность. И везде одно и тоже – вечные переработки. В дни отчетов нас финансистов из офиса на такси по ночам развозили по домам. Меняла компанию – и там то же самое. И ладно бы это мы плохо работали, не знали бы тонкостей Excel, тупили, но дело было абсолютно не в нашем отделе.
Сложность отчетности, которую нужно автоматизировать, а не состыковывать миллион отчетов от разных отделов, не идеальная 1С бухгалтерия, в которой то, что нам финансистам было нужно, собиралось не так, а вкривь и вкось. А еще аудиторы, которым (честно и откровенно) всегда все рисуют..
И так это все надоело. Мне нравилось придумывать как сделать быстрее хотя бы в тех рамках, в которых позволено было творить, я чувствовала, что могу даже не столько БОЛЬШЕ, сколько ПО- ДРУГОМУ.
Продолжение в комментариях ->
👏21👍1🔥1
Аналитики на вкус и цвет..
Я даже не представляла себе как много бывает разных видов аналитиков! Только спустя какое-то время изучая вакансии и читая околоайтишные статьи, я поняла в чем их отличие и как иногда компании скрещивают один вид с другим, а порой и вообще путают или не заморачиваются с правильным названием.
Итак, аналитики бывают:
✅ Бизнес аналитики. Они должны понимать потребность бизнеса, проводить анализ всех внутренних процессов. Их задача - разобраться в потребностях заказчиков, фиксировать бизнес-требования и их решения по реализации в виде бизнес-процессов. Короче, у них много бумажной работы.
✅Системный аналитик отвечает за автоматизацию этих бизнес процессов. Он является фильтром и преобразователем между бизнесом и разработкой. Мало чего там бизнес аналитики с заказчиками напридумывают. Реально ли это все воплотить – вот в чем вопрос. Он выбирает какую систему ставить, какое программное обеспечение должно быть, какие приложения будут использоваться.
Продолжение в комментариях 👉
Я даже не представляла себе как много бывает разных видов аналитиков! Только спустя какое-то время изучая вакансии и читая околоайтишные статьи, я поняла в чем их отличие и как иногда компании скрещивают один вид с другим, а порой и вообще путают или не заморачиваются с правильным названием.
Итак, аналитики бывают:
✅ Бизнес аналитики. Они должны понимать потребность бизнеса, проводить анализ всех внутренних процессов. Их задача - разобраться в потребностях заказчиков, фиксировать бизнес-требования и их решения по реализации в виде бизнес-процессов. Короче, у них много бумажной работы.
✅Системный аналитик отвечает за автоматизацию этих бизнес процессов. Он является фильтром и преобразователем между бизнесом и разработкой. Мало чего там бизнес аналитики с заказчиками напридумывают. Реально ли это все воплотить – вот в чем вопрос. Он выбирает какую систему ставить, какое программное обеспечение должно быть, какие приложения будут использоваться.
Продолжение в комментариях 👉
👍11❤1🔥1
Мотивация 🎯
Мы все так привыкли, что нас нужно мотивировать, чтобы достичь какой-то цели. Многие книги по саморазвитию пестрят идеями и способами мотивации, создания своеобразных плюшек на пути к достижению успешного успеха.
У меня есть на это свое мнение. Начну издалека.
Вот чтобы вы ели, вас нужно мотивировать? А для сна вам нужна мотивация? А чтобы любить? Если у вас есть ЖЕЛАНИЕ, то вам не нужна мотивация! Просто ЖЕЛАНИЕ🌟, ХОТЕЛКА так сказать. Меняя одну работу на другую, нужно понимать ради чего ты это делаешь. Если только ради денег или престижа, или чего-то, что идет от головы, а не от сердца, то вот тут начинают требоваться “плюшки” и “морковки” и этим пользуются те, кто пишет такие мотивационные книги. Именно ОНИ зарабатывают на Вас, давая вам ложные цели и навязывают те стремления, которых у вас возможно и не было.
Продолжение 👉
Мы все так привыкли, что нас нужно мотивировать, чтобы достичь какой-то цели. Многие книги по саморазвитию пестрят идеями и способами мотивации, создания своеобразных плюшек на пути к достижению успешного успеха.
У меня есть на это свое мнение. Начну издалека.
Вот чтобы вы ели, вас нужно мотивировать? А для сна вам нужна мотивация? А чтобы любить? Если у вас есть ЖЕЛАНИЕ, то вам не нужна мотивация! Просто ЖЕЛАНИЕ🌟, ХОТЕЛКА так сказать. Меняя одну работу на другую, нужно понимать ради чего ты это делаешь. Если только ради денег или престижа, или чего-то, что идет от головы, а не от сердца, то вот тут начинают требоваться “плюшки” и “морковки” и этим пользуются те, кто пишет такие мотивационные книги. Именно ОНИ зарабатывают на Вас, давая вам ложные цели и навязывают те стремления, которых у вас возможно и не было.
Продолжение 👉
👍20❤2🔥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%
Разберем сегодня эти понятия на рабочих примерах.
Трафик. Что же это такое? Это количество посетителей на сайте за определённый период времени. В 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🔥2❤1
Мир аналитика данных 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'
Вот, казалось бы, как можно накосячить с оператором 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👏3❤2🔥2
Живой кодинг
Однажды у меня было собеседование с живым кодингом. Даже не буду скрывать компанию. Это был Сбербанк. Они искали аналитика данных со знанием Питона, 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