Data Driven / Bogdan Ivanov
892 subscribers
68 photos
47 videos
2 files
53 links
Данные, карьера, саморазвитие

https://datadrivenbogdan.com/

Помогаю вырасти в работе с данными и зарабатывать больше.
За менторством и сотрудничеством — @b_ivanov_kz
Download Telegram
Предновогодние итоги🎄

Если честно — напиздел...

Никаких итогов года подводить не хочется. Хочется верить, что каждый и так знает, что в текущем году он сделал максимум и в предстоящий год заходит с намерением сделать еще лучше. За себя могу сказать точно - стремлюсь в значимых для меня вещах выкладываться на максимум. А значит, можно честно сказать себе: молодец. И предлагаю каждому в эти дни найти время и смелость сказать себе спасибо — за все, что получилось и за все, что было непросто.

Поэтому сегодня просто про Новый год и то, что действительно важно в эти дни.

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

И есть у нас одна семейная традиция, которой мы придерживаемся уже много лет:

31 декабря — мы идем в баню🧖‍♂️
А вечером — обязательно в кинотеатр🎬


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

Ну и, конечно, хочу поздравить вас всех с наступающим! 🎄
Пусть праздники дадут вам отдых, тепло, время для себя и близких.
А в новом году — спокойствия, здоровья, сил и простого человеческого счастья.

А теперь вопрос вам👇

Есть ли у вас какие-то традиции в предновогодний день или на новогодних праздниках?

Очень интересно почитать в комментариях 👀👀👀

@data_driven_bogdan
Please open Telegram to view this post
VIEW IN TELEGRAM
❤35🔥97
Итоги от ЛЛМки👨‍💻

Увидел у коллег по цеху такую прикольную штуку с итогами года от ЛЛМки по тг каналам и решил тоже посмотреть что же она выдаст по моему
(да-да, самому писать их, как вы поняли, мне максимально впадлу...)

Вбил свой канал иии
тут я ахуел...

Вот что она написала первой строкой:

tech-savvy Gen Z фаундер вайб

Что это блядь за набор букв и какого хуя она меня обозвала, подумал я тут же — и полез разбираться😡

Коротко, что это значит:

*️⃣tech-savvy — шаришь в технологиях и используешь их по делу
*️⃣Gen Z вайб — простой язык, без пафоса и корпоративного буллшита
*️⃣фаундер — не «исполнитель по ТЗ», а человек, который сам думает, как и зачем что-то делать

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

Остальной анализ я прикреплю скрином — там она довольно прикольно расписала — что за канал, про что он и почему + немного статистики по каналу.

Ниже также выложу блок "Что она думает о канале":

1️⃣Анализ постов показал, что основной фокус — на практической аналитике: SQL, Python, ETL, архитектура данных. Темы повторяются в разных форматах — обзоры собесов, лайфхаки, теория.

2️⃣Тон канала — разговорный, без пафоса, с лёгкой самоиронией. Автор не претендует на гуру, а делится опытом как коллега, который тоже учится.

3️⃣Ключевой инсайт: канал не просто учит инструментам, а помогает понять, как они работают в реальных кейсах — от собесов до архитектуры Greenplum.

4️⃣Часто упоминаются конкретные технологии: SQL, Python, dbt, Airflow, Greenplum, Kafka, ClickHouse — это не абстракции, а реальные инструменты из жизни.

5️⃣ Автор делает акцент на деталях: например, как работает UNION ALL с NULL, почему важно выбирать distribution key в Greenplum, как писать эффективный SQL.

6️⃣Важно, что канал не только про технические навыки, но и про процесс: как писать резюме, как готовиться к собесу, как выстраивать карьеру в аналитике.

7️⃣Есть элементы мемности: «не знал, буду юзать», «все и так работает, так что оставь себе и не еби мозг», «контента на этой недели нет — всему виной мой трип».

8️⃣Канал живой, не формальный, с лёгким юмором, но без кринжа. Автор — не эксперт, а практик, который делится тем, что реально работает.

Итого:
К счастью — она меня не обзывала, диагнозов не ставила так что все нормально,
в новый год можно идти с хорошим настроением!😁

Так что всех еще раз с Наступающим!🎄🥂🎄

P.S. Исходя из статистики канала план на следующий год следующий: добавить минимум один нолик к текущему количеству подписчиков.

Услышимся в 2026🚀🚀🚀

@data_driven_bogdan
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17😁127👍5
Праздники ещё идут — и нет, я не спился😁

