جدول المحتويات:

تجارب في تسجيل البيانات المتقدم (باستخدام بايثون): 11 خطوة
تجارب في تسجيل البيانات المتقدم (باستخدام بايثون): 11 خطوة

فيديو: تجارب في تسجيل البيانات المتقدم (باستخدام بايثون): 11 خطوة

فيديو: تجارب في تسجيل البيانات المتقدم (باستخدام بايثون): 11 خطوة
فيديو: Web Scraping with Python Beautiful Soup - تعلم استخراج البيانات من اي موقع على الانترنت 2024, شهر نوفمبر
Anonim
تجارب في تسجيل البيانات المتقدم (باستخدام بايثون)
تجارب في تسجيل البيانات المتقدم (باستخدام بايثون)

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

(يمكنك عرض كل الكود وتنزيله على العنوان التالي: Code at GitHub ، يمكنك مشاهدته ، ربما في نافذة أخرى ، بنقرتين فقط)

عادةً ما يتضمن تسجيل البيانات ما يلي:

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

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

الخطوة 1: الأدوات والمواد

الأدوات والمواد
الأدوات والمواد

هذا المثال موجود بالكامل في Python ، لذا سيتم تشغيله ، ويمكن استخدام المكونات على أي نظام تشغيل تقريبًا بما في ذلك Mac و PC و Linux و Raspberry Pi.

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

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

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

لاحظ الكود: (Code at GitHub يمكنك مشاهدة العرض ، ربما في نافذة أخرى ، بنقرتين فقط) موجود الآن في Python 3.6 ، لذا سيكون الحصول على 3.6 هو الأفضل. نسخة أقدم من التعليمات البرمجية هنا في الروابط أدناه.

الخطوة الثانية: بناء التجربة

بناء تجربة
بناء تجربة

هناك ثلاث خطوات برمجة (وخطوط) في بناء التجربة. كل تجربة هي وظيفة في كائن LoggingSim في الملف simulate_logging.py. دعنا نلقي نظرة على التجربة 1 (فقط الرسم البياني الأول) التي سنقوم بتنفيذها في الخطوة التالية:

تجربة تعريف_ مع_Sample_rates (ذاتية):

اطبع "" التجربة مع نماذج الأسعار بالنظر إلى معدلات عينات مختلفة عن طريق تغيير delta T "" "self.start_plot (plot_title =" نماذج الأسعار - الجزء 1/3: Delta T = 1.0 ") self.add_sensor_data (name =" dt = 1. "، السعة = 1. ، الضوضاء_مب =.0 ، delta_t = 1. ، max_t = 10. ، run_ave = 0 ، trigger_value = 0) self.show_plot ()

تتم كتابة كل تجربة كوظيفة خاصة بها لذلك لدينا سطر يحدد الوظيفة (تعريف التجربة…..)

