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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

673閲覧

KeyError: 'faultNumber 'の対処方法

kouji_39

総合スコア164

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/08/23 09:47

1.前提・実現したいこと
「スモールデータ解析と機械学習(オーム社)」テキストで、
異常検知の勉強中です。
RData 形式の読み込みを次のアドレスからgoogleColabにとりこみました(https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/6C3JR1)
それから、20個の異常データを生成するコードです。
コード実行後、2.発生している問題・エラーメッセージのようなエラーが出ます。
ご助言をお願いします。

2.発生している問題・エラーメッセージ
KeyError Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
3361 return self._engine.get_loc(casted_key)
3362 except KeyError as err:
-> 3363 raise KeyError(key) from err
3364
3365 if is_scalar(key) and isna(key) and not self.hasnans:

KeyError: 'faultNumber '

3.該当のソースコード

python3

1i!pip install rdata 2import rdata 3import pandas as pd 4 5# RData 形式の読み込み,https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/6C3JR1 6train_parsed = rdata.parser.parse_file('/content/drive/MyDrive/(個別デレクトリィ)/TEP_FaultFree_Testing.RData') 7train_converted = rdata.conversion.convert(train_parsed) 8 9test_parsed = rdata.parser.parse_file('/content/drive/MyDrive/(個別デレクトリィ)/TEP_Faulty_Testing.RData') 10test_converted = rdata.conversion.convert(test_parsed) 11 12 13# csv ファイルに変換 14# 異常データ 15test_data = pd.DataFrame(test_converted ['faulty_testing']) 16# 異常ごとに分割してcsv 形式で出力 17for i in range(1, 21): 18 idv_data = test_data [test_data ['faultNumber '] == i] 19 idv_data = idv_data.iloc [0:960, 3:] 20 title_name = 'idv '+ str(i)+ '_data.csv' 21 idv_data.to_csv(title_name, index = False)

4.自分で調べたことや試したこと
・Google検索では、有効情報なし。

5.使っているツールのバージョンなど補足情報
開発環境:Google Colaboratory
プログラム言語:python3
OS:windows10 Home
CPU:Intel(R) Core(TM) i7-7500U CPU@2.70GHz 2.90GHz

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

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

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

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

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

can110

2022/08/23 10:17

'faultNumber 'だと末尾に空白文字が入っていますが、不要ではないでしょうか?
melian

2022/08/23 10:19 編集

最後にスペースが入っていますので削って下さい。 idv_data = test_data [test_data ['faultNumber '] == i]                       ^
kouji_39

2022/08/23 12:21

can110さん、melianさん、ご助言ありがとうございました。
kouji_39

2022/08/23 13:25

追加助言、ありがとうございます。 質問追加ですが、テキストp235頁の下記コードで、「T2_train, Q_train = mspc_T2Q(train_data, meanX, stdX, U, S, V)」の行で、ValueError: matrices are not alignedというエラーが出ます。 何か、ご助言いただけますでしょうか。 ## ------------------------6.8 ------------------------ # 正常データを用いたモデルの学習 meanX, stdX, U, S, V = mspc_ref(train_data, numPC = 17) # 管理限界の決定 T2_train, Q_train = mspc_T2Q(train_data, meanX, stdX, U, S, V) CL_T2_mspc, CL_Q_mspc = mspc_CL(T2, Q, alpha = 0.99) # 異常データのT2 統計量とQ 統計量の計算 T2_mspc, Q_mspc = mspc_T2Q(faulty_data, meanX, stdX, U, S, V)
kouji_39

2022/08/23 13:28

下記が、mspcの定義ファイルです。 ============↓ import math import numpy as np from scale import autoscale, scaling def mspc_ref(X, numPC): """ SDV を用いてMSPC モデルを学習します パラメータ ---------- X: 正常データ行列 numPC: 採用する主成分数 戻り値 ------- meanX: 正常データの平均 stdX: 正常データの標準偏差 U: 左特異ベクトル S: 特異値 V: 右特異ベクトル """ # 標準化 X, meanX, stdX = autoscale(X) # PCA U, S, V = np.linalg.svd(X) U = U[:,: numPC] S = np.diag(S[: numPC]) V = V[:,: numPC] return meanX, stdX, U, S, V def mspc_T2Q(X, meanX, stdX, U, S, V): """ 学習させたMSPCモデルより, 監視対象サンプルの T2, Q 統計量を計算します. パラメータ ---------- X: 監視対象データ meanX: 正常データの平均 stdX: 正常データの標準偏差 U: 左特異ベクトル S: 特異値 V: 右特異ベクトル 戻り値 ------- T2: T2 統計量 Q: Q 統計量 """ # 学習データに合わせて標準化する X = scaling(X, meanX, stdX) I = np.eye(X.shape[1]) # T2,Q の計算 T2 = np.diag(X @(V @ np.linalg.inv(S @ S)@ V.T)@ X.T) Q = np.diag(X @(I - V @ V.T)@ X.T) return T2, Q def cont_T2Q(X, meanX, stdX, U, S, V): """ パラメータ ---------- X: 監視対象サンプル meanX: 正常データの平均 stdX: 正常データの標準偏差 U: 左特異ベクトル S: 特異値 V: 右特異ベクトル 戻り値 ------- cont_T2: T2 統計量の寄与 cont_Q: Q 統計量の寄与 """ X = scaling(X, meanX, stdX) # 寄与の計算 cont_T2 = np.multiply(X, X @ V @ np.linalg.inv(S @ S/X.shape [0])@ V.T) cont_Q = np.power(X @(np.eye(X.shape [1]) - V @ V.T), 2) return cont_T2, cont_Q def mspc_CL(T2, Q, alpha=0.99): """ T2 統計量とQ 統計量の管理限界を計算します パラメータ ---------- T2: 管理限界決定用T2 統計量 Q: 管理限界決定用Q 統計量 alpha: 信頼区間(デフォルト99 %) 戻り値 ------- meanX: 正常データの平均 stdX: 正常データの標準偏差 U: 左特異ベクトル S: 特異値 V: 右特異ベクトル """ sort_T2 = sorted(T2) CL_T2 = T2[math.floor(alpha * len(train_data))] sort_Q = sorted(Q) CL_Q = Q[math.floor(alpha * len(train_data))]
jbpb0

2022/08/24 00:41 編集

この質問とは別の内容なので、この質問はご自身で書いた回答で「自己解決」にして、追加の分は別の質問にしてください 【追記】 https://www.ohmsha.co.jp/book/9784274227783/#anchor3 の「ダウンロード」から書籍のコードがダウンロードできますが、それを使った場合でも書籍235ページのコードで同じエラーが出ますでしょうか? ダウンロードしたコードではエラーが出ないなら、質問者さんが実行したコードとダウンロードしたコードの相違点を調べてみてください
guest

回答1

0

自己解決

下記のように、'faultNumber '⇒'faultNumber'で、エラー解消しました。
KeyErrorが「存在しない辞書のキーを参照しているエラー」と考えると納得です。
(正答)
idv_data = test_data [test_data ['faultNumber'] == i]

※can110さん、melianさん、ご助言ありがとうございました。

投稿2022/08/23 12:21

kouji_39

総合スコア164

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

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

kouji_39

2022/08/23 13:50

追加助言、ありがとうございます。 質問追加ですが、テキストp235頁の下記コードで、「T2_train, Q_train = mspc_T2Q(train_data, meanX, stdX, U, S, V)」の行で、ValueError: matrices are not alignedというエラーが出ます。 何か、ご助言いただけますでしょうか。 ## ------------------------6.8 ------------------------ # 正常データを用いたモデルの学習 meanX, stdX, U, S, V = mspc_ref(train_data, numPC = 17) # 管理限界の決定 T2_train, Q_train = mspc_T2Q(train_data, meanX, stdX, U, S, V) CL_T2_mspc, CL_Q_mspc = mspc_CL(T2, Q, alpha = 0.99) # 異常データのT2 統計量とQ 統計量の計算 T2_mspc, Q_mspc = mspc_T2Q(faulty_data, meanX, stdX, U, S, V) 下記が、mspcの定義ファイルです。 ============↓ import math import numpy as np from scale import autoscale, scaling def mspc_ref(X, numPC): """ SDV を用いてMSPC モデルを学習します パラメータ ---------- X: 正常データ行列 numPC: 採用する主成分数 戻り値 ------- meanX: 正常データの平均 stdX: 正常データの標準偏差 U: 左特異ベクトル S: 特異値 V: 右特異ベクトル """ # 標準化 X, meanX, stdX = autoscale(X) # PCA U, S, V = np.linalg.svd(X) U = U[:,: numPC] S = np.diag(S[: numPC]) V = V[:,: numPC] return meanX, stdX, U, S, V def mspc_T2Q(X, meanX, stdX, U, S, V): """ 学習させたMSPCモデルより, 監視対象サンプルの T2, Q 統計量を計算します. パラメータ ---------- X: 監視対象データ meanX: 正常データの平均 stdX: 正常データの標準偏差 U: 左特異ベクトル S: 特異値 V: 右特異ベクトル 戻り値 ------- T2: T2 統計量 Q: Q 統計量 """ # 学習データに合わせて標準化する X = scaling(X, meanX, stdX) I = np.eye(X.shape[1]) # T2,Q の計算 T2 = np.diag(X @(V @ np.linalg.inv(S @ S)@ V.T)@ X.T) Q = np.diag(X @(I - V @ V.T)@ X.T) return T2, Q def cont_T2Q(X, meanX, stdX, U, S, V): """ パラメータ ---------- X: 監視対象サンプル meanX: 正常データの平均 stdX: 正常データの標準偏差 U: 左特異ベクトル S: 特異値 V: 右特異ベクトル 戻り値 ------- cont_T2: T2 統計量の寄与 cont_Q: Q 統計量の寄与 """ X = scaling(X, meanX, stdX) # 寄与の計算 cont_T2 = np.multiply(X, X @ V @ np.linalg.inv(S @ S/X.shape [0])@ V.T) cont_Q = np.power(X @(np.eye(X.shape [1]) - V @ V.T), 2) return cont_T2, cont_Q def mspc_CL(T2, Q, alpha=0.99): """ T2 統計量とQ 統計量の管理限界を計算します パラメータ ---------- T2: 管理限界決定用T2 統計量 Q: 管理限界決定用Q 統計量 alpha: 信頼区間(デフォルト99 %) 戻り値 ------- meanX: 正常データの平均 stdX: 正常データの標準偏差 U: 左特異ベクトル S: 特異値 V: 右特異ベクトル """ sort_T2 = sorted(T2) CL_T2 = T2[math.floor(alpha * len(train_data))] sort_Q = sorted(Q) CL_Q = Q[math.floor(alpha * len(train_data))]
jbpb0

2022/08/24 00:43

https://www.ohmsha.co.jp/book/9784274227783/#anchor3 の「ダウンロード」から書籍のコードがダウンロードできますが、それを使った場合でも書籍235ページのコードで同じエラーが出ますでしょうか? ダウンロードしたコードではエラーが出ないなら、質問者さんが実行したコードとダウンロードしたコードの相違点を調べてみてください
jbpb0

2022/08/26 01:00

(もともとの)この質問のエラーの原因の「'faultNumber '」の最後のスペースは、 https://www.ohmsha.co.jp/book/9784274227783/#anchor3 の「ダウンロード」からダウンロードしたコードにはありますが、書籍に記載のコードにはありません ダウンロードしたコードには他にもそのような相違点がたくさんあるので、ダウンロードしたコードを使って実行してエラーが出たら、エラーが出た箇所のコードを書籍と比べて違う場合は、書籍のコードに合わせて修正してみてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問