Мазмұны:

Деректерді қосымша тіркеу тәжірибелері (Python көмегімен): 11 қадам
Деректерді қосымша тіркеу тәжірибелері (Python көмегімен): 11 қадам

Бейне: Деректерді қосымша тіркеу тәжірибелері (Python көмегімен): 11 қадам

Бейне: Деректерді қосымша тіркеу тәжірибелері (Python көмегімен): 11 қадам
Бейне: ChatGPT плагиндерін үйрену және боттың максималды деңгейіне жету 2024, Шілде
Anonim
Деректерді кеңейтілген тіркеу эксперименттері (Python көмегімен)
Деректерді кеңейтілген тіркеу эксперименттері (Python көмегімен)

Деректерді тіркеуге арналған нұсқаулықтар өте көп, сондықтан мен өз бетімше тіркеу жобасын жасағым келгенде, айналаға қарап шықтым. Кейбіреулер жақсы болды, кейбіреулері онша емес, сондықтан мен жақсы идеялардың кейбірін қабылдауға және өз өтінішімді жасауға шешім қабылдадым. Нәтижесінде мен күткеннен гөрі жетілдірілген және күрделі жоба пайда болды. Оның бір бөлігі сенсорлық мәліметтерді өңдеу бойынша эксперименттер сериясына айналды. Бұл нұсқаулық сізге ұқсас немесе ұқсас эксперименттерді қолдануға мүмкіндік береді.

(Сіз барлық кодты қарап, оны жүктей аласыз: GitHub -тегі кодты көруге болады, мүмкін басқа терезеде, тек 2 рет басу арқылы)

Деректерді тіркеу әдетте мыналарды қамтиды:

  • Деректерді алу: сенсордан кейбір деректерді оқу. Көбінесе бұл Arduino сияқты құрылғыдағы аналогты цифрлық түрлендіргішті (ADC) оқу.
  • Деректерді өңдеу: ADC мәнін оқу кезінде түрлендіргіштердің шығысы әдетте дұрыс бірліктерге масштабталуы керек. Датчик қателерін түзету үшін мәндерді калибрлеу үшін кейбір түзетулер енгізу қажет болуы мүмкін.
  • Сүзу: Деректерде әдетте шуыл бар, оны сүзуге болады, сондықтан сіз шу емес, сіздің деректеріңіздегі сигналды іздейсіз.
  • Деректерді сақтау: Деректер мәтіндік файлға, мүмкін бұлтқа сақталады. Деректер қуат өшіп қалса да аман қалуы керек. Деректерді көп сақтау оңай, бізде деректерді сақтау кеңістігін азайтудың кішкене амалдары бар.
  • Деректерді көрсету: деректерді тіркеу емес, деректерді қарау әдістері, бірақ егер сіз деректерді көрсетпесеңіз, оны жинаудың қажеті не?
  • Қашықтан қатынау: қажет емес, бірақ жақсы.

Нұсқаулықтардың көпшілігі жоғарыда айтылғандардың бәрін қамтиды, немесе оларды өте қарапайым түрде жасайды. Бұл нұсқаулық журналды жиі өткізіп жіберетін 2 мәселені шешеді және бонус ретінде бұлтты қызметті пайдаланбай -ақ сіздің деректеріңізді графикалық түрде құруға мүмкіндік береді. Сіз бәрін қолдана аласыз немесе бөлшектерді алып тастай аласыз және оларды өзіңіздің жеке жобаңызға қосасыз.

1 -қадам: құралдар мен материалдар

Құралдар мен материалдар
Құралдар мен материалдар

Бұл мысал Python -да бар, сондықтан ол Mac, PC, Linux және Raspberry Pi сияқты кез келген ОЖ -де жұмыс істейді және жұмыс істейді.

Бұл нұсқаулықты пайдалану үшін сізге жұмыс істейтін Python 3.6 ортасы қажет және бекітілген кодты жүктеңіз. Мен орнатқан кодты іске қосқаннан кейін оны өзіңіздің тәжірибелеріңізге өзгертуге болады. Әдеттегідей Python -да бәрі жұмыс істеуі үшін сізге кейбір пакеттер/модульдерді қосу қажет болуы мүмкін. My Spyder ортасы барлық қажетті бөліктермен қамтамасыз етілген (қараңыз: Python Screen Scraping көмегімен графикалық нұсқаулықтар). Кез келген қате туралы хабарды қарауды бірінші рет іске қосқанда, олар сіздің ортаңызда жоқ бөліктер туралы хабарлайды.

Келесі екі қадам сізге өзіңіздің жеке тәжірибеңізді қалай құруға және жүргізуге болатынын айтады, бірақ сіз өзіңіздің тәжірибеңізге дейін енгізілген эксперименттерді орындағанша күткеніңіз жөн болар.

Кодты түсіну үшін сізге объектіге бағытталған Python -мен біраз тәжірибе қажет, бұл түсіндіруге болмайды, бірақ Google сізге қажет кез келген көмекті көрсетуі керек.

Кодқа назар аударыңыз: (GitHub -тегі кодты көруге болады, мүмкін басқа терезеде, тек 2 рет басу арқылы) қазір Python 3.6 -де, сондықтан 3.6 болса жақсы болар еді. Кодтың ескі нұсқасы мына сілтемелерде.

2 -қадам: Эксперимент құру

Эксперимент құру
Эксперимент құру

Эксперимент құруда үш бағдарламалау қадамы (және сызықтар) бар. Әрбір эксперимент simulate_logging.py файлындағы LoggingSim объектісіндегі функция болып табылады. Келесі қадамда іске қосылатын 1 -экспериментке (тек бірінші график) қарайық:

def Experim_with_sample_rates (өзіндік):

print «» «Үлгілердің жылдамдығымен эксперимент» Delta T «өзгерту арқылы әр түрлі үлгі жылдамдықтарын қарау» «» self.start_plot (plot_title = «Үлгі жылдамдықтары - 1/3 бөлім: Delta T = 1.0») self.add_sensor_data (аты = «dt = 1. «, амплитудасы = 1., шуыл_амп =.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 -қадам: Эксперимент: үлгі жиілігі

Тәжірибе: үлгі жылдамдығы
Тәжірибе: үлгі жылдамдығы
Эксперимент: үлгі жылдамдығы
Эксперимент: үлгі жылдамдығы
Эксперимент: үлгі жылдамдығы
Эксперимент: үлгі жылдамдығы

Тренажер, осында орнатылғанда, әрқашан амплитудасының жақсы тегіс синусоидалық толқынын шығарады. Бұл эксперимент үшін біз үлгілер арасындағы уақыт айырмашылығы delta_t бойынша реттелген үлгі жылдамдығымен араласамыз. Бізде шу немесе басқа өңдеу болмайды. Кодта 3 үлгі жылдамдығы пайдаланылады (delta_t = 1.0, 0.1 және 0.01.) Графиктер бір -бірінің үстіне түсетіндіктен, эксперимент 3 түрлі графикті шығару үшін орнатылған. Алынған графиктер осы қадамның суреттері болып табылады.

def Experim_with_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 () # ------------- ----------------------------------- self.start_plot (plot_title = «Эксперимент үлгілерінің жылдамдығы 2/3: Delta T = 0.1 «) self.add_sensor_data (name =» 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 (name = «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 ()

Мүмкін болатын қорытындылар:

  • Іріктеу жылдамдығының тым төмен болуы өте нашар.
  • Жоғары көрсеткіштер көбінесе жақсы.

(GitHub төмендегі Python 3.6 коды нұсқаулықта, 2.7)

5 -қадам: Эксперимент: шуды көрсету

Эксперимент: Шуды көрсету
Эксперимент: Шуды көрсету

Бұл экспериментте біз бір сигналды сақтаймыз, орташа іріктеу жиілігін қолданамыз және әр түрлі шуылға ие боламыз (шу_амп =.0,.1, 1.0.) Оны іске қосыңыз: sim_logging.experiment_showing_noise (). Шығару 3 сызықтан тұратын бір график.

Мүмкін болатын қорытынды:

Шу сигналды көруді қиындатады, егер мүмкін болса, оны азайтыңыз

Код:

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

def Experience_showing_noise (өзін): басып шығару «» «Шуды көрсететін эксперимент Шудың амплитудасын өзгерту арқылы шудың әр түрлі мөлшеріне қарау.» «» self.start_plot (plot_title = «Шу көрсететін эксперимент») self.add_sensor_data (name = «шу = 0.0 «, амплитудасы = 1., шуыл_амп =.0, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (name =» шу = 0.1 «, амплитуда = 1., шу_амп =. 1, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (name = «шу = 1.0», амплитудасы = 1., шу_амп = 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 eksperiment_with_moving_average (өзінше): басып шығару «» «MovingAverage тәжірибесі, ұзындығын өзгерту арқылы әр түрлі MovingAverage-ты қарау. Барлығының шуылдары бірдей» «» # ------------------ ------------------------------ self.start_plot (plot_title = «MovingAverage-Part 1/2: No Moving Average») өзіндік.add_sensor_data (name = «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-2/2 бөлімі: Len 8 және 32») self.add_sensor_data (name = «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», амплитудасы = 1., шу_амп =.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 эксперименттері_мен_жылжымалы_орта_мәнінің_суреті (өзіндік):

print «» «Жылжымалы орташа және үлгі жылдамдығымен тәжірибе, 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., шу_амп =.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., шу_амп =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value = 0) self.show_plot ()

8 -қадам: Эксперимент: Триггермен тіркеу

Эксперимент: Trigger көмегімен тіркеу
Эксперимент: Trigger көмегімен тіркеу

Бұл экспериментке біз триггер қосамыз. Біріншіден, мен триггер дегенді қалай түсінемін? Триггер - бұл біз деректерді жинайтын әдіс, бірақ оны кейбір айнымалы мән айтарлықтай өзгергеннен кейін ғана сақтаймыз. Бұл эксперименттерде мен уақыт (х осі) айнымалысына триггер қойдым. Триггерді қолдана отырып, мен жылдам іріктеудегі деректердің үлкен көлемін ала аламын және оны деректердің ақылға қонымды мөлшеріне дейін төмендете аламын. Бұл ерекшелігі жоғары іріктеу жылдамдығымен және ұзақ жұмыс істейтін орташа көрсеткішпен пайдалы.

Мен соңғы эксперименттен №2 жолды алдым, ол «жақсы» болды және триггер болды. Оны іске қосыңыз: sim_logging …… Шығу - бұл бір график, х сызықтар.

Не болады? Біз деректердің ақылға қонымды көлемі бар «жақсы» сюжетті аламыз (№1 сияқты). Өңдеуге жоғары шығындар қажет болды. Тұтастай алғанда, нәтижелер №1 -ге ұқсас, сүзу аз болған кездегі іріктеу жылдамдығының төмендігі. Сіз қорытынды жасай аласыз:

  • Ұзақ уақыт жұмыс істеп тұрғанда, деректердің ақылға қонымды мөлшерімен шуды жақсы төмендетуге болады.
  • Қосымша өңдеу әлдеқайда жақсы нәтиже бермеуі мүмкін және шығынмен бірге келеді.

Код:

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

def Experience_with_trigger (өзінше): басып шығару «» «Триггермен тәжірибе, dt, орташа жұмыс және триггердің барлығы әр түрлі» «» # ----------------------- ------------------------- self.start_plot (plot_title = «Trigger 1/1-Triggering On») self.add_sensor_data (name = «dt =.1 ra = 10, trig = 0 «, амплитудасы = 1., шу_амп =.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., шу_амп =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()

=

9 -қадам: Эксперимент: Триггермен тіркеу - шулы дыбыс

Эксперимент: Триггермен тіркеу - жоғары шу
Эксперимент: Триггермен тіркеу - жоғары шу

Соңғы тәжірибедегідей эксперимент жасап, шуды күшейтейік. Оны іске қосыңыз: sim_logging …… Шығу - бұл бір график, 2 жол.

Енді қосымша өңдеу әлдеқайда құнды болып көрінеді. Мұнда ақылға қонымды қорытынды болуы мүмкін:

Шуды азайту үшін өңдеу көлемі мен түрін таңдау сіздің сигнал мен шуылға байланысты

Код:

def Experim_with_trigger_louder_noise (өзінше):

басып шығару «» «Алдыңғы эксперименттен гөрі қатты шу» «» self.start_plot (plot_title = «Trigger-Louder Noise Eximment») self.add_sensor_data (name = «… dt =.1 ra = 10», амплитудасы = 1., шу_амп =.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., шу_амп =.5, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()

10 -қадам: Өз тәжірибелеріңізді жасаңыз

Өз тәжірибелеріңізді жасаңыз
Өз тәжірибелеріңізді жасаңыз

Осы сәтте мен бұл нұсқаулықтағы әдістер деректерді тіркеуде пайдалы болуы мүмкін екенін көресіз деп үміттенемін, бірақ олар да ойлану үшін қолданылуы керек. Олармен тәжірибе жасау бұл процеске көмектесе алады.

Эксперименттер мен сіз қарауға болатын нәрселер туралы кейбір ескертулер:

  • Синус толқындары - бұл сигналдың жалғыз қызықты түрі емес, басқаларды, басқа толқындарды немесе пандустарды байқап көріңіз немесе ….
  • Мен шу үшін қалыпты үлестіруді қолдандым, шудың көптеген түрлері бар; басқаларды ескеру керек
  • Орташа жүгіру - қарапайым, бірақ шуды қараудың жалғыз әдісі емес

Ескерту: Уикипедиядан суреттерді тіркеу.

11 -қадам: Тіркеу бағдарламасында техниканы қолдану

Тіркеу бағдарламасында техниканы қолдану
Тіркеу бағдарламасында техниканы қолдану

Менің кодым объектіге бағытталған және орташа және триггерді өңдеуді өңдеуді Python ортасына көшіріп, содан кейін қолдануға болады. Объектілер мыналар:

  • Data_trigger.py ішіндегі DataTrigger
  • Move_average.py ішіндегі MovingAverage

Simulate_logging.py ішіндегі менің LoggingSim негізгі объектім сізге оны қалай қолдану керектігін жақсы көрсетуі керек. Егер сіз басқа тілді қолдансаңыз, сіз менің кодты оқып, өз тіліңізде қолдана аласыз.

Бұл код сіздің жобаңызға деректерді тіркеуді жақсарта алады, көріңіз.

Жоғарыдағы график russ_hensel бойынша сіздің күн энергияңыздың графигінен алынған, ол бірдей орташа объектіні қолданады.

Ұсынылған: