pandas / المتقدم: الملكية والنوافذ والقبول التحليلي / الدرس 17
الخطوط القابلة للتكرار واختبارات القبول
ربط عقود التحويل الصريحة بنتائج متوقعة مستقلة وفحوص بيانات وصفية وأدلة مصدر قابلة للتكرار.
في هذه الصفحة
أهداف الدرس
- تصميم تحويلات صغيرة بمدخل وناتج وسلوك تعديل واضح.
- استخدام فحوص قيمة ونوع وفهرس وتغطية تناسب الادعاء التحليلي.
إظهار مسؤولية كل تحويل
يسمي الخط القابل للتكرار إصدار المصدر والمخطط المقبول ووحدة الصف وسياسة المفاتيح والوحدات وترتيب التحويلات. ركز كل دالة على عملية ذات معنى مثل تحقق أو إجمالي سطر أو ملخص مسمى. حدد إعادة إطار جديد أو تعديل المدخل. لا تحسن pipe القراءة إلا مع بقاء العقود مفهومة؛ ولا تجعل الحالة العامة أو الآثار الاعتباطية قابلة للتكرار. تجنب الاعتماد على تشغيل خلية سابقة. ينبغي أن تختار الإعادة العقد وإصدار الحساب نفسيهما، أو توثق سبب تغير النتيجة المقبولة صراحة.
مقارنة نتيجة معلنة كاملة
يحسب الخط التوضيحي إجمالي السطر، ويرتب بالصنف، ويعيد فهرس العرض فقط. تقارن assert_frame_equal الإطار المتوقع كاملاً مع فحص النوع والصحيح الدقيق. يبنى المتوقع مستقلاً من نتيجة الصنفين المعلنة، لا بتكرار التحويل. افحص ترتيب الأعمدة وأسماء الفهرس وبيانات الفئات والمنطقة حين تدخل العقد. قد يخفي تخفيف فحص لإسكات فشل تغير مخطط مهماً. لا ينفذ البرنامج لغياب pandas؛ فتصف تأكيداته اختبار القبول المقصود دون الادعاء بأنه نجح.
import pandas as pd
from pandas.testing import assert_frame_equal
def calculate(frame):
return frame.assign(line_total=lambda value: value['units'] * value['price']).sort_values('item').reset_index(drop=True)
source = pd.DataFrame({'item': ['I2', 'I1'], 'units': [3, 2], 'price': [7, 5]})
result = source.pipe(calculate)
expected = pd.DataFrame({'item': ['I1', 'I2'], 'units': [2, 3], 'price': [5, 7], 'line_total': [10, 21]})
assert_frame_equal(result, expected, check_dtype=True, check_exact=True)
print(result['line_total'].tolist())
[10, 21]
المتوقع [10,21] بالمخطط والترتيب المعلنين؛ ولم تنفذ assert_frame_equal.
اختيار السماح والترتيب من المعنى
تناسب المساواة الدقيقة هويات وأعداداً صحيحة كثيرة، وقد تحتاج العوامات سماحاً نسبياً ومطلقاً مبرراً. ليس السماح المريح خطأ قياس مقبولاً تلقائياً. لا يجوز تجاهل ترتيب الصفوف إلا إذا لم يرتب الناتج دلالياً وتحققت مطابقة الهويات. قد تؤثر check_like مقارنة المحاور، ولا ينبغي أن تخفي تسميات مكررة أو كيانات غائبة. اختبر المفقود والنوع عمداً، لا بتحويل الجميع نصوصاً. قد يفقد CSV متطابق ظاهرياً منطقة أو فئة؛ فقارن النتيجة المنظمة قبل التسلسل عند أهميتهما.
فحص تحويل يحفظ المصدر باستقلال
يحسب النموذج القياسي السجلات العادية ويرتبها مع لقطة لقواميس المدخل، ويتحقق من ترتيب الصنف المتوقع وثبات قيم الأصل. يثبت ذلك عقداً وظيفياً صغيراً دون محاكاة مساواة DataFrame أو CoW أو الأنواع. أدرج وحدة فاسدة وهوية مكررة ومرجعاً غائباً وحد وقت في قبول أوسع عندما تتصل بالتحويل. فضل اختبار عيب محتمل على تأكيدات تعيد التنفيذ. أبق البيانات صغيرة ليشتق المراجع المتوقع دون تشغيل الشفرة نفسها مجدداً.
source = [{'item': 'I2', 'units': 3, 'price': 7}, {'item': 'I1', 'units': 2, 'price': 5}]
snapshot = [dict(row) for row in source]
result = sorted([{**row, 'line_total': row['units'] * row['price']} for row in source], key=lambda row: row['item'])
assert source == snapshot
assert [row['line_total'] for row in result] == [10, 21]
print([row['item'] for row in result])
['I1', 'I2']
يحفظ تحويل السجلات المدخل والترتيب المتوقع، ولا يختبر تساوي pandas أو CoW.
الإبلاغ عن النطاق الذي اختبر فعلاً
سجل هوية البيانات والمتوقع والمرصود وإصدارات البيئة والحدود غير المختبرة. يثبت تحليل الصيغة بنية Python فقط، لا استيراد pandas أو مطابقة دلالتها. ينفذ المقرر النماذج والمحللات القياسية فقط، وكل برامج pandas runnable:false. لا تثبت تبعية أو محرك ولا تستخدم بيانات حقيقية أو خدمة. عند تغير الشفرة أعد فحوص الادعاء المتغير واحفظ الدليل، ولا توسع نجاحاً ضيقاً إلى اعتماد شامل. تجعل قابلية التكرار النتيجة قابلة للمراجعة؛ وتبقى الصلاحية معتمدة على عقد العمل.
الأخطاء الشائعة وإصلاحها
مقارنة النتيجة باستدعاء آخر للتنفيذ نفسه فقط.
- لماذا يحدث؟
- غياب قاعدة توقع مستقلة.
- كيف تصلحه؟
- اشتق جدولاً صغيراً متوقعاً من العقد.
- كيف تتجنب تكراره؟
- اختر بيانات يمكن اشتقاق نتيجتها يدوياً.
تعطيل فحص النوع والفهرس لإنجاح الاختبار فقط.
- لماذا يحدث؟
- اعتبار اختلاف عقد مهم ضجيج عرض.
- كيف تصلحه؟
- حدد قبول الاختلاف ولا تطبع إلا بقاعدة موثقة.
- كيف تتجنب تكراره؟
- حدد السماح ومتطلبات البيانات الوصفية صراحة.
الإبلاغ عن فحص صيغة فقط كتشغيل pandas ناجح.
- لماذا يحدث؟
- الخلط بين الدليل الساكن والتشغيلي.
- كيف تصلحه؟
- أبلغ عن الفحوص الدقيقة واحفظ حدود المحرك غير المنفذ.
- كيف تتجنب تكراره؟
- افصل سجلات النموذج والمحلل وتشغيل pandas.
اختبر فهمك
1. لماذا يعد تحويل الإطارين نصوصاً اختبار مساواة عاماً ضعيفاً؟
اعرض الحل المشروح
قد يخفي فروق النوع والمفقود والمنطقة والفئة المؤثرة لاحقاً. قارن القيم والبنية المطلوبة بواجهة اختبار مناسبة في بيئة متوافقة. وإذا قصد التنسيق فقط، فحدد الادعاء الضيق ولا تسمه تكافؤاً تحليلياً.
2. هل تجيب النتيجة القابلة للتكرار السؤال التجاري الصحيح تلقائياً؟
اعرض الحل المشروح
لا؛ قد يكرر الخط وحدة أو مقاماً أو فترة خاطئة بثبات. تدعم القابلية التدقيق، وتحتاج الصلاحية قواعد مستقلة. احفظ أدلة المصدر والإصدار وقبول المجتمع والمقياس، كي لا تخلط جواباً خاطئاً ثابتاً بموثوق.
أهم ما تعلمته
- تجعل القيم والبيانات الوصفية المتوقعة المستقلة القبول ذا معنى.
- تحتاج قابلية التكرار والصلاحية التحليلية أدلة مختلفة.