コードはデータの中の外れ値を見つけて削除するというものです。
for文を回して条件に合わなければnp.deleteでデータから削除したいのですが、dumpしたファイルを見直してもdeleteされていませんでした。
for文で条件に合わない(i,j)の組をリストにappendし、for文の外でnp.deleteを実行するというような方法も試してみましたが失敗しました。
そもそもnp.deleteの使い方が間違っているのでしょうか。
当方プログラミング1週間目のド素人なので、どなたかご教授いただければ幸いです。
html
1 2def process() : 3 4 import numpy as np 5 import joblib 6 7 data = joblib.load('data1') 8 l1 = len(data) 9 coodinate = [] 10 for i in range(l1) : 11 12 bridge = data[i][:,2] 13 sample = data[i][:,3] 14 15 Q3_b, Q1_b = np.percentile(bridge, [75, 25]) 16 IQR_b = Q3_b - Q1_b 17 18 Q3_s, Q1_s = np.percentile(sample, [75, 25]) 19 IQR_s = Q3_s - Q1_s 20 21 outlier1_b = Q3_b + 1.5*IQR_b 22 outlier2_b = Q1_b - 1.5*IQR_b 23 24 outlier1_s = Q3_s + 1.5*IQR_s 25 outlier2_s = Q1_b - 1.5*IQR_s 26 27 l2 = len(sample) 28 for j in range(l2) : 29 if bridge[j] > outlier1_b or bridge[j] < outlier2_b or sample[j] > outlier1_s or sample[j] < outlier2_s : 30 np.delete(data[i],j,0) 31 print(i,j) 32 else : 33 pass 34 joblib.dump(data,'data_normalized') 35 36process()
np.deleteを使うのは諦め、以下のように書き換えました。
html
1for j in range(l2) : 2 if bridge[j] > outlier1_b or bridge[j] < outlier2_b or sample[j] > outlier1_s or sample[j] < outlier2_s : 3 pass 4 else : 5 list_i.append(data[i][j])
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/11/23 06:42 編集