Analyst’s Notebook📖
340 subscribers
43 photos
26 links
Жизнь аналитика: карьера, образование, хард и софт скиллы etc
Автор: @glebgavrin
Download Telegram
Цифры, из-за которых хочется бросить всё и уехать в Штаты 😮

Недавно я решил сделать последнее ДЗ курса по ML, которое когда-то отложил до лучших времён 🙃🤫

Там было предложено поработать с данными по зарплатам IT-специалистов (ссылка на датасет). Выше можете найти пост про элегантный способ визуализации данных, разобранный на примере данного датасета.

В ходе feature engineering у меня появилась идея рассматривать не отдельные страны, а объединить их в макрорегионы: Северная Америка, Латинская Америка, Западная Европа, Восточная Европа, Азия, Африка и Океания 🌎

Я визуализировал среднюю зарплату по макрорегионам и очень удивился, увидев такую картину (фото 1).
Средняя зарплата в Северной Америке почти в 2 раза выше, чем в Океании, которая находится на 2 месте.

Затем я обучал бустинги и при анализе важности признаков заметил, что для CatBoost флаг работы в Северной Америке с большим отрывом является важнейшим признаком , влияющим на зарплату, (фото 2), что подтверждает устойчивость наблюдаемого явления.

Меня смутили такие результаты и я решил проверить, что данные в разных макрорегионах сбалансированы по грейдам (джуниор/миддл/сеньор/лид), а также зарплаты внутри одних и тех же грейдов подчиняются той же закономерности. Оказалось, что закономерность сохраняется и внутри грейдов, но в большинстве грейдов отрыв Северной Америки не такой радикальный.

При этом присутствует сильный дисбаланс грейдов по макро регионам. В Северной Америке ~74% представителей выборки – сеньоры. В остальном мире доля сеньоров ~30%. Поэтому значительная часть разрыва, продемонстрированного на фото 1, объясняется смещённой структурой IT-сообщества в Северной Америке в сторону старших грейдов. Однако тот факт, что закономерность сохраняется и внутри грейдов, окончательно подтверждает ее устойчивость.

Для себя я выделил 3 главные причины данного явления:

Концентрация капитала💲. В Северной Америке сфокусирована основная доля мирового венчурного капитала, а также базируются крупнейшие технологические компании (FAANG и др.). Такая среда порождает высочайшую конкуренцию за грамотных специалистов и приводит к бусту зарплат.

Культура акций (equity)📈. В Северной Америке, особенно в США, принято оплачивать часть дохода специалистов акциями компании. Это не просто бонус, а существенная часть компенсационного пакета, которая серьёзно влияет на общий доход и мотивацию.

Высокая мобильность специалистов🦘. Частая смена работы за бОльшие деньги — это норма. Компании вынуждены постоянно поднимать зарплаты, чтобы удержать лучших, что в итоге "раздувает" вилки оплаты на рынке.

А какие причины данного явления можете выделить вы?
Пишите в комментариях 💬

Ставьте
🤩 если готовы прямо сейчас бросить всё и ехать в Северную Америку работать
🐳 если хотите больше постов про EDA и поиск инсайтов в данных
👨‍💻 если хотите больше постов про IT-рынок труда

#из_моей_практики #рынок_труда #исследование_зарплат
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻8🐳7🔥41👏1😈1
Мышление как суперсила: мой путь развития 🧠💥


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

На мой взгляд, ум человека можно разделить на 3 составляющие:
знания
кругозор
мышление

Многие хорошо понимают, как набраться знаний в конкретной области или расширить кругозор. Это можно сделать в любом возрасте.

Куда интереснее разобрать, как развивать мышление.
Ведь это в целом сложнее, так еще и с годами усложняется.

Всю свою сознательную жизнь я так или иначе занимался активностями, которые направлены на развитие мышления. В начале пути родители направляли меня, а позже я сам оценил, насколько это важно и понял, что мне нравится осознавать, что я мыслю яснее и понимаю, как совершенствоваться в этом.

В школьные годы процесс развития моего мышления был связан не только с решением математических/логических задач в школе, но и с:

1. Шахматами

Свой путь в этой игре я начал еще в 5 лет, потом в 8 перестал ими заниматься, а в 14 вернулся. Именно шахматам я в большей мере благодарен наличию у меня любви к анализу и прогнозированию наперед.
В дальнейшем это помогло мне как в изучении наук о данных, так и в работе. Например, опыт в просчитывании ходов наперед помогает в планировании работы над проектами, помогает чувствовать, что может пойти не так и на какие этапы стоит заложить больше времени.


2. Просмотром разборов футбольных матчей ⚽️

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


Все эти активности заложили во мне фундамент,
который помог подготовиться к поступлению в Университет, войти в сферу аналитики и в целом расти как личность.

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


А задумывались ли вы над тем, что сильнее всего повлияло на развитие вашего мышления?
🤔Пишите в комментариях! 💬

Ставьте
❤️, если согласны, что активности из детства являются ключевым фактором в развитии мышления,
🔥, если использовали похожие практики для развития аналитического мышления
и 👀, если ждёте продолжения серии

#жизнь_аналитика
#софт_скиллы
#образование
#аналитическое_мышление
Please open Telegram to view this post
VIEW IN TELEGRAM
👀54🔥3👏1
Pandas: полная roadmap для начинающих 🐼


Сегодня решил собрать для вас подборку полезных материалов по pandas - библиотеке для работы с табличными данными

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

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

Базовые операции:
• Чтение/загрузка файлов (.xlsx, .csv)
• Выбор нужных столбцов
• Методы информации о датафрейме (.columns, .info(), .isnull().sum())

Анализ данных:
• Анализ столбцов (.unique(), .nunique(), .describe())
• Быстрая визуализация (.hist())
• Фильтрация данных (&, |)
• Сортировка (sort_values())

Продвинутые методы:
• Методы .loc и .iloc
• Merge для соединений таблиц
• Поиск дубликатов (.duplicated())
• Группировка (.groupby() + .agg())


Теперь о ресурсах, с помощью которых это всё можно изучить 📚:

1. Есть отличный туториал на YouTube, где все методы разбираются на примере работы с реальными данными. Если выберете его для изучения, рекомендую параллельно с просмотром самостоятельно выполнять те же действия у себя в Jupyter. Так материал усвоится в разы лучше, чем если просто посмотреть + у вас останется ноутбук, к которому сможете возвращаться, если подзабудете что-то. Он на английском языке. Если для вас лучше на русском, смотрите варианты ниже. 📺

2. Супер плейлист, разбитый по темам. Так же, как и в первом случае, рекомендую параллельно самостоятельно выполнять код. Плейлист очень удобен для точечного изучения тем📌

3. Видео на русском языке 🇷🇺

4. Статья-шпаргалка на Хабре, где разбирается большинство нужных для начала методов. 📰


Рекомендую не пытаться изучить всё сразу. Правильнее всего будет изучить базовые методы, а потом, по мере надобности, гуглить и читать материалы.
💡Формула поиска: «pandas + [что сделать] + [с чем]»

Например, вы встретились с задачей, где нужно заменить конкретные значения столбца, соответствующие условию, конкретными числами.
Заходите в поисковик и набираете: «pandas замена значений в столбце по условию». Сразу же видите статью на geeksforgeeks, где подробно разбирается, как сделать это, так еще и тремя разными способами! 🤩


Если хотите сразу потренироваться, рекомендую вот это ДЗ с майнора ФКН ВШЭ. Оно делается недолго, но будет очень полезно для отработки теории!⚡️

Так же рекомендую сохранить ноутбук-шпаргалку - это сэкономит часы в будущем! 🕰

Пишите в комментариях, какую подборку материалов хотели бы увидеть в следующий раз? 💬

Ставьте ❤️, если было полезно, 🔥, если будете изучать pandas по этому плану
и 👀, если ждёте новые подборки!
Please open Telegram to view this post
VIEW IN TELEGRAM
8👀3👍2🍓2🔥1
100 подписчиков! 🎉
Огромное спасибо каждому, кто читает мой канал! Обещаю много интересных постов и чаще выпускать новый контент🚀
Ваша поддержка очень важна!❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥124
Красивая визуализация: множественные линии в Plotly 📈🔝

Продолжаю рассказывать про красивые способы визуализации. Сегодня разберем комбинацию линейных графиков, которую удобно построить с помощью plotly.

Мне такой график помог визуализировать динамику количества поездок по часам в сутках в разбивке по дням недели. По нему удобно сравнивать динамику показателя в зависимости от категориального признака (в моём случае – день недели).

Синтаксис + пример построения графика:

import plotly.graph_objects as go

# Подготовка данных
trip_day_count_dt = (df.groupby('pickup_datetime')['id']
.count()
.reset_index(name='trip_count')
.sort_values(by='pickup_datetime'))
trip_day_count_dt['hour'] = trip_day_count_dt.pickup_datetime.dt.hour
trip_day_count_dt['dayofweek'] = trip_day_count_dt['pickup_datetime'].dt.day_name()

hour_day_trip_count = (trip_day_count_dt
.groupby(['hour', 'dayofweek'])['trip_count']
.sum()
.reset_index(name='trips'))

# Построение графика
fig = go.Figure()
for day in hour_day_trip_count['dayofweek'].unique():
day_data = hour_day_trip_count[hour_day_trip_count["dayofweek"] == day]
fig.add_trace(
go.Scatter(
x=day_data["hour"],
y=day_data["trips"],
name=str(day)
)
)

