كيفية إزالة القيم المتطرفة في بايثون
القيمة المتطرفة هي ملاحظة بعيدة بشكل غير طبيعي عن القيم الأخرى في مجموعة البيانات. يمكن أن تكون القيم المتطرفة مشكلة لأنها يمكن أن تؤثر على نتائج التحليل.
يشرح هذا البرنامج التعليمي كيفية تحديد وإزالة القيم المتطرفة في بايثون.
كيفية تحديد القيم المتطرفة في بايثون
قبل أن تتمكن من إزالة القيم المتطرفة، يجب عليك أولاً أن تقرر ما تعتبره قيمًا متطرفة. هناك طريقتان شائعتان للقيام بذلك:
1. استخدم المدى الربيعي.
النطاق الربيعي (IQR) هو الفرق بين المئين الخامس والسبعين (Q3) والمئين الخامس والعشرين (Q1) في مجموعة البيانات. وهو يقيس توزيع متوسط 50% من القيم.
يمكنك تعريف الملاحظة على أنها قيمة متطرفة إذا كانت 1.5 مرة من النطاق الربيعي فوق الربع الثالث (Q3) أو 1.5 مرة من المدى الربيعي أسفل الربع الأول (Q1).
القيم المتطرفة = الملاحظات > Q3 + 1.5*IQR أو Q1 – 1.5*IQR
2. استخدم درجات z.
تخبرك النتيجة z بعدد الانحرافات المعيارية لقيمة معينة عن المتوسط. نستخدم الصيغة التالية لحساب درجة z:
ض = (X – μ) / σ
ذهب:
- X هي قيمة بيانات أولية واحدة
- μ هو متوسط عدد السكان
- σ هو الانحراف المعياري للسكان
يمكنك تعريف الملاحظة على أنها قيمة متطرفة إذا كانت درجة z الخاصة بها أقل من -3 أو أكبر من 3.
القيم المتطرفة = الملاحظات ذات الدرجات z > 3 أو < -3
كيفية إزالة القيم المتطرفة في بايثون
بمجرد أن تقرر ما تعتبره قيمًا متطرفة، يمكنك بعد ذلك تحديدها وإزالتها من مجموعة البيانات. لتوضيح كيفية القيام بذلك، سوف نستخدم DataFrame الباندا التالية:
import numpy as np import pandas as pd import scipy.stats as stats #create dataframe with three columns 'A', 'B', 'C' np.random.seed(10) data = pd.DataFrame(np.random.randint(0, 10, size=(100, 3)), columns=['A', 'B', 'C']) #view first 10 rows data[:10] ABC 0 13.315865 7.152790 -15.454003 1 -0.083838 6.213360 -7.200856 2 2.655116 1.085485 0.042914 3 -1.746002 4.330262 12.030374 4 -9.650657 10.282741 2.286301 5 4.451376 -11.366022 1.351369 6 14.845370 -10.798049 -19.777283 7 -17.433723 2.660702 23.849673 8 11.236913 16.726222 0.991492 9 13.979964 -2.712480 6.132042
يمكننا بعد ذلك تحديد القيم المتطرفة وإزالتها باستخدام طريقة z-score أو طريقة المدى الرباعي:
طريقة النتيجة Z:
#find absolute value of z-score for each observation z = np.abs(stats.zscore(data)) #only keep rows in dataframe with all z-scores less than absolute value of 3 data_clean = data[(z<3).all(axis=1)] #find how many rows are left in the dataframe data_clean.shape (99.3)
طريقة المدى الربعي:
#find Q1, Q3, and interquartile range for each column Q1 = data.quantile(q=.25) Q3 = data.quantile(q=.75) IQR = data.apply(stats.iqr) #only keep rows in dataframe that have values within 1.5*IQR of Q1 and Q3 data_clean = data[~((data < (Q1-1.5*IQR)) | (data > (Q3+1.5*IQR))).any(axis=1)] #find how many rows are left in the dataframe data_clean.shape (89.3)
يمكننا أن نرى أن طريقة درجة za حددت وأزالت ملاحظة واحدة باعتبارها قيمًا متطرفة، في حين حددت طريقة النطاق الرباعي وأزلت 11 ملاحظة في المجموع باعتبارها قيمًا متطرفة.
متى يتم إزالة القيم المتطرفة
في حالة وجود واحد أو أكثر من القيم المتطرفة في بياناتك، يجب عليك أولاً التأكد من أنها ليست نتيجة لخطأ في إدخال البيانات. في بعض الأحيان يقوم الفرد ببساطة بإدخال قيمة بيانات خاطئة أثناء حفظ البيانات.
إذا تبين أن القيمة المتطرفة هي نتيجة لخطأ في إدخال البيانات، فيمكنك أن تقرر تعيين قيمة جديدة لها مثل المتوسط أو الوسيط لمجموعة البيانات.
إذا كانت القيمة قيمة متطرفة حقًا، فيمكنك اختيار إزالتها إذا كان لها تأثير كبير على تحليلك الإجمالي. فقط تأكد من الإشارة في تقريرك أو تحليلك النهائي إلى أنك قمت بإزالة القيم المتطرفة.
مصادر إضافية
إذا كنت تعمل مع متغيرات متعددة في وقت واحد، فقد ترغب في استخدام مسافة Mahalanobis للكشف عن القيم المتطرفة.