Инструмент визуализации отсутствующих значений данных-missingno

машинное обучение
Инструмент визуализации отсутствующих значений данных-missingno

Это 27-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления

задний план

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

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

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

В зависимости от источника данных пропущенные значения могут быть представлены по-разному. Наиболее распространенным является NaN (не число), однако другие варианты могут включать "NA", "None", "999", "0", " ", "-". Если отсутствующие данные представлены не-NaN в кадре данных, вам следует использоватьnp.NaNпреобразовать его в NaN (df.replace('', np.NaN)).

Введение

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

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

Установить

pip install missingno

Загрузить образец набора данных

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

import pandas as pd
collisions = pd.read_csv("https://raw.githubusercontent.com/ResidentMario/missingno-data/master/nyc_collision_factors.csv")

матрица-матрица

msno.matrixНулевая матрица — это экран с интенсивным использованием данных, который позволяет быстро и интуитивно выбирать примеры из всех ваших данных.

import missingno as msno
%matplotlib inline
msno.matrix(collisions.sample(250))

image.png

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

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

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

Если вы работаете с данными временных рядов, вы можете указать периодичность с помощью аргумента ключевого слова freq:

import numpy as np

null_pattern = (np.random.random(1000).reshape((50, 20)) > 0.5).astype(bool)
# 将所有的Flase转换为None
null_pattern = pd.DataFrame(null_pattern).replace({False: None})
msno.matrix(null_pattern.set_index(pd.period_range('1/1/2011', '2/1/2015', freq='M')) , freq='BQ')

image.png

Бар-бар

msno.barпредставляет собой простую визуализацию нулевых значений по столбцам.

msno.bar(collisions.sample(1000))

image.png

Вы можете указатьlog=TrueПереключиться на логарифмическую шкалу. bar предоставляет ту же информацию в виде матрицы, но в более простом формате.

msno.bar(collisions.head(1000), log=True)

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

Тепловая карта отсутствия корреляции измеряет нулевую корреляцию, степень, в которой присутствие или отсутствие одной переменной влияет на присутствие другой переменной.

msno.heatmap(collisions)

image.png

В этом случае, кажется, используетсяOFF STREET NAMEОтчеты по архивам переменных вряд ли будут содержать полные географические данные.

Нулевые корреляции варьируются от -1 (если одна переменная присутствует, то другая наверняка отсутствует) до 0 (переменные присутствуют или отсутствуют, не влияют друг на друга) до 1 (если присутствует одна переменная, другая обязательно будет слишком большой). ).

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

Например, в этом примере столбцы DateTime и Injured вообще не содержат пустых значений и не отображаются на диаграмме.

отметить как<1или>-1Записи имеют близкие к полностью отрицательные или положительные корреляции, но все же не совсем, что позволяет предположить, что небольшое количество записей в наборе данных ошибочно (грязные данные).

Например, в этом наборе данныхVEHICLE CODE TYPE 3иCONTRIBUTING FACTOR VEHICLE 3корреляция между<1, что показывает, что, вопреки нашим ожиданиям, есть записи, которые имеют одно или другое, но не оба. Эти ситуации требуют особого внимания.

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

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

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

msno.dendrogram(collisions)

image.png

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

Если несколько столбцов сгруппированы вместе на нулевом уровне, наличие пустых значений в одном из столбцов напрямую связано с наличием пустых значений в других столбцах. Чем больше разделены столбцы в дереве, тем меньше вероятность того, что столбцы связаны с нулевыми значениями. Крайний правый столбец на изображении выше (DATE、TIME、LOCATION、LATITUDEи т. д.) представляют собой один класс с нулевым расстоянием друг от друга (поскольку ни в одном из них нет пропущенных данных).

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

Чтобы интерпретировать эту диаграмму, прочитайте ее сверху вниз.

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

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

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

Если ваша собственная интерпретация набора данных заключается в том, что столбцы фактически или должны соответствовать друг другу в нулевых значениях (например,CONTRIBUTING FACTOR VEHICLE 2иVEHICLE TYPE CODE 2должно совпадать), тоВысоту лепестков выражают в абсолютной величине, фиксируя частоту «несоответствия» или неправильной подшивки., т. е. сколько значений вам нужно заполнить или отбросить, если вы так думаете.

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

Суммировать

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

Справочная документация