Использование библиотеки 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 👈🏻