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

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

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

Для того, чтобы показать, как работают функции и методы буду использовать всеми используемый датасет на kaggle.

Импорт и экспорт данных

Pandas — одна из самых популярных библиотек Python для аналитики и работы с Data Science. Первое с чего следует начать это импортировать данную библиотеку:

import pandas as pd

Считывать данные предстоит различных форматов и то, как это можно сделать существует множество способов, но часто хватает функции read_csv с ее параметрами (sep - разделитель (по умолчанию ','), names - список имен столбцов):

df = pd.read_csv("titanic.csv")
df

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

Вывод первых 5 строк - df.head()

Вывод последних 5 строк - df.tail()

Вывод 5 случайных строк - df.sample(5)

Немного забегая вперед, посмотрим на то, как экспортировать обработанные данные в Excel:

df.to_excel('df_data.xlsx', sheet_name = 'sheet1', index = False)

Настроим вывод таблицы

С помощью pd.set_option настроим вывод DataFrame:

  • количество строк в таблице было не больше 10;

  • текст в ячейке отражался полностью вне зависимости от длины;

  • все числа отражались с двумя знаками после запятой;

pd.set_option('max_rows', 10)
pd.set_option('display.max_colwidth', None)
pd.set_option('display.float_format', '{:.2f}'.format)

Если нужно вернуть настройки к изначальным, используем: pd.reset_option('all').

Предпросмотр данных

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

df.shape

df.columns

df.dtypes

df.info()

df.describe()

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

Метод describe() показывает количество строк в столбце, среднее значение столбца, столбец стандартное отклонение , минимальные (min) и максимальные (max) значения, а также границу каждого квартиля - 25%, 50% и 75%. Любые значения NaN автоматически пропускаются. По умолчанию, метод describe( ) пропускает строки и столбцы не содержащие чисел - категориальные признаки. Чтобы посмотреть статистику по нечисловым признакам, нужно явно указать интересующие нас типы в параметре include. Можно также задать include = 'all', чтоб вывести статистику по всем имеющимся признакам.

Работа с пропущенными значениями

Есть два метода обнаружения недостающих данных: isnull() и notnull().

Результатом является логическое значение, указывающее, действительно ли значение, переданное в аргумент, отсутствует. «Истина» означает, что значение является отсутствующим значением, а «Ложь» означает, что значение не является отсутствующим.

df.isnull().sum()

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

df['Age'].fillna(df['Age'].mean(), inplace = True)

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

df.drop(['Cabin'], axis = 1, inplace = True)

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

  1. Категориальные данные представляют собой характеристики (пол человека, язык   и т.д.).

  2. Порядковые данные представляют собой дискретные и упорядоченные единицы.  Используются для измерения нечисловых характеристик, таких как счастье, удовлетворенность клиентов и так далее.

  3. Числовые данные, которые делятся на:

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

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

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

Работа с категориальными данными

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

Label Encoder

Данный тип представляет собой однозначное соответствие число и уникальное значение.

Первое значение кодируется нулем, второе единицей, и так далее.

from sklearn.preprocessing import LabelEncoder
labelencoder = LabelEncoder()

Для того, чтобы посмотреть  на закодированные значения необходимо использовать метод classes_.

One-Hot Encoder

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

from sklearn.preprocessing import OneHotEncoder
onehotencoder = OneHotEncoder()

Нормализация, стандартизация, масштабирование

MinMaxScaler, RobustScaler, StandardScaler, и Normalizer это методы, которые помогут нам подготовить данные для машинного обучения.

MinMaxScaler

Из каждого значения признака, MinMaxScaler вычитает минимальное значение признака и делит на диапазон. MinMaxScaler сохраняет форму исходного распределения. Он не меняет содержательно информацию содержащуюся в исходных данных. Диапазон значений после признака находится между 0 и 1. Если хотите легкого преобразования, используйте его.

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()

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

Используйте RobustScaler если вы хотите уменьшить эффект от выбросов по сравнению с MinMaxScaler.

from sklearn.preprocessing import RobustScaler
transformer = RobustScaler()

StandardScaler стандартизирует признак вычитая среднее и затем масштабируя к единичной дисперсии. В результате применения StandardScaler мы получаем распределение со стандартным отклонением равным 1.

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()

Normalizer работает на строках, не на столбцах и к каждому наблюдению применяет L2 нормализацию, чтобы значения в строке имели единичную норму. Normalizer преобразует все признаки в значения между -1 и 1.

from sklearn.preprocessing import Normalizer
transformer = Normalizer()

Разделение датасета на обучающую, тестовую выборку

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.33, random_state=42)

Параметры:

  1. test_size - представляет долю набора данных для включения в тестовое разделение.

  2. random_state - управляет перетасовкой, применяемой к данным перед применением разделения. Передайте int для воспроизводимого вывода через несколько вызовов функций.

Замечания:

  1. train_test_split по умолчанию автоматически перемешивает данные;

  2. Стратификацию (равномерное распределение) классов мы можем задать при разделении с помощью параметра stratify. Стоит стратифицировать по классам c y;

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

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