Начало января 2026 для меня — про размеренный отдых и паузу.
Без спешки и перегруза. Просто время, в котором можно: выспаться, выдохнуть, спокойно подумать и, в целом, нормально отдохнуть

Сейчас я в Белграде🇷🇸 — гуляю, знакомлюсь с городом и страной, ловлю ощущение перезагрузки. Очень классное чувство — начинать год без суеты, без дедлайнов, без вечного «надо было ещё вчера».

Особенно это ощущалось сегодня, 7 января — здесь празднуют Рождество.
Город буквально нажал на паузу: около 95% всего закрыто — музеи, заведения, магазины. Работают только точечные кафешки (и то, они начали открываться ближе к 14-15) и, конечно же, храмы. Люди никуда не торопятся, день просто проживается.

Фотки с Сербии прикладываю в посте📸
Пока это 3 день, поэтому, вероятно, дополню после поездки и мб напишу про Сербию отдельный пост (в рамках какой-нибудь конкретной темы). Кстати, если что-то интересно — пишите в комментарии, вполне это может перерасти в пост.

А вообще, иногда лучший способ провести праздники — позволить себе тишину и неспешность, хотя я тот ещё любитель покутить.

А как вы проводите свои праздники? 👀

@data_driven_bogdan
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤30🔥21😍13
Что за вкус интересно…
🧐🤨🤔

@data_driven_bogdan
😁322118
✈️ Tax Free в путешествиях: как вернуть бабки с покупок и не проебаться

Думал, про что написать с Сербии — и, под конец поездки тема сама пришла, мы вспомнили о возможности возврата НДС после покупок, которой и воспользовались, поэтому я решил рассказать о tax free что это и как им воспользоваться и вернуть себе бабки после трат за границей.

С этой темой я сталкивался еще раньше, когда ездил в США, и вот в крайний день в Сербии мы тоже про это вспомнили — как раз вовремя.

Коротко, что это вообще такое

Tax Free — это возможность вернуть НДС с покупок, при выезде из страны, в которой они были приобретены (должен быть нерезидентом).

В Сербии, например:
*️⃣минимальная сумма чека для Tax Free — от 6 000 динар (+- 4.8к рублей)
*️⃣действует не на все товары

ставка НДС в Сербии 20%/10%/0% также, в зависимости от товара.

PS В каждой стране правила разные — перед поездкой лучше загуглить конкретно под страну.

Какие вообще бывают Tax Free❓

Глобально — 2 варианта:

1️⃣ Instant Tax Free

Ты показываешь паспорт прямо при покупке, и тебе сразу вычитают НДС из суммы.
Очень удобно, такое чаще встречается в Азии — в Японии точно есть.

2️⃣ Классический

Ты сначала платишь полную сумму, а потом уже занимаешься возвратом НДС. Такой вариант распространен в Европе.

Дальше разберем именно этот вариант (чеков можно оформлять несколько)

1️⃣ Купили вещи на >6к динар в одном чеке

2️⃣ Просим Tax Free Form на кассе

Кстати, как оказалось: не обязательно делать это день в день, мы вообще пришли за формой в последний день

При себе нужно иметь паспорт

Далее на кассе заполняют форму, к ней крепят чеки и далее ты выбираешь способ возврата: кэшом или на карту

От этого дальше будет зависеть сценарий.

Кстати, как обычно, у меня все прошло не без проблем - на этом этапе у меня не правильно заполнили форму. В итоге нашли вариант выхода из данной ситуации: сделали возврат покупки, пробили их заново, оформили новый Tax Free Form на новые чеки. Повезло, что вещи были с собой.
Если бы нет — могли быть проблемы.


Что дальше (если не instant, тк при нем просто показываем паспорт при покупке и нам вычитают НДС из стоимости).

3️⃣ При выезде из страны нужно заверить форму Tax Free у таможни

Условия к моменту выезда:
*️⃣вещи не использованы
*️⃣с бирками
*️⃣желательно в коробке

Сам штамп ставят
*️⃣после регистрации, но до паспортного контроля
*️⃣либо прямо на регистрации просишь вызвать таможенника,
если планируешь сдать эти вещи в багаж

Там ставят штамп — и все, форма валидна.

4️⃣Как дальше получить бабки❓

*️⃣Наличкой в аэропорту

После паспортного контроля, в зоне вылета - в Сербии был отдельный магазик, где выдают кеш
Как обычно, тут не без проблем - я летел обратно ночью, а начинал этот магазин работать только с 6 утра)) В любом случае, возврат кэшем я не выбирал, но если выберите вы, посмотрите есть ли такой магазин/пункт при выезде из страны у вас и время его работы перед выбором возврата денег на этапе оформления формы.

*️⃣ При возврате в страну

В течение 1 года (иногда 3 месяца — зависит от страны).
Приходишь в магазин с формой — возвращают всю сумму НДС.

Есть вариант передать "штампованную" форму человеку, который планирует ехать в эту страну и он уже получит эти деньги и вернет тебе (или кинет, смотря кого попросил). У этого варианты есть свои минусы, тк нужен вариант кого то, кто едет в эту страну, либо самому планировать приезд, но в таком случае, ты сможешь вернешь всю сумму НДС (на примере чека - это 20%)

*️⃣Посредники (как сделал я)

Я воспользовался Global Blue.

Как это работает:
*️⃣загружаешь Tax Free Form в приложение
*️⃣подтверждаешь штамп в таможне
*️⃣через 1–3 дня приходит возврат на карту
ps статусы обновляются автоматически

Из явных минусов — возвращают не всю сумму НДС
из 20% по факту выходит примерно 10–15% но, за то быстро, в моем случае вернули 12%

Если всё сделать правильно — можно вернуть приятную сумму и закрыть вопрос без стресса, надеюсь кто-то сможет вернуть свою лавеху🍌

👇Пользовались ли tax free услугой?

@data_driven_bogdan
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤53👍41🔥35
Обзор собеседования

Продолжаем разбор собеседования в USETECH (Ч. 2). В первой части были SQL + Python задачки, их можно посмотреть тут. Во второй — теория, системное мышление и вопросы “на понимание”.

SQL

1️⃣ Что такое подзапрос
Запрос внутри запроса, может быть в SELECT, WHERE или FROM.

2️⃣ Коррелированный подзапрос
Подзапрос, который ссылается на внешнюю таблицу и фактически сравнивает строку с самой собой по условию.

3️⃣ CTE (WITH)
Подзапрос, вынесенный в отдельную временную таблицу для читаемости и переиспользования.

4️⃣ UNION vs UNION ALL
UNION — убирает дубликаты
UNION ALL — просто склеивает результаты

5️⃣ INTERSECT и EXCEPT
INTERSECT — строки, которые есть в обеих таблицах
EXCEPT — строки из первой, которых нет во второй

6️⃣ Работа с NULL (COALESCE)
COALESCE заполняет NULL первым ненулевым значением из списка аргументов.

7️⃣ Работа с датами
EXTRACT / DATE_PART — получить год, месяц
CAST или :: — приведение типов

8️⃣ Оконные функции
Считают агрегаты без схлопывания строк.

9️⃣ ROW_NUMBER / RANK / DENSE_RANK
ROW_NUMBER — уникальный номер
RANK — с пропусками
DENSE_RANK — без пропусков

1️⃣0️⃣ PIVOT / UNPIVOT
Транспонирование таблицы: строки ↔️ колонки.

Python / Pandas

1️⃣1️⃣ list vs tuple
list — изменяемый
tuple — неизменяемый

1️⃣2️⃣ Почему NumPy быстрее циклов
Векторизованные операции выполняются на уровне C, а не Python.

1️⃣3️⃣ Что такое векторизация
Операции сразу над массивом, а не поэлементно.

1️⃣4️⃣ Если данные не помещаются в память
Читать и обрабатывать чанками.

1️⃣5️⃣ Работа с большими файлами (chunks)
Чтение и запись по частям, без загрузки всего в память.

1️⃣6️⃣ Parquet
Колоночный формат хранения, компактный и быстрый для аналитики.

1️⃣7️⃣ loc vs iloc
loc — по меткам
iloc — по индексам

1️⃣8️⃣ Типовой пайплайн в Pandas
read → describe → чистка → трансформации → EDA → сохранение

1️⃣9️⃣ merge vs concat
merge — аналог JOIN
concat — склейка по строкам или колонкам (аналог UNION)

Статистика

2️⃣0️⃣ Корреляция
Мера связи между числовыми переменными, от −1 до 1.

2️⃣1️⃣ Пирсон vs Спирмен
Пирсон — линейная связь
Спирмен — ранговая

2️⃣2️⃣ Почему корреляция ≠ причинность
Показывает связь, но не объясняет влияние.

2️⃣3️⃣ ДИ
Диапазон, в котором с заданной вероятностью лежит истинное значение параметра.

2️⃣4️⃣ Интерпретация 95% ДИ
В 95% случаев интервал накрывает истинное значение.

2️⃣5️⃣ Среднее / медиана / мода
Среднее — сумма / количество
Медиана — центральное значение
Мода — самое частое

