مقدمة شاملة للتعامل مع القيم المفقودة

عقدة المصدر: 1121996

تم نشر هذه المقالة كجزء من مدونة علوم البيانات

نبذة

توفر لنا البيانات القدرة على تحليل أحداث المستقبل والتنبؤ بها. مع كل يوم، تتبنى المزيد والمزيد من الشركات تقنيات علم البيانات مثل التنبؤ التنبؤي والتجميع وما إلى ذلك. على الرغم من أنه من المثير للاهتمام الاستمرار في التعلم حول خوارزميات التعلم الآلي والتعلم المعقدة، إلا أنه لا ينبغي للمرء أن ينسى إتقان الأساسيات معالجة البيانات. أحد الأجزاء المهمة في المعالجة المسبقة للبيانات هو التعامل مع القيم المفقودة. هذا دليل كامل حول كيفية التعامل مع الأنواع المختلفة من البيانات المفقودة.

المحتويات

  1. لماذا من المهم التعامل مع القيم المفقودة؟
  2. أسباب فقدان القيم
  3. أنواع القيم المفقودة
  4. تحقق من القيم المفقودة في مجموعة البيانات
  5. تصور القيم المفقودة
  6. إسقاط الصفوف ذات القيم المفقودة
  7. إسقاط الأعمدة ذات القيم المفقودة
  8. الإسناد للمتغيرات المستمرة
    1. الإسناد بالمتوسط
    2. الإسناد مع الوسيط
  9. التنبؤ بالقيم المفقودة باستخدام الانحدار
  10. القيم المفقودة في البيانات الفئوية
  11. القيم المفقودة في بيانات السلاسل الزمنية
    1. تعبئة الأمام للقيم المفقودة
    2. تعبئة القيم المفقودة بشكل خلفي
    3. الاستيفاء الخطي
  12. خوارزميات قوية للقيم المفقودة
  13. وفي الختام

لماذا من المهم التعامل مع البيانات المفقودة؟

تحتوي البيانات الموجودة في العالم الحقيقي على العديد من البيانات المفقودة في معظم الحالات. قد تكون هناك أسباب مختلفة وراء فقدان كل قيمة. قد يكون هناك فقدان أو تلف في البيانات، أو قد تكون هناك أسباب محددة أيضًا. ستؤدي البيانات المفقودة إلى تقليل القدرة التنبؤية لنموذجك. إذا قمت بتطبيق الخوارزميات مع البيانات المفقودة، فسيكون هناك تحيز في تقدير المعلمات. لا يمكنك أن تكون واثقًا من نتائجك إذا لم تتعامل مع البيانات المفقودة.

الأسباب الكامنة وراء القيم المفقودة

هل تساءلت يومًا عن أسباب فقدان البيانات في مجموعات البيانات؟

بعض الأسباب المحتملة وراء فقدان البيانات هي:

  • لا يقدم الأشخاص معلومات بخصوص أسئلة معينة في استطلاع جمع البيانات. على سبيل المثال، قد لا يشعر البعض بالارتياح عند مشاركة المعلومات حول عاداتهم في الرواتب والشرب والتدخين. يتم استبعاد هذه عمدا من قبل السكان
  • في بعض الحالات، يتم تجميع البيانات من مختلف السجلات السابقة المتاحة وليس بشكل مباشر. في هذه الحالة، يعد تلف البيانات مشكلة رئيسية. بسبب قلة الصيانة، تتلف بعض أجزاء البيانات مما يؤدي إلى فقدان البيانات
  • تساهم عدم الدقة أثناء عملية جمع البيانات أيضًا في فقدان البيانات. على سبيل المثال، في الإدخال اليدوي للبيانات، من الصعب تجنب الأخطاء البشرية تمامًا
  • تؤدي عدم اتساق المعدات إلى قياسات خاطئة، والتي بدورها لا يمكن استخدامها.

أنواع القيم المفقودة

يمكن أن تحدث البيانات المفقودة لأسباب مختلفة. يمكننا تصنيفها إلى ثلاث مجموعات رئيسية: مفقودة تمامًا عشوائيًا، ومفقودة عشوائيًا، وغير مفقودة عشوائيًا.

1. مفقود تمامًا عشوائيًا (MCAR)

البيانات المفقودة لا تتبع أي نمط معين، فهي ببساطة عشوائية. إن فقدان هذه البيانات غير مرتبط أو مستقل عن المتغيرات المتبقية. ولا يمكن التنبؤ بهذه القيم مع بقية البيانات المتغيرة. على سبيل المثال، أثناء جمع البيانات، يتم فقدان عينة معينة بسبب الإهمال. وهذه حالة مثالية، حيث لن يكون التحليل متحيزًا إحصائيًا. ولكن لا يجب أن تفترض وجود MCAR إلا إذا كنت متأكدًا تمامًا من أنها حالة نادرة.

2. مفقود عشوائيًا (MAR)

هنا، على عكس MCAR، البيانات مفقودة بين مجموعات فرعية معينة. من الممكن التنبؤ بما إذا كانت البيانات ستكون موجودة/غائبة بمساعدة الميزات الأخرى. لكن لا يمكنك التنبؤ بالبيانات المفقودة بنفسها.

على سبيل المثال، دعونا نفكر في استبيان حول الوقت الذي نقضيه على الإنترنت، والذي يحتوي على قسم حول الوقت الذي نقضيه على منصات مثل Netflix وأمازون برايم. ويلاحظ أن كبار السن (فوق 45 سنة) أقل احتمالا لشغلها من الشباب. هذا مثال على MAR. هنا، تحدد معلمة "العمر" ما إذا كانت البيانات ستكون مفقودة أم لا. يحدث MAR بشكل شائع جدًا مقارنة بـ MCAR.

3. غير مفقود عشوائيًا (NMAR)

وهذا وضع خطير وصعب. لنفترض أن الغرض من الاستطلاع هو قياس الإفراط في استخدام/إدمان وسائل التواصل الاجتماعي. إذا لم يقم الأشخاص الذين يستخدمون وسائل التواصل الاجتماعي بشكل مفرط، بملء الاستبيان عمدًا، فلدينا حالة NMAR. سيؤدي هذا على الأرجح إلى تحيز في النتائج. لن تنجح الطرق المعتادة مثل إسقاط الصفوف/الأعمدة والاحتساب. لحل هذه المشكلة، سيكون من الضروري معرفة متعمقة بالمجال.

الآن بعد أن رأينا الأنواع المختلفة من البيانات المفقودة، دعنا ننتقل إلى الطرق المختلفة للتعامل معها.

تحقق من القيم المفقودة

عندما يكون لديك مجموعة بيانات، فإن الخطوة الأولى هي التحقق من الأعمدة التي تحتوي على بيانات مفقودة وعددها. دعونا نستخدم مجموعة البيانات الأكثر شهرة بين علم البيانات ليتعلم، بالطبع، الناجي من تيتانيك! اقرأ مجموعة البيانات باستخدام وظيفة الباندا read_csv كما هو موضح أدناه.

Train=pd.read_csv('../input/titanic/train.csv') test=pd.read_csv('../input/titanic/test.csv') print('شكل بيانات التدريب:'، Train.shape ) طباعة ("اختبار شكل البيانات:"، test.shape) Train.head()

بيانات القيم المفقودة

المصدر: الصورة من دفتر المؤلف Kaggle

الآن لدينا إطارات بيانات التدريب والاختبار للبيانات العملاقة.

كيفية التحقق من الأعمدة التي تحتوي على بيانات مفقودة وكم عددها؟

يتم استخدام الدالة "isnull()" لهذا الغرض. عند استدعاء الدالة sum مع isnull، يكون الناتج إجماليًا للبيانات المفقودة في كل عمود.

Missing_values=train.isnull().sum() print(missing_values)
معرف الركاب 0 البقاء 0 Pclass 0 الاسم 0 الجنس 0 العمر 177 SibSp 0 Parch 0 تذكرة 0 الأجرة 0 المقصورة 687 الشروع 2 dtype: int64

لاحظ أن هناك ثلاثة أعمدة تحتوي على قيم مفقودة: العمر، والكابينة، والبدء

على الرغم من أننا نعرف عدد القيم المفقودة في كل عمود، إلا أنه من الضروري معرفة النسبة المئوية لها مقابل إجمالي القيم. لذلك، دعونا نحسب ذلك في سطر واحد من التعليمات البرمجية.