السطر التالي ، بدون تعليق ، (start_plot (….) ينشئ كائنًا للتجربة ويعطيه اسمًا.

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

  • الاسم: اسم يوضع على الرسم البياني النهائي لتعريف البيانات
  • السعة: ما مدى حجم الإشارة ، سنستخدم دائمًا سعة 1. في هذا الدليل.
  • Noise_amp: ما مدى ضخامة الضوضاء ، 0. لا يوجد ضوضاء ، سنبدأ من هنا.
  • delta_t: الوقت بين القياسات ، يتحكم في معدل العينة.
  • max_t: الحد الأقصى للوقت الذي نجمع فيه البيانات ، سنستخدم دائمًا 10 في هذه التعليمات.
  • run_ave: المعالجة باستخدام متوسط التشغيل ، 0 يعني عدم وجود معالجة.
  • Trigger_value: المعالجة باستخدام التشغيل ، 0 تعني عدم وجود معالجة

يعرض السطر الأخير بدون تعليق (self.show_plot ……) الرسم البياني.

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

الخطوة 3: إجراء التجربة

هذا هو رمز إجراء التجربة. كما هو شائع في Python ، يتم وضعه في نهاية الملف.

sim_logging = LoggingSim ()

sim_logging.experiment_with_sample_rates ()

هذا سطرين فقط:

  • إنشاء جهاز محاكاة التسجيل (LoggingSim ())
  • قم بتشغيله (sim_logging.experiment_with_sample_rates ())

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

الخطوة 4: التجربة: معدل العينة

التجربة: معدل العينة
التجربة: معدل العينة
التجربة: معدل العينة
التجربة: معدل العينة
التجربة: معدل العينة
التجربة: معدل العينة

المحاكي ، كما تم إعداده هنا ، ينتج دائمًا موجة جيبية سلسة من السعة 1. بالنسبة لهذه التجربة ، سوف نعبث بمعدل العينة ، كما تم ضبطه بواسطة delta_t ، فرق الوقت بين العينات. لن يكون لدينا ضوضاء أو معالجة أخرى. يستخدم الكود 3 معدلات نموذجية (delta_t = 1.0 و 0.1 و 0.01.) نظرًا لأن الرسوم البيانية تقع فوق بعضها البعض ، فقد تم إعداد التجربة لإنتاج 3 رسوم بيانية مختلفة. الرسوم البيانية الناتجة هي الصور لهذه الخطوة.

تجربة تعريف_ مع_Sample_rates (ذاتية):

اطبع "" التجربة مع نماذج الأسعار بالنظر إلى معدلات عينات مختلفة عن طريق تغيير delta T "" "self.start_plot (plot_title =" معدلات نماذج التجربة 1/3: Delta T = 1.0 ") self.add_sensor_data (الاسم =" dt = 1. "، السعة = 1.، Noise_amp =.0، delta_t = 1.، max_t = 10.، run_ave = 0، trigger_value = 0) self.show_plot () # ------------- ----------------------------------- self.start_plot (plot_title = "معدلات عينة التجربة 2/3: دلتا T = 0.1 ") self.add_sensor_data (الاسم =" dt = 1. "، السعة = 1. ، الضوضاء_مب =.0 ، delta_t = 0.1 ، max_t = 10. ، run_ave = 0 ، trigger_value = 0) self.show_plot () # ------------------------------------------------ الذات.start_plot (plot_title = "معدلات عينة التجربة 3/3: Delta T = 0.01") self.add_sensor_data (الاسم = "dt = 1." ، السعة = 1. ، الضوضاء =.0 ، delta_t = 0.01 ، max_t = 10. ، run_ave = 0، trigger_value = 0) self.show_plot ()

لتشغيله ، استخدم السطر: sim_logging.experiment_with_sample_rates ()

الاستنتاجات الممكنة:

  • انخفاض معدل أخذ العينات أمر سيء حقًا.
  • غالبًا ما تكون المعدلات المرتفعة أفضل.

(كود Python 3.6 في رابط GitHub أدناه في التعليمات ، 2.7)

الخطوة الخامسة: التجربة: إظهار الضوضاء

التجربة: إظهار الضوضاء
التجربة: إظهار الضوضاء

في هذه التجربة ، نحافظ على نفس الإشارة ، ونستخدم معدل عينة متوسط ، ولدينا كميات مختلفة من الضوضاء (الضوضاء =.0 ،.1 ، 1.0.) قم بتشغيلها باستخدام: sim_logging.experiment_showing_noise (). الناتج هو رسم بياني واحد بثلاثة خطوط.

الخلاصة المحتملة:

الضوضاء تجعل من الصعب رؤية الإشارة ، قم بتقليلها إذا استطعت

الرمز:

# ------------------------------------------------

def experience_showing_noise (self): print "" تجربة تظهر ضوضاء النظر إلى كميات مختلفة من الضوضاء عن طريق تغيير سعة الضوضاء. "" self.start_plot (plot_title = "تجربة إظهار الضوضاء") self.add_sensor_data (الاسم = "الضوضاء = 0.0 "، السعة = 1. ، الضوضاء_مب =.0 ، delta_t =.1 ، max_t = 10. ، run_ave = 0 ، trigger_value = 0) self.add_sensor_data (الاسم =" الضوضاء = 0.1 "، السعة = 1. ، الضوضاء =. 1، delta_t =.1، max_t = 10.، run_ave = 0، trigger_value = 0) self.add_sensor_data (الاسم = "الضوضاء = 1.0" ، السعة = 1. ، الضوضاء = 1. ، delta_t =.1 ، max_t = 10.، run_ave = 0، trigger_value = 0) self.show_plot ()

الخطوة السادسة: التجربة: تقليل الضوضاء باستخدام المتوسط المتحرك

التجربة: تقليل الضوضاء باستخدام المتوسط المتحرك
التجربة: تقليل الضوضاء باستخدام المتوسط المتحرك
التجربة: تقليل الضوضاء باستخدام المتوسط المتحرك
التجربة: تقليل الضوضاء باستخدام المتوسط المتحرك

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

الاستنتاجات الممكنة:

  • المتوسط المتحرك يزيل الكثير من الضوضاء
  • كلما كان المتوسط المتحرك أطول كلما زاد تقليل الضوضاء
  • قد يؤدي المتوسط المتحرك الأطول إلى تقليل الإشارة وتشويهها

الرمز:

# ------------------------------------------------

def experience_with_moving_average (self): اطبع "" تجربة مع متوسط الحركة بالنظر إلى متوسط حركة مختلف عن طريق تغيير الطول. جميعها لها نفس الضوضاء. "" "# ------------------ ------------------------------ self.start_plot (plot_title = "MovingAverage-Part 1/2: No Moving Average") self.add_sensor_data (الاسم = "ave len = 0" ، السعة = 1. ، الضوضاء_مب =.1 ، delta_t =.1 ، max_t = 10. ، run_ave = 0 ، trigger_value = 0) self.show_plot () self.start_plot (plot_title = "MovingAverage-Part 2/2: Len 8 and 32") self.add_sensor_data (الاسم = "ave len = 8" ، السعة = 1. ، الضوضاء_مب =.1 ، delta_t =.1 ، max_t = 10. ، run_ave = 8، trigger_value = 0) self.add_sensor_data (name = "ave len = 32"، amplitude = 1.، noise_amp =.1، delta_t =.1، max_t = 10.، run_ave = 32، trigger_value = 0) self.show_plot ()

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

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

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

  1. معدل عينة متوسط ومتوسط تشغيل متوسط
  2. معدل عينة مرتفع ومتوسط تشغيل طويل

قم بتشغيله باستخدام: sim_logging …… الإخراج عبارة عن رسم بياني واحد. أعتقد أنه من الواضح أن رقم 2 يقوم بعمل أفضل في تقليل الضوضاء ، لذلك قد نستنتج أن:

يعد معدل العينة المرتفع ومتوسط التشغيل العالي الطول جيدًا

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

الرمز:

def التجربة_ مع_moving_average_and_sample_rate (ذاتي):

اطبع "" تجربة المتوسط المتحرك ومعدل العينة ، dt ، متوسط التشغيل المتنوع "" "# ---------------------------- -------------------- self.start_plot (plot_title = "المتوسط المتحرك ومعدل العينة") self.add_sensor_data (name = "dt =.1 ra = 0 trig =" 0 "، السعة = 1. ، الضوضاء_مب =.1 ، delta_t =.1 ، max_t = 10. ، run_ave = 0 ، trigger_value = 0) self.add_sensor_data (name =" dt =.1 ra = 10 trig = 0 "، السعة = 1. ، Noise_amp =.1 ، delta_t =.1 ، max_t = 10. ، run_ave = 10 ، trigger_value = 0) self.add_sensor_data (name = "dt =.01 ra = 100 trig = 0" ، السعة = 1.، Noise_amp =.1، delta_t =.01، max_t = 10.، run_ave = 100، trigger_value = 0) self.show_plot ()

الخطوة 8: التجربة: التسجيل باستخدام المشغل

التجربة: التسجيل باستخدام المشغل
التجربة: التسجيل باستخدام المشغل

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

لقد اتخذت السطر رقم 2 من التجربة الأخيرة التي كانت "جيدة" حافزًا إضافيًا. قم بتشغيله باستخدام: sim_logging …… الإخراج عبارة عن رسم بياني واحد ، خطوط x.

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

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

الرمز:

# ------------------------------------------------

def experience_with_trigger (self): اطبع "" تجربة مع التشغيل ، dt ، تشغيل المتوسط وتشغيل كل شيء متنوع "" "# ----------------------- ------------------------- self.start_plot (plot_title = "Trigger 1/1 - Triggering On") self.add_sensor_data (name = "dt =.1 ra = 10 ، trig = 0 "، السعة = 1. ، Noise_amp =.1 ، delta_t =.1 ، max_t = 10. ، run_ave = 10 ، trigger_value = 0) self.add_sensor_data (الاسم =" dt =.01 ra = 100 ، trig =.1 "، السعة = 1. ، Noise_amp =.1 ، delta_t =.01 ، max_t = 10. ، run_ave = 100 ، trigger_value =.1) self.show_plot ()

=

الخطوة 9: التجربة: التسجيل باستخدام الزناد - ضوضاء أعلى

التجربة: التسجيل باستخدام الزناد - ضوضاء أعلى
التجربة: التسجيل باستخدام الزناد - ضوضاء أعلى

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

الآن تبدو المعالجة الإضافية أكثر قيمة. قد يكون الاستنتاج المعقول هنا:

يعتمد اختيار مقدار ونوع المعالجة لتقليل الضوضاء على الإشارة والضوضاء

الرمز:

تجربة تعريف_مع_trigger_louder_noise (ذاتي):

طباعة "" تشويش أعلى من التجربة السابقة "" self.start_plot (plot_title = "تجربة مع ضوضاء أعلى من الزناد") self.add_sensor_data (الاسم = "… dt =.1 ra = 10" ، السعة = 1. ، Noise_amp =.5، delta_t =.1، max_t = 10.، run_ave = 10، trigger_value = 0) self.add_sensor_data (name = "..dt =.01 ra = 100 tv =.1"، السعة = 1.، Noise_amp =.5، delta_t =.01، max_t = 10.، run_ave = 100، trigger_value =.1) self.show_plot ()

الخطوة 10: قم بإجراء التجارب الخاصة بك

قم بإجراء التجارب الخاصة بك
قم بإجراء التجارب الخاصة بك

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

بعض الملاحظات على التجارب والأشياء التي قد تنظر فيها:

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

ملاحظة: تسجيل الصور من ويكيبيديا.

الخطوة 11: استخدام الأساليب في برنامج التسجيل الخاص بك

استخدام التقنيات الموجودة في برنامج التسجيل الخاص بك
استخدام التقنيات الموجودة في برنامج التسجيل الخاص بك

الكود الخاص بي موجه نحو الكائن ويمكن فقط نسخ المعالجة لتشغيل المتوسط والمشغل في بيئة Python الخاصة بك ثم استخدامها. الأشياء هي:

  • DataTrigger في data_trigger.py
  • MovingAverage in move_average.py

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

يمكن أن يمنح هذا الرمز مشروعك تسجيل بيانات أفضل ، جربه.

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

موصى به: