MiddleData Analyst > SQL и данные > Коммуникация с бизнесом
Короткий ответ Для каждого запроса уточню реальный срок принятия решения и стоимость задержки (что произойдёт, если ответ придёт на день позже), расставлю приоритет по этому критерию, а не по порядку обращения, и сообщу каждому стейкхолдеру прозрачно о позиции их запроса в очереди и ожидаемом сроке. Как это работает подробнее слово «срочно» используется часто без реального различия в критичности, поэтому самостоятельная оценка приоритета должна основываться не на громкости просьбы, а на объективном критерии — что теряет бизнес при задержке каждого конкретного запроса (упущенная выручка, пропущенный дедлайн встречи с клиентом, просто «было бы интересно узнать»). Что использовать на практике Применение. задаю каждому стейкхолдеру вопрос «что произойдёт, если ответ будет через 2 дня вместо сегодня?», оцениваю объём работы по каждому запросу, и прозрачно сообщаю всем троим о порядке и причине («ваш запрос — второй в очереди, так как первый привязан к встрече с клиентом сегодня в 16:00, которую нельзя перенести»).
cost-of-delayexpectation-management
JuniorData Analyst > SQL и данные > Качество данных
Короткий ответ Сравните общее число строк с числом непустых значений каждого критичного поля. Для мониторинга полезно рассчитывать не только количество, но и долю пропусков. Как это работает подробнее Функция COUNT(column) игнорирует NULL, а COUNT(*) учитывает все строки. Их разность показывает число пропусков в столбце. Критичные поля. В первую очередь проверяют ключи, даты, суммы и признаки, используемые в фильтрах и соединениях. Порог. Для каждого поля задают допустимую долю пропусков и реакцию на её превышение. Пример кода Что использовать на практике Сохраняйте результаты проверок по датам, чтобы замечать ухудшение полноты. После обнаружения пропусков изучите выборку строк и определите правило обработки вместе с владельцем данных. Подводные камни Пустая строка. Значение '' не является NULL и требует отдельной проверки. Безусловное заполнение. Подстановка нуля или значения по умолчанию может исказить метрику.
completenessdata-quality
JuniorData Analyst > SQL и данные > Аналитическое мышление
Короткий ответ Выручку раскладываю на произведение независимых факторов (трафик × конверсия × средний чек, либо по сегментам: каналы, регионы, продукты) и смотрю, какой из факторов дал основной вклад в падение. Как это работает подробнее выручка = число покупателей × средний чек, число покупателей = трафик × конверсия. Раскладывая метрику на множители/слагаемые, можно сузить область поиска причины, вместо того чтобы анализировать «выручку» целиком. Пример кода Что использовать на практике Порядок действий. строю дерево метрики (metric tree), считаю вклад каждого компонента в абсолютном и относительном выражении за период падения, сравниваю с предыдущим периодом/годом. Разбивку дополнительно детализирую по сегментам (канал, регион, устройство, новые/старые клиенты), чтобы понять, падение равномерное или локализовано. Подводные камни Частые ошибки. начинать сразу гадать причину («наверное, баг») без количественной декомпозиции; смотреть только на итоговую сумму, не проверив, не изменился ли состав сегментов (на
average-order-valueconversion-rate
JuniorPython Developer > Основы Python > FastAPI и Pydantic
Короткий ответ Pydantic-модель объявляется как параметр функции-обработчика; FastAPI разбирает JSON из тела запроса, проверяет его по полям и типам модели и при несоответствии возвращает 422 с описанием ошибок. Как это работает подробнее FastAPI видит, что параметр функции аннотирован типом, наследующим pydantic.BaseModel, и ожидает JSON-тело запроса. Pydantic парсит JSON, приводит типы (если возможно) и валидирует ограничения полей (например, min_length, gt). Пример кода Что использовать на практике Практика. Если валидация проходит, в функцию попадает уже готовый объект модели с типизированными атрибутами — не нужно вручную парсить request.json(). Ошибки возвращаются в едином формате со списком некорректных полей и причин. Подводные камни Риск. Делают поля модели опциональными без значения по умолчанию (Optional[str] без = None), из-за чего поле остаётся обязательным; забывают, что Pydantic v1 и v2 различаются в именах методов (.dict()/.model_dump()).
fastapipydantic
JuniorPerformance Marketer > Google Ads > Метрики рекламных кампаний
Короткий ответ CPA кампании — отношение расхода к конверсиям. Для объединённого показателя суммируют исходные величины, а не готовые отношения. Как это работает подробнее Если взять среднее от CPA каждой кампании через AVERAGE, кампании с малым числом конверсий получат такой же вес, как крупные, что искажает реальную общую стоимость конверсии. Похожая логика взвешенного усреднения применима и к CTR, CR и ROAS — для всех этих метрик правильный «средний» показатель по группе кампаний считается через суммы числителя и знаменателя, а не через среднее готовых отношений. Пример кода Что использовать на практике В сводных таблицах рассчитывайте итог из общих затрат и конверсий. Обработайте строки без конверсий отдельно и проверьте совпадение с отчётом кабинета. Подводные камни Функция AVERAGE по значениям CPA даёт смещённый результат, особенно если размеры кампаний сильно различаются.
cpagoogle-sheets
JuniorPython Developer > Основы Python > Исключения и контекстные менеджеры
Короткий ответ В блок try помещают код, который может выбросить исключение, а except перехватывает ошибки. Блок else срабатывает, только когда исключения не было, а finally выполняется всегда — независимо от того, произошла ошибка или нет. Как это работает подробнее Конструкция управляет ошибками времени выполнения, не давая программе прерваться в произвольном месте. Несколько except. Для разных типов ошибок пишут отдельные блоки или один блок с кортежем типов исключений. Блок else. Выполняется только при успешном завершении try, без единого исключения. Блок finally. Предназначен для очистки и работает всегда: закрытие файлов, освобождение ресурсов. Порядок блоков. Фиксирован: сначала try, затем один или несколько except, потом else и finally. Неперехваченная ошибка. Исключение передаётся наружу во внешние обработчики, а без них интерпретатор завершает программу и печатает информацию об ошибке. Пример кода Что использовать на практике Только опасный код. В try помещай лишь операции, которые реально могут брос
error-handlingexceptions
JuniorPython Developer > Основы Python > Типы данных
Короткий ответ Изменяемость — это способность объекта менять своё содержимое по тому же id() без создания нового объекта; list, dict, set изменяемы, а int, float, str, tuple, frozenset — неизменяемы, и это определяет, увидит ли вызывающий код изменения, сделанные внутри функции. Как это работает подробнее В Python аргументы передаются как ссылки на объекты (passing the object, не "по значению" и не классическое "по ссылке"). Если функция вызывает у переданного объекта метод, меняющий его содержимое in-place (append, pop, обновление по индексу), изменения видны снаружи, потому что это тот же объект. Если функция делает x = x + [1] или переприсваивает параметр, снаружи создаётся новый объект, и внешняя переменная не меняется. Пример кода Что использовать на практике Практика. Проверить изменяемость можно через id(): если id(obj) до и после операции совпадает — объект изменили in-place, если изменился — создали новый. При проектировании функций явно документируют, мутирует ли функция входные данные, либо возвращ
data-typesmutability
MiddleDevOps Engineer > Контейнеры и доставка > Мониторинг, логирование и observability
Короткий ответ OpenTelemetry SDK инструментирует код (автоматически через auto-instrumentation для популярных фреймворков или вручную через API), создаёт спаны и передаёт контекст трейса (trace_id, span_id) между сервисами через стандартный HTTP-заголовок traceparent (W3C Trace Context); собранные спаны экспортируются в OpenTelemetry Collector, который пересылает их в backend (Jaeger, Tempo, Zipkin). Как это работает подробнее при входящем запросе SDK либо создаёт новый trace_id (если заголовка traceparent нет), либо продолжает существующий трейс (если заголовок есть), создавая для текущей операции span с родителем из заголовка. При исходящем HTTP/gRPC-вызове SDK автоматически прокидывает тот же traceparent в заголовки следующего запроса, обеспечивая сквозную связность без ручной передачи ID разработчиком. Пример кода Что использовать на практике Практика. для большинства популярных веб-фреймворков (Express, Spring, Django, Gin) существуют готовые auto-instrumentation библиотеки OpenTelemetry, которые оборачи
distributed-tracingmonitoring
JuniorData Analyst > SQL и данные > Визуализация и BI
Короткий ответ Конверсия — это отношение числа заказов к числу сессий (или уникальных посетителей) за период; важно явно зафиксировать определение числителя и знаменателя. Как это работает подробнее Это простая метрика-отношение: COUNT заказов делится на COUNT сессий за одинаковый временной срез. Пример кода Что использовать на практике Рекомендация. Чётко документируйте, что считается сессией и что заказом (один заказ на сессию или возможны повторные), обрабатывайте деление на ноль, согласуйте определение со всеми потребителями дашборда. Подводные камни Риск. Несогласованность: в числителе все заказы (включая повторные), а в знаменателе — только уникальные пользователи. Риск. Отсутствие обработки NULLIF/деления на ноль в дни без сессий. Риск. Показ доли без явного формата процента.
conversion-ratedashboards
MiddleProduct Manager > Discovery и приоритизация > Приоритизация
Фреймворк не принимает решение за менеджера: он делает аргументы сравнимыми и обсуждаемыми.
ПриоритизацияПродукт