ชุดข้อมูลที่ยุ่งเหยิง? ค่าที่หายไป? missingno
มีชุดเครื่องมือขนาดเล็กที่มีความยืดหยุ่นและใช้งานง่ายในการแสดงภาพข้อมูลและยูทิลิตีที่ขาดหายไป ซึ่งช่วยให้คุณได้รับภาพสรุปความสมบูรณ์ (หรือขาดหายไป) ของชุดข้อมูลของคุณได้อย่างรวดเร็ว เพียง pip install missingno
เพื่อเริ่มต้น
การเริ่มต้นอย่างรวดเร็วนี้ใช้ตัวอย่างของชุดข้อมูล NYPD Motor Vehicle Collisions
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
มีแนวโน้มน้อยที่จะมีข้อมูลทางภูมิศาสตร์ที่สมบูรณ์
ความสัมพันธ์แบบ Nullity มีตั้งแต่ -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
อยู่ในสถานะบำรุงรักษา ดังนั้นแม้จะยินดีแก้ไขจุดบกพร่อง แต่ฉันไม่น่าจะตรวจสอบหรือนำฟีเจอร์สำคัญใหม่ๆ ของไลบรารีมาใช้