Mis_value_percent = 100 * Train.isnull().sum() / len(train) print(mis_value_percent)
معرف الركاب 0.000000 البقاء 0.000000 Pclass 0.000000 الاسم 0.000000 الجنس 0.000000 العمر 19.865320 SibSp 0.000000 Parch 0.000000 تذكرة 0.000000 الأجرة 0.000000 المقصورة 77.104377 0.224467 شرعت 64 dtype: floatXNUMX

ومن الواضح أن 77% من عمود "المقصورة" مفقود، وهي نسبة كبيرة جدًا. العمر لديه حوالي 19% من البيانات المفقودة وEmbarked لديه 0.2% فقط مفقود. هذا هو التحليل الكمي للبيانات المفقودة لدينا. ماذا عن النوعية؟ تابع القراءة!

تصور القيم المفقودة مع Missingno

خمين ما؟ لدينا حزمة بايثون خاصة لتصور واستكشاف البيانات المفقودة لمجموعة البيانات. حزمة بايثون "Missingno". المضي قدما وتثبيته بسرعة

تثبيت النقطة مفقود

باستخدام هذا، يمكننا عمل تصورات في شكل خرائط حرارية، ومخططات شريطية، ومصفوفات. ومن خلال تحليل كيفية توزيعها، يمكنك استنتاج الفئة التي تندرج ضمن MCAR أو MAR أو NMAR. يمكننا أيضًا العثور على ارتباط الأعمدة التي تحتوي على المفقودات بالعمود المستهدف

ابدأ بإنشاء مخطط شريطي للقيم غير الخالية باستخدام وظيفة "bar()" في مكتبة Missingno. لقد قمت بتمرير إطار بيانات الباندا إلى هذه الوظيفة.

استيراد Missno كـ msno msno.bar(train)

مفقود لا | قيم مفقودةالمصدر: الصورة من دفتر المؤلف Kaggle

بعد ذلك، يمكننا رسم تصور المصفوفة. وهذا يساعدنا على معرفة كيفية توزيع البيانات المفقودة من خلال البيانات، أي إذا كانت موضعية أو موزعة بالتساوي، أم أن هناك نمطًا ومثل هذه الأسئلة كثيرة.

msno.matrix(قطار)
شريط النمط

في مخطط المصفوفة، سترى أسطرًا فارغة لكل بيانات مفقودة. لاحظ أن العمود "Embarked" يحتوي فقط على اثنين من البيانات العشوائية المفقودة، والتي لا تتبع أي نمط. ربما فقدوا أثناء الحصول على البيانات. لذلك، يمكن تصنيف هذا على أنه مفقود تمامًا بشكل عشوائي.

من الممكن أن تكون أعمدة العمر والمقصورة MAR. لكننا نريد التأكد من عدم وجود ارتباطات بينهما.

كيف يتم فعل ذلك؟

ومن حسن حظنا أن الحزمة المفقودة لا توفر أيضًا وظيفة "الخريطة الحرارية". باستخدام هذا يمكننا معرفة ما إذا كان هناك أي ارتباطات بين البيانات المفقودة للأعمدة المختلفة.

msno.heatmap(قطار)

يظهر الإخراج!

الخريطة الحرارية | قيمة مفقودة

تُظهر الخريطة الحرارية عدم وجود علاقة قوية بين البيانات المفقودة في عمود العمر والمقصورة. لذلك، يمكن تصنيف البيانات المفقودة من هذه الأعمدة على أنها MAR أو Missing at Random.

أتمنى أن تكون واضحًا بشأن كيفية تحليل القيم المفقودة. بعد ذلك، سأنتقل إلى مناقشة الطرق المختلفة للتعامل مع هذه البيانات المفقودة.

إسقاط الصفوف ذات القيم المفقودة

إنها طريقة بسيطة، حيث نقوم بإسقاط جميع الصفوف التي تحتوي على أي قيم مفقودة تنتمي إلى عمود معين. وبقدر سهولة هذا الأمر، فإنه يأتي مع عيب كبير. قد ينتهي بك الأمر إلى فقدان جزء كبير من بياناتك. سيؤدي هذا إلى تقليل حجم مجموعة البيانات الخاصة بك وجعل تنبؤات النموذج الخاص بك متحيزة. يجب عليك استخدام هذا فقط عندما يكون عدد القيم المفقودة أقل جدًا.

على سبيل المثال، يحتوي العمود "Embarked" على قيمتين مفقودتين فقط. لذلك، يمكننا إسقاط الصفوف التي يكون فيها هذا العمود مفقودًا. اتبع مقتطف التعليمات البرمجية أدناه.

print('مجموعة البيانات قبل :', len(train)) Train.dropna(subset=['Embarked'],how='any',inplace=True) print('مجموعة البيانات بعد :', len(train)) print( 'القيم المفقودة:'،القطار['الشروع'].isnull().sum())
مجموعة البيانات قبل: 891 مجموعة البيانات بعد: 889 القيم المفقودة: 0

تخيل لو أنك فعلت الشيء نفسه بالنسبة لعمود "العمر". ستفقد 77% من بياناتك!

إسقاط الأعمدة

عندما يحتوي عمود على قيم مفقودة كبيرة، فلا فائدة من احتساب القيم بأقل البيانات الحقيقية المتوفرة لدينا. لذا، عندما يكون أي عمود به أكثر من 80% من القيم المفقودة، يمكنك فقط إسقاط هذا العمود من التحليل. في حالتنا، يحتوي "المقصورة" على 77% من البيانات المفقودة، لذا يمكنك اختيار إسقاط هذا العمود.

تأكد من أن العمود المسقط ليس مهمًا لتحليلك. إذا كان الأمر كذلك، فيجب عليك محاولة الحصول على المزيد من البيانات ثم احتساب القيم المفقودة.

الإسناد للمتغير المستمر

قطار['العمر'][:10]
0 22.0 1 38.0 2 26.0 3 35.0 4 35.0 5 NaN 6 54.0 7 2.0 8 27.0 9 14.0 الاسم: العمر، النوع d: float64
قطار['Age']=train['Age'].replace(np.NaN,train['Age'].mean()) Train['Age'][:10]
0 22.000000 1 38.000000 2 26.000000 3 35.000000 4 35.000000 5 29.699118 6 54.000000 7 2.000000 8 27.000000 9 14.000000 الاسم: العمر ، نوع d: float64

يمكنك أن ترى أنه تم استبدال "NaN" بـ 29.699 (المتوسط ​​المحسوب).

يعني الإسناد له عيوب معينة. إذا كانت البيانات ذات توزيع غير متساوٍ للغاية، مع وجود العديد من القيم المتطرفة، فلن يعكس المتوسط ​​التوزيع الفعلي للبيانات. يتأثر المتوسط ​​بشكل كبير بالقيم المتطرفة أو القيم المتطرفة. لذلك، إذا كانت البيانات لا تحتوي على العديد من القيم المتطرفة وتتبع التوزيع شبه الطبيعي، فاستخدم التضمين المتوسط

الإسناد مع الوسيط

يمكن ملء القيم المفقودة للمعلم المستمر بمتوسط ​​القيم غير الخالية المتبقية. وميزة الوسيط هو أنه لا يتأثر بالقيم المتطرفة، على عكس المتوسط. دعونا ننفذها هنا.

قطار['Age']=train['Age'].replace(np.NaN,train['Age'].median()) Train['Age'][:10]

الإسناد مع المتوسط

يمكنك ملاحظة أن القيمة المتوسطة (28.0) قد تم ملؤها بدلاً من قيم NaN.

وبالمثل، يمكنك إجراء إسناد الوضع أيضًا. بشكل عام، يعد التضمين باستخدام الوضع شائعًا للقيم المفقودة الفئوية. سأغطي ذلك بعمق في قسم لاحق

التنبؤ بالقيم المفقودة باستخدام الانحدار

بدلًا من ملء قيمة متوسطة أو متوسطة واحدة في جميع الأماكن، ماذا لو تمكنا من التنبؤ بها بمساعدة المتغيرات الأخرى المتوفرة لدينا؟

نعم! يمكننا استخدام الميزات ذات القيم غير الخالية للتنبؤ بالقيم المفقودة. يمكن بناء نموذج الانحدار أو التصنيف للتنبؤ بالقيم المفقودة. دعونا نطبق هذا على عمود "العمر" في مجموعة البيانات العملاقة لدينا.

يمكننا معالجة البيانات لبناء النموذج. ستكون ميزة "العمر" هي المتغير المستهدف.

x_القطار: تتم تصفية صفوف مجموعة البيانات التي تحتوي على قيمة "العمر" الموجودة. "العمر" هو الهدف x_test: إنه عمود "العمر" الذي يحتوي على قيم غير فارغة

