İçindekiler:
- Adım 1: Araçlar ve Malzemeler
- 2. Adım: Bir Deney Oluşturma
- 3. Adım: Bir Deneme Çalıştırma
- Adım 4: Deney: Örnekleme Hızı
- Adım 5: Deney: Gürültü Gösterme
- Adım 6: Deney: Hareketli Ortalamayla Gürültüyü Azaltın
- Adım 7: Deney: Hareketli Ortalama ve Örnekleme Hızı
- 8. Adım: Deney: Tetikleyiciyle Günlüğe Kaydetme
- 9. Adım: Deney: Tetikle Günlüğe Kaydetme - Daha Yüksek Gürültü
- Adım 10: Kendi Deneylerinizi Yapın
- Adım 11: Günlük Kayıt Yazılımınızda Teknikleri Kullanma
Video: Gelişmiş Veri Günlüğü Deneyleri (Python Kullanarak): 11 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:17
Çok sayıda veri kaydı talimatı var, bu yüzden kendime ait bir kayıt projesi oluşturmak istediğimde etrafa baktım. Bazıları iyiydi, bazıları pek değil, bu yüzden daha iyi fikirlerden bazılarını alıp kendi başvurumu yapmaya karar verdim. Bu, ilk başta beklediğimden hem daha gelişmiş hem de daha karmaşık bir projeyle sonuçlandı. Bunun bir kısmı, sensör verilerinin işlenmesinde bir dizi deney haline geldi. Bu talimat, aynı veya benzer deneyleri denemenizi sağlar.
(Kodların tamamını şuradan görüntüleyebilir ve indirebilirsiniz: Code at GitHub'da sadece 2 tıklama ile belki başka bir pencerede görüntülemeye başlayabilirsiniz)
Tipik olarak veri kaydı aşağıdakileri içerir:
- Veri toplama: Bir sensörden bazı verileri okuyun. Genellikle bu, Arduino gibi bir cihazda analogdan dijitale dönüştürücüyü (ADC) okumaktır.
- Veri işleme: Bir ADC değeri okunurken, dönüştürücü çıkışının normal olarak doğru birimlere ölçeklendirilmesi gerekir. Sensör hatalarını düzeltmek için değerleri kalibre etmek için bazı ayarlamalar yapılması da gerekebilir.
- Filtreleme: Veriler genellikle bir miktar gürültü içerir, bu filtrelenebilir, böylece verilerinizdeki gürültüye değil sinyale bakabilirsiniz.
- Veri depolama: Veriler, belki bir metin dosyasına, belki de buluta kaydedilir. Güç kesilse bile veriler hayatta kalmalıdır. Çok fazla veri kaydetmek kolaydır, veri depolama alanını azaltmak için küçük bir numaramız var.
- Veri görüntüleme: Verilerinize bakma yöntemleri, gerçekten veri kaydı değil, ancak verilerin bir tür görüntüsünü yapmıyorsanız neden topluyorsunuz?
- Uzaktan Erişim: Gerekli değil ama olması güzel.
Çoğu talimat, yukarıdakilerin tümünü değil, bazılarını içerir veya bunları çok basit bir şekilde yapar. Bu talimat, sıklıkla atlanan günlük kaydı sorunlarından 2'sini ele alacak ve bir bonus olarak, bir bulut hizmeti kullanmadan verilerinizin grafiğini çıkarmanın bir yolunu sağlayacaktır. Her şeyi kullanabilir ya da küçük parçaları çekip kendi projenize dönüştürebilirsiniz.
Adım 1: Araçlar ve Malzemeler
Bu örneğin tamamı Python'dadır, bu nedenle çalışır ve bileşenler Mac, PC, Linux ve Raspberry Pi dahil olmak üzere hemen hemen tüm işletim sistemlerinde kullanılabilir.
Bu nedenle, bu talimatı kullanmak için tek ihtiyacınız olan, çalışan bir Python 3.6 ortamı ve ekli kodu indirin. Kurduğum kodu çalıştırdıktan sonra kendi deneyleriniz için değiştirebilirsiniz. Python'da olduğu gibi, her şeyin çalışmasını sağlamak için bazı paketler/modüller eklemeniz gerekebilir. Spyder ortamım hemen hemen tüm gerekli parçalarla birlikte gelir (bkz: Python Ekran Kazıma ile Eğitilebilir Görünümleri Grafik). Herhangi bir hata mesajı için watch'u ilk çalıştırdığınızda, ortamınızdaki eksik parçalar hakkında size bilgi verirler.
Sonraki iki adım size kendi denemenizi nasıl oluşturup çalıştıracağınızı söyleyecektir, ancak kendi denemenizi denemeden önce dahil edilen denemeleri çalıştırmanızı beklemek muhtemelen daha iyidir.
Kodu anlamak için nesne yönelimli Python ile biraz deneyim sahibi olmanız gerekecek, bunun bu talimatın kapsamı dışında olduğunu açıklayın, ancak Google size ihtiyaç duyabileceğiniz her türlü yardımı sağlamalıdır.
Kodu not edin: (Kod GitHub'da, belki başka bir pencerede, sadece 2 tıklamayla görüntüleyebilirsiniz) şimdi Python 3.6'dadır, bu nedenle 3.6'ya sahip olmak en iyisidir. Kodun eski sürümü aşağıdaki bağlantılarda burada.
2. Adım: Bir Deney Oluşturma
Bir deney oluştururken üç programlama adımı (ve satırları) vardır. Her deney, simulate_logging.py dosyasındaki LoggingSim nesnesindeki bir işlevdir. Bir sonraki adımda çalıştıracağımız deney 1'e (sadece ilk grafik) bakalım:
def trial_with_sample_rates(self):
print """ Numune Oranları ile Deney Delta T'yi değiştirerek farklı numune oranlarına bakma self.start_plot(plot_title = "Örnek Oranları - Bölüm 1/3: Delta T = 1.0") self.add_sensor_data(name = "dt = 1.", genlik = 1., noise_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot()
Her deney kendi fonksiyonu olarak yazılır, böylece fonksiyonu tanımlayan bir çizgimiz olur (def deney…..)
Sonraki, yorumsuz satır (start_plot(….), deney için nesneyi yaratır ve ona bir isim verir.
Sonraki, yorumsuz satır satırı, (add_sensor_data(…) birkaç satıra bölünmüştür. Potansiyel olarak gürültü ve bazı işlemlerle bir sinyali ölçen bir sensörü simüle eder. İşlev argümanları aşağıdaki gibidir:
- isim: verileri tanımlamak için son grafiğe yazılan bir isim
- genlik: sinyal ne kadar büyükse, bu talimatta her zaman 1 genliğini kullanacağız.
- noise_amp: gürültü ne kadar büyük, 0. gürültü yok, buradan başlayacağız.
- delta_t: ölçümler arasındaki süre, numune oranını kontrol eder.
- max_t: veri topladığımız maksimum süre, bu talimatta her zaman 10 kullanacağız.
- run_ave: çalışan bir ortalama kullanarak işleme, 0 işlem yok anlamına gelir.
- trigger_value: tetikleme kullanılarak işlem yapılır, 0 işlem yapılmadığı anlamına gelir
son, yorumsuz satır (self.show_plot……) grafiği görüntüler.
İşleri biraz daha karmaşık hale getirmek için, bir grafikte birden çok çizgiye veya bir deneyde birden çok grafiğe sahip olabilirsiniz, bu, aşağıdaki deneylerden açıkça anlaşılmalıdır.
3. Adım: Bir Deneme Çalıştırma
Bu, bir deneme çalıştırmanın kodudur. Python'da olduğu gibi dosyanın sonuna yerleştirilir.
sim_logging = LoggingSim()
sim_logging.experiment_with_sample_rates()
Bu sadece 2 satır:
- Bir günlük kaydı simülatörü oluşturun (LoggingSim())
- Çalıştırın (sim_logging.experiment_with_sample_rates())
İndirilen kodda birkaç satır ve yorumum daha var, anlaması kolay olmalı.
Adım 4: Deney: Örnekleme Hızı
Simülatör, burada kurulduğu gibi, her zaman güzel bir düzgün sinüs dalgası genliği verir. Bu deney için, delta_t tarafından ayarlanan örnekleme hızıyla, örnekler arasındaki zaman farkıyla uğraşacağız. Gürültü veya başka bir işlemimiz olmayacak. Kod 3 örnek oranı kullanır (delta_t = 1.0, 0.1 ve 0.01.) Grafikler üst üste geldiğinden deney 3 farklı grafik üretecek şekilde ayarlanmıştır. Ortaya çıkan grafikler bu adımın görüntüleridir.
def trial_with_sample_rates(self):
print """ Numune Oranları ile Deney Delta T'yi değiştirerek farklı numune oranlarına bakma self.start_plot(plot_title = "Deney Numune Oranları 1/3: Delta T = 1.0") self.add_sensor_data(name = "dt = 1.", genlik = 1., noise_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot() # ------------- ----------------------------------- self.start_plot(plot_title = "Deney Örnek Oranları 2/3: Delta T = 0.1") self.add_sensor_data(name = "dt = 1.", genlik = 1., noise_amp =.0, delta_t = 0.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot() # ------------------------------------------------ öz.start_plot(plot_title = "Deney Örnek Oranları 3/3: Delta T = 0.01") self.add_sensor_data(name = "dt = 1.", genlik = 1., noise_amp =.0, delta_t = 0.01, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot()
Çalıştırmak için şu satırı kullanın: sim_logging.experiment_with_sample_rates()
Olası sonuçlar:
- Çok düşük bir örnekleme oranı gerçekten kötü.
- Yüksek oranlar genellikle daha iyidir.
(GitHub'daki Python 3.6 Kodu aşağıdaki talimatlarda, 2.7'de)
Adım 5: Deney: Gürültü Gösterme
Bu deneyde aynı sinyali koruyoruz, orta örnekleme hızı kullanıyoruz ve farklı miktarlarda gürültüye sahibiz (noise_amp =.0,.1, 1.0.) Şununla çalıştırın: sim_logging.experiment_showing_noise(). Çıktı, 3 satırlı bir grafiktir.
Olası Sonuç:
Gürültü, sinyali görmeyi zorlaştırır, mümkünse azaltın
kod:
# ------------------------------------------------
def trial_showing_noise(self): print """ Gürültüyü gösteren deney Gürültü genliğini değiştirerek farklı gürültü miktarlarına bakarak. """ self.start_plot(plot_title = "Gürültü Gösteren Deney") self.add_sensor_data(name = "noise = 0.0 ", amplitüd = 1., noise_amp =.0, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data(name = "noise = 0.1", amplitude = 1., noise_amp =. 1, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data(name = "noise = 1.0", amplitüd = 1., noise_amp = 1., delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot()
Adım 6: Deney: Hareketli Ortalamayla Gürültüyü Azaltın
Hareketli bir ortalama (örneğin 8 uzunluklu) son 8 ölçümü alır ve bunların ortalamasını alır. Gürültü rastgele ise, ortalamanın 0'a yakın olacağını umuyoruz. Deneyi şu şekilde çalıştırın: sim_logging.experiment_showing_noise(). Bir grafik çıktısı alın.
Olası Sonuçlar:
- Hareketli bir ortalama, gürültünün çoğunu ortadan kaldırır
- Hareketli ortalama ne kadar uzun olursa, gürültü azaltma o kadar fazla olur
- Daha uzun hareketli ortalama, sinyali azaltabilir ve bozabilir
kod:
# ------------------------------------------------
def trial_with_moving_average(self): print """ MovingAverage ile deneme Uzunluğu değiştirerek farklı MovingAverage'a bakma. Hepsinde aynı gürültü var. """ # ------------------ ------------------------------ self.start_plot(plot_title = "Hareketli Ortalama-Bölüm 1/2: Hareketli Ortalama Yok") self.add_sensor_data(name = "ave len=0", genlik = 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 ve 32") self.add_sensor_data(name = "ave len=8", genlik = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 8, trigger_value = 0) self.add_sensor_data(name = "ave len=32", genlik = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 32, trigger_value = 0) self.show_plot ()
Adım 7: Deney: Hareketli Ortalama ve Örnekleme Hızı
Bu deneyde, ham sinyali gürültüyle ve gürültüyü azaltmada 2 farklı varyasyonu karşılaştırıyoruz.
- Orta örnekleme hızı ve orta çalışma ortalaması
- Yüksek örnekleme hızı ve yüksek uzunlukta çalışma ortalaması
Şununla çalıştırın: sim_logging…… Çıktı bir grafiktir. Sanırım #2'nin gürültüyü azaltmada daha iyi bir iş çıkardığı açık, bu yüzden şu sonuca varabiliriz:
Yüksek örnekleme hızı ve yüksek uzunluktaki çalışma ortalaması iyidir
Ancak bunun bir maliyeti olduğunu da unutmamalısınız. #2 çok daha fazla işlem gerektirir ve kaydedilecek çok daha fazla veriyle sonuçlanır. Maliyet buna değebilir veya değmeyebilir. Bir sonraki deneyde, depolanan veri miktarını azaltmak için bir tetikleyici, bir cihaz ekleyeceğiz.
kod:
def trial_with_moving_average_and_sample_rate(self):
print """ Hareketli Ortalama ve Örnekleme Hızı ile Deney, dt, çalışma ortalaması değişkendir """ # ---------------------------- -------------------- self.start_plot(plot_title = "Hareketli Ortalama ve Örnekleme Oranı") self.add_sensor_data(name = "dt=.1 ra=0 trig= 0", genlik = 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", genlik = 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", amplitüd = 1., noise_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value = 0) self.show_plot()
8. Adım: Deney: Tetikleyiciyle Günlüğe Kaydetme
Bu deneyde bir tetikleyici ekliyoruz. İlk olarak, bir tetikleyici ile ne demek istiyorum? Tetikleyici, verileri topladığımız ancak yalnızca bazı değişkenler önemli miktarda değiştikten sonra kaydettiğimiz bir tekniktir. Bu deneylerde zaman (x ekseni) değişkenine bir tetikleyici koydum. Tetikleyiciyi kullanarak hızlı örneklemeden yüksek miktarda veri alıp daha makul miktarda veriye indirebilirim. Yüksek örnekleme oranları ve uzun süreli bir ortalama ile özellikle yararlıdır.
"İyi" olan ve bir tetikleyici ekleyen son deneyden 2. satırı aldım. Şununla çalıştırın: sim_logging…… Çıktı bir grafik, x satırdır.
Ne oluyor? Makul miktarda veri içeren "iyi" bir arsa elde ederiz (1 numaralı ile aynı). Daha yüksek işlemede bir miktar maliyet olmuştur. Bununla birlikte, genel olarak, sonuçlar daha az filtreleme ile daha düşük örnekleme oranıyla 1 numara ile hemen hemen aynıdır. Şu sonuca varabilirsiniz:
- Tetikleme ile uzun süreli ortalama, makul miktarda veri ile iyi bir gürültü azaltma sağlayabilir.
- Ekstra işlem, o kadar iyi sonuçlar vermeyebilir ve bir maliyeti vardır.
kod:
# ------------------------------------------------
def trial_with_trigger(self): print """ Tetikleme, dt, ortalama çalıştırma ve tüm değişkenleri tetikleme ile deney yapın """ # ----------------------- ------------------------- self.start_plot(plot_title = "Trigger 1/1 - Triggering On") self.add_sensor_data(name = "dt=.1 ra=10, trig =0", genlik = 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", genlik = 1., noise_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot()
=
9. Adım: Deney: Tetikle Günlüğe Kaydetme - Daha Yüksek Gürültü
Son adımla aynı deneyi yapalım ve gürültüyü artıralım. Şununla çalıştırın: sim_logging…… Çıktı bir grafik, 2 satırdır.
Şimdi ekstra işlem daha değerli görünüyor. Burada makul bir sonuç şu olabilir:
Gürültü azaltma için işleme miktarını ve türünü seçmek, sinyalinize ve gürültünüze bağlıdır
kod:
def trial_with_trigger_louder_noise(self):
print """ Önceki deneyden daha yüksek gürültü """ self.start_plot(plot_title = "Tetikleyici-Yüksek Gürültülü Bir Deney") self.add_sensor_data(name = "…dt=.1 ra=10", genlik = 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", genlik = 1., noise_amp =.5, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot()
Adım 10: Kendi Deneylerinizi Yapın
Bu noktada, bu talimattaki tekniklerin veri kaydında yararlı olabileceğini, ancak bunların da biraz düşünülerek kullanılması gerektiğini göreceğinizi umuyorum. Onlarla deney yapmak bu sürece yardımcı olabilir.
Deneyler ve inceleyebileceğiniz şeyler hakkında bazı açıklamalar:
- Sinüs dalgaları tek ilginç sinyal türü değildir, başkalarını deneyin, diğer dalgaları veya rampaları veya …..
- Gürültü için normal bir dağılım kullandım, o kadar çok gürültü var ki; başkalarını düşünmelisin
- Koşu ortalamaları, gürültüye bakmak için basit bir yöntemdir ancak tek yöntem değildir.
Not: Wikipedia'dan resimleri günlüğe kaydetme.
Adım 11: Günlük Kayıt Yazılımınızda Teknikleri Kullanma
Kodum nesne yönelimli ve ortalama çalıştırma ve tetikleme işlemleri Python ortamınıza kopyalanabilir ve ardından kullanılabilir. Nesneler şunlardır:
- data_trigger.py içindeki DataTrigger
- move_average.py içinde MovingAverage
Simulate_logging.py'deki ana nesnem LoggingSim, nasıl kullanılacağına dair size iyi bir örnek vermelidir. Başka bir dil kullanıyorsanız kodumu okuyabilir ve kendi dilinizde uygulayabilirsiniz.
Bu kod, projenize daha iyi veri kaydı sağlayabilir, deneyin.
Yukarıdaki grafik, aynı çalışan ortalama nesneyi kullanan russ_hensel'in Graph Your Solar Power'ından alınmıştır.
Önerilen:
Arduino UNO ve SD-Kart ile Nem ve Sıcaklık Gerçek Zamanlı Veri Kaydedici Nasıl Yapılır - Proteus'ta DHT11 Veri Kaydedici Simülasyonu: 5 Adım
Arduino UNO ve SD-Kart ile Nem ve Sıcaklık Gerçek Zamanlı Veri Kaydedici Nasıl Yapılır | Proteus'ta DHT11 Veri Kaydedici Simülasyonu: Giriş: merhaba, ben Liono Maker, işte YouTube bağlantısı. Arduino ile yaratıcı projeler yapıyoruz ve gömülü sistemler üzerinde çalışıyoruz
Ubidots ve Google- Sheets Kullanarak Sıcaklık/Nem Veri Analizi: 6 Adım
Ubidots ve Google- Sheets Kullanarak Sıcaklık/Nem Veri Analizi: Bu eğitimde, sıcaklık ve nem sensörünü kullanarak farklı sıcaklık ve nem verilerini ölçeceğiz. Bu verileri Ubidots'a nasıl göndereceğinizi de öğreneceksiniz. Böylece farklı uygulamalar için her yerden analiz edebilirsiniz. Ayrıca göndererek
InfluxDB, Grafana ve Hassio Kullanarak Sensör Günlüğü: 5 Adım
InfluxDB, Grafana ve Hassio Kullanarak Sensör Günlüğü: Bu yazıda, InfluxDB'nin uzun vadeli sensör veri depolaması için nasıl kullanılacağını öğreniyoruz ve veri analizi için Grafana kullanıyoruz. Bu, Home Assistant'ı nasıl kuracağımızı ve kullanacağımızı öğrendiğimiz ev otomasyonu serisinin bir parçasıdır, böylece tüm bunlar Hassio kullanılarak yapılacaktır
Android / Arduino / PfodApp Kullanarak Basit Uzaktan Veri Çizimi: 6 Adım
Android / Arduino / PfodApp Kullanarak Basit Uzaktan Veri Çizme: Yalnızca Arduino'nun millis() kullanarak Tarih/Saate göre Veri Çizmek için bu InstructableArduino Tarih/Saat Çizme/Millis () ve PfodApp Kullanarak Günlüğe Kaydetme Bu Talimat, Arduino sensör verilerini cihazınızda nasıl çizeceğinizi gösterir. Android mobil ve bunun için yakalayın
MotoStudent Elektrikli Yarış Bisikleti için Veri Toplama ve Veri Görselleştirme Sistemi: 23 Adım
MotoStudent Elektrikli Yarış Bisikleti için Veri Toplama ve Veri Görselleştirme Sistemi: Veri toplama sistemi, harici sensörlerden veri toplamak, depolamak ve daha sonra işlemek için birlikte çalışan bir donanım ve yazılım topluluğudur, böylece grafiksel olarak görselleştirilip analiz edilebilir, mühendislerin yapmasına izin vermek