Data Science на Python: инструменты, стек и roadmap
О чём эта статья
Data Science — это извлечение знаний из данных с помощью программирования, статистики и машинного обучения. Если вы умеете писать на Python и хотите разобраться, как превращать сырые данные в прогнозы, графики и инсайты — вы по адресу.
Python стал языком №1 для этой области не случайно: огромная экосистема библиотек, низкий порог входа и сообщество, которое написало ответ практически на любой вопрос.
Ключевые понятия:
| Термин | Что значит простыми словами |
|---|---|
| Data Science | Извлечение знаний из данных с помощью кода, статистики и ML |
| Machine Learning | Алгоритм учится на примерах, а не по инструкциям |
| EDA (Exploratory Data Analysis) | Первый взгляд на данные: распределения, выбросы, корреляции |
| Feature Engineering | Преобразование сырых данных в признаки, понятные модели |
| Pandas DataFrame | Таблица в памяти с именованными колонками и типами |
| NumPy array | Быстрый массив чисел, основа всех DS-библиотек |
| Jupyter Notebook | Интерактивный блокнот: код + графики + текст в одном месте |
Для кого эта статья: Python-разработчиков, знакомых с основами языка; начинающих аналитиков данных; тех, кто выбирает инструменты для проекта и хочет понять, с чего начать погружение в Data Science.
Что вы узнаете из этой статьи:
- Какие инструменты покрывают 90% задач специалиста по данным
- В каком порядке их изучать (пошаговый план)
- Типичный рабочий процесс: от загрузки данных до готовой модели
- Как выбрать инструмент под конкретную задачу
Для каждой библиотеки есть ссылка на подробную шпаргалку на этом же сайте — вы можете углубляться в тему настолько, насколько нужно.
Карта экосистемы Data Science на Python
Вот пять библиотек, которые покрывают 90% задач специалиста по данным:
| Библиотека | Назначение | Шпаргалка на сайте |
|---|---|---|
| NumPy | Числовые вычисления, массивы, линейная алгебра — фундамент всего | Шпаргалка по NumPy |
| Pandas | Загрузка, очистка и манипуляция табличными данными | Шпаргалка по Pandas |
| Matplotlib | Базовая визуализация: линейные графики, гистограммы, scatter-plot | Шпаргалка по Matplotlib |
| Seaborn | Статистическая визуализация «из коробки»: boxplot, heatmap, pairplot | Шпаргалка по Seaborn |
| Scikit-learn | Машинное обучение: классификация, регрессия, кластеризация | Шпаргалка по Scikit-learn |
Кроме этого ядра, в работе пригодятся:
- Jupyter Notebook / JupyterLab — интерактивная среда, в которой вы будете проводить 90% времени
- SciPy — научные вычисления поверх NumPy: оптимизация, интегралы, статистические тесты
- Plotly — интерактивная визуализация для дашбордов и презентаций
- Statsmodels — классическая статистика: регрессионный анализ, проверка гипотез, временные ряды
С чего начать: пошаговый план
Если вы только заходите в Data Science, вот путь, который работает. Последовательность важна: каждый следующий шаг опирается на предыдущий.
Шаг 1. NumPy: научитесь работать с массивами
NumPy — это базовый слой. Без него не заработают ни Pandas, ни Matplotlib. Освойте три вещи:
- Создание массивов:
np.array(),np.zeros(),np.arange() - Индексация и срезы: как выбрать нужные элементы из N-мерного массива
- Векторизованные операции: почему
a * 2работает в 50 раз быстрее, чем циклfor
import numpy as np
# Не делайте так (медленно):
result = []
for x in range(1_000_000):
result.append(x * 2)
# Делайте так (быстро, на C под капотом):
arr = np.arange(1_000_000)
result = arr * 2
Полный разбор — в шпаргалке по NumPy.
Шаг 2. Pandas: загрузите и почистите реальные данные
Pandas — это Excel на стероидах. Таблицы (DataFrame) становятся вашим основным инструментом. Освойте:
- Чтение данных:
pd.read_csv(),pd.read_excel(),pd.read_sql() - Базовый обзор:
.head(),.info(),.describe() - Фильтрацию: как отобрать нужные строки и столбцы
- Обработку пропусков:
.dropna(),.fillna()
import pandas as pd
df = pd.read_csv('sales.csv')
print(df.info()) # типы данных и пропуски
print(df.describe()) # базовая статистика
df = df.dropna(subset=['price']) # убрать строки без цены
df['date'] = pd.to_datetime(df['date']) # привести даты к нормальному типу
Полный разбор — в шпаргалке по Pandas.
Шаг 3. Визуализация: нарисуйте, что увидели
Цифры в таблице ничего не скажут, пока вы на них не посмотрите. Начните с Matplotlib для базовых графиков, затем переходите на Seaborn — он даёт красивую картинку с минимумом кода.
import matplotlib.pyplot as plt
import seaborn as sns
# Быстрый взгляд на распределение
sns.histplot(df['price'], bins=50)
plt.title('Распределение цен')
plt.show()
# Связь двух переменных
sns.scatterplot(data=df, x='price', y='quantity')
plt.show()
Полный разбор: Matplotlib для полного контроля, Seaborn для быстрых красивых графиков.
Шаг 4. Scikit-learn: постройте первую модель
Когда данные очищены и вы понимаете их структуру — время пробовать машинное обучение. Начните с простого:
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
# Разделяем на обучающую и тестовую выборки
X = df[['feature1', 'feature2', 'feature3']]
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# Обучаем простейшую модель
model = LinearRegression()
model.fit(X_train, y_train)
# Оцениваем результат
y_pred = model.predict(X_test)
print(f'MAE: {mean_absolute_error(y_test, y_pred):.2f}')
Шпаргалка по Scikit-learn появится на сайте в ближайшее время — там будет полный разбор алгоритмов, метрик и пайплайнов.
Типичный рабочий процесс Data Scientist
В реальной работе 80% времени уходит на подготовку данных, и только 20% — на моделирование. Вот как выглядит стандартный пайплайн:
# 1. Загрузка данных
import pandas as pd
df = pd.read_csv('data.csv')
# 2. Очистка и подготовка (самый долгий этап)
df = df.dropna() # убрать пропуски
df = df[df['price'] > 0] # убрать аномалии
df['category'] = df['category'].astype('category') # правильные типы
# 3. Исследовательский анализ (EDA — Exploratory Data Analysis)
import seaborn as sns
sns.pairplot(df[['price', 'quantity', 'rating']]) # все связи на одном экране
print(df.corr()) # корреляции
# 4. Feature Engineering — создание новых признаков
df['price_per_unit'] = df['price'] / df['quantity']
df['day_of_week'] = pd.to_datetime(df['date']).dt.dayofweek
# 5. Моделирование
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(n_estimators=100)
model.fit(X_train, y_train)
# 6. Интерпретация результатов
importances = model.feature_importances_
for name, imp in zip(X.columns, importances):
print(f'{name}: {imp:.3f}')
Обратите внимание: шаги 1-4 — это подготовка данных. Без неё даже самая крутая модель выдаст мусор.
Как выбрать инструмент под задачу
Главное правило: не берите библиотеку «потому что она крутая» — берите под конкретную задачу.
| Задача | Инструмент | Почему |
|---|---|---|
| «Мне нужно загрузить CSV и посчитать среднее» | Pandas | df.describe() — и всё готово |
| «Мне нужно быстро перемножить матрицы» | NumPy | Операции на C, в 50 раз быстрее циклов Python |
| «Мне нужен простой линейный график» | Matplotlib (pyplot) | Три строчки — и график готов |
| «Мне нужен красивый boxplot по группам» | Seaborn | sns.boxplot(x='group', y='value') — цвет, разметка, легенда «из коробки» |
| «Мне нужна интерактивная визуализация» | Plotly | Можно зумить, наводить курсор, экспортировать в HTML |
| «Мне нужно обучить модель классификации» | Scikit-learn | Единый API для десятков алгоритмов |
| «Мне нужно проверить статистическую гипотезу» | SciPy + Statsmodels | T-тесты, ANOVA, регрессионный анализ |
| «Мне нужны глубокие нейросети» | PyTorch / TensorFlow | Это уже не Data Science, а Deep Learning — отдельная область |
Характерный пример
Допустим, у вас есть данные о продажах интернет-магазина, и нужно понять, от чего зависит выручка:
- Загружаете CSV через Pandas — 1 строчка
- Смотрите на данные через Seaborn —
pairplotпоказывает все связи между переменными - Считаете корреляции через Pandas —
df.corr()даёт матрицу взаимосвязей - Строите регрессию через Scikit-learn —
LinearRegression().fit(X, y) - Визуализируете важность признаков через Matplotlib — столбчатая диаграмма
Весь процесс — 5 библиотек, каждая делает своё дело.
Python-инструменты за пределами Data Science
Data Scientist не живёт в изоляции. Данные откуда-то приходят и куда-то уходят. Вот инструменты, которые дополнят стек:
| Инструмент | Для чего | Шпаргалка |
|---|---|---|
| Python (базовый) | Синтаксис, коллекции, ООП, исключения | Шпаргалка по Python |
| SQL | Извлечение данных из баз — 90% данных живёт в БД | Шпаргалка по SQL |
| FastAPI | Оборачивание моделей в API для продакшена | Шпаргалка по FastAPI |
| SQLAlchemy | ORM для работы с БД из Python | Шпаргалка по SQLAlchemy |
| Jinja2 | Шаблонизация отчётов и писем | Шпаргалка по Jinja2 |
Типичный сценарий: написали SQL-запрос → загрузили данные в Pandas → обучили модель в Scikit-learn → обернули в FastAPI → модель отвечает на запросы в реальном времени.
Что не вошло в этот обзор
Карта была бы неполной без упоминания инструментов, которые понадобятся по мере роста:
- Jupyter Notebook — интерактивная среда разработки «код + результат + пояснение» в одном документе
- Dask — Pandas для данных, которые не влезают в оперативную память (ленивые вычисления, распределённые DataFrame)
- XGBoost / LightGBM — градиентный бустинг, который выигрывает большинство соревнований на Kaggle
- OpenCV — компьютерное зрение (обработка изображений и видео)
- NLTK / spaCy — обработка естественного языка (NLP): анализ текстов, тональность, извлечение сущностей
- MLflow — трекинг экспериментов: какие параметры модели дали какой результат неделю назад
- Streamlit — превращение Jupyter-ноутбука в веб-приложение за 15 минут
Осваивайте их по мере необходимости — не нужно учить всё сразу.
С чего начать прямо сегодня
- Установите Python (если ещё нет) и менеджер пакетов
uv— шпаргалка по uv - Поставьте Jupyter Lab:
uv pip install jupyterlab pandas numpy matplotlib seaborn scikit-learn - Найдите датасет на Kaggle или загрузите свой CSV
- Пройдите 4 шага из раздела «С чего начать» выше — прямо по порядку
- Держите шпаргалки открытыми — не нужно всё запоминать, достаточно знать где посмотреть
Частые ошибки новичков
Даже опытные Python-разработчики спотыкаются на одних и тех же граблях при переходе в Data Science. Вот таблица — сохраните в закладки:
| Ошибка | Последствия | Как правильно |
|---|---|---|
pd.read_csv('file.csv') без указания dtype |
Pandas угадывает типы: даты становятся строками, int превращается во float | pd.read_csv('file.csv', dtype={'id': 'int32', 'category': 'category'}, parse_dates=['date']) |
Итерация через df.iterrows() |
В 50–100 раз медленнее векторизованных операций | Использовать df.apply(), .transform() или векторные операции NumPy |
pd.concat() с категориальными колонками |
Категории теряются, колонка становится object — расход памяти вырастает в разы | После concat преобразовать заново: df['cat'] = df['cat'].astype('category') |
Обучение модели без random_state |
Результаты невоспроизводимы: сегодня accuracy 0.85, завтра 0.79 | train_test_split(..., random_state=42) и задавать seed для модели |
| Масштабирование признаков до разбиения на train/test | Утечка данных (data leakage): модель «видит» тестовые данные при обучении | scaler.fit(X_train) → scaler.transform(X_train) и scaler.transform(X_test) — fit только на train |
| Пропуск EDA — сразу в модель | Модель учится на мусоре: пропуски, выбросы, дубликаты, некорректные типы | Всегда начинать с .info(), .describe(), .isnull().sum(), визуализации распределений |
Правило: если вы пишете цикл по DataFrame — остановитесь и подумайте, можно ли сделать то же самое без цикла. В 9 случаях из 10 — можно.
Когда Data Science не нужен
Data Science — мощный инструмент, но не универсальный. Бывают ситуации, когда проще и правильнее обойтись без него:
- Данных меньше 1000 строк — Excel или Google Sheets справятся быстрее, и бизнес получит ответ сегодня, а не через неделю
- Задача решается простым правилом —
if amount > 10000: flag = 'high'; не нужно обучать Random Forest для трёх условий - Нужен ответ за миллисекунды — ML-модели не предсказывают мгновенно при жёстких latency-требованиях; SQL + кеш надёжнее
- Нет предметной экспертизы — модель без понимания предметной области = дорогой генератор случайных чисел; сначала привлеките эксперта, потом стройте модель
- Данные не репрезентативны — если выборка не отражает реальную картину (например, опрос только среди друзей), модель выучит смещение и будет систематически ошибаться
Хороший Data Scientist отличается от плохого тем, что умеет сказать «здесь машинное обучение не нужно». Прежде чем запускать model.fit(), спросите себя: «Какую проблему я решаю и есть ли способ проще?»
Ресурсы
| Ресурс | Описание |
|---|---|
| Pandas Documentation | Официальная документация Pandas — исчерпывающий источник по API и лучшим практикам |
| NumPy User Guide | Руководство по NumPy с примерами для каждого модуля |
| Scikit-learn Documentation | Документация с галереей примеров для каждого алгоритма и метрики |
| Kaggle Learn | Бесплатные микро-курсы по Python, Pandas, визуализации и ML |
| Python Data Science Handbook | Бесплатная книга Джейка Вандерпласа — классика DS-образования, читается за выходные |
Что дальше
- Шпаргалка по NumPy: массивы, операции, линейная алгебра
- Шпаргалка по Pandas: DataFrame, загрузка и очистка данных
- Шпаргалка по Matplotlib: от простых графиков до публикационных
- Шпаргалка по Seaborn: статистическая визуализация
- Шпаргалка по Python: от основ до профи
- Шпаргалка по SQL: запросы, JOIN, оконные функции
- Шпаргалка по FastAPI: создание API на Python
- Шпаргалка по SQLAlchemy: ORM для Python
- Шпаргалка по Scikit-learn: машинное обучение на Python