JSONは内部に単一のオブジェクトを含む配列であるため、それを読み取ると、内部に辞書を含むリストを取得します。以下に示すように、リストのアイテム0にアクセスすることで、辞書にアクセスできます。
json1_data = json.loads(json1_str)[0]
今、あなたは内に格納されたデータにアクセスできるデータポイントを、あなたが期待していただけのように:
datapoints = json1_data['datapoints']
誰かが噛むことができるかどうか、もう1つ質問があります。これらのデータポイント(つまり、datapoints [0] [0])の最初の要素の平均を取ろうとしています。それらをリストするために、データポイント[0:5] [0]を実行してみましたが、最初の要素のみを含む最初の5つのデータポイントを取得するのではなく、両方の要素を持つ最初のデータポイントを取得します。これを行う方法はありますか?
datapoints[0:5][0]
あなたが期待していることをしません。datapoints[0:5]
最初の5つの要素のみを含む新しいリストスライスを返し、[0]
その最後に追加すると、結果のリストスライスから最初の要素だけが取得されます。あなたが望む結果を得るために使用する必要があるのはリスト内包です:
[p[0] for p in datapoints[0:5]]
平均を計算する簡単な方法を次に示します。
sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8
NumPyをインストールする場合は、さらに簡単です。
import numpy
json1_file = open('json1')
json1_str = json1_file.read()
json1_data = json.loads(json1_str)[0]
datapoints = numpy.array(json1_data['datapoints'])
avg = datapoints[0:5,0].mean()
# avg is now 35.8
,
NumPyの配列のスライス構文で演算子を使用すると、リストスライスで本来期待されていた動作が行われます。