fig.update_layout(
title="Динамика поездок по часам суток",
xaxis_title="Час суток",
yaxis_title="Количество поездок",
width=1400,
height=600
)
fig.show()


💡 Какие инсайты выявил график:

Воскресенье : минимум поездок днем + пик в ночные часы
Объяснение: люди возвращаются с вечерних мероприятий

Рабочие дни : утренний/вечерний пик спроса
Объяснение: классические "часы пик" по дороге на работу и домой

Общая динамика : ночной спад → утренний рост → вечерний пик
Объяснение: универсальный паттерн городской мобильности

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

Мне кажется, что построить подобный график с помощью matplotlib/seaborn было бы сложнее. Именно в таких случаях мне нравится использовать plotly.

А вы используете plotly в повседневных задачах? Какие библиотеки визуализации предпочитаете? Пишите в комментариях 💬

Ссылка на выполненное мной ДЗ, где я строил данный график 🔗
Ссылка на документацию plotly 🔗

Ставьте:
❤️ — если было полезно
🔥 — если хотите видеть больше постов про визуализацию данных
⚡️ — если интересно почитать конкретно про plotly
#визуализация_данных #python #аналитические_методы #из_моей_практики
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥41🥰1😍1😈1
Мультиколлинеарность: как найти и обезвредить ⚠️🔧

Начинаю серию постов о проблемах в данных, которые исследует эконометрика.

В этой серии разберем такие проблемы и борьбу с ними:
• Выбросы в данных
• Гетероскедастичность
• Ненормальные распределения остатков и тд

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

Несмещенными и состоятельными оценки при этом остаются

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


Почему нужно бороться с мультиколлинеарностью?
💊

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

Важный нюанс: Ансамблевые методы (бустинг, случайный лес) более устойчивы к мультиколлинеарности, чем линейные модели, благодаря встроенному отбору признаков.

Однако даже в ансамблях мультиколлинеарность может:
• Снижать интерпретируемость feature importance
• Делать модель менее стабильной при небольших изменениях данных
• Увеличивать время обучения без прироста качества

Поэтому анализ корреляций полезен при работе с любыми моделями.

Как распознать данную особенность в данных? 🕵️‍♂️

Столкнуться с мультиколлинеарностью можно при анализе практически любых табличных данных, будь то финансовые показатели или, например, признаки поддержанных автомобилей.

Мультиколлинеарность можно заметить, посмотрев на матрицу корреляций. Если в ней встречаются высокие значения (как правило, высокими корреляциями считают корреляции >0.8), значит, в данных скорее всего присутствует мультиколлинеарность.

Также можно рассчитать Variance inflation factor (VIF) - подробнее про него можно прочитать здесь.
Если кратко, то чем больше его значение, тем выше степень мультиколлинеарности. VIF > 5 указывает на умеренную, VIF > 10 — на серьезную мультиколлинеарность.
На практике, обычно смотрят на VIF и уже в зависимости от его значения решают, нужно ли бороться с мультиколлинеарностью, или же она незначительна.


Что делать, если обнаружили мультиколлинеарность? 🤔

Есть несколько способов борьбы с мультиколлинеарностью. Рассмотрим основные из них:

Удаление одного из скоррелированных признаков
Удаляем признаки с высоким VIF по одному, пока все показатели не придут в норму

Смена функциональной формы
Создаём новые признаки на основе старых: например, заменяем рост и вес на индекс массы тела. Убирает мультиколлинеарность, сохраняя смысл.

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

Ridge/Lasso регрессия
Добавляют штраф за большие коэффициенты, "усредняя" вклад коррелированных признаков. Ridge уменьшает все коэффициенты, Lasso — обнуляет менее важные.


Я чаще всего пробую удаление скоррелированных признаков или Lasso регрессию, но другие методы тоже хороши и эффективны.

Полезные материалы 📚

В процессе подготовки этого поста я наткнулся на классную статью на Хабре 📰

Если хотите детальнее углубиться в проблему мультиколлинеарности и лучше понять теорию, которая за ней стоит, рекомендую данную лекцию📺


А сталкивались ли Вы с мультиколлинеарностью в своих задачах или исследованиях? Пишите в комментарии💬

Ставьте 🔥, если интересна серия постов про проблемы, которые изучает эконометрика,
❤️, если пост был полезен,
и ⚡️, если уже использовали упомянутые методы для борьбы с мультиколлинеарностью
Please open Telegram to view this post
VIEW IN TELEGRAM
11🔥43😱1💋1😈1🎄1
Логарифмирование в анализе данных: зачем нужно и как применять

Сегодня поговорим про приём, который часто помогает в анализе экономических показателей (доходов, заработных плат и т.д.) – логарифмирование. 🔍

