cookie

Utilizamos cookies para mejorar tu experiencia de navegación. Al hacer clic en "Aceptar todo", aceptas el uso de cookies.

avatar

Данялитика

Личный блог Данилы Елистратова. Преподаю в Skypro и Центральном Университете Т-банка. Рассказываю про аналитику, статистику, программирование и математику. Курс по аналитике со мной: https://go.sky.pro/analytics_danya

Mostrar más
Publicaciones publicitarias
3 798
Suscriptores
-924 horas
-407 días
-10030 días

Carga de datos en curso...

Tasa de crecimiento de suscriptores

Carga de datos en curso...

Доброго субботнего утра!👋 Хочу немного поделиться с вами некоторыми новыми проектами в моей жизни ☺️ Пошел уже четвертый месяц, когда дополнительно к Skypro я работаю еще и в магистратуре Центральном Университете от Тинькофф Т-банка. Теперь я веду еще и настоящие оффлайн живые универские занятия😀 Веду "Основы статистики" и с сентября добавится еще "Python для анализа данных". Немного непривычно по сравнению с уже родным для меня "эдтеховским" форматом, но очень интересно)) Прикладываю несколько фоток офиса Т-банка. Такого офиса я еще не видел никогда😱
Mostrar todo...
🔥 84👍 9 5👏 1
Всем привет!👋 Сегодня мне хотелось бы поднять темы, о которых мы ранее никогда не говорили. И это лингвистика и, в частности, происхождение корней тех или иных англицизмов, которые в таком количестве присутствуют в нашей повседневной речи :) Сегодня мы с вами рассмотрим два термина: "корреляция" и "каузация" А также продемонстрируем, что эти два термина не являются тождественными на следующей задаче, которую сильно любит Skyeng: Представьте ситуацию: ваш коллега-аналитик принес вам инсайт о том, что пользователи нашей онлайн-школы, которые часто посещают раздел "Грамматика", демонстрируют более высокий лайфтайм. Значит ли это, что нужно вкладываться в привлечение текущих пользователей в раздел "Грамматика"? То, что вы наблюдаете в этом случае, называется корреляцией. Корреляция - это статистическая взаимосвязь между двумя показателями, однако важно отметить, что ее наличие не означает, что два показателя являются причиной и/или следствием друг для друга. Cor-relation буквально означает "со-отношение", т.е. "совместное отношение". Реляция, релятивизм, корреляционный - в русском языке множество заимствованных слов с этим корнем. Среди употребляемых английских слов и выражений можно выделить: - relative (родственник, т.е. "имеющий отношение) - related to (имеющий отношение к) - relatively speaking (относительно) - theory of relativity (теория относительности) Наличие корреляции не означает наличие каузации, т.е. причинно-следственной связи между двумя событиями. Causation означает "причинно-следственная связь". Однокоренными являются следующими часто встречаемые слова: - because (потому что) - to cause smth (вызвать что-то, являться причиной) - causality (причинно-следственная связь) P.S. Всегда считал, что иностранные языки следует учить "корнями", а не "словами") Что вы думаете по этому поводу? 🤔 Хотели бы дальнейшие разборы терминов и переход на такие языки, как французский и немецкий?)
Mostrar todo...
👍 37🔥 8🤩 4 2
Начнем неделю с мемчиков, ибо понедельник и так тяжелый сам по себе 🫠 Мем с волнующейся Падме прекрасно подходит для супер-ответственной профессии дата инженера😄
Mostrar todo...
😁 34👍 1
Ииии внимание, правильный ответ: как многие из вас корректно отметили, во внутреннем запросе нельзя писать просто user_id, а необходимо написать u.user_id (или c.user_id), чтобы в явном виде объяснить, из какой таблички родом поле-ключ 😊 Это важно, так как left join подразумевает неодинаковость полей u.user_id и c.user_id✍️ Комментарии: 1. Многие диалекты (в некоторых ситуациях, не во всех, логику я пока уловить не сумел) не ругаются на подобную синтаксическую ошибку, а берут по умолчанию u.user_id, так как таблица u стоит слева. 2. Первый group by по элиасу month_install может не сработать в некоторых диалектах. Связано это с тем, что элиасы, прописанные в select-части, иногда не могут использоваться в других частях кода, и нам бы пришлось написать GROUP BY DATE_TRUNC('month', installed_at). Но все же это редкость, поэтому посчитаем, что так можно (как минимум, в Postgres-SQL можно :)) 3. Также было интересное замечание про отсутствие названия схемы перед названием таблицы. На курсе мы привыкли к таких схемам, как skybank или skycinema, через точку перед названием таблицы. Но предлагаю не считать это ошибкой, так как в большинстве случаев схема задана по умолчанию. На самом деле и в вашем текущем Metabase есть схема public, и если вы обращаетесь к таблице напрямую, то по дефолту считаете, что данная таблица лежит на схеме public. 🙂 В завершение истории с retention и valiotti хочу задать финальный вопрос. А как были определены цифры 1,3 и 7 при вычислении Retention? Как вы считаете, почему были выбраны именно эти цифры и как бы вы выбирали, если бы надо было выделить только одно винтажное значение? На основании каких расчетов? Вы молодцы и спасибо за активность!🤝 Напоминаю вам, что если бы вы хотели разобрать какое-то специфическое задание или поговорить на тему, которая западает лично у вас, обязательно пишите в комментариях!
Mostrar todo...
🤓 11😁 3👍 1
Всем привет! Возвращаюсь к вам с ответом на задачу про Retention.🔥 Напомню формулировку задания: "Есть таблица пользователей user (user_id — id пользователя, installed_at — дата установки) и таблица активности client_session (user_id, created_at — таймстемп активности). Необходимо написать SQL-запрос, который считает retention 1-го, 3-го, 7-го дня по пользователям с группировкой установок по месяцам (с января 2020 года)." Ответ SELECT month_install , SUM(flag_1) / COUNT(*) as retention_1 , SUM(flag_3) / COUNT(*) as retention_3 , SUM(flag_7) / COUNT(*) as retention_7 FROM ( SELECT user_id , DATE_TRUNC('month', installed_at) as month_install , CASE WHEN SUM(CASE WHEN created_at - installed_at < interval '1 day' then 1 else 0 end) > 0 then 1 else 0 end as flag_1 , CASE WHEN SUM(CASE WHEN created_at - installed_at < interval '3 day' then 1 else 0 end) > 0 then 1 else 0 end as flag_3 , CASE WHEN SUM(CASE WHEN created_at - installed_at < interval '7 day' then 1 else 0 end) > 0 then 1 else 0 end as flag_7 FROM user u LEFT JOIN client_session c ON u.user_id = c.user_id GROUP BY user_id , month_install ) table_by_client GROUP BY month_install Обратите внимание на то, что: 1. Вы можете совмещать case when внутри и снаружи группировочной функции 2. Избегать лишних этажей подзапроса, производя арифметические действия с группировочными функциями Внимание, а теперь небольшой challenge! В этом коде-ответе допущена одна синтаксическая ошибка, которая приведет к тому что на большинстве диалектов (в частности, Oracle или Postgres) код выдаст ошибку. Сможете найти ошибку в стоге функций?
Mostrar todo...
🔥 12 3
Всех с началом новой недели!☀️ Начну сразу с ответов на тестовое задание по SQL 🔥 И спасибо за вашу активность! Даже в такую диковинку как sql-pivot копать начали😃 Задача 1 Имеется таблица city_population с населением городов: city (наименование города), population (численность населения). Необходимо написать запрос, который выводит город с минимальным населением. Самое простое - это limit :) SELECT city, population FROM city_population ORDER BY population LIMIT 1; Можно воспользоваться подзапросом SELECT city, population FROM city_population c WHERE population = (SELECT MIN(population) FROM city_population) А можно использовать оконные функции. Вряд ли у нас есть два города с совершенно одинаковым населением, поэтому вместо row_number можем смело использовать rank или dense_rank. Также обратите внимание, что в некоторых диалектах нет необходимости делать подзапрос, а можно обратиться по элиасу rn на том же уровне подзапроса. SELECT city, population FROM (SELECT * , ROW_NUMBER() OVER (ORDER BY population ASC) AS rn FROM city_population) t WHERE rn = 1; Задача 2. В этой задаче необходимо задаться вопросом - а что является единицей наблюдения в таблице А? Чтобы превратить таблицу А в таблицу В требуется ли проводить агрегацию? А если требуется, то какую именно? Обратите внимание, что по имеющимся в задании строкам таблицы мы можем сделать вывод о том, что колонки 1 и 2 формируют составной ключ в таблице А. Это может означать, что в этой таблице не существует повторяющихся строк в комбинации колонок 1 и 2. В таком случае агрегация не требуется однако она все равно остается самым простым способом реализации таблички В. Самая очевидная реализация полагается на конструкцию CASE WHEN. Однако у этого способа есть очевидный минус: чем больше у нас уникальных значений name, тем больше фиктивных однотипных строк нам придется напечатать. SELECT ID, AVG(CASE WHEN Name = 'A' THEN Val END) AS A, AVG(CASE WHEN Name = 'B' THEN Val END) AS B, AVG(CASE WHEN Name = 'C' THEN Val END) AS C FROM A GROUP BY ID; Был предложен весьма изящный вариант со специфичной функцией pivot, которая позволяет не только перевести А в В вне зависимости от кол-ва уникальных значений, но и даже выбрать набор значений измерений, которые мы хотим использовать для "сводной". Минусы у этого способа тоже есть - данная операция работает более медленно и, к тому же, в большинстве диалектов ее не существует. SELECT ID, A, B, C FROM A PIVOT( MAX(Val) FOR Name IN (A, B, C) ) AS pt; Поздравляю вас, дорогие подписчики, что справились с базовой частью! В следующем посте я опубликую ответ на 3 задачу (с retention)! Пока хочу докинуть вам вопрос со звездочкой по задаче номер 3: А что если мы хотим померить retention для 1,2,3,4,....,29,30,31,...,59,60... дней? Есть ли какой-то способ не писать 60 sum case when конструкций?)🙈
Mostrar todo...
10🔥 4👍 1
Спасибо за вашу активность в комментариях к предыдущим постам! 🤝 Я обязательно сформулирую ответы на задачи от Valiotti (учитывая и все ваши) в начале недели 🙂 Но сначала хотел бы вам закинуть еще и третью, «основную» задачу) Формулировка следующая: Есть таблица пользователей user (user_id — id пользователя, installed_at — дата установки) и таблица активности client_session (user_id, created_at — таймстемп активности). Необходимо написать SQL-запрос, который считает retention 1-го, 3-го, 7-го дня по пользователям с группировкой установок по месяцам (с января 2020 года). Обращаю ваше внимание, что retention имеется в виду базовый, то есть отношение количества пользователей, которые дожили до дня Х, к количеству пользователей всего в когорте. Если кто забыл о когортах и винтажах, на канале есть пост об этом от 17 мая. И помните: нет метрик важнее лайфтайма и LTV. А они есть прямое следствие показателя retention)
Mostrar todo...
🔥 13 3👍 1
Photo unavailableShow in Telegram
Дорогие подписчики, пришло время вернуться к одной из наших основных активностей — разбору различных тестовых заданий 👹 Предлагаю нам приступить к разбору одного из самых репрезентативных тестовых из моей коллекции (от Valiotti Analytics). Это тестовое на 75% посвящено всеми нами любимому SQL 😀 Начнем с первых двух задач. 1. Первая задача совсем простенькая, предлагаю вам решить ее минимум тремя способами :) 2. Вторую задачу также можно решить минимум двумя способами. Напишите, пожалуйста, ваши мысли, вопросы и решения в комментарии, а я попозже обязательно предоставлю правильные ответы. И тогда можно будет пойти к более внушительной третьей задаче 👻
Mostrar todo...
🔥 19👍 1 1👏 1
Добрый день, дорогие друзья! Начнем сегодняшний пост с ответа на последнюю задачу про стрелки. Многие из вас абсолютно верно отметили в комментариях, что правильный ответ — 75 градусов 🙂 Мне проще всего было идти по следующей логике: вообще между ними кажется 90 градусов, только немного меньше. На сколько меньше? На отклонение часовой стрелки от горизонтали, то есть от трех. Отклонение составляет половину часа, то есть одну шестую четверти циферблата, то есть 90 / 6 = 15. Поздравляю всех, кто сам дошел до правильного ответа 🦾 А теперь я бы хотел поговорить с вами о самых базовых математических (и даже арифметических) вещах, которые путают чуть ли не чаще, чем формулы тригонометрии или табличные интегралы: логику вычисления процентов. Давайте представим ситуацию: мы работаем продуктовыми аналитиками в «Перекрестке» и занимаемся клиентским путем в приложении «Перекресток онлайн». Конверсия из захода в приложение в покупку в мае составила 14% (Х1), а в июне — 13.1% (Х2) 📊 Предлагаю вам следующие вопросы: 1. На сколько процентных пунктов Х1 больше, чем Х2? 2. На сколько процентов Х1 больше, чем Х2? 3. На сколько процентных пунктов Х2 меньше, чем Х1? 4. На сколько процентов Х2 меньше, чем Х1? И бонусный вопрос. Есть два клиентских чека: А = 500 ₽ и В = 600 ₽. Ответьте на предыдущие 4 вопроса относительно чеков А и В. Ответьте в комментариях на вопросы (и, если есть возможность, поясните логику своих вычислений)👇
Mostrar todo...
🔥 12👍 3
Всем привет!🔥 Продолжаем серию небольших задачек, которые можно встретить на собеседованиях. Сегодня у нас еще один представитель бессмертной классики — задача про стрелки, которая звучит следующим образом: «На стрелочных часах время полчетвертого. Сколько градусов составляет угол между минутной и часовой стрелкой?» Время, кстати, можно менять. Попробуйте решить эту загадку и для текущего момента времени на ваших часах :)
Mostrar todo...
🔥 14👍 4
Elige un Plan Diferente

Tu plan actual sólo permite el análisis de 5 canales. Para obtener más, elige otro plan.