NULL++ – Telegram
NULL++
75 subscribers
41 photos
12 links
Канал для тех, кто хочет развиваться как Data Analyst, Data Engineer и BI-Analyst
@HexMikhail
Download Telegram
NULL++
На прошлой неделе я доделал финальный проект и сдал его. Но пока что фидбэка не было) А значит, я пока покажу вам скриншоты дашборда, как это выглядит. Я честно постарался, чтобы любое исследование по этим данным можно было провести прямо в DataLens. Такой…
А давайте я немного поясню, что происходит)
Вторая вкладка "Анализ продаж маркетплейса" позволяет понять портрет и поведение клиентской базы. Ответить на вопросы "Кто наши клиенты?" и "Насколько они лояльны?". На ней, кроме индикаторов (которые и так понятны), присутствует ещё несколько табличек.
В списках Топ покупателей по количеству заказов и по сумме затрат можно менять количество значений с помощью селектора.
Таблица RFM-анализа формируется "на лету" по SQL-запросу к БД, учитывая параметры ПЕРИОДА, и выдаёт актуальный результат на заданный период в дашборде.
Когортный анализ формируется "на лету" по SQL-запросу, учитывая параметры ПЕРИОДА. Анализ строит помесячные когорты, так как покупки сами по себе дорогие и нечастые. Показывает % уникальных клиентов от первого периода.
LTV также формируется "на лету" по SQL-запросу, учитывая параметры ПЕРИОДА. Сам анализ строит помесячные когорты, так как покупки сами по себе дорогие и нечастые. Показывает среднюю выручку на уникального клиента.
🔥4
NULL++
На прошлой неделе я доделал финальный проект и сдал его. Но пока что фидбэка не было) А значит, я пока покажу вам скриншоты дашборда, как это выглядит. Я честно постарался, чтобы любое исследование по этим данным можно было провести прямо в DataLens. Такой…
Третья вкладка "Анализ товаров" позволяет оценить эффективность товарного ассортимента. Ответить на вопросы "Какие товары продаются хорошо?", "На каких товарах мы больше всего зарабатываем?" и "Какие товары неликвидны?".
В списках Топ и Антитоп можно менять количество значений с помощью соответствующего селектора.
Особенность таблицы ABC/XYZ-анализа в том, что она (как и на предыдущей вкладке было) формируется "на лету" по SQL-запросу к БД, учитывая параметры ПЕРИОДА и МАСШТАБА. То есть выдаёт актуальный результат на заданный период в дашборде.
+ Есть градация по цвету для ABC/XYZ (зелёный-жёлтый-красный) для быстрого понимания результата.
P.S. на второй вкладке по цветам также сделан RFM-анализ
🔥4
Всем привет!
Мою работу проверили и дали отличный фидбек. Все советы и замечания я уже поправил, поэтому могу представить на общее обозрение)
Гит: https://github.com/mishandri/DA-final-project
Сам дашборд (светлая тема): https://datalens.yandex/6eiukr5xyukyr?_theme=light
Сам дашборд (тёмная тема): https://datalens.yandex/6eiukr5xyukyr?_theme=dark

А ещё я очень рад, что завершил данный курс обучения. Это было очень классно, познавательно и очень-очень интересно.

