Analyst’s Notebook📖
340 subscribers
43 photos
26 links
Жизнь аналитика: карьера, образование, хард и софт скиллы etc
Автор: @glebgavrin
Download Telegram
Всем привет! Меня зовут Глеб

В этом канале я буду публиковать самое интересное, с чем встречаюсь на работе или учёбе.

Кто я? 🧑‍💻
Мне 20, учусь на Факультете экономических наук НИУ ВШЭ и уже год работаю аналитиком в крупном банке.

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

О чём я буду писать здесь? ✍️
Вот какие темы и хештеги вы здесь встретите:

#жизнь_аналитика
— Как совмещать работу и учебу
— Истории из офиса и не только
— Мысли о карьере и развитии

#софт_скиллы 🗣
Опыт коммуникации с командой и менеджерами, презентации результатов, критическая оценка задач

#аналитические_методы 🔎
Всевозможные аналитические приемы и методы, которыми я пользуюсь и хочу поделиться

#визуализация_данных 📊
Красивые и понятные способы визуализации (matplotlib, seaborn, plotly etc)

#образование 👨‍🎓
Мои отзывы о курсах, связанных с анализом данных

#карьера 🚀
Здесь я буду рассказывать, как войти в анализ данных и продолжать развиваться

#из_моей_практики 💡
Интересные закономерности и явления, которые я обнаружил в данных

А также технические теги: 🖥
#sql #python #ml #статистика

#offtop 🍿
Всё, что не вошло в другие рубрики

Почему вам может быть интересно?
Если вы начинающий аналитик, студент или просто интересуетесь данными — вам сюда.

Чем могу быть полезен?
Пишите мне в личку @glebgavrin с любым вопросом. Обещаю, что отвечу и постараюсь помочь!
Мои проекты и код: Github - здесь я выкладываю свои выполненные ДЗ с курсов, пет-проекты и т.п


Подписывайтесь — вместе будет интересно!❤️
7🔥4💯1😭1👻1
Analyst’s Notebook📖 pinned «Всем привет! Меня зовут Глеб В этом канале я буду публиковать самое интересное, с чем встречаюсь на работе или учёбе. Кто я? 🧑‍💻 Мне 20, учусь на Факультете экономических наук НИУ ВШЭ и уже год работаю аналитиком в крупном банке. Мне безумно нравится анализ…»
Классный способ визуализации, который открыл для себя недавно

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

В чём суть?🤔

Берём два категориальных признака (в моём примере — IT-специализация и грейд) и для каждой их комбинации строим boxplot. Это позволяет одним взглядом оценить комплексное влияние двух факторов на целевую переменную.

Какие инсайты можно найти? 💡

Вот что я обнаружил на примере датасета с зарплатами в IT:
• Чёткий рост зарплаты от middle к senior почти во всех специализациях
• В сфере Research and Advanced ML джуны получают неожиданно много — часто больше, чем миддлы в других направлениях. Вероятно, сказывается высокий порог входа и нехватка сильных кадров
Аномально высокие зарплаты у некоторых джунов (например, 300к у AI Developer) — возможно, это ошибки в данных или уникальные кейсы
• Самый перспективный карьерный рост (по разрыву в зарплате между грейдами) — в ML Engineering, Management и Data Engineering

Как это построить?
🛠

Вот пример кода на Python с seaborn:

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(10, 8))
sns.boxplot(x='experience_level', y='salary_in_usd', hue='job_category', data=df, palette='Set2')
plt.title('Зависимость зарплаты от грейда и сферы деятельности', fontsize=15)
plt.xlabel('Грейд')
plt.ylabel('Заработная плата, $ в год')
plt.legend(title='Сфера деятельности')
plt.tight_layout()
plt.show()

Ссылка на датасет
А как вы визуализируете подобные зависимости?
💬

Буду рад обсуждению в комментариях!

Ставьте ❤️, если уже используете такой подход
Ставьте 🔥, если раньше не видели, но теперь обязательно возьмёте на вооружение!

#визуализация_данных #python #аналитические_методы #из_моей_практики
🔥113👏3😍1😈1
Продвинутый метод pandas, который обожают на собесах 💥

Расскажу про explode() — метод, который буквально «взрывает» датафрейм, превращая списки в ячейках в отдельные строки. Элегантная альтернатива циклам.

▫️ Как работает?
DataFrame.explode(column, ignore_index=False)

· ignore_index=False — сохраняет исходные индексы (появятся дубли)
· ignore_index=True — пересобирает индекс с нуля

▫️ Пример «взрыва»

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

Было:
| user_id | cities          |
|---------|-----------------|
| 1 | [Москва, Сочи] |
| 2 | [Казань] |

Стало после df.explode('cities'):
| user_id | cities  |
|---------|---------|
| 1 | Москва |
| 1 | Сочи |
| 2 | Казань |


🔥 3 потенциальных способа применения:

1. Анализ популярности городов
cities_popularity = (df.explode('cities')
.groupby('cities')['user_id']
.count()
.sort_values(ascending=False))

2. Поиск пользователей по городам
target_cities = ['Москва', 'Лондон']
filtered_users = (df.explode('cities')
.query('cities in @target_cities')['user_id']
.unique())

3. Создание парных комбинаций
from itertools import combinations

tags_pairs = (df.explode('cities')
.groupby('user_id')['cities']
.apply(lambda x: list(combinations(x, 2)))
.explode()
.dropna())


💡 Личный опыт
Именно этот метод помог мне красиво решить задачу на собеседовании в ❤️!

Ставьте ❤️, если уже использовали explode()
Ставьте 🔥, если раньше не использовали, но теперь обязательно возьмёте на вооружение!

💎 Полезный метод?
Сохраните в закладки
— пригодится на собеседовании!

#python
#аналитические_методы
#pandas
#вопросы_с_собеседований
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15🆒3👏2
Инсайт из данных: почему опыт не всегда конвертируется в доход 👨‍🦳

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

Для регрессионного анализа я выбрал данные по жителям Челябинска и Челябинской области.

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

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

Как можно заметить такую зависимость?

Я построил модель, где целевой переменной является логарифмированная зарплата, а среди регрессоров есть возраст и квадрат возраста. Пример кода для построения такой модели:

ols_10_logwage = smf.ols('log_wage ~ age + I(age**2) + educ + female + smoke', data=df).fit()
print(ols_10_logwage.summary())


И ключевые моменты из получившейся таблички ANOVA:

                            OLS Regression Results                            
Ключевые коэффициенты:
age 0.0605 (p=0.109)
age^2 -0.0007 (p=0.077) ← значим на 10%
female -0.5787 (p=0.000) ← значим
educ 0.1646 (p=0.008) ← значим


Заметим, что коэффициент перед регрессором age^2 статистически значим и отрицателен.
Как мы помним из школьной алгебры, парабола с ветвями вниз задается уравнением y = -ax^2 + bx + c.

Можем сделать вывод, что с возрастом зарплата растет, потом достигает пика и начинает снижаться.
При этом мы можем определить возраст, после которого начинается снижение - это точка максимума параболы, то есть -b/2a.

В своем исследовании я так же построил 2 полиномиальные регрессии - отдельно для женщин и мужчин ( визуализации регрессий на графике).
И вот какие закономерности для мужчин и женщин удалось выявить:

- у женщин снижение зарплаты начинается позже - после ~50 лет

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

- зависимость у обоих полов нелинейная

Почему возникает такая зависимость? 🤔

Почему зарплата в начале растет с возрастом ясно - молодые специалисты нарабатывают годы стажа и вместе с этим постепенно растет их зарплата.
Интереснее поразмышлять над причинами спада после ~ 45 лет.

Для себя я выявил такие причины:

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

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

А как вы объясняете данную зависимость?

Пишите в комментариях💬

Ставьте ❤️, если знакомы с этой закономерностью,
🔥, если подчерпнули для себя что-то новое
И 🤩, если хотите больше подобных постов

Ссылка на мое исследование🔗

#исследование_зарплат #статистика #эконометрика #анализ_данных
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥6🤩6👍1🤔1😈1
Как взаимодействие признаков спасло мою модель: разбор кейса 🛟

Продолжаем серию постов про эконометрическое исследование зарплат (первый пост), и на этот раз разберем перекрестные переменные (переменные взаимодействия) на конкретном примере.

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

В моем исследовании удачным оказалось взаимодействие пола (0-м/1-ж) и уровня образования (0-школа, 1-колледж, 2-универ).

Теперь разберем конкретно мой кейс

Сначала модель была такой:
log_wage ~ age + educ + female

Тест Рамсея показал, что модель неправильно специфицирована.

Добавил квадрат возраста — тест все еще показывал проблемы. Тогда добавил взаимодействие образования и пола.

Новая модель:
log_wage ~ age + I(age**2) + educ + female + educ:female

Результаты:
• Все регрессоры стали значимы на 10%
• Тест Рамсея: модель теперь верна
• R-squared adjusted вырос с 0.252 до 0.286
• Обнаружен значимый эффект взаимодействия

Как интерпретировать коэффициенты?

В модели с взаимодействием:
educ: влияние образования для мужчин (female=0)
female: разница в зарплате при нулевом образовании (educ=0)
educ:female: дополнительное влияние образования для женщин

Что на практике?

Для мужчин (female=0):
Каждый уровень образования увеличивает зарплату на ~33.5% (коэф. 0.3352, p=0.000)

Для женщин (female=1):
Общий эффект: 0.3352 + (-0.2827) = 0.0525
Каждый уровень образования дает всего ~5.3% прибавки

Гендерный разрыв:
educ:female = -0.2827 (p=0.009) — отдача от образования для женщин значительно ниже
female = -0.2775 (p=0.057) — на старте карьеры женщины уже получают меньше

Что видно на графике? 📈
Визуализация подтверждает: у мужчин — крутой рост зарплаты с образованием, у женщин — почти горизонтальная линия. Разница особенно очевидна при переходе к высшему образованию.

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

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

Ссылка на мое исследование🔗

#аналитические_методы #статистика #эконометрика #анализ_данных
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥3🤩21😈1
Этот метод pandas я использую каждый день. И вот почему 🟢🟡🔴

Решил продолжить серию постов про визуализацию данных (первый пост), и сегодня расскажу про красивый способ табличной визуализации

Речь пойдет про df.style – метод, благодаря которому можно украшать датафреймы и выделять цветами самое важное 🎨

Подробно расскажу про 2 его модификации –
highlight_min/max и background_gradient , а про другие можете прочитать в документации.

highlight_min/max ⚡️

Позволяет выделить желаемым цветом минимум/максимум по столбцу/строке.

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

Пример с временным рядом (фото 1):

import pandas as pd
import numpy as np

dates = pd.date_range('2024-03-01', periods=10, freq='D')
price_data = {
'Дата': dates,
'Цена акции, $': [152.3, 148.7, 155.2, 147.1, 159.8, 145.5, 162.3, 158.9, 144.8, 160.1]
}

df = pd.DataFrame(price_data)

print("Динамика цены акции с выделением экстремумов:")
display(df.style
.highlight_max(subset=['Цена акции, $'], color='lightgreen')
.highlight_min(subset=['Цена акции, $'], color='#ffcccc'))


background_gradient 🚩

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

Это может быть полезно, например, для:
- сравнения финансовых показателей компаний при составлении портфеля – визуализация позволяет провести комплексный анализ
- ранжирования моделей по значению метрики качества (удобно определить, например, какой класс моделей демонстрирует лучшее качество на этих данных)

Пример сравнения ML-моделей (фото 2):

from sklearn.metrics import mean_absolute_error, mean_squared_error, mean_absolute_percentage_error
import numpy as np

def calculate_metrics(y_true, y_pred, model_name):

mae = mean_absolute_error(y_true, y_pred)
mse = mean_squared_error(y_true, y_pred)
rmse = np.sqrt(mse)
mape = mean_absolute_percentage_error(y_true, y_pred) * 100

return {
'Модель': model_name,
'MAE': mae,
'MSE': mse,
'RMSE': rmse,
'MAPE': mape,
}

# Пример вычисления метрик для разных моделей
metrics_arima100 = calculate_metrics(y_true, y_pred_arima100, 'ARIMA(1,0,0)')
metrics_arima020 = calculate_metrics(y_true, y_pred_arima020, 'ARIMA(0,2,0)')
metrics_ets = calculate_metrics(y_true, y_pred_ets, 'ETS')

import pandas as pd
metrics_df = pd.DataFrame([metrics_arima100, metrics_arima020, metrics_ets])
metrics_df = metrics_df.set_index('Модель')
print("Метрики качества моделей:")
display(metrics_df.style
.background_gradient(subset=['MAE', 'MSE', 'RMSE', 'MAPE'], cmap='RdYlGn_r'))


Также style можно использовать для покраски текста, форматирования чисел и других крутых визуализаций.


А вы используете данный инструмент? 🤔
❤️ Да, использую и кайфую
🔥 Нет, но теперь буду использовать!

Пишите в комментариях, какая тематика постов вам интересна? 💬

#визуализация_данных #pandas #python
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥93👍31😈1
Штраф за сложность: разбираем Ridge и Lasso на пальцах ⚖️

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

Зачем нужна регуляризация? 🤔

Во первых, регуляризация снижает переобучение модели - излишнюю подгонку под обучающую выборку и неспособность хорошо работать на новых данных (пост про переобучение обязательно когда-нибудь напишу). Эмпирически доказано, что к переобучению ведут большие веса и большое количество признаков. Так вот, регуляризация помогает снизить или даже занулить (чаще всего в случае применения Lasso) веса.

Во вторых, регуляризация может помочь в отборе признаков . Это касается L1-регуляризации (Lasso регрессии). Менее важные предикторы исключаются путём обнуления их коэффициентов.


Чем отличаются Ridge и Lasso от обычной линейной регрессии? 🧩

Они подразумевают наличие дополнительного штрафа в функции потерь (фото). В случае Lasso, это L1-норма весов (то есть коэффициент регуляризации лямбда, умноженный на сумму модулей весов). В случае Ridge, это L2-норма весов (то есть коэффициент регуляризации лямбда, умноженный на сумму квадратов весов). С помощью этого штрафа как раз и уменьшается подгонка под обучающие данные и, как следствие, переобучение.


Когда использовать Ridge, а когда – Lasso? ⚔️

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


Кейсы из моей практики, когда пригодились Ridge и Lasso 💼

Ridge🏔: В рамках одного из дз по ML я работал с данными о поездках на такси в Нью-Йорке. Таргетом была продолжительность поездок. Действительно информативных признаков было около 15 – это были признаки на основе координат и признаки на основе времени начала/конца поездки. Понять, что эти признаки скорее всего будут информативными, мне помог EDA, который я провел до моделирования. Благодаря Ridge регуляризации модель не переобучилась под какие-то очень информативные признаки и при этом не зануляла никакие веса, как могло бы получиться с Lasso, и качество получилось хорошим.

Lasso🪢: Однажды, перед тем, как обучать бустинговую модель, я отобрал признаки с помощью Lasso-регрессии. Lasso занулил веса перед неинформативными признаками, и я не использовал такие признаки в бустинге. Качество получилось отличным. Для эксперимента я проверил, каким бы было качество без предварительного отбора признаков, и оно оказалось хуже.

💎 Резюмируем
Боитесь переобучения и хотите сделать модель стабильнее — ваш выбор Ridge.
Нужно упростить модель и отобрать самые важные признаки — смело применяйте Lasso.
Регуляризация — это инструмент для создания более надежных и интерпретируемых моделей.

А вы уже используете Ridge или Lasso в своих проектах?

Делитесь опытом в комментариях!💬

Также в процессе подготовки этого поста я нашёл классную статью на Хабре. В ней более подробно описана математическая поднаготная Ridge и Lasso регрессий. Если интересно лучше углубиться – советую прочитать!
Еще есть статья на geeksforgeeks, она более простая для восприятия.

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

#ml #анализ_данных #регрессия
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥6😍31👍1😈1👨‍💻1
Цифры, из-за которых хочется бросить всё и уехать в Штаты 😮

Недавно я решил сделать последнее ДЗ курса по 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