اذهب إلى المحتوى

السؤال

نشر

السلام عليكم

هو انا ازي اقدر مسح بيانات الoutliers بستخدم باثيون ؟

اولان انا اقدر احديد البيانات الoutliers من خلال الكود ده 


q1 = 87.750000
q3 = 190.000000
iqr = q3 - q1

lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
print(f"Lower bound: {lower_bound}")
print(f"upper bound: {upper_bound}")

outliers = []
for x in diabetes['Insulin']:
    if x > upper_bound or x < lower_bound:
        outliers.append(x)

print(outliers)

فا ازي اقدر امسح الoutliers من البيانات نفسها ؟

Recommended Posts

  • 0
نشر

يمكنك استخدام فلترة البيانات بناء على هذه الحدود، و باستخدام الكود الذي كتبته، الخطوة التالية هي إنشاء شرط يستبعد القيم التي تقع خارج النطاق المحدد بهذا الشكل:

import pandas as pd

q1 = 87.750000
q3 = 190.000000
iqr = q3 - q1

lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr

# إزالة القيم الخارجة عن الحدود
filtered_diabetes = diabetes[(diabetes['Insulin'] >= lower_bound) & (diabetes['Insulin'] <= upper_bound)]

# عرض البيانات بعد إزالة الـ outliers
print(filtered_diabetes)

و هنا لدينا الشرط diabetes['Insulin'] >= lower_bound يحتفظ بالقيم التي تساوي أو تزيد عن الحد الأدنى، و الشرط diabetes['Insulin'] <= upper_bound يحتفظ بالقيم التي تساوي أو تقل عن الحد الأقصى، و يتم الجمع بين الشرطين باستخدام العامل المنطقي &.

و نستخدم DataFrame مع الأقواس المربعة [] لفلترة الصفوف بناء على الشرط، و الناتج سيكون DataFrame جديد بدون الـoutliers.

  • 0
نشر

أنت تستخدم طريقة المدى الربيعي (IQR) للكشف عن البيانات الشاذة، وهي طريقة مستخدمة بكثرة وفعالة.

وهناك طرق مختلفة لما تريده، أولها الفهرس المنطقي Boolean Indexing

diabetes = diabetes[(diabetes['Insulin'] >= lower_bound) & (diabetes['Insulin'] <= upper_bound)]

سيتم إنشاء مجموعة بيانات جديدة تسمى diabetes تستبعد الصفوف التي تحتوي على قيم "Insulin" شاذة.

الطريقة الثانية هي باستخدام طريقة drop:

outlier_indices = diabetes[(diabetes['Insulin'] < lower_bound) | (diabetes['Insulin'] > upper_bound)].index
diabetes.drop(outlier_indices, inplace=True)

ستحذف الصفوف التي تحتوي على قيم شاذة من مجموعة البيانات الأصلية diabetes.

الطريقة الثالثة هي من خلال loc:

diabetes.loc[~((diabetes['Insulin'] < lower_bound) | (diabetes['Insulin'] > upper_bound)), :]

ستنشئ مجموعة بيانات جديدة تحتوي فقط على الصفوف التي لا تحتوي على قيم شاذة.

  • 0
نشر

الف شكرااا جدا جدا لحضرتكم

بتاريخ 5 دقائق مضت قال Mustafa Suleiman:

أنت تستخدم طريقة المدى الربيعي (IQR) للكشف عن البيانات الشاذة، وهي طريقة مستخدمة بكثرة وفعالة.

وهناك طرق مختلفة لما تريده، أولها الفهرس المنطقي Boolean Indexing

diabetes = diabetes[(diabetes['Insulin'] >= lower_bound) & (diabetes['Insulin'] <= upper_bound)]

سيتم إنشاء مجموعة بيانات جديدة تسمى diabetes تستبعد الصفوف التي تحتوي على قيم "Insulin" شاذة.

الطريقة الثانية هي باستخدام طريقة drop:

outlier_indices = diabetes[(diabetes['Insulin'] < lower_bound) | (diabetes['Insulin'] > upper_bound)].index
diabetes.drop(outlier_indices, inplace=True)

ستحذف الصفوف التي تحتوي على قيم شاذة من مجموعة البيانات الأصلية diabetes.

الطريقة الثالثة هي من خلال loc:

diabetes.loc[~((diabetes['Insulin'] < lower_bound) | (diabetes['Insulin'] > upper_bound)), :]

ستنشئ مجموعة بيانات جديدة تحتوي فقط على الصفوف التي لا تحتوي على قيم شاذة.

بس انا عندي الLower bound: -65.625 بالسلب يعني هل دي دطبيعي مع العلم البيانات مافهيش قيمه سالب ؟

بتاريخ 11 دقائق مضت قال Mustafa Suleiman:

 

outlier_indices = diabetes[(diabetes['Insulin'] < lower_bound) | (diabetes['Insulin'] > upper_bound)].index
diabetes.drop(outlier_indices, inplace=True)

ستحذف الصفوف التي تحتوي على قيم شاذة من مجموعة البيانات الأصلية diabetes.

يعني مش هحتاح لحفظ ملف جديد ؟

  • 0
نشر
بتاريخ 26 دقائق مضت قال Ail Ahmed:

بس انا عندي الLower bound: -65.625 بالسلب يعني هل دي دطبيعي مع العلم البيانات مافهيش قيمه سالب ؟

نعم من الممكن أن يكون الLower bound قيمة سالبة إذا كنت تستخدم طريقة حساب تعتمد على مقاييس الإحصاء مثل Tukey’s fences ومعادلة ال Lower Bound هي :

Lower Bound = Q1 − 1.5 × IQR

وهذا ممكن بالطبع حسابيا إذا كان الربع الأول قيمة صغيرة كما في المثال الذي لديك حيث ستجد أن q1 أصغر بكثير من q3  ولذلك تأكد 

من الممكن أن تكون هناك خطأ في البيانات التي لديك حيث من الممكن أن توجد الكثير من القيم المفقودة أو قيم شاذة كثيرة مما تسببت في خطأ توزيع البيانات . 

لذلك ليس معني أن القيمة سالبة أنه بالضرورة وجود مشكلة في الحسابات حيث من الممكن أن يكون الأمر طبيعي لا مشكلة.

بتاريخ 49 دقائق مضت قال Ail Ahmed:

يعني مش هحتاح لحفظ ملف جديد ؟

السطر الذي ذكرخ المدرب مصطفى لا يقوم بحفظ التعديلات في ملف جديد ولكن التعديلات تتم فقط في الذاكرة ولن تؤثر على الملف الأساسي.

ولكن إذا أردت حفظ التعديل بعد حذف القيم في ملف جديد يمكنك إستخدام السطر التالي :

diabetes.to_csv('diabetes_cleaned.csv', index=False)

 

  • 0
نشر
بتاريخ 1 دقيقة مضت قال محمد عاطف17:

نعم من الممكن أن يكون الLower bound قيمة سالبة إذا كنت تستخدم طريقة حساب تعتمد على مقاييس الإحصاء مثل Tukey’s fences ومعادلة ال Lower Bound هي :

Lower Bound = Q1 − 1.5 × IQR

وهذا ممكن بالطبع حسابيا إذا كان الربع الأول قيمة صغيرة كما في المثال الذي لديك حيث ستجد أن q1 أصغر بكثير من q3  ولذلك تأكد 

من الممكن أن تكون هناك خطأ في البيانات التي لديك حيث من الممكن أن توجد الكثير من القيم المفقودة أو قيم شاذة كثيرة مما تسببت في خطأ توزيع البيانات . 

لذلك ليس معني أن القيمة سالبة أنه بالضرورة وجود مشكلة في الحسابات حيث من الممكن أن يكون الأمر طبيعي لا مشكلة.

السطر الذي ذكرخ المدرب مصطفى لا يقوم بحفظ التعديلات في ملف جديد ولكن التعديلات تتم فقط في الذاكرة ولن تؤثر على الملف الأساسي.

ولكن إذا أردت حفظ التعديل بعد حذف القيم في ملف جديد يمكنك إستخدام السطر التالي :

diabetes.to_csv('diabetes_cleaned.csv', index=False)

 

الف شكراا لحضرتك جدا 

جزاك الله كل خير

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...