##やろうとしていること
CSVファイルのデータに応じた処理を行いたいと考えています。
CSVファイルのデータは、データが毎分更新されてきます。
※csvファイルのデータ数は100個で、1分毎に末尾にデータを追加。1番上のデータは削除されていきます。
行いたい処理
csvデータ6列目の温度データが、25℃を超えたらLEDを0.5秒点灯する。
↓のCSVデータにLEDを点灯させたいときのデータを記載しました
##困っていること
25℃を超えた温度データは、CSVファイルにずっと(100個データ保存しているので、100分間)残ります。
プログラム①を実行すると、csvファイルを読み取るたびに、LEDが点灯してしまいます。
これを改善するために、次の考えでプログラム②を考えています。
1つ前の温度データを保持して、今の値と比較することで、LEDを点灯させるようにしたいと考えています。
プログラム②を実行すると、
1つ前の温度データprev_tmaxと
今の温度データtmaxの値が同じになってしまいます。
コードに不備があると思い、見直していたのですが、原因が分からず困っています。
##プログラム①
python
1def read_temp(): 2 df = pd.read_csv('temp.csv', names=['year', 'month', 'day', 'hour', 'minute', 'temperature']) 3 tmax=df['temperature'].max() 4 5 if(tmax >= 25.0): 6 GPIO.output(6, GPIO.HIGH) 7 sleep(0.5)
##プログラム②
python
1def read_temp(): 2 df = pd.read_csv('temp.csv', names=['year', 'month', 'day', 'hour', 'minute', 'temperature']) 3 tmax=df['temperature'].max() 4 if(tmax >= 25.0): 5 prev_tmax = df['temperature'].max() 6 GPIO.output(6, GPIO.HIGH) 7 sleep(0.5) 8 9 print (prev_tmax) 10 print (tmax)
##CSVデータ
csv
12019,11,1,14,57,17 22019,11,1,14,59,21 32019,11,1,15,1,22 42019,11,1,15,3,18 52019,11,1,15,4,19 62019,11,1,15,6,21 72019,11,1,15,8,17 82019,11,1,15,10,22 92019,11,1,15,12,19 102019,11,1,15,14,18
タグは「Python」や「Python3」ではないですか。ご提示のコードはpython3ですよね。
ご提示のpython3のコードでそこまでできているのであれば、そのまま改造を進めれば良いのでは。条件を満たしてLED点灯したものをファイルなどで覚えておいて、次に読んだときに同じならスキップすれば良いです。日時で判定しても良いでしょうし。(この日時のデータまでは処理済み、と判定)
コードについて、すみません。
本題から反れるのですが、私が使用しているラズパイの環境は、
$ python -V
Python 2.7.16 です。
print()となっているので、python3と指摘されていると思いますが、
このコードでも、私の環境で動作しています。
コードの編集は、win10PC visual studioで行っています。
> このコードでも、私の環境で動作しています。
そうでしたか。それでは私の方の誤解と間違いです。
python3 での print関数ではなく、python2.x のprint文と、('文字列') の扱いですね。失礼しました。[コメント修正]
いえいえ。私の方こそ、掲載するコードからPrint()の()を削除しておけばよかったです。
本題に戻りますが、回答ありがとうございます。
掲載したプログラムの実行結果は、
最高温度:27.240 :11/01_15:04に記録
となりますが、
回答いただいた、2つの方法について。
①条件を満たしてLED点灯したものをファイルなどで覚えておいて、次に読んだときに同じならスキップ
②条件を満たした日時以降のデータのみ判定
①の方法で試してみたいと思いますが、具体的な方法が全く分かっておりません。
アドバイスをいただけると助かります。
コードはご自分で書かれたものではないのですか? ご提示のものでそこまで出来ているのであれば、ご自分で書けるレベルの修正だと思うのですが。
コードは、ここで質問させていただきながら、作成させていただきました。
2つの方法を教えていただきましたが、それをコード化できるレベルに至っていないのが正直なところです。
> アドバイスをいただけると助かります。
ファイルの読み出し、書き込みについて調べて、扱えるようになってください。これ以上はコード書いた方が早いです。(そうだと丸投げです)
> ①の方法で試してみたいと思いますが、具体的な方法が全く分かっておりません。
①は思い付きで書きましたが、実際の動作をイメージするとわかりますが、実行した日時のデータをすべて保存しなくてはならなくなります。ということで、どちらかと言うとお勧めは②です。これだと処理済みである最新の日時、ひとつだけ覚えれば十分なはずです。
もちろん、私のコメントがすべてではありませんし、もっと良い方法があるかもしれませんので、他回答者様の回答を待つのも一手です。
CSVファイルは改変しても良いのですか?
改変と言うと、データの構成を変えると言うことでしょうか?
できれば、今のデータ形式のまま使用できたらと考えています。
質問に掲示したデータの値を変更するのは、全く問題ありません。
「条件を満たした行の先頭や最後にマークを付ける(#など)」という意味です。
そうすればマークの付いた行はスクリプト内で無視すれば良いです。
そういう意味での改変は、全く問題ありません。
回答1件
あなたの回答
tips
プレビュー