أكثر

كود Python لمقارنة حقلين في طبقات معالم مختلفة؟

كود Python لمقارنة حقلين في طبقات معالم مختلفة؟


لدي ملفان للأشكال يشتمل كل منهما على 3897 ميزة. ملفات الأشكال المقابلة (القرية ومستجمعات المياه التي تتدفق فيها) لها نفس المعرف (ws_id في أحدهما ، OBJECTID في الآخر). تتداخل العديد من مستجمعات المياه. بسبب الأخطاء في طبقة مستجمعات المياه ، أريد مقارنة مناطق كل مستجمعات المياه مع قريتها المقابلة (منطقة التسوية للقرى و Shape_Area لمستجمعات المياه). إذا كان مستجمع المياه يحتوي على مساحة أصغر من القرية التي يتدفق إليها ، فيجب حذفه وإضافة بيانات القرية المقابلة إلى بيانات القرية التي يتدفق فيها مستجمع المياه التالي (تشمل البيانات المنطقة الحضرية والسكان).

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

باستخدام Arcgis Desktop 10.2 بترخيص متقدم

رمز

# الهدف من هذا الرمز هو التخلص من البيانات الخاطئة عن طريق إنشاء ملف شكل خدمات جديد يحتوي على مجموعة خدمات أكبر من التسوية التي يواجهونها. # يمكن بعد ذلك تمديدها لتشمل متطلبات مختلفة لحجم الحد الأدنى لاستيراد أركبي أركبي. workspace = workdir fc1 = workdir + r ' servicesheds_v0' fc2 = workdir + r ' miyun_settlements' fc1table = arcpy.CreateTable_management (workdir، 'fc1table') fc2table = arcpy.CreateTable، ') template ' template' arcpy.CreateTable_management (workdir، 'servicesheds_v1'، template) newservicesheds = workdir + r ' servicesheds_v1' rows = arcpy.SearchCursor (fc1) للصف في الصفوف: arcpy.Append_management ('Shape_Areaable')، row1 ، rows rows = arcpy.SearchCursor (fc2) للصف في الصفوف: arcpy.Append_management ('auction_area'، fc2table) del row، rows rows = arcpy.SearchCursor (fc1table) للصف في الصفوف: if fc1table> fc2table: arcpy.Append_management: arcpy.Append_management (row، newservicesheds) del row، rows

هذه هي المحاولة الأولى. المشكلة هي أنني أدرك أن الجداول ليست هي الطريقة التي يجب اتباعها لأن البيانات المتعلقة بكل مجموعة بمضلع مفقودة. أود الحصول على شيء مثل هذا للعمل (أدناه) ولكني لست متأكدًا مما إذا كان مسموحًا به في synthax python

arcpy.CreateTable_management (workdir، 'servicesheds_v1') newservicesheds = workdir + r ' servicesheds_v1' cursor1 = arcpy.da.SearchCursor (fc1، "Shape_Area") cursor1: if 'Shape_Area' في cursor1>'ett_area 'في cursor2: arcpy.Append_management (row، newservicesheds)

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

استيراد arcpy arcpy.CheckOutExtension ("spatial") arcpy.env.overwriteOutput = True workdir = r'C:  Users  xx  benefitlayers.gdb 'arcpy.env.workspace = workdir fc1 = workdir + r'  servicesheds_v0 'fc2 = workdir + r ' miyun_settlements' # set up cursor cursor1 = arcpy.da.SearchCursor (fc1، ["ws_id"، "Shape_Area"]) ) wrongsheds = [] # إنشاء قاموس وتخزين قيم من جدول مستجمعات المياه serviceshed_area = {} للصف في المؤشر 1: serviceshed_areas [row [0]] = row [1] # حلقة من خلال جدول آخر للصف في المؤشر 2: إذا كان الصف [1 ]> serviceshed_areas [row [0]]: # if serviceshed_areas 

يبدو أن هناك القليل من الالتباس حول ما هو أكبر / أصغر من ما ولكن سأترك ذلك لك للتلاعب به. هذا الحل سوف يتكرر مرة واحدة فقط من خلال كل جدول مما لن يربك المؤشرات وسيوفر لك 10 ملايين تكرار (من تكرار حلقة في حلقة تكرار). يعد استخدام البحث في القاموس سريعًا جدًا لدرجة أنه يعتبر "مجانيًا". لذا قم بملء قاموس في حلقة واحدة والرجوع إليه في حلقة أخرى (ليست داخل الحلقة الأولى). لا أستطيع التحدث عن الدقة / بناء الجملة لأنني لم أقم بتنفيذها.

#set up cursor1 = arcpy.da.SearchCursor (fc1، ["OBJECTID"، "Shape_Area"]) القيم من جدول مستجمعات المياه waterhed_areas = {} للصف في المؤشر 1: مستجمعات المياه [row [0]] = صف [1] # حلقة خلال جدول آخر للصف في المؤشر 2: إذا كان الصف [1]> مناطق مستجمعات المياه [الصف [0]]: # إذا كانت منطقة مستجمعات المياه 

تحتاج إلى تداخل حلقات مؤشر البحث الخاصة بك للتكرار خلال كليهما في نفس الوقت ، مع ربط الصفوف بطريقة ما (لذلك يعرف Arcpy متى يكون في المكان الصحيح ، وسيتوقف عن التكرار لمقارنة القيمة). لحسن الحظ ، لديك حقول المعرف المتطابقة بالفعل.

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

cursor1 = arcpy.da.SearchCursor (fc1، ["OBJECTID"، "Shape_Area"]) إذا كان row2 [0] == row1 [0]: # if ws_id = OBJECTID ، فقم بفحص المنطقة إذا كان row2 [1] 

الكيفية: مقارنة ومزامنة بيانات قاعدتي بيانات

يمكنك مقارنة البيانات الموجودة في قاعدتي بيانات. تُعرف قواعد البيانات التي تقارنها بـ مصدر و ال استهداف.

مشاريع قواعد البيانات وحزم .dacpac أو .bacpac لا يمكن أن تكون المصدر أو الهدف في مقارنة البيانات.

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

بعد انتهاء المقارنة ، يمكنك اتخاذ خطوات أخرى:

يمكنك عرض الاختلافات بين قاعدتي البيانات. لمزيد من المعلومات ، راجع عرض اختلافات البيانات.

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

يمكنك أيضًا مقارنة ملف مخطط قاعدتي بيانات أو نسختين من نفس قاعدة البيانات. لمزيد من المعلومات ، راجع كيفية: استخدام مقارنة المخطط لمقارنة تعريفات قاعدة بيانات مختلفة.


بدائل فئات البيانات

بالنسبة لهياكل البيانات البسيطة ، ربما تكون قد استخدمت بالفعل tuple أوict. يمكنك تمثيل بطاقة ملكة القلوب بإحدى الطريقتين التاليتين:

إنها تعمل. ومع ذلك ، فإنه يضع الكثير من المسؤولية على عاتقك كمبرمج:

  • عليك أن تتذكر أن ملكة القلوب. يمثل المتغير بطاقة.
  • بالنسبة لإصدار tuple ، عليك أن تتذكر ترتيب السمات. ستؤدي الكتابة ("Spades"، "A") إلى إفساد برنامجك ولكن من المحتمل ألا تعطيك رسالة خطأ سهلة الفهم.
  • إذا كنت تستخدم إصدار dt ، فيجب عليك التأكد من تناسق أسماء السمات. على سبيل المثال <'value': 'A'، 'suit': 'Spades'> لن تعمل كما هو متوقع.

علاوة على ذلك ، فإن استخدام هذه الهياكل ليس مثاليًا:

البديل الأفضل هو المسمى مضاعفة. لطالما تم استخدامه لإنشاء هياكل بيانات صغيرة قابلة للقراءة. يمكننا في الواقع إعادة إنشاء مثال فئة البيانات أعلاه باستخدام اسمهtuple مثل هذا:

سيعطي هذا التعريف لـ NamedTupleCard نفس الإخراج تمامًا مثل مثال DataClassCard الخاص بنا:

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

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

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

لن تحل فئات البيانات محل جميع استخدامات الاسم الثلاثي. على سبيل المثال ، إذا كنت تريد أن تتصرف بنية البيانات الخاصة بك مثل المجموعة ، فإن المجموعة المسماة هي بديل رائع!

بديل آخر ، وأحد مصادر الإلهام لفئات البيانات ، هو مشروع attrs. مع Attrs مثبتة (Pip install attrs) ، يمكنك كتابة فئة البطاقة على النحو التالي:

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

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


حسابات بسيطة

أمثلة سلسلة بسيطة

يتم دعم السلاسل من خلال سلسلة من وظائف سلسلة Python ، بما في ذلك الأحرف الكبيرة و rstrip والاستبدال.

اكتب الحرف الأول من السلسلة بحروف كبيرة في الحقل CITY_NAME.

قم بإزالة أي مسافة بيضاء من نهاية السلسلة في الحقل CITY_NAME.

استبدل أي مواضع ورود لـ "california" بـ "California" الموجودة في الحقل STATE_NAME.

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

الثاني إلى آخر شخصية.

الأحرف الثانية والثالثة والرابعة.

تدعم Python أيضًا تنسيق السلسلة باستخدام طريقة str.format ().

اجمع بين FieldA و FieldB مفصولة بنقطتين.

وظائف سلسلة VBScript

يتم دعم السلاسل بواسطة سلسلة من وظائف سلسلة VBScript ، بما في ذلك Left و InStr و Chr. فيما يلي بعض أمثلة VBScript لوظائف السلسلة شائعة الاستخدام في Field Calculator.

الوظيفة اليسرى: إرجاع متغير (سلسلة) يحتوي على عدد محدد من الأحرف من الجانب الأيسر من السلسلة.

دالة Right: إرجاع متغير (سلسلة) يحتوي على عدد محدد من الأحرف من الجانب الأيمن من السلسلة.

دالة Mid: ترجع متغير (سلسلة) يحتوي على عدد محدد من الأحرف من سلسلة.

دالة InStr: إرجاع متغير (طويل) يحدد موضع التكرار الأول لسلسلة ما داخل سلسلة أخرى.

وظيفة الاستبدال: إرجاع سلسلة تم فيها استبدال سلسلة فرعية محددة بسلسلة فرعية أخرى بعدد محدد من المرات.

دالة Chr: إرجاع سلسلة تحتوي على الحرف المرتبط برمز الحرف المحدد.

& amp عامل التشغيل: يستخدم لفرض سلسلة سلسلة من تعبيرين.

أمثلة بسيطة في الرياضيات

توفر Python أدوات لمعالجة الأرقام. تدعم Python أيضًا عددًا من الوظائف الرقمية والرياضية ، بما في ذلك الرياضيات ، و cmath ، والعشري ، والعشوائي ، و itertools ، و functools ، والعامل.


حسابات بسيطة

يمكن حساب مجموعة متنوعة من الحسابات بتعبير قصير فقط.

أمثلة سلسلة بسيطة

يتم دعم السلاسل من خلال سلسلة من وظائف سلسلة Python ، بما في ذلك الأحرف الكبيرة و rstrip والاستبدال.

اكتب الحرف الأول من السلسلة بحرف كبير في حقل CITY_NAME.

أزل أي مسافة من نهاية السلسلة في الحقل CITY_NAME.

استبدل أي ورود لـ "california" بـ "California" في الحقل STATE_NAME.

يمكن الوصول إلى الأحرف الموجودة في حقل السلسلة عن طريق الفهرسة والتقطيع في Python. تجلب الفهرسة الأحرف في موضع الفهرس ، يؤدي التقطيع إلى جلب مجموعة من الأحرف. في الجدول التالي ، افترض أن! هو حقل سلسلة بقيمة "abcde".

الحرف الثاني إلى الأخير

الأحرف الثانية والثالثة والرابعة

تدعم Python أيضًا تنسيق السلسلة باستخدام طريقة format ().

اجمع بين FieldA و FieldB ، مفصولة بنقطتين.

أمثلة بسيطة في الرياضيات

توفر Python أدوات لمعالجة الأرقام. تدعم Python أيضًا عددًا من الوظائف الرقمية والرياضية ، بما في ذلك الرياضيات ، و cmath ، والعشري ، والعشوائي ، و itertools ، و functools ، والعامل.


أمثلة على خوارزميات التجميع

في هذا القسم ، سنراجع كيفية استخدام 10 خوارزميات تجميع شائعة في scikit-Learn.

يتضمن هذا مثالًا على ملاءمة النموذج ومثالًا لتصور النتيجة.

تم تصميم الأمثلة لك لنسخها ولصقها في مشروعك الخاص وتطبيق الأساليب على بياناتك الخاصة.

تركيب المكتبة

أولاً ، دع & # 8217s تثبت المكتبة.

& # 8217t تخطي هذه الخطوة حيث ستحتاج إلى التأكد من تثبيت أحدث إصدار لديك.

يمكنك تثبيت مكتبة scikit-Learn باستخدام مثبت pip Python ، على النحو التالي:

للحصول على إرشادات تثبيت إضافية خاصة بمنصتك ، راجع:

بعد ذلك ، دع & # 8217s تؤكد أن المكتبة مثبتة وأنك تستخدم إصدارًا حديثًا.

قم بتشغيل البرنامج النصي التالي لطباعة رقم إصدار المكتبة.

تشغيل المثال ، يجب أن ترى رقم الإصدار التالي أو أعلى.

تجميع مجموعة البيانات

سنستخدم الدالة make_classification () لإنشاء مجموعة بيانات اختبار تصنيف ثنائي.

ستتضمن مجموعة البيانات 1000 مثال ، مع ميزتي إدخال ومجموعة واحدة لكل فصل. تكون المجموعات واضحة بصريًا في بعدين حتى نتمكن من رسم البيانات باستخدام مخطط مبعثر وتلوين النقاط الموجودة في المخطط بواسطة المجموعة المخصصة. سيساعد هذا في معرفة ، على الأقل فيما يتعلق بمشكلة الاختبار ، كيف تم تحديد المجموعات & # 8220 well & # 8221.

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

فيما يلي مثال على إنشاء وتلخيص مجموعة بيانات التجميع التركيبية.

يؤدي تشغيل المثال إلى إنشاء مجموعة بيانات التجميع التركيبية ، ثم إنشاء مخطط مبعثر لبيانات الإدخال بنقاط ملونة حسب تصنيف الفئة (مجموعات مثالية).

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

مخطط مبعثر لمجموعة بيانات التجميع التركيبي مع نقاط ملونة بواسطة مجموعة معروفة

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

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

هل يمكنك الحصول على نتيجة أفضل لإحدى الخوارزميات؟
اسمحوا لي أن نعرف في التعليقات أدناه.

انتشار التقارب

يتضمن انتشار التقارب إيجاد مجموعة من النماذج التي تلخص البيانات على أفضل وجه.

لقد ابتكرنا طريقة تسمى & # 8220affinity propagation & # 8221 والتي تأخذ كمدخلات مقاييس للتشابه بين أزواج من نقاط البيانات. يتم تبادل الرسائل ذات القيمة الحقيقية بين نقاط البيانات حتى تظهر مجموعة عالية الجودة من النماذج والمجموعات المقابلة تدريجيًا

تم وصف التقنية في الورقة:

يتم تنفيذه عبر فئة AffinityPropagation والتكوين الرئيسي للضبط هو & # 8220التخميد& # 8221 بين 0.5 و 1 ، وربما & # 8220 تفضيل ".

المثال الكامل مدرج أدناه.

تشغيل المثال يلائم النموذج الموجود في مجموعة بيانات التدريب ويتوقع مجموعة لكل مثال في مجموعة البيانات. ثم يتم إنشاء مخطط التبعثر بنقاط ملونة بواسطة المجموعة المخصصة لها.

في هذه الحالة ، لم أتمكن من تحقيق نتيجة جيدة.

مخطط مبعثر لمجموعة البيانات ذات المجموعات المحددة باستخدام انتشار التقارب

التكتل العنقودي

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

إنه جزء من فئة أوسع من طرق التجميع الهرمي ويمكنك معرفة المزيد هنا:

يتم تنفيذه عبر فئة AgglomerativeClustering والتكوين الرئيسي للضبط هو & # 8220n_ المجموعات& # 8221 ، تقدير لعدد المجموعات في البيانات ، على سبيل المثال 2.

المثال الكامل مدرج أدناه.

تشغيل المثال يلائم النموذج الموجود في مجموعة بيانات التدريب ويتوقع مجموعة لكل مثال في مجموعة البيانات. ثم يتم إنشاء مخطط التبعثر بنقاط ملونة بواسطة المجموعة المخصصة لها.

في هذه الحالة ، تم العثور على مجموعة معقولة.

مخطط مبعثر لمجموعة البيانات مع العناقيد المحددة باستخدام التجميع التكتلي

البتولا

BIRCH Clustering (BIRCH اختصار لعبارة الاختزال التكراري المتوازن والتكتل باستخدام
التسلسل الهرمي) يتضمن بناء هيكل شجرة يتم من خلاله استخراج النقط الوسطى العنقودية.

تعمل BIRCH بشكل تدريجي وديناميكي على تجميع نقاط البيانات المترية متعددة الأبعاد الواردة لمحاولة إنتاج تجميع أفضل جودة باستخدام الموارد المتاحة (على سبيل المثال ، قيود الذاكرة والوقت المتاحة).

تم وصف التقنية في الورقة:

يتم تنفيذه عبر فئة Birch والتكوين الرئيسي لضبطه هو & # 8220عتبة& # 8221 و & # 8220n_ المجموعات& # 8221 المعلمات الفائقة ، والتي توفر الأخيرة تقديرًا لعدد المجموعات.

المثال الكامل مدرج أدناه.

تشغيل المثال يلائم النموذج الموجود في مجموعة بيانات التدريب ويتوقع مجموعة لكل مثال في مجموعة البيانات. ثم يتم إنشاء مخطط التبعثر بنقاط ملونة بواسطة المجموعة المخصصة لها.

في هذه الحالة ، تم العثور على مجموعة ممتازة.

مخطط مبعثر لمجموعة بيانات مع مجموعات محددة باستخدام مجموعات BIRCH


نقاط النهاية

من أجل العمل مع واجهات برمجة تطبيقات REST ، من المهم فهم ماهية نقطة النهاية.

عادةً ما تكون نقطة النهاية عنوانًا محددًا (على سبيل المثال ، https://weather-in-london.com/forecast) ، بالإشارة إلى أنه يمكنك الوصول إلى ميزات / بيانات معينة (في حالتنا & # 8211 توقعات الطقس لـ لندن). بشكل عام ، يتوافق اسم (عنوان) نقطة النهاية مع الوظيفة التي توفرها.

لمعرفة المزيد حول نقاط النهاية ، سننظر في مثال بسيط لواجهة برمجة التطبيقات داخل خدمة RapidAPI. هذه الخدمة عبارة عن مركز واجهة برمجة تطبيقات يوفر القدرة على الوصول إلى الآلاف من واجهات برمجة التطبيقات المختلفة. ميزة أخرى لـ RapidAPI هي أنه يمكنك الوصول إلى نقاط النهاية واختبار عمل API مباشرة في قسمها داخل خدمة RapidAPI.

لنأخذ على سبيل المثال Dino Ipsum API. تُستخدم واجهة برمجة التطبيقات هذه لإنشاء أي قدر من نص العنصر النائب لوريم إيبسوم. إنه مفيد عندما تقوم بعمل نموذج أولي أو اختبار واجهة التطبيق الخاص بك وترغب في ملئه بأي محتوى عشوائي.

للعثور على قسم Dino Ipsum API ، أدخل اسمه في مربع البحث في خدمة RapidAPI أو انتقل إلى فئة "أخرى" من قائمة "جميع الفئات" وحدد واجهة برمجة التطبيقات هذه من القائمة. Dino Ipsum API من خلال RapidAPI مجاني ، لذا يمكنك الحصول على أكبر قدر من نص العنصر النائب كما تريد.

بمجرد تحديد Dino Ipsum API ، فإن الصفحة الأولى التي & # 8217 سترى هي القسم الفرعي لنقاط نهاية واجهة برمجة التطبيقات. يتضمن هذا معظم المعلومات المطلوبة للبدء. يتضمن القسم الفرعي لنقاط نهاية واجهة برمجة التطبيقات التنقل ، وقائمة بنقاط النهاية (واحدة فقط لواجهة برمجة التطبيقات هذه) ، ووثائق نقطة النهاية المحددة حاليًا ، ومقتطف الشفرة (متوفر في 8 لغات برمجة مختلفة) لمساعدتك على البدء في التعليمات البرمجية الخاصة بك.

سنقوم بفحص نقطة النهاية الوحيدة التي تحتوي عليها واجهة برمجة التطبيقات هذه & # 8211 قائمة dinos ، والتي تُرجع قدرًا معينًا من نص العنصر النائب ، اعتمادًا على المعلمات التي تم إدخالها. نظرًا لأننا نتدرب في Python الآن ، نريد الحصول على مقتطف Python واختباره في تطبيقنا. املأ المعلمات المطلوبة (التنسيق = النص ، الكلمات = 10 ، الفقرات = 1) وإليك مقتطفنا:

لاستخدامه مع Python 3.6 ، نحتاج إلى تغيير unirest إلى الطلبات. لذلك ، حصلنا على مثل هذا التطبيق:

سيقوم تطبيقنا باستدعاء نقطة النهاية ، الموجودة على https://alexnormand-dino-ipsum.p.rapidapi.com/ وسوف يطبع لنا هذا النص النائب الجميل:

Craterosaurus Europasaurus Santanaraptor Dynamosaurus Pachyrhinosaurus Cardiodon Dakosaurus Kakuru Gracilisuchus Piveteausaurus.


كيفية: استخدام مخطط مقارنة لمقارنة تعريفات قاعدة بيانات مختلفة

تتضمن SQL Server Data Tools (SSDT) ​​الأداة المساعدة Schema Compare التي يمكنك استخدامها لمقارنة تعريفين لقاعدة البيانات. يمكن أن يكون مصدر المقارنة وهدفها أي مجموعة من قاعدة البيانات المتصلة أو مشروع قاعدة بيانات SQL Server أو لقطة أو ملف .dacpac. تظهر نتائج المقارنة كمجموعة من الإجراءات التي يجب اتخاذها مع الهدف لجعله نفس المصدر. بمجرد اكتمال المقارنة ، يمكنك تحديث الهدف مباشرةً (إذا كان الهدف مشروعًا أو قاعدة بيانات) أو إنشاء برنامج نصي للتحديث له نفس التأثير.

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

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

يقارن الإجراء التالي مخطط مشروع قاعدة البيانات بقاعدة بيانات متصلة.

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

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

لمقارنة تعريفات قاعدة البيانات

على ال أدوات القائمة ، حدد خادم قاعدة البيانات، ثم انقر فوق مقارنة مخطط جديد.

بدلاً من ذلك ، انقر بزر الماوس الأيمن فوق ملف TradeDev مشروع في مكتشف الحل، واختر قارن المخطط.

ال قارن المخطط يتم فتح النافذة ، ويقوم Visual Studio تلقائيًا بتعيين اسم مثل SqlSchemaCompare1.

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

في ال اختر مصدر القائمة المنسدلة ، اختر اختر مصدر و ال حدد مخطط المصدر يفتح الحوار.

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

حدد ملف مشروع زر الاختيار ، ثم حدد ملف TradeDev مشروع قاعدة البيانات الذي قمت بإنشائه في الإجراء السابق.

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

في ال خصائص الاتصال في مربع الحوار ، أدخل اسم الخادم حيث توجد قاعدة بيانات TradeDev وتأكد من توفير بيانات اعتماد المصادقة الصحيحة. ثم حدد TradeDev في اتصل بقاعدة بيانات وانقر حسنا.

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

انقر على قارن زر في نافذة مقارنة المخطط شريط الأدوات لبدء عملية المقارنة.

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

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

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

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

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

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

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

لاحظ أنه إذا قمت بتحديث المقارنة ، فسيتم تجاهل تلك الاختلافات التي اخترت تخطيها.

لتحديث مخطط الهدف ، لديك خياران. يمكنك تحديث الهدف مباشرة من قارن المخطط إذا كان الهدف عبارة عن قاعدة بيانات أو مشروع ، أو يمكنك إنشاء برنامج نصي للتحديث إذا كان الهدف عبارة عن قاعدة بيانات أو ملف قاعدة بيانات. يظهر البرنامج النصي الذي تم إنشاؤه في محرر Transact-SQL ، والذي يمكنك من خلاله فحص البرنامج النصي لتنفيذه مقابل قاعدة بيانات. تصف الإجراءات التالية هذه الخيارات بشكل أكبر.

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

للتحديث مباشرة في نافذة مقارنة المخطط

انقر على تحديث على شريط الأدوات لإطار مقارنة المخطط.

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

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

للتحديث بالنص

انقر على توليد البرنامج النصي زر (الرابع من اليسار) على شريط الأدوات لنافذة مقارنة المخطط.

يظهر البرنامج النصي الذي تم إنشاؤه في نافذة محرر Transact-SQL جديدة

فقط ملفات .dacpac التي تنتجها عملية لقطة SSDT تدعم هذا السلوك. لا يمكنك استهداف ملف .dacpac تم إنتاجه بواسطة إطار عمل أو إطار عمل تطبيق بيانات طبقة بيانات SQL (DAC) في الوقت الحالي.

افحص البرنامج النصي للتغيير الذي تم إنشاؤه. يمكنك حفظ البرنامج النصي باستخدام ملف حفظ الملف أو أمر القائمة "ملف / حفظ باسم".

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

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

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

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

انقر على نفذ - اعدم زر في شريط أدوات جزء التحرير لتشغيل البرنامج النصي.


قوائم انتظار الأولوية

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

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

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

فكر في وظيفة برنامج جدولة مهام نظام التشغيل:

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

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

القائمة: قوائم الانتظار التي تم فرزها يدويًا

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

بينما يمكن العثور على نقطة الإدراج في ا(سجل ن) الوقت الذي تستخدم فيه bisect.insort في المكتبة القياسية ، هذا دائمًا ما تهيمن عليه خطوة الإدراج البطيئة.

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

هذا يعني أن القوائم المصنفة مناسبة فقط كقوائم انتظار ذات أولوية عندما يكون هناك عدد قليل من عمليات الإدراج:

Heapq: أكوام ثنائية قائمة على القائمة

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

تعد هذه الوحدة اختيارًا جيدًا لتنفيذ قوائم الانتظار ذات الأولوية في Python. نظرًا لأن heapq لا يوفر تقنيًا سوى تنفيذ min-heap ، يجب اتخاذ خطوات إضافية لضمان استقرار الفرز والميزات الأخرى المتوقعة عادةً من قائمة انتظار عملية ذات أولوية:

Queue.PriorityQueue : Beautiful Priority Queues

queue.PriorityQueue uses heapq internally and shares the same time and space complexities. The difference is that PriorityQueue is synchronized and provides locking semantics to support multiple concurrent producers and consumers.

Depending on your use case, this might be helpful, or it might just slow your program down slightly. In any case, you might prefer the class-based interface provided by PriorityQueue over the function-based interface provided by heapq :

Priority Queues in Python: Summary

Python includes several priority queue implementations ready for you to use.

queue.PriorityQueue stands out from the pack with a nice object-oriented interface and a name that clearly states its intent. It should be your preferred choice.

If you&rsquod like to avoid the locking overhead of queue.PriorityQueue , then using the heapq module directly is also a good option.


Combining features from different layers (Union)

Union combines selected features into one new feature. Although the features may be from different layers, the layers must be of the same geometry type—either line or polygon. Union maintains the original features and their attributes—that is, the selected features are not deleted or edited during the Union operation. The new feature is created with the chosen template using the default attribute values. For example, with Union, you can use some selected parcels to create a polygon representing a neighborhood crime prevention area.

You can also create a multipart feature using the Union command by combining nonadjacent features from different layers. For example, to create a sedimentary rock polygon in a new rock classification layer given selected clay and quartz polygons in an existing rock composite layer, use the Union command to combine the clay and quartz features to create a new multipart sedimentary rock feature in the rock classification layer.

The Union command works on selected features, allowing you to choose which features will be combined in the output. On the other hand, the Union geoprocessing tool combines features from all input layers or feature classes and allows you to determine which attributes from the input features are transferred to the output feature class.

You can use the Merge command on the Editor menu instead of Union if the selected features are all in the same layer and you want to combine them into a single feature and choose the resulting attributes.

  1. انقر فوق أداة التحرير على شريط أدوات المحرر.
  2. Click the features you want to combine into one.
  3. Click the Editor menu and click Union .
  4. Choose the target in which the new feature will be created.
    • If you have feature templates for the layers in your map, click the Template button and click the template to use to create the new feature. You can also double-click the preview of the template to choose a different template.
    • If you do not have feature templates, click the layer in which to create the feature.
  5. انقر فوق موافق .

شاهد الفيديو: تعلم لغة بايثون - بايثون هي اسوأ اختيار