Так повелось, что показатели, выраженные в деньгах, зачастую имеют логнормальное распределение📈 . Это значит, что если ввести новую переменную – натуральный логарифм (подойдёт любой логарифм, но принято брать натуральный) от исследуемого показателя, то его распределение станет близко к нормальному. Так происходит потому, что денежные показатели обычно имеют тяжелый правый хвост, а логарифм сглаживает разрывы между значениями. ⚖️

Зачем вообще нужно логарифмирование? 🤔

Вот несколько причин, почему при работе с денежными показателями может понадобиться логарифмирование:

⚡️ Борьба с асимметрией
Как уже упомянул выше, данные имеют скошенное распределение, которое неудобно анализировать и моделировать, так как нарушаются предпосылки многих статистических моделей (нормальное распределение ошибок, постоянная дисперсия). Происходит это из-за того, что в денежных показателях почти всегда найдутся далекие выбросы. Крупнейшие компании, миллиардеры и т.п.

📐 Необходимость относительной, а не абсолютной интерпретации
После логарифмирования интерпретация коэффициентов в линейных моделях меняется.

В лог-линейной модели (log(Y) = a + b*X) интерпретация будет такой: при увеличении X на 1 единицу, Y изменяется в среднем на (e^b - 1) * 100%.

В лог-лог модели (log(Y) = a + b*log(X)) интерпретация такая: при увеличении X на 1%, Y изменяется в среднем на b%.

Таким приёмом удобно измерять эластичность – чувствительность к изменениям. Например, если в нашей модели Y – выручка с продаж, а X – рекламный бюджет, и в лог-лог модели коэффициент перед X оказался равен 0.4, то можно сказать, что увеличение рекламного бюджета на 1% увеличивает выручку на 0.4%. 💲

🎨 Улучшение качества визуализации
На одном графике сложно показать и маленькие компании, и гигантов индустрии. Логарифмическая шкала помогает увидеть относительные изменения всех наблюдений выборки одновременно.

Как правильно подходить к логарифмированию? 👍

Важно отметить, что перед логарифмированием нужно проверить минимальные значения в выборке:

🔹 Если есть нули или небольшие отрицательные значения (по модулю меньше 1), хорошо подойдет ln(1 + x). В numpy для этого есть специальная функция np.log1p().

🔹 Если минимальное значение в выборке < -1, то лучше использовать преобразование: asinh(x) = ln(x + √(x² + 1))

🔹 Если все значения в выборке > 0, то идеальный вариант – просто ln(x).

Кейсы, когда мне помогло логарифмирование 🔥

Я не раз прибегал к логарифмированию в рабочих и учебных проектах. Расскажу про 2 случая, когда этот приём помог.

🚕 Первый случай связан с моделированием продолжительности поездок на такси. Распределение имело тяжелейший правый хвост (Фото 1). После логарифмирования распределение стало нормальным (Фото 2) и получилось построить хорошие линейные модели. Продолжительность поездок выражена не в деньгах, но здесь все вышесказанное было уместно.

🛍 Второй случай связан с построением визуализации. В учебном проекте нужно было построить scatterplot, где по оси X была вероятность покупки товара на маркетплейсе, а по оси Y – потенциальный доход с этой продажи. Точки были раскрашены: зеленый – постоянные клиенты (покупки чаще 1 раза в месяц, суммарно более 5 покупок), красный – остальные.

Сначала я построил визуализацию без логарифмирования дохода (Фото 3). Визуализацию было сложно интерпретировать из-за нагромождения точек. После логарифмирования потенциального дохода график стал намного лучше визуально восприниматься (Фото 4). Мы всё так же можем оценить интересные взаимосвязи, но теперь график понятен.

А вы использовали логарифмирование переменных в своих проектах? Делитесь опытом в комментариях 💬

Ставьте:
🔥 если пост был полезен
❤️ если хотите больше постов про преобразования данных
🤩 если хотите больше постов про работу с ненормальными распределениями

#аналитические_методы #из_моей_практики #статистика #ml #эконометрика
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥843🤩3💯1😈1🦄1
Невидимые враги анализа: разбираем выбросы👻🗑

Сегодня продолжим серию постов о проблемах в данных, с которыми сталкиваются аналитики, и поговорим про выбросы.

Что такое выбросы? 🔍

Выбросы — это аномальные наблюдения, которые по своим значениям сильно отличаются от остальной выборки.

Простой пример из реальной жизни: если мы анализируем расходы на путешествия, где средний чек составляет 50,000 рублей, а одно путешествие стоит 500,000 рублей — это явный выброс. Такие наблюдения выделяются не только по цене, но и по другим признакам: длительности, категории отеля, сезону.

На что влияют выбросы и почему их следует исследовать отдельно? ⚠️

Выбросы могут серьёзно искажать наше представление о данных:

Для описательного анализа: среднее значение смещается, дисперсия увеличивается, что мешает корректно оценивать выборку и делать выводы о генеральной совокупности
Для построения моделей: в эконометрических и ML-моделях выбросы часто приводят к смещённым и несостоятельным оценкам
Особенно чувствительны линейные модели — один мощный выброс может буквально «потянуть» за собой всю линию регрессии, сильно исказив результат
Ансамблевые методы (бустинг, бэггинг) справляются лучше благодаря своей структуре, но и они не идеальны

Как найти выбросы? 🕵️‍♂️

Обычно выбросы ищут в контексте непрерывных признаков, используя два подхода вместе: визуализацию и статистические методы.

Boxplot — график, который наглядно показывает распределение и выбросы. Чаще всего за выбросы принимают наблюдения, выходящие за пределы интерквартильного размаха (IQR)
Статистические критерии: если выбросы занимают <10% данных, с ними можно работать, но всё зависит от конкретной задачи

Фото: пример boxplot с выбросами
Пока готовил пост, наткнулся на хорошую статью про боксплоты📰

Практический пример поиска:
# Простой способ посмотреть на выбросы
Q1 = data.quantile(0.25)
Q3 = data.quantile(0.75)
IQR = Q3 - Q1
outliers = data[(data < Q1 - 1.5*IQR) | (data > Q3 + 1.5*IQR)]
print(f"Найдено выбросов: {len(outliers)} ({len(outliers)/len(data)*100:.1f}%)")



Кейсы, когда мне приходилось бороться с выбросами🔥

🚕Первый кейс связан с всё той же задачей предсказания длительности поездок.
В датасете были поездки, длительность которых меньше 60 секунд. Скорее всего, это ошибки в данных, поэтому я исключил такие наблюдения из анализа.

👨‍🦳Второй кейс — исследование факторов долголетия — принципиально иной. Выбросами здесь были реальные долгожители (110+ лет). В отличие от ошибок, эти данные — ценная информация. Они могут объясняться уникальной генетикой, особыми условиями жизни (например, в "голубых зонах" Кавказа) или сочетанием факторов. Удалять их — значит игнорировать саму цель изучения предела продолжительности жизни. Вместо этого я использовал методы, устойчивые к выбросам, чтобы они не искажали общую модель, но оставались частью картины, которую мы анализируем.

В следующем посте расскажу про продвинутые методы поиска выбросов и методы их обработки 🛠


А как вы обычно находите и обрабатываете выбросы? Пишите в комментариях💬

Ставьте:
🔥 если пост был полезен,
❤️ если хотите больше постов про проблемы в данных
🤩 если хотите больше постов про работу с выбросами

#аналитические_методы
#eda
#из_моей_практики
#статистика
#ml
#эконометрика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12🎄32🌭2💋21👾1
Секрет быстрого кода: векторизованные операции в Python 🏃‍♂️

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

Зачем они нужны?🧐

Векторизованные операции помогают производить операции над массивами не поэлементно, а сразу для всего набора данных. Это в разы ускоряет код, что особенно ценно при больших объемах данных. Простая аналогия: можно взять каждый из 1000 камней поочередно и перенести их, а можно зачерпнуть их ковшом экскаватора и перевезти все сразу. Экскаватор в данном примере и есть векторизованная операция.

В основе векторизованных операций — библиотеки NumPy (работа с массивами) и Pandas
(надстройка для таблиц).

Какие они бывают?
🧬

Перечислю основные векторизованные операции, которые могут понадобиться аналитику:

1. Арифметика и базовая математика
+ - * / ** с целыми столбцами, np.abs(), np.log1p(), .round()

2. Статистика по столбцу
.sum(), .mean(), .median(), .min(), .max(), .std()

3. Логические операции и фильтрация
- Сравнения: df['sales'] > 1000
- Комбинации: & (И), | (ИЛИ)
- .isin([список]) — фильтр по нескольким значениям
- .isna() для поиска пропусков
- np.where(условие, если_да, если_нет) — аналог IF

4. Строковые операции
(через `.str`)
.str.lower(), .str.upper(), .str.contains('текст'), .str.split(' '), .str.replace('old','new')

5. Дата-время
(через `.dt`)
.dt.year, .dt.month, .dt.day, .dt.dayofweek,
разница дат через - и pd.Timedelta()

6. Оконные функции для временных рядов
.shift(1) — вчерашнее значение, .pct_change() — процент изменения, .cumsum() — накопленная сумма

7. Быстрое создание столбцов

df['прибыль'] = df['доход'] - df['расход']
df['категория'] = np.where(df['оценка'] > 80, 'Высокая', 'Низкая')



Ключевое преимущество векторизованных операций - скорость работы.🔥

Разберем на примере скорость работы векторизованных операций в сравнении с другими методами.

📊Фото 1: Логарифмический барплот — визуализирует разницу в скорости на 1 млн строк.

📈Фото 2: Зависимость времени от размера данных — показывает, как разрыв растет с объемом.

Чеклист для операций с массивами
📝

+ Правило 1: Всегда ищите встроенную векторизованную операцию в Pandas/NumPy.
+ Правило 2: Если ее нет — проверьте, можно ли решить через .str / .dt / логические операции.
+ Правило 3: Только в крайнем случае используйте .apply().
+ Правило 4: Цикл for по датафрейму — это антипаттерн в анализе данных.


Планы на будущее
🚀

В дальнейшем я планирую глубже погрузиться в тему векторизации, и написать пост об этом.

А вы используете векторизованные операции в работе?
Какие из них оказались самыми полезными? Делитесь в комментариях 💬

Ставьте
🔥, если пост был полезен
❤️, если интересно увидеть больше постов про обработку данных с помощью Python
🤩, если ждете новый пост про векторизованные операции

#аналитические_методы
#python
#pandas #numpy
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14🤩3😈31👨‍💻1
Говорящий код: сила комментариев 💬

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

Представьте: перед вами две вкладки в Jupyter Notebook. В одной — лаконичный код с непонятной магией преобразований. В другой — те же операции, но с пояснениями «почему» и «зачем». В какой вы разберетесь быстрее? Ответ очевиден.

Сегодня поговорим о важности и практической пользе написания комментариев в коде.

Зачем тратить время на комментарии?
🤔

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

Комментарии такого рода помогут вам сразу вспомнить весь контекст:
# В ходе EDA анализа выяснил, что распределение таргета — логнормальное.
# Для линейной модели использую логарифмирование, чтобы удовлетворить предпосылку о нормальности остатков.
df['target_log'] = np.log1p(df['target'])

# Заменил пропуски в столбце 'age' именно медианой, а не средним,
# потому что распределение имеет значительные выбросы (см. boxplot в ячейке выше).
median_age = df['age'].median()
df['age'].fillna(median_age, inplace=True)

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

Когда стоит писать комментарии?


· Перед началом нового блока кода. Например, в этой ячейке вы планируете сгруппировать данные по user_id и вычислить суммарное количество потраченных средств. Перед этим можно написать комментарий такого рода: # вычисляю суммарные затраты каждого пользователя.
· Когда есть неочевидная операция. Например, вы решили, что респонденты в опросе, на котором построена выборка, занижали свой возраст, и хотите добавить к столбцу age 3 года. Перед этим преобразованием стоит добавить комментарий, зачем вы меняете значения и почему выбрали именно 3.
· Когда вы меняете чужой код. В таком случае можно внести в комментарий исходный кусок кода и объяснить причину изменений.

Какими должны быть комментарии?
ℹ️

Главная цель — сделать комментарии в коде есть качественные комментарии.

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

Например, для строки i = i + 1, которая является частью цикла, комментарий # прибавляем к i единицу будет неинформативен, так как это и так ясно из кода. А вот комментарий # сдвигаем скользящее окно на 1 позицию сразу даст понять, что к чему.

Чек-лист по комментариям
📝

Золотые правила, которые спасут ваши нервы в будущем:

1. Пишите для своего «будущего Я». Представьте, что вернетесь к коду через полгода после отпуска. Что вам нужно было бы написать, чтобы мгновенно включиться в контекст?

2. Комментарий — это не перевод кода . Не пишите # Прибавляем к счетчику 1. Лучше объясните цель: # Сдвигаем окно агрегации, т.к. данные приходят с запаздыванием в 1 день.

3. Сначала хороший нейминг, потом комментарий. Стремитесь к тому, чтобы код читался как книга. user_total_spent = df.groupby('user_id')['revenue'].sum() — уже почти не нуждается в пояснениях. Комментируйте только решение, стоящее за строчкой.

4. Не ленитесь оставить комментарий, даже если в моменте всё кажется очевидным. Очевидность имеет свойство испаряться с течением времени.

А комментируете ли вы свой код?
Пишите в комментариях к посту!💬

Ставьте:

🔥— если было полезно
❤️ — если всегда стараетесь комментировать свой код
🤩— если интересны посты на тему оформления кода

#из_моей_практики
#код
#оформление
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10🐳2👍1🤩1🍾1🎄1
Как улучшить точность модели на 5-10%: правильный подбор гиперпараметров 🎯

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

Сегодня я расскажу про 3 самые популярные на данный момент метода (и библиотеки) для подбора гиперпараметров - GridSearchCV, RandomizedSearchCV и Optuna 🧮

Самый тривиальный из методов - GridSearchCV. Этот метод перебирает все возможные комбинации гиперпараметров из заданной сетки. Например, если мы предоставим ему такую сетку: {‘max_depth’: [4, 6, 8], ‘n_estimators’: [200, 400]}, он обучит 3 * 2 = 6 моделей и выберет лучшую. Особенностью GridSearch является то, что он всегда находит лучшее решение (так как просто напросто перебирает все комбинации).

Главный минус такого подхода - скорость вычислений. Если мы хотим перебрать большую сетку, GridSearchCV - не лучший вариант ☺️

Пример кода с использованием GridSearchCV вы найдете в комментарии.

RandomizedSearchCV
работает иначе. Он принимает на вход сетку гиперпараметров и параметр n_iter, и в процессе подбора перебирает n_iter случайных комбинаций гиперпараметров. Главный минус такого подхода в том, что мы можем упустить оптимальное решение.
Важной фишкой RandomizedSearchCV является возможность задавать не только детерминированные значения параметров, но и распределения. Например, равномерное распределение: 'alpha': uniform(0.01, 10.0).

Пример кода с использованием RandomizedSearchCV ждет вас в комментарии.

Optuna
- это библиотека для умного подбора гиперпараметров.
Главное ее преимущество в том, что в процессе подбора она использует историю предыдущих испытаний для выбора следующих параметров. Это помогает отсекать огромное количество слабых комбинаций. Плюс Optuna умеет распараллеливать вычисления , что заметно увеличивает скорость подбора.
Еще одним ключевым преимуществом Optuna является возможность визуализации. 📊
Например, можно визуализировать важность гиперпараметров. Это может быть полезно, если после первого подбора мы хотим еще улучшить модель.
Например, визуализация важности показала, что важность гиперпараметров subsample и max_depth в разы меньше, чем важность гиперпараметров learning_rate и colsample_bytree. В таком случае мы можем зафиксировать subsample и max_depth такими, как их подобрали с первого раза, и дальше продолжить подбирать learning_rate и colsample_bytree, чтобы еще повысить качество модели.

Пример кода с Optuna в комментарии.


Чек-лист:
что когда использовать? 📝

GridSearch
будет лучшим выбором, если у вас изначально маленькая сетка гиперпараметров, или неограниченные ресурсы 🥹

RandomizedSearch
подойдет, если нужно быстро получить хороший, не обязательно идеальный результат 🏎

Optuna
-моя любимая библиотека для подбора гиперпараметров 🔝
В большинстве случаев она будет идеальным выбором благодаря:

· умному алгоритму обучения
· высокой скорости
· уникальным возможностям (визуализации, параллельные вычисления и т.д)

Графики ниже демонстрируют процесс работы Optuna:

2. История оптимизации — как менялась метрика с каждым испытанием (trial).
3. Важность параметров — какие гиперпараметры повлияли на результат сильнее всего.

Сравнивайте, экспериментируйте и делитесь вашим опытом в комментариях!
💬

---

Полные рабочие примеры кода для каждого метода опубликованы в комментариях к этому посту.

Ставьте
🔥 если было полезно
❤️ если интересны посты на тему машинного обучения
🤩 если хотели бы видеть еще посты на тему подбора гиперпараметров

#аналитические_методы
#ml
#python
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8🏆21🍌1😈1👻1🤪1
С Новым 2026 годом! 🎄

Этот канал — мой совсем новый и важный проект, который начался только осенью.

Огромное спасибо каждому, кто уже успел подписаться, поставить лайк или оставить комментарий. Вы вдохновляете меня развивать этот канал дальше! 🙏

В новом году я обещаю больше полезного контента об анализе данных. Будем разбираться во всём вместе!

#сНовымГодом
Please open Telegram to view this post
VIEW IN TELEGRAM
9🎄4🔥1🌚1
После праздников все мы возвращаемся к проектам — рабочим, учебным или бизнес-задачам.

Решил поделиться своим опытом и наблюдениями, которые получил, реализуя разные проекты. Это будет первый пост в серии, и в нём я разберу три основы, без которых проект рискует забуксовать.

3 кита успешного проекта 🐳

1. План проекта 🗺
Многие недооценивают этот этап и хотят быстрее приступить к работе. Но опыт показал: если чётко не обрисовать хотя бы примерный план, проект может встать или развалиться.

На старте важно ответить на ключевые вопросы:

Зачем мы это делаем? (Цель и ценность)

Как мы поймём, что всё получилось? (Критерии успеха и метрики)

Какие у нас сроки и ресурсы? (Реализм vs. амбиции)

От честных ответов зависит очень многое. После этого можно набросать план по шагам с дедлайнами для участников и назначить следующую встречу.

2. Путь через MVP 🔧
Раньше компании часто пытались сразу сделать идеальный продукт. Сейчас стандартом стал MVP (Minimum Viable Product) — минимально жизнеспособный продукт.

Смысл в том, чтобы сначала выпустить базовую версию с ключевой функцией, а потом улучшать её на основе фидбека от заказчиков или пользователей. Этот подход экономит силы на отладке и позволяет не тратить время на лишние фичи, которые на деле никому не нужны. Для аналитика это как сначала проверить гипотезу на небольшой выборке, а уже потом строить полномасштабную модель.

3. Движение итерациями: не один марафон, а серия спринтов 🏃‍♂️
Наиболее продуктивный способ вести проект — двигаться короткими циклами (итерациями).

Примерный пайплайн:

Старт: Общее понимание цели, план MVP, детальный план первой итерации.

Работа: Фокус только на задачах текущей итерации.

Ретроспектива: Разбор результатов, корректировка планов.

Повтор шагов 2-3...
N. Результат: Презентация MVP, передача, сбор фидбека и планирование доработок.

Именно эти три концепции я считаю фундаментом для любого проекта. 🧱
В следующих постах углублюсь в каждую из них и приведу примеры из своих и open-source проектов.

А какие принципы в ведении проектов ключевые для вас? Пишите в комментариях! 💬

Ставьте
🔥 — если был полезно
❤️ — ждёте продолжения темы
🤩 — ваши принципы совпадают с моими

#софт_скиллы
#проекты
#project_management
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥73🐳21😈1
Как я стал аналитиком📊

В конце 1 курса я начал задумываться о карьере и узнавать, где работают и чем занимаются выпускники моего факультета или аналогичных факультетов других вузов.
Оказалось, что большинство из них выбирают анализ данных или финансы.

Тогда я уже прошел пару курсов по финансам в университете и понимал, что это не совсем моё.
Также я рассматривал классический трек экономиста с глубоким погружением в макроэкономику и работой в ЦБ / research подразделениях банков.

Почему выбрал именно анализ данных?
🤔

В середине второго курса началась макроэкономика и я понял, что мне не очень интересно. Это стало стимулом поставить на первое место в своем видении карьеры анализ данных. К тому же я уже знал Python и очень хорошо закрыл Тервер и Матстат.

В анализе данных меня привлекала возможность находить инсайты в данных, строить на основе данных прогнозы с помощью моделей. Это похоже на работу детектива: сложить картину из имеющихся улик, спрогнозировать ситуацию наперед 🕵️‍♂️

Обучение
🧑‍🎓

К моменту середины 2 курса из релевантных дисциплин я знал:
- Python
- Тервер и статистику

За второй семестр я прошел курсы:
- Основы машинного обучения
- Анализ данных на Python

Все эти курсы дали мне отличную базу знаний для старта, но главное - научили быстро находить нужную информацию в своей области и дали понять, что
лучший подход в изучении нового - это быстрый переход от теории к практике.
Поэтому всем новичкам я рекомендую закреплять пройденный материал на пет-проектах.
Здесь и здесь можно найти хорошие подборки тем для пет-проектов. О своих пет-проектах, сделанных до первой работы, расскажу в следующих постах этой серии.

С таким набором знаний я уже мог рассчитывать на какой-то успех при выходе на рынок труда🤩

Поиск первой работы
🔍

Еще на 1 курсе, когда я еще не знал точно, чем хочу заниматься, я решил, что очень хочу летом после 2 курса попасть на стажировку, чтобы получить реальный опыт и изучить выбранную сферу изнутри. Поэтому на 2 курсе с марта я начал откликаться на стажировки и джуновские вакансии на аналитика / ds.

Я подавался как на отдельные вакансии, так и на большие программы стажировок (такие есть к Сбера, Озона, Авито и др.). На программах я в основном получал отказы, так как искали как минимум студентов 3 курса.

Для поиска вакансий я использовал все популярные ресурсы: сайты компаний, hh.ru, Хабр карьера, HSE career и др.

Таким образом я отправил более 70 откликов, прошел 4 собеседования и получил 2 оффера: 1 на стажера и 1 на джуна.

Что я бы изменил в своем процессе поиска работы?
📝

1. Добавлял бы больше достижений в cv
🥇
Например не «работал учебным ассистентом по Микроэкономике, проверял домашние работы студентов», а «работал учебным ассистентом по Микроэкономике и за семестр провел 5 консультаций для студентов, повысив их успеваемость в сравнении с другими группами»

2. Больше использовал бы ресурсы знакомых
для попадания через рефералки.

3. Использовал бы Linkedin
📱

В следующем посте расскажу про самое важное собеседование: как я готовился, какие неожиданные вопросы задавали и что, по моему мнению, стало решающим для оффера в Сбер💳

Главное, что я понял: путь в аналитику — это не про идеальное резюме, а про готовность учиться на ошибках и действовать.
У меня получилось — получится и у вас! 🌅

А пока вопрос к вам: что для вас сейчас самое сложное на пути к первой работе в аналитике?
Поделитесь в комментариях — постараюсь дать совет или разберу в будущих постах.💬

Ставьте
🔥 если было полезно
❤️ если ждете новые посты из этой серии
🤩если сейчас ищете свою первую работу

#жизнь_аналитика
#карьера
#образование
#анализ_данных
#путь_в_аналитику
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥8🤩2🦄1