أكثر

هل تستخدم Python لحساب عدد السجلات وإظهار الفرق في ArcGIS Desktop؟

هل تستخدم Python لحساب عدد السجلات وإظهار الفرق في ArcGIS Desktop؟


أحاول العثور على مثال لبرنامج نصي من Python لـ ArcGIS 10.1 والذي سيحصل على عدد من فئة المعالم (FC) في ArcSDE الخاص بي ويحصل على عدد FC في تحديث قاعدة البيانات الجغرافية للملف الوارد ثم كتابة الاختلاف في ملف السجل . نحصل على تحديثات شهرية من البائع. على سبيل المثال ، Wells FC ، وتريد أن تكون قادرًا على مقارنة أعداد السجلات وتسجيل الفرق (a-b = C). لدي الآن برنامج نصي يسجل وقت البدء ، والحصول على العد ، والاقتطاع ، والإلحاق ، وإعادة بناء الفهرس.


إليك سطر واحد للحصول على عدد السجلات في FC أو جدول معين:

count = sum (1 للصف في arcpy.da.SearchCursor (r'C:  PATH  TO  FC '، [' OID @ ']))

يمكنك تجربة GetCount_management.

استيراد arcpy من arcpy import env.workspace = "C: /Path/to.gdb" count = int (arcpy.GetCount_management ("FC"). getOutput (0))

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

استيراد arcpy من نظام التشغيل استيراد mkdir من إغلاق استيراد rmtree def مقارنة (): old = arcpy.GetParameterAsText (0) old_path = old + '' arcpy.env.workspace = old_fds = arcpy.ListDatasets () new = arcpy.GetParameterAsText (1) arcpy.env.workspace = new new_path = new + '' new_fds = arcpy.ListDatasets () لـ old_fd، new_fd في الرمز البريدي (old_fds، new_fds): old_fcs = arcpy.ListFeatureClasses (feature_dataset = old_fd) new_fd .ListFeatureClasses (feature_dataset = new_fd) base = old_path + old_fd + '' test = new_path + new_fd + '' لـ old_fc ، new_fc في zip (old_fcs ، new_fcs): base_features = base + old_fc test_features = test + new_features = 'OBJECTID' Compar_type = 'ALL' xy_tolerance = '0.001 FEET' m_tolerance = 0 z_tolerance = 0 attribute_tolerance = "omit_field =" continue_compare = 'CONTINUE_COMPARE' "قارن_file = scratch_dir + '' + arc_tolerance = '. . FeatureCompare_management (base_features، test_features، sort_field، Compar_type، "، xy_tolerance، m_tolerance، z_tolerance، attribute_tolerance، omit_field، continue_compare، Compare_file) in_rows = scratch_dir + '' + new_fc + '.txt' out_path = scratch_dir out_name = new_fc + '.dbf' dbfs = arcpy.TableToTable_owsversion (dbfs) في dbfs: field = 'FEATURECL' newfield = arcpy.AddField_management (dbf، field، 'TEXT'، "،"، 100) cursor = arcpy.UpdateCursor (newfield) للصف في المؤشر: row.setValue (field، new_fc) cursor .updateRow (row) def listmerge (): arcpy.env.workspace = scratch_dir listTable = arcpy.ListTables ('*. dbf'، 'dBASE') arcpy.Merge_management (listTable، final_dir + '' + "output.dbf ") rmtree (scratch_dir) output_dir = arcpy.GetParameterAsText (2) scratch_dir = output_dir + '' +" scratch "final_dir = output_dir + '' +" output "mkdir (scratch_dir) mkdir (final_dir) قارن () listmerge ()

التحول الجغرافي: WGS_1984_ (ITRF00) _To_NAD_1983 مقابل NAD_1983_To_WGS_1984_1 (وغيرها)

أعمل مؤخرًا على بعض مجموعات البيانات المتعلقة بمحطات إحصاء حركة المرور. كان هناك ملفان للأشكال ، أحدهما هو المواقع التي سنعمل عليها في الخريف والآخر هو جميع سجلات المحطة في قاعدة البيانات. كان كلاهما في WGS_1984 GCS ولكن لم يتم توقعهما في نظام إحداثيات متوقع (PCS). لذلك قمت بإسقاطها في NAD_1983_StatePlane_OHIO_South. ومع ذلك ، بعد الإسقاط ، لم تكن النقاط من الطبقتين في نفس الموقع (اختلاف طفيف فقط ، ولكن نظرًا لأن لديهم نفس خط العرض وخط الطول ، فلا ينبغي أن يحدث هذا). لذلك أعدت تشغيل أدوات المشروع ووجدت أن أحدهم استخدم تحويل WGS_1984_ (ITRF00) _To_NAD_1983 والآخر يستخدم التحويل NAD_1983_To_WGS_1984_1 افتراضيًا. واحد مع تحويل WGS_1984_ (ITRF00) _To_NAD_1983 لم يغير مواقع النقاط. لكن التحول الآخر ، NAD_1983_To_WGS_1984_1 ، سيحرك النقاط قليلاً. ووجدت أيضًا أن هناك بعض التحولات الأخرى ، مثل NAD_1983_To_WGS_1984_5 ، NAD_1983_To_WGS_1984_4. لدي فضول فقط ما هي الاختلافات بين هذه التحولات؟ ولماذا حددت أداة المشروع WGS_1984_ (ITRF00) _To_NAD_1983 لأحدها ولكنها استخدمت واحدة أخرى لملف الأشكال الآخر. راجعت المراجع المكانية لملفي الشكل واعتقدت أنهما متطابقان.


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

يمكنك استخدام n = 0 لإزالة السياق.

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

الآن ماذا تريد أن تفعل؟ إذا تجاهلت جميع الأسطر التي تمت إزالتها ، فلن ترى أنه تمت إزالة "كلب الصيد". إذا كنت سعيدًا بمجرد عرض الإضافات إلى الملف ، فيمكنك القيام بذلك:

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


الحفاظ على صورة تشغيلية مشتركة

تعرف على كيفية استخدام Town of Chapel Hill، NC لوحات ArcGIS Dashboards لإنشاء مجموعة من لوحات المعلومات التي تعمل على تبسيط العمليات في مركز عمليات الطوارئ.

الحفاظ على صورة تشغيلية مشتركة تقليل مخاطر الجريمة تعزيز الوعي بالظروف تحسين سلامة السكك الحديدية الكرواتية تبسيط العمليات الحكومية تسريع التعافي من الكوارث


العمليات الحسابية

يتم حساب إحصائيات الملخص لكل حقل في طبقة الإدخال. سيكون للحقول مخرجات إحصائية مختلفة بناءً على نوع الحقل. يوضح مثال عمق التربة التالي كيفية حساب الإحصائيات لكل نوع حقل:

سيتم تلخيص ميزات الإدخال هذه وإخراجها كإحصائيات محسوبة أدناه.


تنظيم الأداة

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

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

يتم التعامل مع أدوات التحليل المكاني بشكل مختلف لاستيعاب Map Algebra وهي متوفرة فقط في وحدة arcpy.sa وليست وظائف في ArcPy.


استنتاج

تهانينا ، لقد وصلت إلى نهاية هذا البرنامج التعليمي!

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

نأمل أن تتمكن الآن من استخدام نمذجة الموضوع لتحليل مجموعات البيانات الخاصة بك. شكرا لقراءة هذا البرنامج التعليمي!

إذا كنت تريد معرفة المزيد عن Python ، فاحصل على مقدمة مجانية DataCmp لدورة Python for Data Science.


مناقشة

إذا كان لديك برنامج خارجي يقوم بحساب سطور الملف ، مثل wc -l على أنظمة أساسية شبيهة بـ Unix ، فيمكنك بالطبع اختيار استخدام ذلك (على سبيل المثال ، عبر os.popen ()). ومع ذلك ، فمن الأسهل والأسرع والمحمول بشكل عام القيام بحساب الأسطر في برنامجك. يمكنك الاعتماد على جميع الملفات النصية تقريبًا ذات الحجم المعقول ، بحيث يكون من الممكن قراءة الملف بالكامل في الذاكرة مرة واحدة. بالنسبة لجميع هذه الملفات العادية ، يمنحك اللين الناتج عن سطور القراءة عدد الأسطر بأبسط طريقة.

