Статьи
July 15

Использование библиотеки missingno для поиска и визуализации пропусков в данных

Исследование и подготовка данных — важные этапы в любом data science. Учебные наборы данных часто создаются таким образом, чтобы упростить работу с ними. Однако в реальном мире данные обычно не идеальны: они могут содержать ошибки, неточности, пропуски и другие проблемы.

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

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

В зависимости от источника данных пропуски могут иметь разные обозначения. Наиболее часто используется NaN (Not a Number), но также можно встретить «NA», «None», «-999», «0», « », «-», «?» и другие варианты.

Если в датафрейме отсутствуют данные и они обозначены не как NaN, то их необходимо преобразовать в NaN. Например, можно использовать следующий код:

df = df.replace('', np.NaN)

Библиотека missingno

Missingno — это удобная и простая в использовании библиотека Python, которая предлагает набор визуализаций для анализа пропусков в датафреймах. В её арсенале есть столбчатые диаграммы, матричные графики, тепловые карты и дендрограммы.

Эти визуализации позволяют легко увидеть, где именно отсутствуют данные, какую часть они занимают от общего объёма и как пропущенные значения связаны между собой. Хотя на первый взгляд пропуски могут не содержать полезной информации, при более внимательном рассмотрении иногда можно обнаружить интересные закономерности.

Библиотеку missingno можно установить с помощью команды pip:

pip install missingno

Набор данных

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

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

Импорт библиотек и загрузка данных

Первым шагом имортируем необходимые библиотеки. В этой статье мы будем работать с pandas для загрузки данных и missingno для визуализации пропусков в них.

import pandas as pd
import missingno as msno

df = pd.read_csv('xeek_train_subset.csv')

Быстрый анализ с помощью Pandas

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

Во-первых, мы можем воспользоваться методом .describe(). Он предоставит нам таблицу со сводной статистикой, включающей средние, максимальные и минимальные значения, а также дисперсию. В верхней части таблицы будет строка с количеством значений для каждого столбца, которая называется counts. Если в этой строке для каждого столбца будут разные значения, то это может указывать на наличие пропусков в данных. В приведённом ниже примере мы видим, что количество значений различается для каждого столбца внутри датафрейма, что может свидетельствовать о наличии пропусков.

Сделаем ещё один шаг и использовать метод .info(), что нам подтвердит наличие пропусков:

Ещё один быстрый метод, который мы можем использовать:

df.isna().sum()

Так мы получим количество пропусков по каждому столбцу. Метод isna() возвращает логический массив с True (если значение является пропуском) и False - если нет. А sum() суммирует элементы в этом массиве (где True будут единицами, а False - нулями), так мы и получим количество пропусков.

Получаем такой результат:

Часть столбцов, а именно WELL, DEPTH_MD, GROUP, GR и LITHOFACIES, не имеют нулевых значений. Во всех остальных пропуски есть.

Использование missingno

В библиотеке missingno есть четыре типа графиков для визуализации полноты данных: столбчатая диаграмма, матричный график, тепловая карта и дендрограмма. Каждый из них имеет свои преимущества для визуализации пропусков.

Давайте рассмотрим каждый из них.

Столбчатая диаграмма

Столбчатая диаграмма – это простой график, на котором каждый столбец представляет собой отдельный признак в наборе данных. Высота столбца показывает, насколько заполнен этот признак, то есть сколько в нём ненулевых значений. Её можно создать, вызвав функцию.

msno.bar(df)

Ось y слева варьируется от 0.0 до 1.0, где 1.0 представляет 100% полноту данных. Т.е. если столбец меньше 1, то значит есть пропуски.

А справа по оси y представлены индексы датафрейма, в правом верхнем углу - максимальный индекс.

Над каждым столбцом прописано общее количество пропусков в нём.

Матричный график

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

msno.matrix(df)

Как и на столбчатом графике мы видим, что в DTS, DCAL и RSHA много пропусков, но тут мы дополнительно понимаем, как эти пропуски распределены.

В правой части графика вы можете увидеть спарклайн, который показывает количество пропусков в данных. Значение спарклайна меняется от 0 (слева от графика) до количества столбцов в исходных данных (справа).

Если в какой-либо строке нет пропусков, то значение спарклайна будет равно 0 и находиться максимально слева. По мере увеличения количества пропусков значение спарклайна также будет увеличиваться.

Тепловая карта

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

  • Значения, близкие к +1, говорят о том, что наличие пропусков в одном столбце связано с наличием пропусков в другом. Чем ближе значение к +1, тем сильнее эта связь.
  • Значения, близкие к -1, означают, что наличие пропусков в одном столбце противоположно наличию пропусков в другом. Если в одном столбце есть пропуски, то в другом их нет, и наоборот.
  • Значения, близкие к 0, указывают на то, что связь между пропусками в столбцах отсутствует.

Тепловую карту можно построить следующим образом:

msno.heatmap(df)

Тут например мы видим, что пропуски в столбце RMED сильно коррелируют с пропусками в столбцах X_LOC, Y_LOC, Z_LOC и RDEP.

Дендрограмма

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

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

Дендрограмма может быть построена так:

msno.dendrogram(df)

Здесь мы видим две важные группы. Первая группа находится справа (DTS, RSHA и DCAL), и в ней много пропусков. Вторая группа расположена слева, в ней остальные столбцы, которые более полные.

LITHOFACIES, GR, GROUP, WELL и DEPTH_MD находятся вместе на нулевой отметке, и в них нет пропусков.

RDEP, Z_LOC, X_LOC и Y_LOC сгруппированы около нулевого значения. RMED находится в той же общей группе, поэтому некоторые пропуски в нём могут быть связаны с этими четырьмя столбцами.

Заключение

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

Источник: Towards Data Science

👉🏻Подписывайтесь на PythonTalk в Telegram 👈🏻

👨🏻‍💻Чат PythonTalk в Telegram💬

🍩 Поддержать канал 🫶