質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

335閲覧

k近傍法による異常検知用PythonコードをADボードから読み取った入力電圧値に適用し正常・異常値を判別したい

ryukaji

総合スコア0

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/09/22 13:18

前提

・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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問