إذا كان الملف أكبر من الذاكرة المتاحة (على سبيل المثال ، بضع مئات من الميجابايت على جهاز كمبيوتر نموذجي اليوم) ، يمكن أن يصبح الحل الأبسط بطيئًا ، حيث يكافح نظام التشغيل لتلائم محتويات الملف في الذاكرة الافتراضية. قد تفشل حتى ، عندما يتم استنفاد مساحة التبديل والذاكرة الافتراضية لا يمكن أن تساعد بعد الآن. على جهاز كمبيوتر نموذجي ، مع 256 ميجابايت من ذاكرة الوصول العشوائي ومساحة قرص غير محدودة تقريبًا ، لا يزال من المفترض أن تتوقع مشكلات خطيرة عند محاولة القراءة في ملفات الذاكرة ، على سبيل المثال ، 1 أو 2 جيجابايت ، اعتمادًا على نظام التشغيل الخاص بك (بعض أنظمة التشغيل كثيرة أكثر هشاشة من غيره في التعامل مع مشكلات الذاكرة الظاهرية في ظل ظروف التحميل المفرطة هذه). في هذه الحالة ، تعد طريقة xreadlines لكائنات الملف ، المقدمة في Python 2.1 ، طريقة جيدة بشكل عام لمعالجة الملفات النصية سطرًا بسطر. في Python 2.2 ، يمكنك القيام بعمل أفضل ، من حيث الوضوح والسرعة ، من خلال التكرار مباشرة على كائن الملف:

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

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

ومع ذلك ، تذكر أنه في معظم الحالات ، لا يهم الأداء كثيرًا. عندما يكون الأمر مهمًا ، فقد لا يكون إهدار الوقت هو ما يخبرك به حدسك ، لذلك يجب ألا تثق أبدًا في حدسك في هذا الأمر - بدلاً من ذلك ، قم دائمًا بوضع المعايير والقياس. على سبيل المثال ، قمت بأخذ ملف Unix syslog نموذجي بحجم متوسط ​​، يزيد قليلاً عن 18 ميجابايت من النص في 230،000 سطر:

وقمت بإعداد النص البرمجي لإطار العمل المعياري التالي ، bench.py:

أولاً ، أقوم بطباعة عدد الأسطر التي تم الحصول عليها بواسطة جميع الطرق ، وبالتالي ضمان عدم وجود شذوذ أو خطأ (مهام العد عرضة بشكل ملحوظ لأخطاء كل على حدة). بعد ذلك ، أقوم بتشغيل كل بديل 10 مرات ، تحت سيطرة وظيفة التوقيت timeo ، وألقي نظرة على النتائج. ها هم:

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


هل تستخدم Python لحساب عدد السجلات وإظهار الفرق في ArcGIS Desktop؟ - نظم المعلومات الجغرافية

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

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

هذه المقالة ساهمت بها سوميث كومار. إذا كنت تحب GeeksforGeeks وترغب في المساهمة ، فيمكنك أيضًا كتابة مقال باستخدام Contrib.geeksforgeeks.org أو إرسال مقالتك بالبريد إلى [email protected] شاهد مقالتك تظهر على صفحة GeeksforGeeks الرئيسية وساعد المهوسين الآخرين.

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

المهوس الانتباه! عزز أساساتك مع مؤسسة برمجة بايثون دورة وتعلم الأساسيات.

بادئ ذي بدء ، تعمل الاستعدادات للمقابلة على تحسين مفاهيم هياكل البيانات الخاصة بك باستخدام Python DS مسار. ولبدء رحلة تعلم الآلة ، انضم إلى تعلم الآلة & # 8211 دورة المستوى الأساسي


هل تستخدم Python لحساب عدد السجلات وإظهار الفرق في ArcGIS Desktop؟ - نظم المعلومات الجغرافية

line_profiler و kernprof

إشعار: هذا هو مستودع line_profiler الرسمي. يشير أحدث إصدار من أداة تعريف الخطوط على pypi إلى هذا الريبو. حزمة line_profiler الأصلية بواسطةrkern لم يتم الحفاظ عليها حاليًا. تسعى هذه الشوكة ببساطة إلى الحفاظ على الكود الأصلي بحيث تستمر في العمل في إصدارات جديدة من Python.

line_profiler عبارة عن وحدة نمطية للقيام بتنميط الوظائف سطرًا بسطر. kernprof هو برنامج نصي مناسب لتشغيل إما line_profiler أو وحدات ملف تعريف أو ملف تعريف لمكتبة Python القياسية ، اعتمادًا على ما هو متاح.

وهي متوفرة بموجب ترخيص BSD.

يمكن تثبيت إصدارات line_profiler باستخدام نقطة:

يمكن تنزيل إصدارات المصدر وأي ثنائيات من ارتباط PyPI.

للتحقق من مصادر التطوير ، يمكنك استخدام Git:

يمكنك أيضًا تنزيل تاربل المصدر لأي لقطة من عنوان URL هذا.

ستتطلب إصدارات المصدر مترجم لغة سي من أجل بناء line_profiler. بالإضافة إلى ذلك ، سيتطلب git checkouts أيضًا Cython & gt = 0.10. يجب أن تحتوي إصدارات المصدر على PyPI على مصادر C المُنشأة مسبقًا ، لذلك لا يجب طلب Cython في هذه الحالة.

kernprof هو برنامج نصي بلغة Python نقية من ملف واحد ولا يتطلب مترجمًا. إذا كنت ترغب في استخدامه لتشغيل cProfile وليس التنميط سطرًا بسطر ، فيمكنك نسخه إلى دليل على PATH يدويًا وتجنب محاولة إنشاء أي امتدادات C.

اعتبارًا من 2021-04-25 ، تتوفر ثنائيات لينكس فقط على pypi. إذا كنت تستخدم نظام التشغيل windows ولا يمكنك البناء من المصدر ، ففكر في استخدام عجلات win32 المجمعة مسبقًا من Christoph Gohlke.

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

هي نقطة ساخنة لا يتم فصلها أبدًا بواسطة cProfile لأنه لا يوجد استدعاء دالة صريح في هذا البيان.

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

سيقوم kernprof بإنشاء مثيل لـ LineProfiler وإدراجه في مساحة الاسم __builtins__ بملف تعريف الاسم. لقد تمت كتابته لاستخدامه كديكور ، لذلك في البرنامج النصي الخاص بك ، تقوم بتزيين الوظائف التي تريد تشكيلها باستخدامprofile.

السلوك الافتراضي لـ kernprof هو وضع النتائج في ملف ثنائي script_to_profile.py.lprof. يمكنك إخبار kernprof بعرض النتائج المنسقة على الفور في المحطة باستخدام الخيار [-v / - view]. خلاف ذلك ، يمكنك عرض النتائج لاحقًا كما يلي:

على سبيل المثال ، فيما يلي نتائج تحديد وظيفة واحدة من نسخة مزخرفة من معيار pystone.py (أول سطرين ناتج من pystone.py ، وليس kernprof):

تتم طباعة الكود المصدري للوظيفة مع معلومات التوقيت لكل سطر. هناك ستة أعمدة للمعلومات.

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

إذا كنت تستخدم IPython ، فهناك تنفيذ لأمر٪ lprun magic والذي سيتيح لك تحديد وظائف لملف التعريف وبيان لتنفيذه. سيضيف أيضًا مثيل LineProfiler الخاص به إلى __builtins__ ، ولكن عادةً ، لن تستخدمه على هذا النحو.

بالنسبة إلى IPython 0.11+ ، يمكنك تثبيته عن طريق تحرير ملف تكوين IPython

/.ipython/profile_default/ipython_config.py لإضافة عنصر "line_profiler" إلى قائمة الامتدادات:

للحصول على تعليمات حول استخدام٪ lprun ، استخدم آلية تعليمات IPython القياسية:

من المتوقع أن تكون هاتان الطريقتان أكثر الطرق شيوعًا على مستوى المستخدم لاستخدام LineProfiler وستكون عادةً الأسهل. ومع ذلك ، إذا كنت تقوم بإنشاء أدوات أخرى باستخدام LineProfiler ، فستحتاج إلى استخدام واجهة برمجة التطبيقات. هناك طريقتان لإبلاغ LineProfiler بالوظائف إلى ملف التعريف: يمكنك تمريرها كوسيطات إلى المُنشئ أو استخدام طريقة add_function (f) بعد إنشاء مثيل لها.

LineProfiler لديه نفس أساليب run () و runctx () و runcall () مثل cProfile.Profile بالإضافة إلى تمكين () وتعطيل (). وتجدر الإشارة ، مع ذلك ، إلى أن التمكين () والتعطيل () ليسا آمنين تمامًا عند تداخلهما. يعد التعشيش أمرًا شائعًا عند استخدام LineProfiler كديكور. لدعم التداخل ، استخدم enable_by_count () و disable_by_count (). ستعمل هذه الوظائف على زيادة وإنقاص عداد وتمكين أو تعطيل أداة التعريف فقط في الواقع عندما ينتقل العد من أو إلى 0.

بعد التنميط ، ستقوم طريقة dump_stats (filename) بإخراج النتائج إلى الملف المحدد. print_stats ([دفق]) ستطبع النتائج المنسقة إلى sys.stdout أو أي دفق تحدده. سيعيد get_stats () كائن LineStats ، الذي يحمل سمتين فقط: قاموس يحتوي على النتائج ووحدة المؤقت.

يعمل kernprof أيضًا مع cProfile ، أو lsprof للتجسد من جهة خارجية ، أو وحدة ملف تعريف Python الخالص اعتمادًا على ما هو متاح. يحتوي على بعض الميزات الرئيسية:

  • تغليف اهتمامات التنميط. لا يتعين عليك تعديل البرنامج النصي الخاص بك لبدء التنميط وحفظ النتائج. ما لم تكن ترغب في استخدام ميزات __builtins__ المتقدمة بالطبع.
  • تنفيذ نصي قوي. تتطلب العديد من البرامج النصية أشياء مثل __name__ و __الملف__ و sys.path ليتم تعيينها بالنسبة لها. قد تستخدم الطريقة الساذجة في التغليف execfile () فقط ، لكن العديد من البرامج النصية التي تعتمد على هذه المعلومات ستفشل. سيقوم kernprof بتعيين هذه المتغيرات بشكل صحيح قبل تنفيذ البرنامج النصي.
  • موقع سهل التنفيذ. إذا كنت تقوم بإنشاء ملف تعريف لتطبيق مثبت على PATH ، فيمكنك فقط إعطاء اسم الملف القابل للتنفيذ. إذا لم يعثر kernprof على البرنامج النصي المحدد في الدليل الحالي ، فسيقوم بالبحث عن المسار الخاص بك عنه.
  • إدراج ملف التعريف في __البناءات__. في بعض الأحيان ، تريد فقط إنشاء ملف تعريف لجزء صغير من التعليمات البرمجية الخاصة بك. باستخدام الوسيطة [-b / - builtin] ، سيتم إنشاء مثيل لـ Profiler وإدراجه في __builtins__ بالاسم "profile". مثل LineProfiler ، يمكن استخدامه كديكور ، أو تمكينه / تعطيله باستخدام enable_by_count () و disable_by_count () ، أو حتى كمدير سياق بعبارة "with profile:".
  • إعداد التنميط المسبق. باستخدام الخيار [-s / - setup] ، يمكنك توفير نص يتم تنفيذه بدون إنشاء ملف تعريف قبل تنفيذ النص الرئيسي. يفيد هذا عادةً في الحالات التي تتداخل فيها واردات المكتبات الكبيرة مثل wxPython أو VTK مع نتائجك. إذا كان بإمكانك تعديل شفرة المصدر الخاصة بك ، فقد يكون نهج __البناءات__ أسهل.

ستتم كتابة نتائج ملف تعريف script_to_profile.py إلى script_to_profile.py.prof افتراضيًا. سيكون ملفًا منظمًا نموذجيًا يمكن قراءته باستخدام pstats.Stats (). يمكن عرضها بشكل تفاعلي باستخدام الأمر:

يمكن أيضًا عرض هذه الملفات باستخدام أدوات رسومية مثل SnakeViz وتحويلها من خلال pyprof2calltree للتشغيل على kcachegrind والتطبيقات المتوافقة.

لم أتمكن من ابتكار اسم ذي معنى ، لذلك سميته باسمي.

لماذا لا تستخدم hotshot بدلا من line_profile؟

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

لماذا لا تسمح باستخدام hotshot من kernprof.py؟

أنا لا أستخدم hotshot بنفسي. ومع ذلك ، سأقبل المساهمات في هذا السياق.

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

لنفترض أن لديك الوظيفة F () التي تستدعي الوظيفة G () ، وأنت تستخدم LineProfiler على كليهما. إجمالي الوقت المُبلغ عنه لـ G () أقل من الوقت المُبلغ عنه على السطر في F () الذي يستدعي G (). والسبب هو أنني ذكي بشكل معقول (وربما ذكي جدًا) في تسجيل الأوقات. في الأساس ، أحاول منع تسجيل الوقت الذي يقضيه داخل LineProfiler في القيام بكل أعمال مسك الدفاتر لكل سطر. في كل مرة تصدر فيها أداة تتبع Python حدثًا سطرًا (والذي يحدث قبل تنفيذ السطر مباشرة) ، سيجد LineProfiler طابعين زمنيين ، أحدهما في البداية قبل أن يفعل أي شيء (t_begin) والآخر أقرب إلى النهاية قدر الإمكان (t_end) . تحدث جميع النفقات العامة تقريبًا لهياكل بيانات LineProfiler بين هذين الوقتين.

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

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

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

لماذا يكون لقائمي الفهم الكثير من النتائج عندما أستخدم LineProfiler؟

يسجل LineProfiler السطر مع قائمة الفهم مرة واحدة لكل تكرار لفهم القائمة.

لماذا يتم توزيع kernprof مع line_profiler؟ إنه يعمل مع cProfile فقط ، أليس كذلك؟

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

هل أحتاج إلى مترجم لغة سي لبناء line_profiler؟ kernprof.py؟

أنت بحاجة إلى مترجم C لـ line_profiler. kernprof.py هو نص برمجي Python خالص ويمكن تثبيته بشكل منفصل.

هل أحتاج إلى Cython لبناء line_profiler؟

لا يجب عليك ذلك إذا كنت تقوم بالبناء من تارب مصدر تم إصداره. يجب أن تحتوي على مصادر C التي تم إنشاؤها بالفعل. إذا كنت تواجه مشكلات ، فقد يكون هذا خطأ ، فيرجى إبلاغي بذلك. إذا كنت تقوم بالبناء من بوابة الخروج أو اللقطة ، فستحتاج إلى Cython لإنشاء مصادر C. ربما تحتاج إلى الإصدار 0.10 أو أعلى. يوجد خطأ في بعض الإصدارات السابقة في كيفية تعامله مع مؤشرات NULL PyObject *.

اعتبارًا من الإصدار 3.0.0 ، تتوفر عجلات manylinux التي تحتوي على الثنائيات على pypi. لا تزال هناك حاجة إلى العمل لنشر عجلات osx و win32. (العلاقات العامة لهذا سيكون مفيدًا!)

ما هو إصدار بايثون الذي أحتاجه؟

تم اختبار كل من line_profiler و kernprof باستخدام Python 3.5-3.9. تدعم الإصدارات القديمة من line_profiler الإصدارات القديمة من Python.

cProfile يستخدم بنية بيانات "الأشجار الدوارة" الأنيقة لتقليل عبء البحث عن الإدخالات وتسجيلها. يستخدم LineProfiler قواميس Python وكائنات الامتداد بفضل Cython. بدأ هذا في الغالب كنموذج أولي كنت أرغب في اللعب به في أسرع وقت ممكن ، لذلك مررت بسرقة الأشجار الدوارة في الوقت الحالي. كالعادة ، لقد نجحت في العمل ، ويبدو أنها تتمتع بأداء مقبول ، لذا فأنا أقل حماسًا لاستخدام استراتيجية مختلفة الآن. ربما في وقت لاحق. تم قبول المساهمات!


مراجع

Mann، K.H & amp Lazier، J.R. ديناميات النظم الإيكولوجية البحرية: التفاعلات البيولوجية الفيزيائية في المحيطات. (جون وايلي وأولاده ، 2013).

Minns، C.K & amp Wichert، G. A. إطار عمل لتحديد مجالات موائل الأسماك في بحيرة أونتاريو وتصريفها. J. العظمى البحيرات الدقة. 31, 6–27 (2005).

Håkanson، L. تأثير الرياح والجلب وعمق المياه على توزيع الرواسب في بحيرة فانرن بالسويد. تستطيع. J. الأرض علوم. 14, 397–412 (1977).

Burton ، T. M. ، Uzarski ، D.G & amp Genet ، J. A. استخدام موائل اللافقاريات فيما يتعلق بجلب وتقسيم المناطق النباتية في الأراضي الرطبة الساحلية لبحيرة هورون الشمالية. صحة النظام البيئي المائي وإدارة أمبير 7 (2) ، 249-267 ، https://doi.org/10.1080/14634980490461614 (2004).

Marsh، W. M. & amp Marsh، B. D. تآكل الرياح وتكوين الكثبان الرملية على منحدرات بحيرة عالية. Geogr. آن 69 أ, 379–391 (1987).

Schwab، D.J، Beletsky، D. & amp Lou، J. عمود التعكر الساحلي 1998 في بحيرة ميشيغان. علم مصبات الأنهار والسواحل والجرف 50, 49–58 (2000).

Randall، R.G، Minns، C.K، Cairns، V.W & amp Moore، J.E العلاقة بين مؤشر إنتاج الأسماك والنباتات الكبيرة المغمورة وخصائص الموائل الأخرى في ثلاث مناطق ساحلية في البحيرات العظمى. تستطيع. J. أكوات. علوم. 53, 35–44 (1996).

Cooper، M.J، Lamberti، G.A & amp Uzarski، D.G الاتجاهات المكانية والزمانية في مجتمعات اللافقاريات في الأراضي الرطبة الساحلية للبحيرات العظمى ، مع التركيز على خليج ساجينو في بحيرة هورون. J. العظمى البحيرات الدقة. 40, 168–182 (2014).

Keddy، P. A. Shoreline Vegetation in Axe Lake، Ontario: آثار التعرض على أنماط تقسيم المناطق. علم البيئة 64, 331–344 (1983).

Yurista، P. M.، Kelly، J.R & amp Scharold، J.V. Great Lakes near-shore-offshore: مناطق نوعية المياه المتميزة. J. العظمى البحيرات الدقة. 42, 375–385 (2016).

Beletsky، D.، Hawley، N. & amp Rao، Y. R. نمذجة الدورة الدموية الصيفية والهيكل الحراري لبحيرة إيري. J. من الجيوفيز. الدقة. المحيطات 118، 6238-6252، https://doi.org/10.1002/2013JC008854 (2013).

شوتر ، ب.ج ، شليزنجر ، د. أ & زيمرمان ، أ. ب. تنبؤات تجريبية لدورات حرارة المياه السطحية السنوية في بحيرات أمريكا الشمالية. تستطيع. J. فيش. أكوات. علوم. 40, 1838–1845 (1983).

بلاتنر ، إس ، ماسون ، دي إم ، ليشكيفيتش ، جي إيه ، شواب ، دي جيه ، وأمبير روثرفورد ، إي إس. J. العظمى البحيرات الدقة. 32, 63–76 (2006).

Vanderploeg ، H. A. ، Liebig ، J.R ، Nalepa ، T. F. ، Fahnenstiel ، G.L & amp Pothoven ، S. J. العظمى البحيرات الدقة. 36، 50-59 ، https://doi.org/10.1016/j.jglr.2010.04.005 (2010).

أوزارسكي ، دي جي ، بيرتون ، T.M & amp Genet ، J.A. التحقق من صحة وأداء مؤشر اللافقاريات للسلامة الحيوية للأراضي الرطبة المتاخمة لبحيرة هورون وميتشيغان خلال فترة انخفاض مستوى البحيرة. أكوات. Ecosyst. صحة 7, 269–288 (2004).

كلارك ، جي إي إن وظائف الأراضي الرطبة وقيمها: حالة فهمنا (محرران Greeson، P. E.، Clark J.R & amp Clark J.E) الأراضي الرطبة للمياه العذبة: موائل اللافقاريات المائية والبرمائيات والزواحف والأسماك. سلسلة المنشورات الفنية TP79-2. (American Water Resources Association: Minneapolis، MN، 1978).

Jude، D.J & amp Pappas، J. استخدام الأسماك في الأراضي الرطبة الساحلية للبحيرات العظمى. J. العظمى البحيرات الدقة. 18, 651–692 (1992).

وانج ، ل. وآخرون. تصنيف مكاني وقاعدة بيانات للإدارة والبحث وصنع السياسات: إطار الموائل المائية للبحيرات العظمى. J. العظمى البحيرات الدقة. 41, 584–596 (2015).

مراجعة Larson، G. & amp Schaetzl، R.: أصل وتطور البحيرات العظمى. J. العظمى البحيرات الدقة. 27, 518–546 (2001).

Waples، J.T & amp Klump، J. V. التأثيرات الفيزيائية الحيوية لتغير عقدي في اتجاه الرياح الصيفية فوق بحيرات Laurentian العظمى. الدقة الجيوفيزيائية. حروف 29, 8 (2002).

كالف ، ج. علم البحيرات: النظم الإيكولوجية للمياه الداخلية (نهر السرج العلوي ، نيوجيرسي ، 2002).

هاكانسون ، ل. دليل قياس البحيرة (برلين: Springer-Verlag ، 1981).

سلاح المهندسين بالجيش الأمريكي (USACE). دليل حماية الشاطئ. مركز أبحاث الهندسة الساحلية: Fort Belvoir ، فيرجينيا ، (1984).

Keddy ، P. A. قياس التدرجات داخل البحيرة لطاقة الأمواج: العلاقات المتبادلة لطاقة الأمواج ، وحجم جسيمات الركيزة والنباتات الساحلية في بحيرة آكس ، أونتاريو. علم النبات المائي 14, 41–58 (1982).

فورسيث ، دي ك وآخرون. مجموعة بيانات هيدروغرافيا البحيرات العظمى: مستجمعات المياه المتسقة ثنائية القومية لحوض البحيرات الكبرى في لورينتيان. جيه. ريسور المياه. مثل 52, 1068–1088 (2016).

Anderson، E.J & amp Schwab، D.J. توقع تدفق التبادل ثنائي الاتجاه المتذبذب في مضيق ماكيناك. J. العظمى البحيرات الدقة. 39, 663–671 (2013).

فينلايسون ، د. بوجيه ساوند فيتش: سياتل ، واشنطن. دكتوراه ديس. (جامعة واشنطن 2005).

روهويدر ، جيه وآخرون. تطبيق نماذج جلب الرياح والأمواج لمشاريع إعادة تأهيل الموائل وتعزيزها. هيئة المسح الجيولوجي الأمريكية المفتوحة - تقرير ملف 2008-1200 ، 43 ص (2008).

ديساي ، إيه آر ، أوستن ، جيه إيه ، بينينجتون ، في أند ماكينلي ، جي إيه رياح أقوى فوق بحيرة كبيرة استجابةً لضعف تدرج درجة الحرارة من الهواء إلى البحيرة. علوم الأرض الطبيعية 2، 855-858 ، https://doi.org/10.1038/NGEO693 (2009).

ستراسكرابا ، إم إن عمل النظم البيئية للمياه العذبة (ed. LeCren، E.D) تأثيرات المتغيرات الفيزيائية على إنتاج المياه العذبة: التحليلات القائمة على النماذج (Cambridge Univ. Press، Cambridge، 1980).

اقتباسات البيانات

Mason، L.A، Riseng، C.M، Layman، A. J.، & amp Jensen، R. جامعة ميشيغان https://doi.org/10.7302/z22f7kn3 (2018)


شاهد الفيديو: Python لغة البايثون بالعربي للمبتدئين