В планах у меня теперь завершить курс по "BI-аналитике" (остались финальные задания), а затем я приступлю к курсу "Инженер данных", который тоже обещает быть не менее клёвым
🔥5👏1
Всем привет!
Ведёте ли вы записи того, что возможно потом пригодится?
Перед тем, как я начал учиться на аналитика данных, я просто сохранял все найденные интересные страницы в закладках, а интересные посты в ВК или в ТГ просто в избранном. И там до сох пор большущая куча неразобранных статей, до которых уже очень долгое время не доходят руки, чтобы всё разобрать и каталогизировать.
Я стал задаваться вопросом: а как бы поудобнее всё это начать хранить, чтобы потом ещё и искать было легко.
Простое гугление предлагало использовать всякие сервисы по типу OneNote (в общем-то я его уже использовал, но он слишком тормознутый и глючный как по мне), Evernote (тоже как-то было дело, но отказался из-за ограничений в бесплатной версии) или Notion, который ушёл из России и судя по новостям начал удалять все данные даже тех, у кого была подписка...
Были предложены и другие сервисы, но практически все они либо были платными, либо бесплатные версии были настолько ограничены, что ими было бы невозможно пользоваться.
К тому же, ситуация с Notion показала, как можно потерять все свои записи по желанию их создателей.
И я наткнулся на Obsidian, который умел всё, что мне было необходимо + все данные можно хранить локально в формате MarkDown.
Что мне очень понравилось:
+ Гибкая настройка практически всего, чего можно. Очень много всяких настроек.
+ Приятный и интуитивный интерфейс + куча готовых цветовых схем на любой вкус.
+ Возможность устанавливать всякие расширения.
+ Использование тегов для каталогизации документов.
+ Создание и использование нескольких хранилищ.
Но не обошлось и без минусов... И самый главный - это платная синхронизация между устройствами.
Все советовали создать приватный репозиторий на гитхабе и выгружать всё в него. Но это надо было постоянно делать лишние действия пуши перед редактированием и пуллы после...
Но тут я решил пойти более простым путём и реализовать это всё "своими силами") Почему в кавычках? Потому что это делает за меня Я.Диск =)
Я просто создал папку в Я.Диске, в которой у меня хранятся все мои хранилища данных.
Например, если я правлю документ на компьютере, он сразу же выгружается на мой Я.Диск, а затем синхронизируется с Я.Диском на ноуте. И наоборот. Работает идеально!
На телефоне сделал аналогичную штуку: в Я.Диске можно настроить автоматическую синхронизацию помеченных папок.
К тому же, Я.Диск позволяет восстанавливать удалённые или изменённые файлы, то есть я имею возможность работать с резервными копиями, если вдруг что.
+ в браузере есть расширение Markdown Web Clipper, которое в один клик делает из страницы md-файлик, готовый для размещения в Obisdian.

@nullpp #обучение #obsidian #записи
🔥8👍2
Forwarded from Simulative
Итоговый проект нашего студента по курсу «Аналитик данных»

Сегодня хотим поделиться работой студента Михаила, который успешно завершил курс и получил отличный фидбек от кураторов 🙌

Проект реализует полный цикл автоматизированного сбора данных по API, их загрузку в PostgreSQL и визуализацию ключевых метрик через Yandex DataLens. Цель — обеспечить стабильный поток данных для аналитики клиентской активности, продаж и ассортиментной матрицы.


Ссылки на проект:
👩‍💻 GitHub
📊 Дашборды в светлой теме и тёмной теме

Гордимся такими результатами и рады видеть, как наши студенты продолжают развиваться в аналитике. Желаем Михаилу успехов в следующих шагах — впереди у него курсы по BI-аналитике и инженеру данных 💪

📊 Simulative
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
Всем привет!)
Пригласили меня в эфир =) Поделиться своим опытом обучения, и не только
🔥4
Forwarded from Simulative
Вебинар: как студенты Simulative входят в аналитику с ноги с нуля

Сложно понять, как построить свой карьерный путь? На вебинаре предложим несколько стратегий, которые помогут вам определиться с выбором профессии.

В программе — истории, как маркетолог перешёл в аналитику и вышел на работу в крупную IT компанию, как студенты находят работу ещё до окончания курса, и как преподаватель с восьмилетним опытом стал аналитиком.

➡️ Зарегистрироваться на вебинар

А ещё HR-специалист поделится актуальной статистикой по трудоустройству: как за сколько месяцев найти первую работу, и какие ошибки совершают новички при поиске вакансий.


❗️ Встречаемся 11 ноября в 19:00 МСК

🎁 На мероприятии мы разыграем денежные сертификаты на обучение в Simulative. Регистрируйтесь, чтобы узнать, как принять участие в розыгрыше и услышать, как делается карьера в аналитике из первых уст!

➡️ Зарегистрироваться на вебинар

📊 Simulative
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Simulative
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from Simulative
🎓 Как наши студенты «входят в аналитику с ноги» — истории, которые вдохновляют