2️⃣6️⃣ Почему медиана устойчивее
Меньше чувствительна к выбросам.

БД и архитектура

2️⃣7️⃣ SMP vs MPP
SMP — один узел
MPP — параллельные вычисления на сегментах

2️⃣8️⃣ PostgreSQL vs Greenplum
Postgres — SMP, строковое хранение
Greenplum — MPP, распределённые вычисления

2️⃣9️⃣ Почему Greenplum быстрее
Параллельные вычисления на сегментах.

3️⃣0️⃣ Дистрибуция данных
Распределение строк по сегментам.

3️⃣1️⃣ Data skew
Неравномерное распределение данных → самый медленный сегмент тормозит весь запрос.

3️⃣2️⃣ ClickHouse — плюсы и минусы
Плюсы: колоночное хранение, быстрые агрегации
Минусы: слаб для OLTP, частых JOIN и INSERT

3️⃣3️⃣ Data Lake
Хранилище файлов/ сырые данные, дешёвое, без строгой схемы.

Инфа / DE

3️⃣4️⃣ Docker vs VM
Контейнеры шарят ОС → легче и быстрее
VM — отдельная ОС → тяжелее

3️⃣5️⃣ Dockerfile
Инструкция сборки контейнера из слоёв.

3️⃣6️⃣ Порядок слоёв в Dockerfile
Влияет на кэширование и скорость сборки.

3️⃣7️⃣ Как уменьшить Docker-образ
Slim / Alpine образы, меньше слоёв, правильный порядок RUN.

3️⃣8️⃣ Docker Compose
YAML-файл для запуска нескольких контейнеров и их сети.

3️⃣9️⃣ Airflow
Инструмент оркестрации пайплайнов.

4️⃣0️⃣ DAG
Граф задач с зависимостями.

4️⃣1️⃣ Kafka
Брокер сообщений для стриминга данных.

4️⃣2️⃣ Producer / Consumer / Topic / Partition
Producer пишет в topic
Consumer читает из партиций

4️⃣3️⃣ Consumer Group
Группа консьюмеров, каждый читает свою партицию.

4️⃣4️⃣ At-least-once / At-most-once / Exactly-once
At-least-once — возможны дубли
At-most-once — возможны потери
Exactly-once — ровно один раз (самый сложный)

@data_driven_bogdan
Please open Telegram to view this post
VIEW IN TELEGRAM
❤38🔥31206👍1👏1
This media is not supported in your browser
VIEW IN TELEGRAM
Хорошего окончания рабочей недели!
И немного юморка вам в придачу — чтобы никто такое безобразие вам в mr не предлагал!

@data_driven_bogdan
❤29🤣20🔥13🥰7👍4👏4
Обзор собеседования (Ч.1)

Компания: Dodo brands
Вилка: +-350 net
Должность: Дата аналитик
Формат: Удаленный
Этапы собеседования:
HR – Тех. собес (внутренний) – Хуево кукуево созвонов с кем только можно – Offer
Грейд: Middle + / Senior
Дата собеседования: декабрь 2025

Небольшое предисловие перед обзором тех собеса. На самом деле, вторая половина декабря выдалась очень насыщенной на собеседования - их было у меня просто не нормально много, как и сообщений от хрок. Кто бы что не говорил о том, что это уже не сезон и все кто мог ушли на фриз, есть такое ощущение, что те, кто не ушли на фриз еще больше заинтересованы в этот момент в найме. Предполагаю это связано в том числе с тем, что команды с потребностями заинтересованы растратить свой бюджет к концу когда, чтобы им его не подрезали с учетом того, что они его не затратили в "достаточном" виде в текущем. Что такое "достаточный" вид каждый ответственный за бюджет трактует как ему кайф - цель одна, в некст году хотя бы не меньше. (могу быть не прав)

SQL, Python и немного статистического мышления

Технический блок: SQL + Python

1️⃣ 60-day retention по когортам (SQL)

Необходимо посчитать 60-day retention по факту покупок пользователей
orders (order_id, user_id, order_date)

В ответе должна быть выведена след. таблица:
- cohort_month (Первый день месяца первой покупки, YYYY-MM-01)
- cohort_size (Общее количество новых покупателей в этом месяце)
- retention_60d (Процент повторно купивших в течение 60 дней)

Решение:
-- определяем дату первой покупки каждого юзера
WITH first_order AS (
SELECT
user_id,
MIN(order_date) AS first_order_date
FROM orders
GROUP BY 1
),
-- находим юзеров, которые сделали хотя бы 1 покупку после первой в теч. 60 дней

