Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

2.2 Предобработка данных

Чтобы использовать глубокое обучение для решения задач реального мира, мы часто начинаем с предобработки исходных данных, а не с уже готовых данных в формате тензоров. Из инструментов анализа данных в Python обычно используют пакет pandas. Как и многие другие расширения обширной экосистемы Python, pandas умеет работать с тензорами. В этом разделе мы кратко покажем, как предобработать исходные данные с помощью pandas и как преобразовать их в формат тензоров. В последующих главах будут описаны и другие методы предобработки данных.

2.2.1 Чтение набора данных

Для примера мы сначала создадим искусственный набор данных и сохраним его в CSV-файл ../data/house_tiny.csv (файл со значениями, разделёнными запятыми). Данные в других форматах можно обрабатывать похожим образом. Ниже мы построчно запишем набор данных в CSV-файл.

import os

os.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:
    f.write('NumRooms,Alley,Price\n')  # Имена столбцов
    f.write('NA,Pave,127500\n')  # Каждая строка — один пример данных
    f.write('2,NA,106000\n')
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')

Чтобы загрузить исходный набор данных из созданного CSV-файла, импортируем пакет pandas и вызовем функцию read_csv. В этом наборе данных четыре строки и три столбца. Каждая строка описывает количество комнат («NumRooms»), тип переулка («Alley») и цену дома («Price»).

# Если pandas не установлен, достаточно раскомментировать следующие строки, чтобы его установить
# !pip install pandas
import pandas as pd

data = pd.read_csv(data_file)
print(data)

2.2.2 Обработка пропущенных значений

Обратите внимание: значения «NaN» обозначают пропущенные данные. Для обработки пропущенных данных обычно применяют импутацию (заполнение пропусков) и удаление, где импутация заменяет пропущенное значение подходящим значением, а удаление просто игнорирует пропущенные значения. Здесь мы рассмотрим импутацию.

С помощью индексации по позиции iloc разделим data на inputs и outputs: первые — это два первых столбца data, а вторые — последний столбец. Пропущенные числовые значения в inputs мы заменим средним значением того столбца, в котором они находятся.

inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())
print(inputs)

Для категориальных или дискретных значений в inputs мы будем считать «NaN» отдельной категорией. Поскольку столбец «Alley» принимает только два категориальных значения «Pave» и «NaN», pandas может автоматически преобразовать его в два столбца «Alley_Pave» и «Alley_nan». Строка, в которой тип переулка «Pave», получит в столбце «Alley_Pave» значение 1, а в столбце «Alley_nan» — значение 0. Строка без типа переулка получит в «Alley_Pave» значение 0, а в «Alley_nan» — значение 1.

inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)

2.2.3 Преобразование в формат тензора

Теперь все элементы inputs и outputs имеют числовой тип, и их можно преобразовать в тензоры. Когда данные представлены в формате тензоров, их можно обрабатывать с помощью функций для тензоров, которые были введены в разделе 2.1.

MXNet:

from mxnet import np

X, y = np.array(inputs.to_numpy(dtype=float)), np.array(outputs.to_numpy(dtype=float))
X, y

PyTorch:

import torch

X = torch.tensor(inputs.to_numpy(dtype=float))
y = torch.tensor(outputs.to_numpy(dtype=float))
X, y

TensorFlow:

import tensorflow as tf

X = tf.constant(inputs.to_numpy(dtype=float))
y = tf.constant(outputs.to_numpy(dtype=float))
X, y

PaddlePaddle:

import warnings
warnings.filterwarnings(action='ignore')
import paddle

X, y = paddle.to_tensor(inputs.values), paddle.to_tensor(outputs.values)
X, y

Резюме

  • Пакет pandas — распространённый в Python инструмент анализа данных, и он совместим с тензорами.
  • При работе с пропущенными данными в pandas мы в зависимости от ситуации выбираем импутацию или удаление.

Упражнения

Создайте исходный набор данных с большим количеством строк и столбцов.

  1. Удалите столбец, в котором больше всего пропущенных значений.
  2. Преобразуйте предобработанный набор данных в формат тензоров.

MXNet: Обсуждение

PyTorch: Обсуждение

TensorFlow: Обсуждение

PaddlePaddle: Обсуждение