Каждый пришёл в аналитику своим путём. Кто-то из маркетинга, кто-то из образования, кто-то вообще из другой сферы. Но всех объединяет одно — желание разобраться в данных и построить новую карьеру.

На нашем вебинаре вы услышите реальные истории студентов Simulative, которые начинали с нуля и уже работают аналитиками. А пока — ловите короткие истории первых героев (в кружочках выше)👆

Ждем вас на вебинаре, чтобы услышать полные версии!

📅 Сегодня, 11 ноября, 19:00 МСК
🎁 Среди участников — розыгрыш сертификатов на обучение!

До встречи!
Всем привет!
На этой неделе новости такие: Мне выдали (пока что в электронном виде) мой диплом о переквалификации).
Получается, я уже теперь точно дипломированный и профессиональный аналитик данных.
Бумажный вариант пришлют скоро)
Я очень рад, что всё-таки решил пойти учиться. Узнал много нового и очень хорошо закрепил полученные знания на практических кейсах из реального бизнеса.

Кстати, это один из трёх шагов (дипломов) на пути становления Fullstack-аналитика данных

@nullpp #обучение #диплом
🔥9👏4
Всем привет!
Это пост-проверка. Я всё-таки решил добавить комментарии в канал, чтобы можно было что-то тут обсудить (желательно по теме, ахахах). В старых постах, как я понимаю, не будет обсуждений, ну и ладно)

@nullpp #обсуждение
🔥31👍1
Всем привет!
Когда я делал свой дипломный проект и арендовал виртуальный сервер, при первичной настройке выполнения скриптов по расписанию, я не мог понять почему они не выполняются в нужное время.
Мне подсказали, что нужно бы проверить таймзону самого сервера - и действительно, оказалось, что она была UTC+0 вместо привычной для меня UTC+3. Это я к чему?
К тому, что у СУБД таймзона может как совпадать с сервером, так и отличаться. Да и вообще, при работе с датой-временем надо иметь в виду, что таймзоны могут повлиять на результаты не только работы, но и аналитических выводов, которые можно получить, если мы неправильно их будем интерпретировать из-за этого.
В PostgreSQL есть два основных типа для работы со временем:
- TIMESTAMP(или TIMESTAMP WITHOUT TIME ZONE) - хранит только дату и время, без привязки к часовому поясу. Это просто число, означающее "настенные часы в определённый момент". При сохранении 2023-10-25 15:30:00 база не знает, было это в Лондоне, в Москве или в Токио.
- TIMESTAMPTZ (или TIMESTAMP WITH TIME ZONE) - рекомендуемый к использованию тип. Он не хранит пояс отдельно внутри себя. Вместо этого он конвертирует переданное значение в время по UTC (Всемирное координированное время) для хранения. При извлечении данных он преобразует это UTC-время в часовой пояс текущей сессии.
Опять же многое будет зависеть от параметров как на самом сервере, так и от параметров СУБД.
Для определённой сессии можно задать таймзону так:
SET timezone = 'Europe/Moscow';

