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

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

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

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

Python 3.x

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

受付中

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

ryukaji
ryukaji

総合スコア0

Anaconda

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

Python 3.x

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

0回答

0評価

0クリップ

71閲覧

投稿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

import numpy as np import matplotlib.pyplot as plt from sklearn.neighbors import NearestNeighbors def main(): data = np.loadtxt("C:/voltage.txt",delimiter="\t") train_data = data[1:3000, 2] test_data = data[3001:6000, 2] width = 100 nk = 1 train = embed(train_data, width) test = embed(test_data, width) neigh = NearestNeighbors(n_neighbors=nk) neigh.fit(train) d = neigh.kneighbors(test)[0] # 距離をmax1にするデータ整形 mx = np.max(d) d = d / mx # プロット test_for_plot = data[3001+width:6000, 2] fig = plt.figure() ax1 = fig.add_subplot(111) ax2 = ax1.twinx() p1, = ax1.plot(d, '-b') ax1.set_ylabel('distance') ax1.set_ylim(0, 1.2) p2, = ax2.plot(test_for_plot, '-g') ax2.set_ylabel('original') ax2.set_ylim(0, 12.0) plt.title("Nearest Neighbors") ax1.legend([p1, p2], ["distance", "original"]) plt.savefig('./results/knn.png') plt.show() def embed(lst, dim): emb = np.empty((0,dim), float) for i in range(lst.size - dim + 1): tmp = np.array(lst[i:i+dim])[::-1].reshape((1,-1)) emb = np.append( emb, tmp, axis=0) return emb if __name__ == '__main__': main()

試したこと

補足情報(FW/ツールのバージョンなど)

Anaconda
python 3.8

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Anaconda

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

Python 3.x

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