Путь от стажера до junior Data Scientist
Хочу сделать небольшую серию статей в первую очередь для начинающих специалистов в 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)
Важно с какими видами данных работаете (категориальные, порядковые, числовые)
Категориальные данные представляют собой характеристики (пол человека, язык и т.д.).
Порядковые данные представляют собой дискретные и упорядоченные единицы. Используются для измерения нечисловых характеристик, таких как счастье, удовлетворенность клиентов и так далее.
Числовые данные, которые делятся на:
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)
Параметры:
test_size - представляет долю набора данных для включения в тестовое разделение.
random_state - управляет перетасовкой, применяемой к данным перед применением разделения. Передайте int для воспроизводимого вывода через несколько вызовов функций.
Замечания:
train_test_split по умолчанию автоматически перемешивает данные;
Стратификацию (равномерное распределение) классов мы можем задать при разделении с помощью параметра stratify. Стоит стратифицировать по классам c y;
Если вы хотите использовать датасеты для тестирования и валидации, разделяем весь набор данных один раз для выделения обучающей выборки. Затем еще раз, чтобы разбить оставшиеся данные на датасеты для тестирования и валидации.
Полностью раскрыть каждую тему довольно сложно в одной статье, но и этих знаний хватит для того, чтобы подготовиться к обучению первой модели :)