(кстати, на это нужны определённые права для учётки PostgreSQL.
И при выполнении запросов, например
SELECT doc_dt FROM ticket;

мы получим данные вида 2025-05-12 09:23:48.000 в том случае, если типом поля doc_dt является TIMESTAMP. Впрочем, такой ответ мы получили бы и не устанавливая таймзону перед этим. То есть СУБД принимает "на веру" то, что TIMESTAMP всегда в том часовом поясе, который указан в параметрах.
Мы можем преобразовать таймзону вручную при конкретном запросе (для этого не нужно особых прав):
SELECT doc_dt::TIMESTAMP AT TIME ZONE 'Europe/Moscow' FROM ticket;

В результате получим результат вида: 2025-05-12 09:23:48.000 +0300. Как видите, в самом конце будет указан часовой пояс, причём такой, какой указан в настройках. Точнее, он его просто "припишет".
С TIMESTAMPZ ситуация иначе. Смещение во времени автоматически записывается в БД. И тогда при применении AT TIME ZONE к полю TIMESTAMPZ, он наоборот преобразует в нужный временной пояс.
SET timezone = 'Europe/Moscow';
SELECT doc_dt FROM ticket;

Результат: 2025-05-12 09:23:48.000 +0300
SELECT doc_dt::TIMESTAMP AT TIME ZONE 'Europe/Moscow' FROM ticket;

Результат: 2025-05-12 09:23:48.000 +0300

Сменим таймзону:
SET timezone = 'UTC';
SELECT doc_dt FROM ticket;

Выдаст такой же результат:
2025-05-12 09:23:48.000 +0300


А вот
SELECT doc_dt::TIMESTAMP AT TIME ZONE 'Europe/Moscow' FROM ticket;

Даст нам:
2025-05-12 06:23:48.000 +0300

Как видите AT TIME ZONE - мощный оператор для явного преобразования.
Если применить к TIMESTAMPTZ, он "снимает" пояс и возвращает TIMESTAMP в указанной зоне.
Если применить к TIMESTAMP (без пояса), он "надевает" на него указанный пояс и возвращает TIMESTAMPTZ.

Что делать?
1. Храните всё в UTC. Настройте часовой пояс сервера на UTC. Это стандарт де-факто для backend-разработки и избегает путаницы.
2. Используйте тип TIMESTAMPTZ. Позволяет PostgreSQL делать всю грязную работу по конвертации.
3. Преобразование в локальное время делайте на уровне приложения. Ваше приложение лучше знает, в каком часовом поясе находится пользователь. Передавайте данные в UTC, а финальное отображение делайте на клиенте.

#SQL #PostgreSQL #timezone @nullpp
👍5🤔2
Всем привет!
Мой дашборд разместили в DataLens Gallery =) Йээээ
https://datalens.ru/gallery/gx1h48lns7le1
🔥10👏1
Всем привет!
Поделюсь небольшим, так сказать, успехом в учёбе на курсе Дата инженера.
Удалось собрать docker compose, где
Докер 1 с питоном, запускает скрипт по генерации данных, а затем записывает их в Докер 2, где крутится PostgreSQL. А затем Докер 3 отображает это через Nginx по localhost в виде простой таблички

@nullpp #генерация_данных #Python #docker #docker_compose #nginx
🔥4👏1
Всем привет!
Я тут немного подумал, чем бы можно было бы разнообразить контент на канале.
Как на счёт того, чтобы выкладывать некоторые задачки (и их решения) на подумать?
Например типа такого:

Задача:
Вывести информацию в какие города можно улететь из Парижа (Paris) и сколько времени это займёт?


Решение в PostgreSQL:
SELECT 
town_to,
TIMEDIFF(time_in, time_out) as flight_time
FROM
Trip
WHERE
town_from = 'Paris';


#Задача #SQL #PostgreSQL #Авиаперелеты
🔥43
Всем привет!
Сегодня будет ещё одна задачка по той же БД

Задача:
Выведите пассажиров с самым длинным ФИО. Пробелы, дефисы и точки считаются частью имени.


Решение будет в первом комменте

#Задача #SQL #PostgreSQL #Авиаперелеты
🔥3
NULL++
Всем привет! На этой неделе новости такие: Мне выдали (пока что в электронном виде) мой диплом о переквалификации). Получается, я уже теперь точно дипломированный и профессиональный аналитик данных. Бумажный вариант пришлют скоро) Я очень рад, что всё-таки…
Всем привет!
А вот и второй диплом мне прислали в электронном виде. Теперь я дважды дипломированный аналитик. Посмотрим, как это мне поможет в будущем xD

П.С. Первый диплом я уже получил в бумажном виде. Всё как положено: корочка, вкладыши, +1 к ЧСВ

#Диплом
🔥6🍾1🤓1
Всем привет!
Хочу немного поговорить сегодня о функции COUNT в SQL. Данную функцию используют для подсчёта количества строк в таблице/вьюшке/результате запроса.

1. Самый простой пример использования - это подсчёт общего количества строк:
SELECT
COUNT(*)
FROM table;

Так можно посчитать все строки, включая те, которые содержат NULL.

2. Если вместо * вставить название колонки:
SELECT
COUNT(col1)
FROM table;

то запрос посчитает количество не-NULL значений.

