مجموعات بيانات فوضوية؟ القيم المفقودة؟ يوفر 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
) لربط المتغيرات ببعضها البعض من خلال ارتباط العدم بينها (يتم قياسه من حيث المسافة الثنائية). في كل خطوة من الشجرة، يتم تقسيم المتغيرات بناءً على المجموعة التي تقلل مسافة المجموعات المتبقية. كلما كانت مجموعة المتغيرات رتيبة، كلما اقتربت المسافة الإجمالية بينها وبين الصفر، وكلما اقترب متوسط المسافة (المحور الصادي) من الصفر.
الخوارزمية الدقيقة المستخدمة هي:
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
في حالة صيانة حاليًا، لذلك على الرغم من الترحيب بإصلاحات الأخطاء، فمن غير المرجح أن أقوم بمراجعة أو الحصول على أي ميزات مكتبة رئيسية جديدة.