returns AS (
SELECT DISTINCT
f.user_id
FROM first_order f
JOIN orders o
ON f.user_id = o.user_id
AND o.order_date > f.first_order_date
AND o.order_date <= f.first_order_date + INTERVAL '60 day'
)

-- считаем стату, left'ом оставляем юзеров без повторной покупки

SELECT
DATE_TRUNC('month', f.first_order_date)::date AS cohort_month,
COUNT(f.user_id) AS cohort_size,
ROUND(
COUNT(r.user_id) * 1.0 / COUNT(f.user_id),
2
) AS retention_60d
FROM first_order f
LEFT JOIN returns r USING (user_id)
GROUP BY 1;


2️⃣ Клиенты с суммарным весом покупок > 2 кг (Python)

Посчитать клиентов, у которых за последний месяц суммарный вес покупок больше 2 кг.

SALES: client_id, date, sku, cnt
DICT: sku (товар), weight (вес в кг)

Решение:
-- ласт месяц берем
last_month = sales[
sales["date"] >= sales["date"].max() - pd.DateOffset(months=1)
]
-- дикс мерджим с фактом
df = last_month.merge(dict_, on="sku", how="inner")

-- считаем тотал вес (штуки на справочный вес)
df["total_weight"] = df["cnt"] * df["weight"]

-- агрегация сум. веса по каждому клиенту и отбор по общему весу >2 кг
result = (
df.groupby("client_id", as_index=False)["total_weight"]
.sum()
.query("total_weight > 2")
)
-- список client_id
clients = result["client_id"].tolist()


3️⃣ Реализация дисперсии (Python)

Написать функцию для расчёта несмещенной выборочной дисперсии.

Решение:

def var(a: list):
mean = sum(a) / len(a)
return sum((x - mean) ** 2 for x in a) / (len(a) - 1)


Важно не перепутать population и sample variance (ну и помнить конечно, что такое дисперсия в целом — мера разброса значений относительно среднего, если на человеческом)
Несмещенная выборочная дисперсия отличается от обычной тем, что в знаменателе не n, а на n − 1 это корректирует смещение оценки дисперсии генеральной совокупности

4️⃣ Анализ распределения (статистика)

Дана выборка клиентов с тратами и нужно было проанализировать распределение
60 клиентов — 0 ₽
38 клиентов — 1000–1500 ₽
2 клиента — 10 000 ₽

Коротко:
*️⃣распределение с heavy tail
*️⃣среднее будет сильно смещено выбросами
*️⃣медиана и перцентили устойчивее

В некст части больше упора будет на статистику и потом будет 3ая очень интересная часть про переговоры

🍌 Подпишись и поддержи канал бустом

@data_driven_bogdan
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥45🦄2513❤8👏55👍4
Channel photo updated
Работаем на дефицит 🤝💼

@data_driven_bogdan
Please open Telegram to view this post
VIEW IN TELEGRAM
😁10🔥7❤64👍1
🍌 Апдейт

Я наконец-то пересобрал всю информацию с телетайпа и вынес ее на сайт — теперь все про менторство и другие виды моих услуг по data компактно собрано в одностраничнике.

👉 https://datadrivenbogdan.com

На сайте описал форматы работы со мной:
— разовые консультации
— мок-собеседования
— работа с резюме/легендой
— менторство с доведением до оффера

👨‍💻Коротко о себе:

В сфере data уже больше 3х лет. Работал в финтехе, FMCG и ритейле — Альфа-Банк, ВТБ, Philip Morris, Магнит, а также стартапах. Постоянно выхожу на рынок, много собеседуюсь и коммуницирую с кандидатами, поэтому хорошо понимаю актуальные требования рынка и ожидания работодателей.

Работа со мной — это про системную работу, психологию и понимание рынка, без громких обещаний и иллюзий быстрых результатов при отсутствии должных усилий.

Если ты давно думал разобраться, куда и как дальше расти в аналитике — возможно, тебе зайдет.
Если нет — просто оставляю ссылку, вдруг когда-нибудь надумаешь или поделишься с другом, который думает о вкате.

Вопросы, как обычно, можно задать в личке.

@data_driven_bogdan
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥33👍21❤16👏84🦄3🥰2🤯2
Data Driven / Bogdan Ivanov pinned «🍌 Апдейт Я наконец-то пересобрал всю информацию с телетайпа и вынес ее на сайт — теперь все про менторство и другие виды моих услуг по data компактно собрано в одностраничнике. 👉 https://datadrivenbogdan.com На сайте описал форматы работы со мной: — разовые…»