3. Если нужно посчитать уникальные значения, то внутри нужно добавить DISTINCT:
SELECT
COUNT(DISTINCT col1)
FROM table;

Данный способ работает в PostgreSQL, в других СУБД частенько используются другие функции.

А что, если нам необходимо посчитать количество уникальных строк по двум и более параметрам?
Тут нам поможет функция CONCAT():
SELECT COUNT(DISTINCT CONCAT(col1, ' | ', col2))
FROM table;

- Иногда col1 и col2 нужно привести к формату строки.
- Обычно используют какой-то спецсимвол для соединения, чтобы случайно не пропустить что-нибудь.
Например, если взять просто CONCAT(col1, col2), то конкатенация значений ab и c будет равна конкатенации значений a и bc: abc. То есть DISTINCT решит, что это одинаковые значения.

4. А ещё можно считать количество по условиям:
SELECT 
COUNT(CASE WHEN gender = 'F' THEN 1 END) AS F,
COUNT(CASE WHEN gender = 'M' THEN 1 END) AS M
FROM project_data;

Или вот так тоже можно:
SELECT 
COUNT(*) FILTER (WHERE gender = 'F') AS F,
COUNT(*) FILTER (WHERE gender = 'M') AS M
FROM project_data;


А ещё, нужно помнить, что функция COUNT() является агрегирующей, а это значит, что если мы хотим посчиать количество в разрезе како-нибудь параметра (значений столбца), то надо не забывать про GROUP BY.
В качестве примера, посмотрим распределение покупки товаров по половому признаку:
SELECT 
product_id,
COUNT(CASE WHEN gender = 'F' THEN 1 END) AS F,
COUNT(CASE WHEN gender = 'M' THEN 1 END) AS M
FROM project_data
GROUP BY product_id ;

В результате получим такую таблицу:
product_id|f  |m  |
----------+---+---+
536| 77| 96|
7004| 81| 75|
19812| 73| 79|
47778| 74| 72|
34354| 79| 89|
4035| 80| 82|
44342| 73| 89|
...|...|...|


#SQL #PostgreSQL #агрегация #count
🔥7
Всем привет!
Ну вот и Новый год! Поздравляю всех с наступающим (у кого-то уже наступившим) Новым 2026 Годом!
Хочу подвести свои итоги года)
В уходящем году я решился сменить свой род деятельности. С начала года начал учиться на Аналитика данных: каждый день по чуть-чуть (когда-то по 20 минут, когда и по 3-4 часа) я очень много изучал SQL, Python (включая всякие интересные библиотеки по анализу и визуализации данных), продуктовые метрики, методы аналитики, различные BI-системы, с трудом вспоминал давнозабытую математическую статистику и даже изучил Excel на совершенно другом уровне)
Попутно я уволился со своей старой работы в "никуда", но пока был в отпуске, нашёл новую работу на позицию BI-аналитика, где уже почти полгода (когда праздники кончатся, уже будет, считай) работаю. И мне очень нравится то, чем я сейчас занимаюсь!
Что ещё? Сдал экзамен по DataLens и получил сертификат. Получил два диплома государственного образца о переквалификации по Аналитике данных и BI-аналитике.
За весь 2025 год я посетил огромную тучу различных вебинаров, наверное, штук 100, не меньше. Там были темы и по аналитике, и по BI, и по ML, и даже по 1С =)
В следующем году я обязательно продолжу развиваться как первоклассный специалист по BI (в первую очередь), аналитике данных и совсем немного в инженерии данных. Может даже захвачу немного DS и ML, тут уж как сложится =)
А ещё, я вчера прошёл собес в компанию, где мне сделали оффер с зп на треть повыше, но компания не в реестре IT... И теперь я в раздумьях: сменить место работы или продолжить свой путь на текущем месте? Может кто что посоветует? =)
Поэтому я хочу пожелать всем моим подписчикам: не бойтесь своих стремлений и желаний, если идти к цели, то вы её обязательно достигнете!
В комментариях, можете поделиться, кто чего достиг в этом году и что планируете в следующем)

@nullpp #поздравления #достижения
🎄91👍1