محتويات الدورة

pandas / المتقدم: الملكية والنوافذ والقبول التحليلي / الدرس 16

الذاكرة والإدخال والمعالجة المجزأة المحدودة

تقليل كلفة المدخل والوسيط دون تغيير القواعد العامة أو جمع الإحصاءات الجزئية خطأ.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • تمييز حجم المصدر وتقدير تخزين الأعمدة وذروة ذاكرة العملية.
  • جمع إحصاءات أجزاء قابلة للجمع وحفظ فحوص الهوية العابرة للأجزاء.

لا يتنبأ حجم الملف بذروة الذاكرة

تستهلك ملفات المصدر المضغوطة والمصفوفات المفكوكة والفهارس وكائنات Python والوسائط مقادير ذاكرة مختلفة. قد يخصص دمج أو فرز بنى إضافية رغم اتساع المدخل براحة. تقدم memory_usage(deep=True) تقديراً مفيداً للأعمدة وفق التوثيق، لا ضماناً لإجمالي ذاكرة العملية المقيمة أو ذروة التخصيص. اختر الأعمدة اللازمة وأنواعاً مناسبة متحققة قبل الوسيط الكبير. يجب أن يمثل النوع الأصغر المجال المسموح وسياسة الفقد. لا تصغر معرفاً أو نقداً لتقليل الرقم مع تغيير المعنى أو فيض قيم صالحة.

تحتاج خوارزمية الأجزاء قاعدة جمع صالحة

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

جمع مجاميع وأعداد جزئية معلنة

يقرأ البرنامج أربع كميات اصطناعية بأجزاء حجمها اثنان، ويجمع مجموع كل جزء وعده المرصود. يصبح الإجمالي عشرة والعدد أربعة والمتوسط 2.5. لا يوضح جزءاً كله مفقود أو عد فريد عام، ولم ينفذ في pandas. تقلل dtype وusecols الغموض دون ادعاء تحسين سعة عام. يحتاج القارئ الحقيقي دورة حياة وأخطاء ومصالحة مرفوض. قد يهزم ضم نتيجة متنامية مراراً محدودية الذاكرة؛ فقرر الحالة النهائية المطلوبة بدلاً من حفظ كل جزء تلقائياً.

python جمع مجموع وعد الأجزاء توضيحياً
from io import StringIO
import pandas as pd

source = StringIO('units\n1\n2\n3\n4\n')
partials = []
for chunk in pd.read_csv(source, usecols=['units'], dtype={'units': 'Int64'}, chunksize=2):
    partials.append((int(chunk['units'].sum()), int(chunk['units'].count())))
total = sum(partial[0] for partial in partials)
count = sum(partial[1] for partial in partials)
assert (total, count) == (10, 4)
print(total / count)
الناتج المتوقع
2.5

المتوقع 2.5 لأربع قيم مرصودة؛ ولم يختبر قارئ pandas أو ذاكرته.

إظهار خطأ متوسط المتوسطات محلياً

للمثال القياسي جزء مجموع عشر وعدد اثنين، وآخر مجموع تسعين وعدد واحد. المتوسط المجمع 100/3، بينما متوسط المتوسطين المتساوي الوزن 47.5. سبب الخلاف الوزن، لا دقة pandas. لا ينمذج الحساب ذاكرة المحلل أو DataFrame أو التوازي. استخدمه لبيان قاعدة الجمع قبل تحسين الإدخال. قد يضيف ترتيب جمع العوامات والاستقرار العددي فروقاً أخرى؛ فحدد السماح من عقد القياس، ولا تقبل انحرافاً اعتباطياً بوصفه أثراً لا بد منه للتجزئة.

python مثال مضاد محلي للتجميع الموزون
partials = [(10, 2), (90, 1)]
combined = sum(total for total, _ in partials) / sum(count for _, count in partials)
mean_of_means = sum(total / count for total, count in partials) / len(partials)
assert round(combined, 2) == 33.33
assert mean_of_means == 47.5
print(f'{combined:.2f} {mean_of_means:.2f}')
الناتج المتوقع
33.33 47.50

33.33 المتوسط المجمع المقرب؛ وتزن 47.50 الأجزاء غير المتساوية بالتساوي وتجيب سؤالاً آخر.

اختيار التخزين من نمط الوصول المطلوب

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

الأخطاء الشائعة وإصلاحها

أخذ متوسط الأجزاء بالتساوي رغم اختلاف المرصود.

لماذا يحدث؟
إضاعة قاعدة الجمع المقامات.
كيف تصلحه؟
احفظ المجاميع والأعداد أو الأوزان المقصودة.
كيف تتجنب تكراره؟
اختبر أحجام أجزاء وأعداد فقد مختلفة.

تفرد كل جزء مع تكرار هويات بين الأجزاء.

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

ملف مضغوط صغير يسبب ذروة كبيرة غير متوقعة.

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

اختبر فهمك

1. لماذا لا يكون متوسط متوسطات الأجزاء قاعدة جمع آمنة عامة؟

اعرض الحل المشروح

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

2. هل يثبت chunksize وحده محدودية ذاكرة الخط كله؟

اعرض الحل المشروح

لا؛ قد تنمو المخرجات المتراكمة وحالة المفاتيح والدمج والترتيب مع البيانات. حدد حد كل بنية محفوظة وخوارزمية الجمع. يوضح المثال نمط مجموع وعد صغيراً فقط ولا يقيس الذروة أو صحة كل معالجة خارج الذاكرة.

أهم ما تعلمته

  • تحفظ التجزئة الصحة بعقد جمع عام صالح فقط.
  • يجب أن يحدد تقدير الذاكرة المقاس والمستبعد بدقة.

المراجع الرسمية