Python для аналитика данных: что нужно знать

Зачем аналитику Python

SQL — главный инструмент аналитика, но Python расширяет возможности. Там, где SQL неудобен — сложные вычисления, визуализация, автоматизация — Python незаменим.

Когда Python нужен:

  • Анализ данных, которые не в базе (CSV, Excel, API)
  • Визуализация: графики сложнее, чем в BI-инструментах
  • Статистические тесты: scipy, statsmodels
  • Автоматизация отчётов: скрипт вместо ручной работы каждый понедельник
  • Машинное обучение (для Senior-позиций)

Когда Python НЕ нужен:

  • Ad-hoc запросы к базе → SQL
  • Простые дашборды → Tableau/Looker
  • Одноразовый анализ в таблице → Google Sheets

Pandas — основа основ

Pandas — библиотека для работы с табличными данными. Это «Excel на стероидах». На собеседованиях и в работе Pandas используется чаще всего.

Чтение данных

import pandas as pd

# CSV
df = pd.read_csv('orders.csv')

# Excel
df = pd.read_excel('report.xlsx', sheet_name='Q1')

# SQL
from sqlalchemy import create_engine
engine = create_engine('postgresql://user:pass@host/db')
df = pd.read_sql('SELECT * FROM orders', engine)

Фильтрация и выборка

# Фильтрация по условию
active = df[df['status'] == 'active']

# Несколько условий
big_orders = df[(df['amount'] > 1000) & (df['status'] == 'completed')]

# Выборка столбцов
df[['user_id', 'amount', 'created_at']]

Группировка и агрегация

# GROUP BY аналог
monthly = df.groupby(df['created_at'].dt.to_period('M')).agg(
    orders=('order_id', 'count'),
    revenue=('amount', 'sum'),
    avg_check=('amount', 'mean')
).reset_index()

# Несколько группировок
by_category = df.groupby(['category', 'platform'])['amount'].sum()

Объединение таблиц (merge = JOIN)

# LEFT JOIN
result = orders.merge(users, on='user_id', how='left')

# JOIN по разным столбцам
result = orders.merge(products, left_on='product_id', right_on='id')

Pivot-таблицы

pivot = df.pivot_table(
    values='amount',
    index='category',
    columns='month',
    aggfunc='sum',
    fill_value=0
)

Подробная шпаргалка: Pandas для аналитика.

NumPy — базовые операции

NumPy нужен реже, чем Pandas, но полезен для математических операций.

import numpy as np

# Базовая статистика
np.mean(data)      # среднее
np.median(data)    # медиана
np.std(data)       # стандартное отклонение
np.percentile(data, [25, 50, 75])  # квартили

# Генерация данных для тестов
np.random.seed(42)
sample = np.random.normal(loc=100, scale=15, size=1000)

Визуализация: Matplotlib и Seaborn

Matplotlib — базовые графики

import matplotlib.pyplot as plt

# Линейный график
plt.figure(figsize=(10, 5))
plt.plot(df['date'], df['dau'], label='DAU')
plt.xlabel('Дата')
plt.ylabel('DAU')
plt.title('Ежедневная аудитория')
plt.legend()
plt.tight_layout()
plt.savefig('dau.png', dpi=150)

Seaborn — красивая статистическая визуализация

import seaborn as sns

# Распределение
sns.histplot(df['amount'], bins=50, kde=True)

# Boxplot по категориям
sns.boxplot(data=df, x='category', y='amount')

# Heatmap корреляций
sns.heatmap(df.corr(), annot=True, cmap='coolwarm')

Подробнее о выборе графиков: типы графиков для аналитика.

Статистика в Python

from scipy import stats

# Z-тест для пропорций (A/B-тест)
from statsmodels.stats.proportion import proportions_ztest
count = [350, 320]  # конверсии
nobs = [10000, 10000]  # размеры групп
z_stat, p_value = proportions_ztest(count, nobs)

# T-тест для средних
t_stat, p_value = stats.ttest_ind(group_a, group_b)

# Хи-квадрат
chi2, p, dof, expected = stats.chi2_contingency(table)

Подробнее: проверка гипотез, p-value простыми словами.

Что спрашивают на собеседовании

Типичные вопросы

  1. Как прочитать CSV и посчитать retention? — Pandas: read_csv, groupby, merge с таблицей первых визитов
  2. Чем merge отличается от join? — merge работает по значениям столбцов, join — по индексу
  3. Как найти дубликаты?df.duplicated(), df.drop_duplicates()
  4. Как обработать пропуски?df.isna().sum(), df.fillna(), df.dropna()
  5. Как посчитать скользящее среднее?df['value'].rolling(7).mean()

Типичная задача на собеседовании

Задание: даны данные о заказах. Найдите когорту с лучшим D7 retention.

df = pd.read_csv('orders.csv', parse_dates=['order_date'])

# Первый заказ каждого пользователя
first_order = df.groupby('user_id')['order_date'].min().rename('cohort_date')
df = df.merge(first_order, on='user_id')

# Номер дня от первого заказа
df['day_n'] = (df['order_date'] - df['cohort_date']).dt.days

# Когорта по неделе
df['cohort_week'] = df['cohort_date'].dt.to_period('W')

# D7 retention
cohort_sizes = df.groupby('cohort_week')['user_id'].nunique()
d7_users = df[df['day_n'] == 7].groupby('cohort_week')['user_id'].nunique()
retention_d7 = (d7_users / cohort_sizes * 100).round(1)

Больше задач: Python на собеседовании.

Минимальный набор для разных уровней

Junior

  • Pandas: read_csv, фильтрация, groupby, merge
  • Matplotlib: базовые графики (line, bar)
  • Синтаксис: циклы, функции, list comprehensions

Middle

  • Всё из Junior +
  • NumPy, SciPy: статистические тесты
  • Seaborn: статистическая визуализация
  • Работа с датами: pd.to_datetime, dt accessor
  • Автоматизация: скрипты для отчётов

Senior

  • Всё из Middle +
  • Scikit-learn: базовое ML (регрессия, кластеризация)
  • Работа с API: requests, JSON
  • Airflow / dbt: автоматизация пайплайнов

Как учить Python аналитику

  1. Начните с Pandas, а не с основ Python. Циклы и классы изучите по ходу. Аналитику нужен Pandas, а не алгоритмы
  2. Решайте задачи на реальных данных. Kaggle datasets, открытые данные, свои проекты
  3. Учитесь параллельно с SQL. Pandas и SQL решают одни задачи, но по-разному. Понимание обоих усиливает каждый
  4. Не учите Django, Flask, asyncio. Это для разработчиков, не для аналитиков

Читайте также

FAQ

Нужен ли Python junior-аналитику?

Не обязательно, но желательно. Большинство junior-позиций требуют только SQL. Но знание Python (хотя бы Pandas) выделяет вас среди кандидатов и ускоряет переход на Middle.

Что важнее — SQL или Python?

SQL. Его спрашивают на 95% собеседований, Python — на 40–60%. Если времени мало — учите SQL до уверенного уровня, потом добавляйте Python.

Сколько времени нужно на изучение Python для аналитика?

3–4 недели при ежедневных занятиях по 1–2 часа. Фокус: Pandas (70% времени), визуализация (20%), базовый синтаксис (10%). Не пытайтесь охватить весь Python — аналитику нужен конкретный набор инструментов.

Какую IDE использовать?

Jupyter Notebook для интерактивного анализа (стандарт в аналитике). VS Code для скриптов и автоматизации. PyCharm — избыточен для аналитических задач.


Тренируйтесь решать задачи по Python и SQL — откройте тренажёр с 1500+ вопросами.