前提
・GUIアプリ化し、100msec毎に異常判別を行いたいです。
・Pythonで構築したアプリは遅いと聞きますので実現可能かも含めて回答いただけると嬉しいです。
・電圧の読み取りはRasberry PIかUSB-ADボードを使い取り込みを検討しています。おすすめありましたら教えてください。
実現したいこと
エクセルファイルに保存したデータをロードし、学習させ判別するところまでできてます。
判別した結果は二次元グラフ上で異常部分がハイライトされます。
data = np.loadtxt("C:/voltage.txt",delimiter="\t")の部分をリアルタイムに読み取った電圧データが入力されるようにし、
tを測定後経過時間として3000個分のデータについて、データ読み取り毎に学習と判別を行いたいと考えてます。
train_data = data[1+t:3000+t, 2]
test_data = data[3001+t:6000+t, 2]
発生している問題・エラーメッセージ
入力電圧部となる
data = np.loadtxt("C:/voltage.txt",delimiter="\t")
の部分をどのように記述すればよいかわからないので
教えてください
該当のソースコード
Python
1import numpy as np 2import matplotlib.pyplot as plt 3from sklearn.neighbors import NearestNeighbors 4 5def main(): 6data = np.loadtxt("C:/voltage.txt",delimiter="\t") 7 8train_data = data[1:3000, 2] 9test_data = data[3001:6000, 2] 10 11width = 100 12nk = 1 13 14train = embed(train_data, width) 15test = embed(test_data, width) 16 17neigh = NearestNeighbors(n_neighbors=nk) 18neigh.fit(train) 19d = neigh.kneighbors(test)[0] 20 21# 距離をmax1にするデータ整形 22mx = np.max(d) 23d = d / mx 24 25# プロット 26test_for_plot = data[3001+width:6000, 2] 27fig = plt.figure() 28ax1 = fig.add_subplot(111) 29ax2 = ax1.twinx() 30 31p1, = ax1.plot(d, '-b') 32ax1.set_ylabel('distance') 33ax1.set_ylim(0, 1.2) 34p2, = ax2.plot(test_for_plot, '-g') 35ax2.set_ylabel('original') 36ax2.set_ylim(0, 12.0) 37plt.title("Nearest Neighbors") 38ax1.legend([p1, p2], ["distance", "original"]) 39plt.savefig('./results/knn.png') 40plt.show() 41 42def embed(lst, dim): 43emb = np.empty((0,dim), float) 44for i in range(lst.size - dim + 1): 45tmp = np.array(lst[i:i+dim])[::-1].reshape((1,-1)) 46emb = np.append( emb, tmp, axis=0) 47return emb 48 49if __name__ == '__main__': 50main()
試したこと
補足情報(FW/ツールのバージョンなど)
Anaconda
python 3.8
あなたの回答
tips
プレビュー