Вопросы по Python на собеседовании аналитика
Коротко
Python на собеседовании аналитика — это НЕ про декораторы, метаклассы и GIL. Это про Pandas, обработку данных и визуализацию. Если вы готовитесь по материалам для Python-разработчиков — вы тратите время не туда.
Ниже — реальные вопросы, которые задают на собеседованиях аналитиков в продуктовых компаниях. Каждый с примером кода и объяснением.
Аналитику не нужно знать Python на уровне разработчика. Нужно уметь загрузить данные, обработать, проанализировать и визуализировать. Всё остальное — бонус.
Pandas: работа с данными
Как прочитать CSV и посмотреть первые строки?
import pandas as pd
df = pd.read_csv('data.csv')
df.head()head() по умолчанию показывает 5 строк. Для быстрой разведки данных используйте также df.shape, df.dtypes и df.describe() — это даёт понимание размера таблицы, типов данных и базовой статистики.
Как отфильтровать DataFrame по условию?
# Пользователи старше 25 лет с подпиской premium
filtered = df[(df['age'] > 25) & (df['subscription'] == 'premium')]Частая ошибка — использовать and вместо &. В Pandas для поэлементного сравнения нужен &, а каждое условие — в скобках.
Как сделать GROUP BY в Pandas?
# Средний чек по городам
df.groupby('city')['amount'].mean()
# Несколько агрегаций сразу
df.groupby('city')['amount'].agg(['mean', 'median', 'count'])Аналог SQL: SELECT city, AVG(amount) FROM orders GROUP BY city. Метод agg() позволяет применить несколько функций за один вызов.
Как объединить две таблицы (аналог JOIN)?
# LEFT JOIN по user_id
result = pd.merge(orders, users, on='user_id', how='left')
# JOIN по разным названиям колонок
result = pd.merge(orders, users, left_on='buyer_id', right_on='id', how='inner')Параметр how работает как тип JOIN в SQL: 'left', 'right', 'inner', 'outer'. Если ключ называется одинаково — используйте on, если по-разному — left_on и right_on.
Как построить сводную таблицу?
# Сумма продаж по категории и месяцу
pivot = df.pivot_table(
values='revenue',
index='category',
columns='month',
aggfunc='sum',
fill_value=0
)pivot_table — это аналог сводных таблиц в Excel. fill_value=0 заменяет пропуски нулями, что удобно для дальнейшего анализа.
Как посчитать кумулятивную сумму (running total)?
# Нарастающая выручка по дням
df = df.sort_values('date')
df['cumulative_revenue'] = df['revenue'].cumsum()Аналог SQL: SUM(revenue) OVER (ORDER BY date). Метод cumsum() работает на отсортированных данных.
Обработка данных
Как найти и обработать пропуски?
# Сколько пропусков в каждом столбце
df.isnull().sum()
# Заполнить пропуски медианой
df['age'] = df['age'].fillna(df['age'].median())
# Удалить строки с пропусками
df_clean = df.dropna(subset=['email', 'user_id'])На собеседовании важно не просто знать fillna / dropna, а объяснить выбор стратегии. Медиана — для числовых данных с выбросами. Удаление — когда пропущены ключевые поля. Заполнение нулями — когда пропуск означает отсутствие события.
Как удалить дубликаты?
# Полные дубликаты
df = df.drop_duplicates()
# Дубликаты по конкретным столбцам, оставляем последнюю запись
df = df.drop_duplicates(subset=['user_id', 'date'], keep='last')Параметр keep='last' оставляет последнюю запись из дубликатов. Это полезно, когда в данных есть обновления — хотите оставить самую свежую версию.
Как изменить тип данных и работать с датами?
# Конвертация строки в дату
df['created_at'] = pd.to_datetime(df['created_at'])
# Извлечение компонентов даты
df['month'] = df['created_at'].dt.month
df['day_of_week'] = df['created_at'].dt.dayofweek
df['date'] = df['created_at'].dt.dateРабота с датами — частый источник багов. Всегда проверяйте формат даты после конвертации через df['created_at'].head().
Как применить функцию к столбцу?
# apply — для сложной логики
df['age_group'] = df['age'].apply(lambda x: 'young' if x < 30 else 'adult')
# map — для замены значений по словарю
status_map = {'active': 1, 'inactive': 0, 'blocked': -1}
df['status_code'] = df['status'].map(status_map)apply — универсальный, но медленный на больших данных. Где возможно, используйте векторные операции: np.where(df['age'] < 30, 'young', 'adult') работает в разы быстрее.
Визуализация
Как построить базовый график?
import matplotlib.pyplot as plt
# Линейный график
df.groupby('date')['revenue'].sum().plot(figsize=(12, 6))
plt.title('Выручка по дням')
plt.xlabel('Дата')
plt.ylabel('Выручка, руб.')
plt.tight_layout()
plt.show()tight_layout() предотвращает обрезание подписей — добавляйте всегда.
Как выбрать тип графика для задачи?
import seaborn as sns
# Распределение → гистограмма
sns.histplot(df['amount'], bins=30)
# Сравнение категорий → barplot
sns.barplot(data=df, x='category', y='revenue')
# Связь двух переменных → scatterplot
sns.scatterplot(data=df, x='age', y='spending')
# Распределение по группам → boxplot
sns.boxplot(data=df, x='city', y='salary')Правило выбора графика: распределение — histplot/boxplot, тренд во времени — lineplot, сравнение категорий — barplot, связь переменных — scatterplot. На собеседовании могут спросить, почему выбрали именно этот тип.
Как построить несколько графиков рядом?
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
axes[0].bar(categories, values)
axes[0].set_title('Выручка по категориям')
axes[1].plot(dates, daily_users)
axes[1].set_title('DAU')
plt.tight_layout()
plt.show()subplots используют для сравнения графиков на одном слайде. Часто просят на собеседовании: «покажите метрику в разрезе двух сегментов».
SQL vs Python
Когда использовать SQL, а когда Python?
- SQL — когда данные в базе и нужен ad-hoc запрос, агрегация, JOIN нескольких таблиц
- Python — когда нужна сложная обработка (скользящие окна с кастомной логикой, статистические тесты), визуализация или данные не в базе (CSV, API)
- Оба — типичный воркфлоу: выгрузить данные через SQL, обработать и визуализировать в Python
Как перевести SQL-запрос в Pandas?
# SQL: SELECT city, AVG(amount) FROM orders WHERE status = 'completed'
# GROUP BY city HAVING AVG(amount) > 1000
result = (
df[df['status'] == 'completed']
.groupby('city')['amount']
.mean()
.loc[lambda x: x > 1000]
)Цепочка вызовов в Pandas читается как SQL снизу вверх: фильтрация (WHERE) → группировка (GROUP BY) → агрегация (AVG) → фильтрация по агрегату (HAVING).
Что быстрее — SQL или Pandas?
Для данных в базе — SQL почти всегда быстрее: запрос выполняется на сервере, а не на вашем ноутбуке. Pandas быстрее, когда данные уже в памяти и нужна сложная трансформация, которую неудобно писать в SQL.
Типы данных и структуры
В чём разница между list и dict?
# list — упорядоченная коллекция, доступ по индексу
users = ['Анна', 'Борис', 'Вика']
users[0] # 'Анна'
# dict — пары ключ-значение, доступ по ключу
metrics = {'dau': 1500, 'retention_d1': 0.45, 'arpu': 320}
metrics['dau'] # 1500На практике аналитика: list — для последовательностей (список колонок, список файлов), dict — для маппингов (перекодировка значений, конфигурация).
Что такое mutable и immutable?
# list — mutable (изменяемый)
a = [1, 2, 3]
a.append(4) # [1, 2, 3, 4]
# tuple — immutable (неизменяемый)
b = (1, 2, 3)
# b.append(4) # AttributeError
# string — immutable
s = 'hello'
# s[0] = 'H' # TypeError
s = 'H' + s[1:] # создаёт новую строкуДля аналитиков это менее важная тема, но иногда спрашивают на скрининге. Ключевое: list и dict — mutable, tuple, string и int — immutable.
Чего НЕ спрашивают у аналитиков
Если вы готовитесь по материалам для Python-разработчиков, вы встретите темы, которые на собеседовании аналитика не всплывут:
- Декораторы — это для бэкенд-разработчиков
- Метаклассы — это для авторов фреймворков
- GIL (Global Interpreter Lock) — это для тех, кто пишет многопоточный код
- Async/await — аналитики не пишут асинхронные сервисы
- Паттерны проектирования — аналитики не проектируют архитектуру приложений
Не тратьте время на эти темы. Лучше решите ещё 5 задач на Pandas groupby.
FAQ
Насколько глубоко нужно знать Python для собеседования аналитика?
На уровне уверенной работы с Pandas: загрузка данных, фильтрация, группировка, объединение таблиц, базовая визуализация. Это покрывает 90% вопросов. Алгоритмы, ООП и структуры данных спрашивают редко и только на Senior-позициях.
Могут ли дать live-coding на Python на собеседовании аналитика?
Да, в некоторых компаниях (Яндекс, Тинькофф, Озон) дают задачу в Jupyter Notebook или CoderPad. Обычно это: загрузить датасет, обработать, посчитать метрику, построить график. Тренируйтесь писать код руками, а не копировать из Stack Overflow.
Что важнее — SQL или Python для аналитика?
SQL — безусловный приоритет. Его спрашивают везде. Python — на втором месте, и его вес растёт: всё больше компаний требуют Python даже для junior-позиций. Если времени мало, закройте SQL на 100% и Python на базовом уровне (Pandas + визуализация).
Нужно ли знать NumPy для собеседования аналитика?
NumPy напрямую спрашивают редко, но он работает под капотом Pandas. Полезно знать np.where() для условных колонок и np.mean() / np.median() для быстрых вычислений. Глубокого знания NumPy для аналитика не требуется.