Руководство по работе с отсутствующими данными с помощью библиотек Scikit-Learn и Pandas.

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

В этом посте я расскажу о том, как обрабатывать отсутствующие данные с помощью библиотек Scikit-Learn и Pandas. Я затрону следующие темы,

  • Как использовать метод дропна?
  • Вменение пропущенных значений
  • Отсутствующие данные с Pandas

Чтобы показать, как обрабатывать отсутствующие данные, позвольте мне импортировать библиотеки NumPy и Pandas.

import pandas as pd
import numpy as np

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

data = np.array([[1, 2, 3, 4], 
                 [5, 6, 7, np.nan], 
                 [9, 10, np.nan, 11]])

Теперь давайте преобразуем эти данные в структуру фрейма данных Pandas. Позвольте мне также назвать столбцы.

df = pd.DataFrame(data,columns=["A","B","C","D"])

Давайте посмотрим на этот набор данных.

df
#Output:
      A     B     C     D                       
0    1.0   2.0   3.0   4.0                 
1    5.0   6.0   7.0   NaN                 
2    9.0   10.0  NaN   11.0

Здесь nan относится к отсутствующим данным. Чтобы увидеть отсутствующие данные, вы можете использовать метод isnull.

df.isnull()
#Output:
        A       B        C       D                       
0     False   False    False   False                 
1     False   False    False   True                 
2     False   False    True    False

Этот метод возвращает true и false. True указывает на отсутствие данных. Давайте используем метод суммы, чтобы увидеть сумму недостающих данных.

df.isnull().sum()
#Output:
A    0
B    0
C    1
D    1
dtype: int64

Как видите, в столбцах C и D не хватает одного.

1. Метод дропна

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

df.dropna(axis=0)
#Output:
     A      B     C     D                       
0   1.0    2.0   3.0   4.0

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

df.dropna(axis=1)
#Output:
     A       B                       
0   1.0     2.0                 
1   5.0     6.0                 
2   9.0     10.0

Как видите, столбцы C и D с отсутствующими данными были удалены из набора данных. Метод дропна имеет еще несколько параметров. Например, параметр how="all" означает удаление строк с отсутствующими данными во всех их значениях.

df.dropna(how= 'all')
#Output:
      A     B     C     D                       
0    1.0   2.0   3.0   4.0                 
1    5.0   6.0   7.0   NaN                 
2    9.0   10.0  NaN   11.0

Например, если вы хотите удалить строки со значениями меньше 4, вы можете использовать параметр tresh.

df.dropna(thresh=4)
#Output:
      A       B       C       D                       
0    1.0     2.0     3.0     4.0

Если вы хотите удалить недостающие данные в определенном столбце, вы можете использовать параметр подмножества. Например, предположим, что мы хотим удалить недостающие данные в столбце D.

df.dropna(subset = ["D"])
#Output:
     A       B       C       D                       
0   1.0     2.0     3.0     4.0                 
2   9.0     10.0    NaN     11.0

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

2. Вменение пропущенных значений

Наиболее общий метод заключается в использовании среднего значения столбца. Для этого я буду использовать класс SimpleImputer в Scikit-Learn. Позвольте мне импортировать этот класс.

from sklearn.impute import SimpleImputer

Теперь я собираюсь создать экземпляр из этого класса. Поскольку отсутствующие данные обозначаются nan, напишем в параметре стратегииmissing_values=np.nan и mean.

imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')

Наш набор данных готов. Наш набор данных представляет собой фрейм данных. Давайте преобразуем набор данных в массив Numpy, используя метод подгонки. Помните, Scikit-Learn любит работать с массивами NumPy.

imp_mean = imp_mean.fit(df.values)

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

imputed_data = imp_mean.transform(df.values)

Теперь давайте посмотрим на набор данных.

imputed_data
#Output:
array([[ 1. ,  2. ,  3. ,  4. ],
       [ 5. ,  6. ,  7. ,  7.5],
       [ 9. , 10. ,  5. , 11. ]])

Обратите внимание, что сначала мы создали импутер на основе набора данных. Таким образом, параметры были изучены. Затем мы преобразовали набор данных в соответствии с этими изученными параметрами.

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

3. Отсутствующие данные с Pandas

Вы также можете использовать метод fillna в Pandas, чтобы заполнить недостающие данные. В этом методе вы указываете, как вы хотите заполнить недостающие данные. Например, давайте использовать среднее значение столбца.

df.fillna(df.mean())
#Output:
     A       B       C       D                       
0   1.0     2.0     3.0     4.0                 
1   5.0     6.0     7.0     7.5                 
2   9.0     10.0    5.0     11.0

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

Заключение

В этом посте я показал, как обрабатывать отсутствующие данные с помощью библиотек Scikit-Learn и Pandas. Спасибо за чтение. Я надеюсь, вам понравится это.

Не забудьте подписаться на нас на YouTube | Гитхаб | Твиттер| Kaggle | ЛинкедИн👍





Ресурсы

  • Рашка С., Лю Ю., Миржалили В. и Джулгаков Д. (2022). Машинное обучение с помощью PyTorch и Scikit-Learn. Разрабатывайте модели машинного обучения и глубокого обучения с помощью Python. Издательство Пакет.

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.

Если этот пост был полезен, пожалуйста, несколько раз нажмите кнопку аплодисментов 👏, чтобы показать мне свою поддержку 👇