Мазмуну:

Өркүндөтүлгөн маалыматтарды каттоо боюнча эксперименттер (Python менен): 11 кадам
Өркүндөтүлгөн маалыматтарды каттоо боюнча эксперименттер (Python менен): 11 кадам

Video: Өркүндөтүлгөн маалыматтарды каттоо боюнча эксперименттер (Python менен): 11 кадам

Video: Өркүндөтүлгөн маалыматтарды каттоо боюнча эксперименттер (Python менен): 11 кадам
Video: How to Do SDXL Training For FREE with Kohya LoRA - Kaggle - NO GPU Required - Pwns Google Colab 2024, Июль
Anonim
Өркүндөтүлгөн маалыматтарды каттоо боюнча эксперименттер (Python менен)
Өркүндөтүлгөн маалыматтарды каттоо боюнча эксперименттер (Python менен)

Берилиштерди каттоого көрсөтмөлөр көп, ошондуктан мен өзүмдүн кароо долбоорумду кургум келгенде, тегерегине карадым. Кээ бирлери жакшы, кээ бирлери анча деле көп эмес болчу, ошондуктан мен кээ бир жакшы ойлорду алып, өзүмдүн жеке арызымды жасоону чечтим. Бул мен күткөндөн алда канча өнүккөн жана татаал долбоорго алып келди. Анын бир бөлүгү сенсордук маалыматтарды иштетүү боюнча бир катар эксперименттерге айланган. Бул көрсөтмө сизге ошол эле же окшош эксперименттерди сынап көрүүгө мүмкүнчүлүк берет.

(Сиз бардык коддорду көрүп, жүктөп алсаңыз болот: GitHubдагы кодду көрүүгө киресиз, балким башка терезеде, болгону 2 чыкылдатуу менен)

Көбүнчө маалыматтарды каттоо төмөнкүлөрдү камтыйт:

  • Маалымат алуу: сенсордон кээ бир маалыматтарды окуу. Көбүнчө бул Arduino сыяктуу түзмөктө аналогду санариптик өзгөрткүчкө (ADC) окуу.
  • Маалыматты иштетүү: ADC маанисин окуп жатканда, өзгөрткүчтөрдүн адатта туура бирдиктерге масштабдалышы керек. Ошондой эле сенсор каталарын оңдоо үчүн баалуулуктарды калибрлөө үчүн кандайдыр бир тууралоону жасоо керек болушу мүмкүн.
  • Чыпкалоо: Көбүнчө маалыматта кандайдыр бир ызы -чуу бар, муну чыпкаласа болот, андыктан ызы -чууну эмес, маалыматыңыздагы сигналды карап жатасыз.
  • Берилиштерди сактоо: Берилиштер текст файлына, балким булутка сакталат. Маалыматтар өчүп калса дагы, аман калышы керек. Өтө көп маалыматты сактоо оңой, бизде маалыматтарды сактоо мейкиндигин кыскартуу үчүн бир аз трюк бар.
  • Берилиштерди көрсөтүү: Маалыматтарыңызды кароо ыкмалары, чынында эле маалыматтарды каттоо эмес, бирок эгерде сиз кандайдыр бир маалыматты көрсөтпөсөңүз, анда эмне үчүн аны чогултуу керек?
  • Алыстан кирүү: Кереги жок, бирок ээ болуу жакшы.

Көпчүлүк көрсөтмөлөр жогоруда айтылгандардын бардыгын камтыйт, же аларды өтө жөнөкөй жол менен жасайт. Бул үйрөткүч көбүнчө өткөрүп жиберүү маселелерин чечет жана бонус катары булут кызматын колдонбостон маалыматыңызды графикке түшүрүү мүмкүнчүлүгүн берет. Сиз бүт нерсени колдоно аласыз же биттерди жана бөлүктөрдү чыгарып, өзүңүздүн долбооруңузга ремикс кыла аласыз.

1 -кадам: Куралдар жана материалдар

Куралдар жана материалдар
Куралдар жана материалдар

Бул мисал Pythonдо бар, ошондуктан ал иштей берет жана компоненттерди колдонсо болот, дээрлик бардык OS, анын ичинде Mac, PC, Linux жана Raspberry Pi.

Демек, бул үйрөткүчтү колдонуу үчүн Python 3.6 иштеп жаткан чөйрө керек жана тиркелген кодду жүктөп алыңыз. Мен орноткон кодду иштеткенден кийин, аны өзүңүздүн эксперименттериңиз үчүн өзгөртө аласыз. Python менен адаттагыдай эле, баары иштеши үчүн, кээ бир пакеттерди/модулдарды кошуу керек болушу мүмкүн. Менин Spyder чөйрөм дээрлик бардык керектүү бөлүктөрү менен келет (кара: Python Screen Scraping менен Graph Instructable Views). Качан сиз биринчи жолу ката билдирүүлөрүн байкап көрүңүз, алар сиздин чөйрөңүздөгү жок болгон бөлүктөрү жөнүндө сизге кабарлап коёт.

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

Кодду түшүнүү үчүн объектке багытталган Python менен бир аз тажрыйбага ээ болушуңуз керек, муну түшүндүрүүгө болбойт, бирок Google сизге керек болгон жардамды бериши керек.

Кодго көңүл буруңуз: (GitHubдагы кодду көрүүгө болот, балким башка терезеде, болгону 2 чыкылдатуу менен) азыр Python 3.6де, ошондуктан 3.6га ээ болуу эң жакшы болмок. Коддун эски версиясы бул жерде төмөнкү шилтемелерде.

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

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

