Работа с отсутствующими значениями в наборе данных. Исчерпывающее руководство по работе с отсутствующими значениями в машинном обучении.


ВВЕДЕНИЕ

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

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

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

В этой статье я кратко объясню и перечислю некоторые методы, которые можно использовать для работы с недостающими данными, с некоторыми практическими примерами.

Основные шаги

1) Использование центральных тенденций для вменения значений

  • Среднее
  • Медиана
  • Режим

2) Вычеркивание столбца с отсутствующими данными.

3) Заполнение столбца новыми значениями.

Пример

Мы начнем практический пример с импорта всех библиотек, необходимых в этом учебнике.

import pandas as pd
import matplotlib as plt
import seaborn as sns
Вход в полноэкранный режим Выход из полноэкранного режима

Затем мы загрузим необходимый набор данных из Kaggle.

dataset = pd. read_csv('/Highest Holywood Grossing Movies.csv')
Войти в полноэкранный режим Выйти из полноэкранного режима

После этого мы начинаем исследовательский анализ данных

dataset.info()
Войти в полноэкранный режим Выйти из полноэкранного режима
dataset.head()
Войти в полноэкранный режим Выход из полноэкранного режима

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

dataset.tail()
Войти в полноэкранный режим Выход из полноэкранного режима

Затем мы используем функцию dataset.shape, чтобы узнать количество строк и столбцов в наших данных.

dataset.shape
Войти в полноэкранный режим Выход из полноэкранного режима

Функция dataset. isnull() возвращает false, если значения в наборе данных не отсутствуют, и true, если отсутствуют.

dataset.isnull().head()
Войти в полноэкранный режим Выход из полноэкранного режима

Функция dataset. isnull().head() дает нам информацию только о первых 5 столбцах, но чтобы узнать точный столбец и количество отсутствующих значений, мы используем функцию dataset. isnull().sum(), которая сообщает нам, в каком столбце отсутствуют значения и количество отсутствующих значений.


dataset.isnull().sum()
Вход в полноэкранный режим Выход из полноэкранного режима

Использование центральных тенденций, таких как среднее значение, медиана и мода

  • Среднее значение: Это среднее значение всех чисел.
  • Медиана: Это среднее число, когда все числа расположены в алфавитном или возрастающем порядке.
  • Режим: Это число с наибольшей частотой встречаемости.
dataset['License'].fillna(dataset['License'].median(),inplace=True)
Вход в полноэкранный режим Выход из полноэкранного режима

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


dataset['License'].fillna(dataset['License'].mean(),inplace=True)
Войти в полноэкранный режим Выход из полноэкранного режима

Как заполнить пустой набор данных значением моды.

dataset['License'].fillna(dataset['License'].mode(),inplace=True)
Войти в полноэкранный режим Выход из полноэкранного режима

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

2) Отбрасывание столбца с недостающими данными.

Опустить столбец или строку с отсутствующим значением довольно просто, поскольку для этого требуется всего одна строка кода, но чтобы не испортить все данные, есть некоторые особенности, которые необходимо учитывать при опускании столбца.

dataset.dropna(how='any').shape
Вход в полноэкранный режим Выход из полноэкранного режима

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

dataset.dropna(how='all').shape
Вход в полноэкранный режим Выход из полноэкранного режима

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

dataset.dropna(subset=['License' , 'Release Date'], how='any').shape
Вход в полноэкранный режим Выход из полноэкранного режима

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

Аналогично, мы можем указать, какую строку удалить, используя параметр «thresh hold», и это означает, что сохраняется любая строка, в которой отсутствует только одно значение. Вы всегда можете увеличить thresh в зависимости от того, сколько строк вы хотите оставить.

dataset.dropna(thresh=1).shape
Вход в полноэкранный режим Выход из полноэкранного режима

Важно отметить, что если недостающие данные в нашем наборе данных превышают 60%, рекомендуется отбросить такой набор данных.

3) Заполнение недостающих значений.

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

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

dataset.fillna(0)
Вход в полноэкранный режим Выход из полноэкранного режима

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

dataset.fillna({
'Release Date':July 6, 2014,
'Liencse':PG-13,
})
Вход в полноэкранный режим Выход из полноэкранного режима

Приведенный выше код заполняет все пустые места в столбце «Дата выпуска» значением 6 июля 2014 года, таким образом, у нас есть около 118 строк, заполненных одним и тем же значением, что может привести к серьезным изменениям в модели. И наоборот, заполнение столбца ‘License’ значением ‘PG-13’ имеет некоторый уровень точности, потому что каждая вторая строка заполнена тем же самым.

Кроме того, мы можем использовать метод forward fill(‘ffill’), который заполняет недостающее значение предыдущим значением, а также метод backward fill, который заполняет значение следующим или предыдущим значением.

dataset.fillna(method=''ffill'')

Вход в полноэкранный режим Выход из полноэкранного режима
dataset.fillna(method=''bfill'')
Войти в полноэкранный режим Выход из полноэкранного режима

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


dataset.fillna(method=''ffill'', limit=2)
Войти в полноэкранный режим Выйти из полноэкранного режима

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

Заключение

Спасибо, что дочитали эту статью до конца. Надеюсь, вы узнали что-то новое или, возможно, нашли ее полезной. Вы можете связаться со мной в Twitter

data-science

анализ данных

машинное обучение

codenewbies

python

Оцените статью
Procodings.ru
Добавить комментарий