エンジニア

なんくるないさ

「このブログはアフィリエイト広告を利用しています」

機械学習のためのデータ取集について3(pythonで処理)

前回はセンサの情報をarduinoで読み込みパソコンにシリアル通信して、その情報をcsvファイルに書き出すプログラムを載せました。
jump1268.hatenablog.com


今回は、このプログラム(python側)の説明をします。

pythonのプログラム(jupyter notebook使用)

import pandas as pd
import numpy as np
import serial
import datetime

dt_now = datetime.datetime.now()

def main():
    ser = serial.Serial("COM10")  # COMポート(Arduino接続)

    df = pd.DataFrame(columns=["label","A","B"])

    num = 0
    while num < 20:#20回分のセンサの値をまとめてから csvファイルをつくる

        data = ser.readline().rstrip()  # \nまで読み込む(\nは削除
        data = data.decode() #対話型だとこれが必要らしい
        (xdeg, ydeg, zdeg) =data.split(",")

        new_data = pd.Series([xdeg, ydeg, zdeg], index=df.columns)

        df = df.append(new_data, ignore_index=True)

        num = num + 1

 
    time = dt_now.minute
    # CSVファイルの作成
    df.to_csv(str(time)+"分"+'output.csv')
    print(df)
    

if __name__ == '__main__':
    main()

  
出力値は下のようになります。

_____________________

label A B
0 2 510 543
1 2 510 540
2 2 510 541
3 2 510 541
4 2 510 542
5 2 511 542
6 2 511 543
7 1 512 544
8 1 511 544
9 1 511 542
10 1 510 542
11 1 511 543
12 1 510 541
13 2 509 540
14 2 510 541
15 2 510 542
16 2 510 541
17 1 510 541
18 1 509 540
19 1 509 542
___________________________________

では説明します。(多分前のブログを見ながらのほうがわかりやすい)
・import ライブラリ as 変数 →これであるライブラリを変数として読み込むことができます。
import pandas as pd →pandasというライブラリをpdという名前で使いますよ~ということです。

次にdt_now = datetime.datetime.now() 。これでこの時の時間をdt_nowという文字に代入しています。
C#の教科書で勉強した、オブジェクト名.プロパティ名=値ということと同じかな?

でmain関数に入っていきます。
最初に

ser = serial.Serial("COM10") # COMポート(Arduino接続)
でCOM10からくるシリアル通信の情報をser に代入します。

df = pd.DataFrame(columns=["label","A","B"])
は0行目にlabel , A 、Bという文字を一つの列に順番に代入します。

while 条件 :
 ,,,
,,,

これで条件が満たすうちは中の文章が繰り返されます。

この中の文章の前半
data = ser.readline().rstrip() # \nまで読み込む(\nは削除
でシリアル通信で受け取った情報(文字列)を改行コードがくるまで代入します。


data = data.decode() #対話型だとこれが必要らしい
その情報をデコードします(これがないと文字化けする)

(xdeg, ydeg, zdeg) =data.split(",")
このコードで文字列を,で分けてそれらをxdeg,ydeg,zdegという変数に代入します。

while文の後半は
new_data = pd.Series([xdeg, ydeg, zdeg], index=df.columns)
df = df.append(new_data, ignore_index=True)

これは
new_dataという文字に[xdeg, ydeg, zdeg]という配列で代入します。
そして、そのnew_dataを
main関数で作ったlabel,A,B行の下に追加されていきます。
つまり
label A B
xdeg ydeg zdeg

こんな感じで

(参考:文字 = pd.Series(データの配列, index = 横行の名前の配列))

df.append(配列)でdfの行に配列を追加するという意味

最後に
num = num + 1
でnumが0から1に変わり、while文の条件が正だからまたwhile文のコードが繰り返されます。

この動作が繰り返されてnum = 20となったら、while 分から抜けて、

time = dt_now.minute
# CSVファイルの作成
df.to_csv(str(time)+"分"+'output.csv')
print(df)

これで現在何分かの情報をtime に入れて、(今の時間.output.csv)でcsvファイルが作られます。
最後に確認のためdfというものがどんな配列になっているかprintして確認します。

↓無料体験すればアマゾンギフトが2000円もらえます。
(このサイトのプレゼント1000円+私のポケットギフト)←(笑)ギフト券使わないといけないので
登録したらコメントでもなんでも言ってください。
機械学習について勉強したい方は下のサイトで無料体験レッスンうけるのが良いかもですね。