y_train ستحتوي على البيانات التي تحتوي على قيم العمر المفقودة، والتي يجب التنبؤ بها (y_pred)

استيراد الباندا كـ pd data=pd.read_csv('../input/titanic/train.csv') data = data[["Survived"، "Pclass"، "Sex"، "SibSp"، "Parch"، "Fare" ", "Age"]] data["Sex"] = [1 if x=="male" else 0 for x in data["Sex"]] test_data = data[data["Age"].isnull()] data.dropna(inplace=True) x_train = data.drop("Age"، axis=1) x_test = test_data.drop("Age"، axis=1) y_train = data["Age"]

دعونا نلائم نموذج الانحدار الخطي مع هذه البيانات. سأستخدم مكتبة sklearn هنا.

من sklearn.linear_model استيراد نموذج LinearRegression = LinearRegression() model.fit(X_train, y_train) y_pred = model.predict(X_test)

الآن، لدينا القيم الخالية لعمود "العمر" المتوقعة في y_pred.

سأقوم بطباعة بعض الأمثلة على مدخلات الاختبار والمخرجات المتوقعة لفهم أفضل.

طباعة (x_test[:10])
Survived Pclass Sex SibSp Parch أجرة 5 0 3 1 0 0 8.4583 17 1 2 1 0 0 13.0000 19 1 3 0 0 0 7.2250 26 0 3 1 0 0 7.2250 28 1 3 0 0 0 7.8792 29 0 3 1 0 0 7.8958 31 1 1 0 1 0 146.5208 32 1 3 0 0 0 7.7500 36 1 3 1 0 0 7.2292 42 0 3 1 0 0 7.8958

هذه هي الطريقة التي يتم بها تمرير المدخلات إلى نموذج الانحدار. دعونا نلقي نظرة على القيم العمرية المتوقعة.

طباعة (y_pred[:10])
[29.07080066 30.10833306 22.44685065 29.08927347 22.43705181 29.07922599 32.43692984 22.43898701 22.15615704]

يا هلا! لقد حصلنا على القيم.

القيم المفقودة في البيانات الفئوية

لقد رأينا حتى الآن كيفية التعامل مع البيانات الرقمية المفقودة. ماذا لو كانت البيانات مفقودة في حالة الميزة الفئوية؟ على سبيل المثال، تعتبر ميزة "المقصورة" في مجموعة بيانات تيتانيك قاطعة. هنا، لا يمكننا حساب المتوسط ​​والوسيط. لذلك، يمكننا ملء القيم المفقودة بالوضع أو الفئة/الفئة الأكثر تكرارًا.

قطار['Cabin']=train['Cabin'].fillna(train['Cabin'].value_counts().index[0])

عندما تكون نسبة القيم المفقودة أقل، يفضل هذه الطريقة. ولا يسبب خسارة كبيرة للبيانات، وهو ذو صلة إحصائية.

ولكن إذا كان لديك الكثير من القيم المفقودة، فليس من المنطقي أن يتم احتسابها مع الفئة الأكثر شيوعًا. بدلاً من ذلك، دعونا ننشئ فئة منفصلة للقيم المفقودة مثل "غير معروف" أو "غير متاح". سيتم زيادة عدد الفصول بمقدار واحد.

عندما تكون القيم المفقودة من أعمدة فئوية (سلسلة أو رقمية)، فيمكن استبدال القيم المفقودة بالفئة الأكثر شيوعًا. إذا كان عدد القيم المفقودة كبيرًا جدًا، فيمكن استبداله بفئة جديدة.

قطار['Cabin']=قطار['Cabin'].fillna('غير معروف') قطار['Cabin'][:10]

صف المقصورة | ملء غ

إنه يعمل بشكل جيد مع مجموعة بيانات صغيرة. كما أنه يلغي فقدان البيانات عن طريق إضافة فئة فريدة.

كيفية التعامل مع القيم المفقودة في بيانات السلاسل الزمنية؟

يُشار إلى مجموعات البيانات التي يتم جمع المعلومات فيها مع الطوابع الزمنية بطريقة منظمة على أنها بيانات سلاسل زمنية. إذا كانت لديك قيم مفقودة في بيانات السلاسل الزمنية، فمن الواضح أنه يمكنك تجربة أي من الطرق التي تمت مناقشتها أعلاه. ولكن هناك أيضًا بعض الطرق المحددة التي يمكن استخدامها هنا.

للحصول على فكرة، سأقوم بإنشاء مجموعة بيانات وهمية بسيطة.

time= pd.date_range("1/01/2021"، فترات = 10، freq = "W") df = pd.DataFrame(index=time); df["الوحدات المباعة"] = [5.0,4.0,np.nan,np.nan,1.0,np.nan,3.0,6.0,np.nan,2.0]; طباعة (مدافع)

الوحدات المباعة

دعنا ننتقل إلى الأساليب

تعبئة الأمام للقيم المفقودة

سيتم استخدام قيمة الصف التالي لملء القيمة المفقودة. يشير مصطلح "ffill" إلى "الملء الأمامي". إنه سهل التنفيذ للغاية. عليك فقط تمرير معلمة "الطريقة" كـ "ffill" في وظيفة fillna().

Forward_filled=df.fillna(method='ffill') طباعة(forward_filled)

مليئة إلى الأمام

تعبئة القيم المفقودة بشكل خلفي

هنا، نستخدم قيمة الصف السابق لملء القيمة المفقودة. يشير "bfill" إلى التعبئة الخلفية. هنا، تحتاج إلى تمرير "bfill" كمعلمة للأسلوب.

backward_filled=df.fillna(method='bfill') طباعة(backward_filled)

شغل الخلفية

أتمنى أن تتمكن من اكتشاف الفرق في كلتا الحالتين من خلال الصور أعلاه.

الاستيفاء الخطي

تحتوي بيانات السلاسل الزمنية على الكثير من الاختلافات. إن الطرق المذكورة أعلاه للاحتساب باستخدام الردم والتعبئة الأمامية ليست أفضل حل ممكن. الاستيفاء الخطي للإنقاذ!

هنا، يتم ملء القيم بقيم متزايدة أو متناقصة. إنه نوع من أسلوب التضمين الذي يحاول رسم علاقة خطية بين نقاط البيانات. ويستخدم القيم غير الخالية المتاحة لحساب النقاط المفقودة.

محرف = df.interpolate (limit_direction = "كلا") طباعة (محرف)

الاستيفاء الخطي للقيم المفقودة

قارن هذه القيم بالتعبئة الخلفية والأمامية وتحقق بنفسك من القيمة الجيدة!

هذه بعض الطرق الأساسية للتعامل مع القيم المفقودة في بيانات السلاسل الزمنية

خوارزميات قوية للقيم المفقودة

هناك بعض الحالات، حيث لا يعمل أي مما سبق بشكل جيد. ومع ذلك، تحتاج إلى إجراء تحليل. بعد ذلك، يجب عليك اختيار الخوارزميات التي تدعم القيم المفقودة. KNN (أقرب جيران K) هي إحدى هذه الخوارزميات. سوف يأخذ في الاعتبار القيم المفقودة من خلال أخذ غالبية قيم K الأقرب. تعد الغابة العشوائية أيضًا قوية بالنسبة للبيانات الفئوية ذات القيم المفقودة. تدعم العديد من الخوارزميات المستندة إلى شجرة القرار مثل XGBoost وCatboost البيانات ذات القيم المفقودة.

وفي الختام

لتلخيص ذلك، فإن الخطوة الأولى هي استكشاف البيانات ومعرفة المتغيرات التي تحتوي على بيانات مفقودة، وما هي النسبة المئوية، والفئة التي تنتمي إليها. بعد ذلك، سيكون لديك فكرة استراتيجية عن الأساليب التي يمكنك تجربتها. نصيحة مفيدة هي تجربة التضمين باستخدام خوارزمية جار أقرب K بعيدًا عن نموذج الانحدار الخطي. هناك بعض الطرق الحديثة التي يمكنك البحث عنها مثل استخدام أساليب Datawig أو Hot-Deck Imputation إذا لم تنجح الطرق المذكورة أعلاه.

آمل أن تكونوا قد أحببت القراءة.

يمكنك التواصل معي على: [البريد الإلكتروني محمي]

لينكدإن: معالجة مسبقة للبيانات

الوسائط الموضحة في هذه المقالة ليست مملوكة لشركة Analytics Vidhya ويتم استخدامها وفقًا لتقدير المؤلف.

المصدر: https://www.analyticsvidhya.com/blog/2021/10/end-to-end-introduction-to-handling-missing-values/

الطابع الزمني:

اكثر من تحليلات Vidhya