2016-10-06 3 views
2

です。データの辞書がnumpy配列として保存されています。辞書内の代表的なキーは、の形式になります。私は辞書をnumpy配列として保存しています。典型的なキーの形式は

('Typical Key', {'a': 100 'b': 'NaN', 'c': 'NaN', 'e': 360300, 'f': 8308552, 'g': 'NaN', 'h': 3576206, 'i': True, 'j': 'NaN', 'k': 'NaN', 'l': 'NaN', 'm': '[email protected]', 'x': 'NaN'}) 

私は私が見ることができる私のデータセットにおける外れ値を識別するために、最大値を持つ要素が含まれている辞書内のどのキーを見つけるためにしようとしていますグラフ。私はデータポイントのキーがチュートリアル(私は答えを知っている)を使って作業しなければならないことを知っています

私はこれを行う方法をいくつか試しましたが、私は一貫して予期せぬ結果を得ています - コードをmax()関数を使用して回避します。例えば、下記の例を参照してください。

inverse = [(value, key) for key, value in data_dict.items()] 
print max(inverse)[1] 

xx = max(data_dict, key=lambda i: data_dict[i]) 

print xx 

import operator 
result = max(data_dict.iteritems(), key=operator.itemgetter(1))[0] 
print result 

私は要素を見ていないと感じています。それは問題です。どんな助けもありがとう!

+0

*私はnumpy配列*として格納されたデータの辞書を持っています。 'numpy'は表示されません。 –

+2

投稿したデータからどのような出力が期待できますか? –

+0

インポートピクルス import sys import matplotlib.pyplot numpyをnpとしてインポート sys.path.append( "../ツール/ ")feature_formatインポートfeatureFormatから 、targetFeatureSplit numpyのは、ファイルのヘッダにあったが、私は私はすでにそれがnumpyの配列 – YesIndeedy

答えて

0
import sys 
Max = -sys.maxint 
best_key = None 
for k, v in data_dict: 
    # k refers to each 'typical key' 
    inner_dict = v 
    for key, value in inner_dict.items(): 
     if isinstance(value, int) and Max < value: 
      Max = value 
      best_key = key 
print best_key 
+0

だっ述べた特定の共有することが重要だったとは思いませんでしたが、外出先の@gwhizことを与えました を解凍するためにあまりにも多くの値Iがスタックにウサギの穴をこれを追いかけることができ – YesIndeedy

+0

OK思考アイブiはデータ・ディクショナリにすぎ ###読んで、このを掲載している必要があります – YesIndeedy

1

OKがproplerlyコードを微調整することによってそれをソート - おそらく私が正しく をやりたいの関節なかったためには、少しのコードを微調整しなければならなかったが、これは仕事をした - 私はなぜ私の他のコードを理解するために作業する必要がありますあなたのサンプルの辞書と期待値

import sys 
Max = -sys.maxint 
best_key = None 
    for k, v in data_dict.iteritems(): 
    # k refers to each 'typical key' 
    inner_dict = v 
     for key, value in inner_dict.iteritems(): 
      if isinstance(value, int) and Max < value: 
      Max = value 
      best_key = k` 
0

を返していませんでした。

In [684]: dd 
Out[684]: 
{'a': 100, 
'b': 'NaN', 
'c': 'NaN', 
'e': 360300, 
'f': 8308552, 
'g': 'NaN', 
'h': 3576206, 
'i': True, 
'j': 'NaN', 
'k': 'NaN', 
'l': 'NaN', 
'm': '[email protected]', 
'x': 'NaN'} 

私は簡単な値のリストを引き出すことができます - しかし、それらと文字列、私はmaxを行うことはできません。

In [687]: max([i for i in dd.values() if isinstance(i,int)]) 
Out[687]: 8308552 

またはMAXの候補のタプルのリスト:

In [692]: [(v,k) for k,v in dd.items() if isinstance(v,int)] 
Out[692]: [(3576206, 'h'), (8308552, 'f'), (100, 'a'), (360300, 'e'), (True, 'i')] 

とで最大を取るあなたは、私が最初にintsをフィルタリングする必要が発見されたように

In [685]: list(dd.values()) 
Out[685]: 
['NaN', 
'[email protected]', 
3576206, 
'NaN', 
8308552, 
'NaN', 
100, 
'NaN', 
'NaN', 
360300, 
'NaN', 
True, 
'NaN'] 

lambdakey

In [693]: max([(k,v) for k,v in dd.items() if isinstance(v,int)], key=lambda x:x[1]) 
Out[693]: ('f', 8308552) 
(わかりやすくするために再フォーマット)あなたのコメントから

=============

import pickle 
import sys 
import matplotlib.pyplot 
import numpy as np 
sys.path.append("../tools/") 
from feature_format import featureFormat, targetFeatureSplit 
#added 
### read in data dictionary, convert to numpy array 
data_dict = pickle.load(open("../final_project/final_project_dataset.pkl", "r")) 
features = ["salary", "bonus"] 
data = featureFormat(data_dict, features) 
print type(data) 

あなたはnumpyをインポートすることがありますが、サンプルデータが配列ではありません。あなたは私たちに辞書を含むタプルを与えました。あなたのコードはすべてPythonのリストと辞書の仕事です。何も使用しないでくださいnumpy

+0

申し訳ありませんが、それをやっ:しかし、IVEはエラー とValueErrorを持って! 、numpy配列に変換する data_dict = pickle.load( "../ final_project/final_project_dataset.pkl"、 "r")) features = [ "salary"、 "bonus"] data = featureFormat(data_dict、features) 印刷タイプ(データ) ' – YesIndeedy

関連する問題