Эксперимент курууда үч программалоо кадамы (жана сызыктар) бар. Ар бир эксперимент simulate_logging.py файлындагы LoggingSim объектиндеги функция. Келгиле, кийинки этапта иштете турган эксперимент 1ди (биринчи графикти) карап көрөлү:

def Experim_with_sample_rates (өзүнчө):

print "" "Үлгү чендер менен эксперимент Дельта T" "" ар кандай үлгү ылдамдыгын карап "" self.start_plot (plot_title = "Үлгү чендер - 1/3 бөлүк: Delta T = 1.0") self.add_sensor_data (аты = "dt = 1. ", амплитудасы = 1., ызы -чуу = 0,0, delta_t = 1., max_t = 10, run_ave = 0, trigger_value = 0) self.show_plot ()

Ар бир эксперимент өзүнүн функциясы катары жазылган, андыктан бизде функцияны аныктоочу сызык бар (def эксперимент ……)

Кийинки, комментарийсиз сап, (start_plot (….)) Эксперимент үчүн объектти түзөт жана ага ат берет.

Кийинки, комментарийсиз сап линиясы, (add_sensor_data (…) бир нече сапка бөлүнөт. Бул потенциалдуу ызы -чуу менен сигналды өлчөөчү сенсорду симуляциялайт. Функциянын аргументтери төмөнкүчө:

  • аты: маалыматтарды аныктоо үчүн акыркы графага коюлган ат
  • амплитуда: сигнал канчалык чоң болсо, биз бул инструкцияда ар дайым 1. амплитудасын колдонобуз.
  • ызы -чуу_амп: канчалык чоң ызы -чуу, 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 -кадам: Эксперимент: Sample Rate

Эксперимент: Sample Rate
Эксперимент: Sample Rate
Эксперимент: Sample Rate
Эксперимент: Sample Rate
Эксперимент: Sample Rate
Эксперимент: Sample Rate

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

def Experim_with_sample_rates (өзүнчө):

print "" "Үлгү ставкалары менен эксперимент Дельта T" "" ар кандай үлгү ылдамдыгын карап "" self.start_plot (plot_title = "Experiment Sample Rate 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 = "Experiment Sample Rates 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 ()

Мүмкүн болгон тыянактар:

  • Тандоонун ылдамдыгы өтө начар.
  • Жогорку көрсөткүчтөр көбүнчө жакшы.

(Python 3.6 коду GitHubдагы шилтеме боюнча, инструкциялар боюнча, 2.7)

5 -кадам: Эксперимент: ызы -чууну көрсөтүү

Эксперимент: ызы -чууну көрсөтүү
Эксперимент: ызы -чууну көрсөтүү

Бул экспериментте биз бир эле сигналды сактайбыз, орточо ылдамдыкты колдонобуз жана ар кандай көлөмдөгү ызы -чууга ээ болобуз (ызы -чуу = 0,0,.1, 1,0.) Аны менен иштетиңиз: sim_logging.experiment_showing_noise (). Чыгуу 3 сызыктан турган бир граф.

Мүмкүн болгон жыйынтык:

Ызы -чуу сигналды көрүүнү кыйындатат, мүмкүн болсо азайтыңыз

Код:

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

def Experim_showing_noise (өзүн): басып чыгаруу "" "Чууну көрсөтүүчү эксперимент Чуунун амплитудасын өзгөртүү аркылуу ар кандай көлөмдөгү ызы -чууну карап көрүү." ", амплитудасы = 1., ызы -чуу = 0,0, дельта_т =.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 (өзүнчө): print "" "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-Part 2/2: Len 8 and 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", amplititude = 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 эксперимент_чармалуу_орто_жөнө_сүрөө_белгилери (өз алдынча):

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 (аты = "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 менен кирүү
Эксперимент: Trigger менен кирүү

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

Мен акыркы эксперименттен №2 линияны алгам, ал "жакшы" жана триггер кошулган. Аны менен иштетүү: sim_logging …… Чыгуу - бул бир граф, х сызык.

Эмне болот? Биз маалыматтын акылга сыярлык көлөмү бар "жакшы" сюжетин алабыз (№1 менен бирдей). Жогорку иштетүү үчүн бир аз чыгым болду. Жалпысынан алганда, жыйынтыктар #1ге окшош, анча чоң эмес чыпкалоо менен. Сиз тыянак чыгарсаңыз болот:

  • Триггер менен иштөөчү орточо көрсөткүчтөр акылга сыярлык маалымат менен жакшы ызы -чууну басаңдата алат.
  • Кошумча иштетүү анча жакшы натыйжаларды бербеши мүмкүн жана баасы менен келет.

Код:

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

def eksperiment_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 (аты =" 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 ызы-чуусу менен эксперимент") 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 чөйрөсүнө көчүрүлүп, андан кийин колдонулушу мүмкүн. Объекттер төмөнкүлөр:

  • DataTrigger in data_trigger.py
  • MoveingAverage in move_average.py

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

Бул код сиздин долбоорго маалыматтарды каттоону жакшырта алат, аракет кылып көрүңүз.

Жогорудагы график ошол эле иштеп жаткан орточо объектти колдонгон russ_hensel тарабынан Күн энергияңыздын графигинен алынган.

Сунушталууда: