תוכן עניינים:

ניסויים ברישום נתונים מתקדם (שימוש בפייתון): 11 שלבים
ניסויים ברישום נתונים מתקדם (שימוש בפייתון): 11 שלבים

וִידֵאוֹ: ניסויים ברישום נתונים מתקדם (שימוש בפייתון): 11 שלבים

וִידֵאוֹ: ניסויים ברישום נתונים מתקדם (שימוש בפייתון): 11 שלבים
וִידֵאוֹ: פרופסור רון קנת - התפקיד האמיתי של מדע הנתונים 2024, נוֹבֶמבֶּר
Anonim
ניסויים ברישום נתונים מתקדם (שימוש ב- Python)
ניסויים ברישום נתונים מתקדם (שימוש ב- Python)

יש הרבה מדריכי רישום נתונים, כך שכאשר רציתי לבנות פרויקט כניסה משלי הסתכלתי סביב על חבורה. חלקם היו טובים, חלקם לא כל כך הרבה, אז החלטתי לקחת כמה מהרעיונות הטובים יותר ולהכין יישום משלי. זה הביא לפרויקט מתקדם יותר ומסובך יותר ממה שציפיתי בהתחלה. חלק אחד ממנו הפך לסדרת ניסויים בעיבוד נתוני חיישן. מדריך זה מאפשר לך לנסות את אותם ניסויים או דומים.

(אתה יכול לצפות בכל הקוד ולהוריד אותו בכתובת: קוד ב- GitHub תוכל להיכנס לצפייה, אולי בחלון אחר, עם 2 קליקים בלבד)

בדרך כלל רישום הנתונים כולל את הדברים הבאים:

  • רכישת נתונים: קרא כמה נתונים מחיישן. לעתים קרובות זו רק קריאת ממיר אנלוגי לדיגיטלי (ADC) במכשיר כמו Arduino.
  • עיבוד נתונים: בעת קריאת ערך ADC בדרך כלל יש לשנות את פלט הממירים ליחידות הנכונות. ייתכן גם שיהיה צורך לבצע התאמה מסוימת כדי לכייל את הערכים לתיקון טעויות חיישן.
  • סינון: בדרך כלל הנתונים מכילים קצת רעש, ניתן לסנן את זה כך שאתה מחפש את האות בנתונים שלך, לא את הרעש.
  • אחסון נתונים: הנתונים נשמרים, אולי בקובץ טקסט, אולי בענן. הנתונים צריכים לשרוד גם אם הכוח נכבה. קל לשמור יותר מדי נתונים, יש לנו טריק קטן לצמצם את שטח אחסון הנתונים.
  • הצגת נתונים: שיטות להסתכל על הנתונים שלך, לא ממש רישום נתונים, אבל אם אתה לא מציג הצגה כלשהי של הנתונים למה לאסוף אותם?
  • גישה מרחוק: לא הכרחי אבל נחמד שיש.

רוב ההוראות כוללות חלק מהאמור לעיל אך לא כולן, או שעושות אותן בצורה פשוטה מאוד. מדריך זה יטפל ב -2 מבעיות הרישום שדלגו עליו לעתים קרובות וכבונוס ייתן לך אמצעי לשרטט את הנתונים שלך מבלי להשתמש בשירות ענן. אתה יכול להשתמש בכל העניין או לשלוף חלקים ולחדש אותם לפרויקט משלך.

שלב 1: כלים וחומרים

כלים וחומרים
כלים וחומרים

הדוגמה הזו כלולה ב- Python כך שהיא תפעל, וניתן להשתמש בה ברכיבים, כמעט בכל מערכת הפעלה כולל Mac, PC, Linux ו- Raspberry Pi.

אז כדי להשתמש במדריך זה כל מה שאתה צריך הוא סביבת Python 3.6 פועלת, והורד את הקוד המצורף. לאחר הפעלת הקוד שהגדרתי, תוכל לשנות אותו לניסויים שלך. כרגיל עם Python ייתכן שיהיה עליך להוסיף כמה חבילות/מודולים כדי שהכל יעבוד. סביבת Spyder שלי כוללת פחות או יותר את כל החלקים הנדרשים (ראו: תצוגות גרף להנחיות עם גרידת מסך פייתון). כאשר תריץ לראשונה הודעות שגיאה כלשהן, הן יודיעו לך על חלקים חסרים בסביבה שלך.

שני השלבים הבאים יגידו לך כיצד לבנות ולהריץ ניסוי משלך, אך כנראה שעדיף לחכות עד שתפעיל את הניסויים הכלולים לפני שתנסה את עצמך.

כדי להבין את הקוד תצטרך קצת ניסיון בפייתון מונחה עצמים, ולהסביר שזה מעבר להיקף ההוראה הזה, אך Google צריכה לתת לך כל עזרה שתזדקק לה.

שימו לב לקוד: (קוד ב- GitHub אתה יכול להיכנס לצפייה, אולי בחלון אחר, עם 2 קליקים בלבד) נמצא כעת ב- Python 3.6, כך שיהיה בעל 3.6 יהיה הטוב ביותר. הגרסה הקודמת של הקוד נמצאת כאן בקישורים למטה.

שלב 2: בניית ניסוי

בניית ניסוי
בניית ניסוי

ישנם שלושה שלבי תכנות (וקווים) בבניית ניסוי. כל ניסוי הוא פונקציה באובייקט LoggingSim בקובץ simulate_logging.py. בואו נסתכל על ניסוי 1 (רק הגרף הראשון) אותו נפעיל בשלב הבא:

def experiment_with_sample_rates (self):

הדפס "" "ניסוי עם שיעורי מדגם בחינת שיעורי מדגם שונים על ידי שינוי דלתא T" "" self.start_plot (plot_title = "מחירים לדוגמא - חלק 1/3: דלתא T = 1.0") self.add_sensor_data (name = "dt = 1. ", משרעת = 1., noise_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()

כל ניסוי כתוב כפונקציה משלו כך שיש לנו קו המגדיר את הפונקציה (ניסוי def …..)

השורה הבאה, ללא הערה, (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 ()

זה רק 2 שורות:

  • צור סימולטור רישום (LoggingSim ())
  • הפעל אותו (sim_logging.experiment_with_sample_rates ())

בקוד שהורד יש לי עוד כמה שורות והערות, זה אמור להיות קל להבין.

שלב 4: ניסוי: שיעור מדגם

ניסוי: שיעור מדגם
ניסוי: שיעור מדגם
ניסוי: שיעור מדגם
ניסוי: שיעור מדגם
ניסוי: שיעור מדגם
ניסוי: שיעור מדגם

הסימולטור, כפי שהוא מוגדר כאן, תמיד פולט גל סינוס חלק ונחמד של משרעת 1. בניסוי זה נתעסק עם קצב הדגימה, כפי שהותאם על ידי delta_t, הפרש הזמן בין הדגימות. לא יהיה לנו רעש או עיבוד אחר. הקוד משתמש ב -3 קצבי דגימה (delta_t = 1.0, 0.1 ו- 0.01.) מכיוון שהגרפים נופלים זה על זה הניסוי מוגדר לייצר 3 גרפים שונים. הגרפים המתקבלים הם התמונות לשלב זה.

def experiment_with_sample_rates (self):

הדפס "" "ניסוי עם שיעורי מדגם בחינת שיעורי מדגם שונים על ידי שינוי דלתא T" "" self.start_plot (plot_title = "ניסויי דוגמאות 1/3: דלתא T = 1.0") self.add_sensor_data (name = "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 (name =" dt = 1. ", amplitude = 1., noise_amp =.0, delta_t = 0.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () # ------------------------------------------------ עצמי.start_plot (plot_title = "ניסויים לדוגמא תעריפים 3/3: דלתא T = 0.01") self.add_sensor_data (שם = "dt = 1.", משרעת = 1., noise_amp =.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 להלן ב- instructables, 2.7)

שלב 5: ניסוי: מראה רעש

ניסוי: מראה רעש
ניסוי: מראה רעש

בניסוי זה אנו שומרים על אותו אות, משתמשים בקצב דגימה בינוני ויש לנו כמויות שונות של רעש (noise_amp =.0,.1, 1.0.) הפעל אותו עם: sim_logging.experiment_showing_noise (). הפלט הוא גרף אחד עם 3 שורות.

מסקנה אפשרית:

רעש מקשה על ראיית האות, הפחת אותו אם אתה יכול

הקוד:

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

def experiment_showing_noise (self): הדפס "" "ניסוי המראה רעש התבוננות בכמויות רעש שונות על ידי שינוי משרעת הרעש." "" self.start_plot (plot_title = "ניסוי המציג רעש") self.add_sensor_data (name = "noise = 0.0 ", משרעת = 1., noise_amp =.0, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (שם =" רעש = 0.1 ", משרעת = 1., noise_amp =. 1, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (name = "noise = 1.0", amplitude = 1., noise_amp = 1., delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()

שלב 6: ניסוי: הפחת רעש עם ממוצע נע

ניסוי: הפחת רעש עם ממוצע נע
ניסוי: הפחת רעש עם ממוצע נע
ניסוי: הפחת רעש עם ממוצע נע
ניסוי: הפחת רעש עם ממוצע נע

ממוצע נע (למשל באורך 8) לוקח את 8 המדידות האחרונות וממוצע אותן. אם הרעש אקראי אנו מקווים שהוא יגיע לממוצע עד קרוב ל -0. הפעל את הניסוי עם: sim_logging.experiment_showing_noise (). פלט גרף אחד.

מסקנות אפשריות:

  • ממוצע נע אכן מבטל הרבה מהרעש
  • ככל שהממוצע הנע ארוך יותר הפחתת הרעש יותר
  • הממוצע הנע יותר עשוי להפחית ולעוות את האות

הקוד:

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

def experiment_with_moving_average (self): הדפס "" "ניסוי ב- MovingAverage התבוננות ב- MovingAverage שונה על ידי שינוי האורך. לכולם יש אותו רעש." "" # ------------------ ------------------------------ self.start_plot (plot_title = "MovingAverage-Part 1/2: אין ממוצע נע") עצמי.add_sensor_data (name = "ave len = 0", amplitude = 1., noise_amp =.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 (name = "ave len = 8", amplitude = 1., noise_amp =.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: ניסוי: ממוצע נע ושיעור מדגם

ניסוי: ממוצע נע ושיעור מדגם
ניסוי: ממוצע נע ושיעור מדגם

בניסוי זה אנו משווים את האות הגולמי עם רעש ו -2 וריאציות שונות על הפחתת הרעש.

  1. קצב מדגם בינוני וממוצע ריצה בינוני
  2. קצב מדגם גבוה וממוצע ריצה באורך גבוה

הפעל אותו עם: sim_logging …… פלט הוא גרף אחד. אני חושב שברור ש- #2 עושה עבודה טובה יותר בהפחתת הרעש, כך שנוכל להסיק כי:

קצב מדגם גבוה וממוצע ריצה באורך גבוה טובים

אבל אתה צריך לזכור שיש עלות. מספר 2 דורש הרבה יותר עיבוד וכתוצאה מכך יש לשמור הרבה יותר נתונים. המחיר עשוי להיות שווה את זה ואולי לא. בניסוי הבא נוסיף טריגר, מכשיר להפחתת כמות הנתונים המאוחסנים.

הקוד:

def experiment_with_moving_average_and_sample_rate (self):

הדפס "" "ניסוי עם ממוצע נע וקצב דגימה, dt, ממוצע ריצה הוא מגוון" "" # ---------------------------- -------------------- self.start_plot (plot_title = "ממוצע נע ושיעור מדגם") self.add_sensor_data (name = "dt =.1 ra = 0 trig = 0 ", משרעת = 1., noise_amp =.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 (שם = "dt =.01 ra = 100 טריג = 0", משרעת = 1., noise_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value = 0) self.show_plot ()

שלב 8: ניסוי: כניסה באמצעות טריגר

ניסוי: כניסה באמצעות טריגר
ניסוי: כניסה באמצעות טריגר

בניסוי זה אנו מוסיפים טריגר. ראשית, למה אני מתכוון בהדק? טריגר הוא טכניקה שבה אנו אוספים נתונים אך שומרים אותם רק לאחר שמשתנה כלשהו השתנה במידה ניכרת. בניסויים אלה הנחתי טריגר למשתנה הזמן (ציר x). באמצעות ההדק אני יכול לקחת את כמות הנתונים הגבוהה מדגימה מהירה ולהקטין אותו לכמות נתונים סבירה יותר. זה שימושי במיוחד עם שיעורי מדגם גבוהים וממוצע ריצה ארוך.

לקחתי את השורה מספר 2 מהניסוי האחרון שהיה "טוב" והוסיף טריגר. הפעל אותו עם: sim_logging …… הפלט הוא גרף אחד, x קווים.

מה קורה? אנו מקבלים עלילה "טובה" עם כמות נתונים סבירה (זהה למספר 1). היו כמה עלויות בעיבוד גבוה יותר. אולם בסך הכל התוצאות זהות למספר 1 של שיעור המדגם הנמוך יותר עם פחות סינון. אתה יכול להסיק:

  • ממוצע ריצה ארוך עם טריגר יכול לתת הפחתת רעש טובה עם כמויות נתונים סבירות.
  • העיבוד הנוסף עשוי לא לתת תוצאות טובות בהרבה וכולל עלות.

הקוד:

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

def experiment_with_trigger (self): הדפס "" "ניסוי עם Triggering, dt, הפעל ממוצע והפעל את כל ההשתנות" "" # ----------------------- ------------------------ self.start_plot (plot_title = "טריגר 1/1-מפעילה") self.add_sensor_data (name = "dt =.1 ra = 10, trig = 0 ", amplitude = 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 =.1 ", משרעת = 1., noise_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()

=

שלב 9: ניסוי: כניסה עם טריגר - רעש חזק יותר

ניסוי: כניסה עם טריגר - רעש חזק יותר
ניסוי: כניסה עם טריגר - רעש חזק יותר

בואו ניקח את אותו הניסוי כמו השלב האחרון ונגביר את הרעש. הפעל אותו עם: sim_logging …… הפלט הוא גרף אחד, 2 שורות.

כעת העיבוד הנוסף נראה שווה יותר. מסקנה סבירה כאן עשויה להיות:

בחירת כמות וסוג העיבוד להפחתת רעש תלויה באות וברעש שלך

הקוד:

def experiment_with_trigger_louder_noise (עצמי):

הדפס "" "רעש חזק יותר מהניסוי הקודם" "" self.start_plot (plot_title = "ניסוי עם רעש רם יותר") self.add_sensor_data (name = "… dt =.1 ra = 10", משרעת = 1., noise_amp =.5, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (שם = "..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 ב- moving_average.py

האובייקט העיקרי שלי LoggingSim ב- simulate_logging.py אמור לתת לך דוגמה טובה לאופן השימוש בו. אם אתה משתמש בשפה אחרת אתה יכול לקרוא את הקוד שלי וליישם בשפה שלך.

קוד זה יכול לתת לפרויקט שלך רישום נתונים טוב יותר, נסה זאת.

הגרף למעלה הוא מתוך Graph Your Power Solar מאת russ_hensel שמשתמש באותו אובייקט ממוצע פועל.

מוּמלָץ: