2017-09-19 6 views
0

私はPythonのリストからアウトライアを削除しようとしています。私は元のリストから各外れ値のインデックス値を取得したいので、それを(別の)対応リストから削除することができます。Pythonで異常値をどのようにインデックス化しますか?

~~簡単な例~~外れ値と

私のリスト:

y = [1,2,3,4,500] #500 is the outlier; has a index of 4 

私の対応するリスト:

x= [1,2,3,4,5] #I want to remove 5, has the same index of 4 

MY結果/ GOAL:

y=[1,2,3,4] 

x=[1,2,3,4] 

この私のコードですklistとavglatlistで同じことを達成するには

import numpy as np 

klist=['1','2','3','4','5','6','7','8','4000'] 
avglatlist=['1','2','3','4','5','6','7','8','9'] 


klist = np.array(klist).astype(np.float)  
klist=klist[(abs(klist - np.mean(klist))) < (2 * np.std(klist))] 

indices=[] 
for k in klist: 
    if (k-np.mean(klist))>((2*np.std(klist))): 
     i=klist.index(k) 
     indices.append(i) 

print('indices'+str(indices)) 

avglatlist = np.array(avglatlist).astype(np.float) 


for index in sorted(indices, reverse=True): 
    del avglatlist[index] 


print(len(klist)) 
print(len(avglatlist)) 
+1

異常値を定義します。どのようにそれを特定していますか?数値が平均値から標準偏差の2倍を超える場合は –

+0

となります。私は実際にそれを定義するのではなく、実際にコーディングするのに問題があります。私はそれをしようとするあらゆる方法でエラーを取得し続けます – Adam

答えて

0

本当に近いです。 avglatlistのnumpyバージョンに同じフィルタリング方式を適用するだけです。わかりやすくするためにいくつかの変数名を変更しました。リスト内の各外れ値のインデックス値を取得する方法

import numpy as np 

klist = ['1', '2', '3', '4', '5', '6', '7', '8', '4000'] 
avglatlist = ['1', '2', '3', '4', '5', '6', '7', '8', '9'] 


klist_np = np.array(klist).astype(np.float) 
avglatlist_np = np.array(avglatlist).astype(np.float)  

klist_filtered = klist_np[(abs(klist_np - np.mean(klist_np))) < (2 * np.std(klist_np))] 
avglatlist_filtered = avglatlist_np[(abs(klist_np - np.mean(klist_np))) < (2 * np.std(klist_np))] 
0

外れ値は、平均から2標準偏差として定義されます。あなたが実際に必要としない場合は

import numpy as np 
from scipy.stats import zscore 

klist = np.array([1, 2, 3, 4, 5, 6, 7, 8, 4000]) 
avglatlist = np.arange(1, klist.shape[0] + 1) 

indices = np.where(np.absolute(zscore(klist)) > 2)[0] 
indices_filter = [i for i,n in enumerate(klist) if i not in indices] 
print(avglatlist[indices_filter]) 

:これは私がnp.where使用するzscoresは2

よりも大きな絶対値を持つリストの値のインデックスを知ってほしいと思います意味します

import numpy as np 
from scipy.stats import zscore 

klist = np.array([1, 2, 3, 4, 5, 6, 7, 8, 4000]) 
avglatlist = np.arange(1, klist.shape[0] + 1) 

mask = np.absolute(zscore(klist)) > 2 
print(avglatlist[~mask]) 

どちらのソリューション印刷:

インデックスを知って、代わりに ブールマスクを使用
[1 2 3 4 5 6 7 8] 
関連する問題