Грязные наборы данных? Отсутствуют значения? missingno
предоставляет небольшой набор гибких и простых в использовании инструментов для визуализации недостающих данных и утилит, которые позволяют вам быстро получить визуальную сводку о полноте (или ее отсутствии) вашего набора данных. Просто pip install missingno
чтобы начать.
В этом кратком руководстве используется образец набора данных набора данных о дорожно-транспортных происшествиях полиции Нью-Йорка.
import pandas as pd
collisions = pd . read_csv ( "https://raw.githubusercontent.com/ResidentMario/missingno-data/master/nyc_collision_factors.csv" )
matrix
Матрица недействительности msno.matrix
— это отображение с высокой плотностью данных, которое позволяет быстро визуально выявлять закономерности в дополнении данных.
import missingno as msno
% matplotlib inline
msno . matrix ( collisions . sample ( 250 ))
На первый взгляд, дата, время, распределение травм и вклад первого транспортного средства кажутся полностью заполненными, тогда как географическая информация кажется в основном полной, но более разрозненной.
Спарклайн справа обобщает общую форму полноты данных и указывает строки с максимальным и минимальным нулевым значением в наборе данных.
Эта визуализация позволяет удобно разместить до 50 помеченных переменных. После этого метки диапазонов начинают перекрываться или становятся нечитаемыми, и по умолчанию большие дисплеи их пропускают.
Если вы работаете с данными временных рядов, вы можете указать периодичность, используя параметр ключевого слова freq
:
null_pattern = ( np . random . random ( 1000 ). reshape (( 50 , 20 )) > 0.5 ). astype ( bool )
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' )
bar
msno.bar
— это простая визуализация недействительности по столбцу:
msno . bar ( collisions . sample ( 1000 ))
Вы можете переключиться на логарифмическую шкалу, указав log=True
. bar
предоставляет ту же информацию, что и matrix
, но в более простом формате.
heatmap
Тепловая карта missingno
корреляции без корреляции измеряет корреляцию нулевых значений: насколько сильно присутствие или отсутствие одной переменной влияет на присутствие другой:
msno . heatmap ( collisions )
В этом примере кажется, что отчеты, которые хранятся с переменной OFF STREET NAME
, с меньшей вероятностью будут содержать полные географические данные.
Корреляция нулевых значений варьируется от -1
(если одна переменная появляется, а другая определенно нет) до 0
(появляющиеся или не появляющиеся переменные не влияют друг на друга) до 1
(если одна переменная появляется, другая определенно тоже влияет).
Точный используемый алгоритм:
import numpy as np
# df is a pandas.DataFrame instance
df = df . iloc [:, [ i for i , n in enumerate ( np . var ( df . isnull (), axis = 'rows' )) if n > 0 ]]
corr_mat = df . isnull (). corr ()
Переменные, которые всегда заполнены или всегда пусты, не имеют значимой корреляции и поэтому автоматически удаляются из визуализации — в этом случае, например, столбцы даты и номера травмы, которые полностью заполнены, не включаются.
Записи, отмеченные <1
или >-1
имеют корреляцию, близкую к строго отрицательной или положительной, но все же не совсем таковую. Это указывает на небольшое количество ошибочных записей в наборе данных. Например, в этом наборе данных корреляция между VEHICLE CODE TYPE 3
и CONTRIBUTING FACTOR VEHICLE 3
равна <1
, что указывает на то, что, вопреки нашим ожиданиям, есть несколько записей, которые имеют одно или другое, но не оба. Эти случаи потребуют особого внимания.
Тепловая карта отлично подходит для выявления взаимосвязей полноты данных между парами переменных, но ее объяснительная сила ограничена, когда речь идет о более крупных взаимосвязях, и она не имеет особой поддержки для чрезвычайно больших наборов данных.
dendrogram
Дендрограмма позволяет более полно коррелировать завершение переменных, выявляя тенденции более глубокие, чем парные, видимые на тепловой карте корреляции:
msno . dendrogram ( collisions )
Дендрограмма использует алгоритм иерархической кластеризации (любезно предоставленный scipy
) для сопоставления переменных друг с другом посредством их нулевой корреляции (измеренной в терминах двоичного расстояния). На каждом шаге дерева переменные разделяются в зависимости от того, какая комбинация минимизирует расстояние до оставшихся кластеров. Чем монотоннее набор переменных, тем ближе их общее расстояние к нулю и тем ближе их среднее расстояние (ось Y) к нулю.
Точный используемый алгоритм:
from scipy . cluster import hierarchy
import numpy as np
# df is a pandas.DataFrame instance
x = np . transpose ( df . isnull (). astype ( int ). values )
z = hierarchy . linkage ( x , method )
Чтобы интерпретировать этот график, прочтите его сверху вниз. Листья кластера, соединенные друг с другом на нулевом расстоянии, полностью предсказывают присутствие друг друга: одна переменная всегда может быть пустой, когда заполнена другая, или они всегда могут быть обе заполнены или обе пусты, и так далее. В этом конкретном примере дендрограмма объединяет переменные, которые необходимы и, следовательно, присутствуют в каждой записи.
Листья кластера, которые расщепляются близко к нулю, но не до него, очень хорошо, но все же несовершенно, предсказывают друг друга. Если ваша собственная интерпретация набора данных заключается в том, что эти столбцы на самом деле совпадают или должны совпадать друг с другом по нулевой величине (например, как должно быть указано в столбцах CONTRIBUTING FACTOR VEHICLE 2
и VEHICLE TYPE CODE 2
), то высота листа кластера говорит вам: в абсолютном выражении, как часто записи «не совпадают» или поданы неправильно, то есть сколько значений вам придется заполнить или отбросить, если вы того пожелаете.
Как и в случае с matrix
, в этой конфигурации будет удобно отображаться только до 50 помеченных столбцов. Однако dendrogram
более элегантно обрабатывает чрезвычайно большие наборы данных, просто переключаясь в горизонтальную конфигурацию.
Более подробную информацию о конфигурации ваших графиков можно найти в файле CONFIGURATION.md
в этом репозитории.
Мысли о функциях или отчеты об ошибках см. в разделе «Проблемы». Если вы хотите внести свой вклад в эту библиотеку, см. подробную информацию об этом в файле CONTRIBUTING.md
в этом репозитории. При этом имейте в виду, что missingno
в настоящее время находится в состоянии обслуживания, поэтому, хотя исправления ошибок приветствуются, я вряд ли буду просматривать или внедрять какие-либо новые основные функции библиотеки.