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

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

新規登録して質問してみよう
ただいま回答率
85.50%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

2338閲覧

OpenposeのJSON形式のデータをpandasを使って整列したい

aRyu

総合スコア15

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2019/07/10 05:08

open poseのJSON形式のデータをpandasを使って整列したい

初めての質問です。見当違いのことを聞いているかもしれませんが,
よろしくお願いいたします。

以下のようなjsonファイルをpandasを使って整列したいです。
(openposeを使って、人の骨格座標を取得しています)

{"version":1.2,"people":[{"pose_keypoints_2d":[140.49,47.5103,0.866778,139.464,65.4834,0.89693,115.515,65.4856,0.833801,107.443,95.5163,0.816319,103.496,124.515,0.827791,162.482,62.5137,0.827878,170.52,93.4827,0.837408,178.473,121.485,0.803069,138.514,129.485,0.737967,123.528,128.514,0.743828,122.499,176.488,0.692097,122.512,223.502,0.632983,152.508,129.493,0.703248,155.442,177.475,0.730231,157.507,221.501,0.654844,137.488,43.5204,0.888961,145.474,43.5194,0.880843,130.516,41.4767,0.810869,149.484,41.4881,0.745051,160.493,228.536,0.349573,166.494,228.465,0.418727,156.467,227.456,0.461901,122.475,229.503,0.338244,115.519,228.515,0.394034,124.474,227.474,0.458006],"face_keypoints_2d":[],"hand_left_keypoints_2d":[],"hand_right_keypoints_2d":[],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]}]}

このjsonファイルでは1行876列のデータになっていて、
"pose_keypoints_2d":[頭のx座標,頭のy座標,頭の信頼度p,首のx座標,首のy座標,首の信頼度p,,,]
という具合にデータが並んでいます。

大量のjsonファイルがあり、それらすべてを整列したいと考えています。

どのように整列したいか

"version" や "people" "face_keypoints_2d"などを除き
下図のようなdataframeに整列したいです。

||座標X|座標Y|信頼度P|
|:--:|:--:|:--:|
|head|140.2|120.1|0.8|
|neck|140.5|110.3|0.7|
||||||
||||||
||||||
|r_toes|300.2|400.1|0.5|

ソースコード

.valueや.loc等を試しましたがどう整列すればよいのかわかりません。

python

1import json 2import pandas as pd 3 4df = pd.read_json('test.json') 5 6df.values 7 8df.T.loc['people']

df

1#df.valuesの出力 2array([[1.2, 3 {'pose_keypoints_2d': [140.49, 47.5103, 0.8667779999999999, 139.464, 65.4834, 0.8969300000000001, 115.515, 65.4856, 0.833801, 107.443, 95.5163, 0.816319, 103.496, 124.515, 0.8277909999999999, 162.482, 62.5137, 0.827878, 170.52, 93.4827, 0.8374079999999999, 178.473, 121.485, 0.8030689999999999, 138.514, 129.485, 0.7379669999999999, 123.528, 128.514, 0.7438279999999999, 122.499, 176.488, 0.692097, 122.512, 223.502, 0.632983, 152.508, 129.493, 0.703248, 155.442, 177.475, 0.730231, 157.507, 221.501, 0.654844, 137.488, 43.5204, 0.888961, 145.474, 43.5194, 0.8808429999999999, 130.516, 41.4767, 0.810869, 149.484, 41.4881, 0.745051, 160.493, 228.536, 0.34957299999999997, 166.494, 228.465, 0.41872699999999996, 156.467, 227.456, 0.461901, 122.475, 229.503, 0.338244, 115.519, 228.515, 0.394034, 124.474, 227.474, 0.45800599999999997], 'face_keypoints_2d': [], 'hand_left_keypoints_2d': [], 'hand_right_keypoints_2d': [], 'pose_keypoints_3d': [], 'face_keypoints_3d': [], 'hand_left_keypoints_3d': [], 'hand_right_keypoints_3d': []}]], 4 dtype=object)

df

1#df.T.loc['people']の出力 20 {'pose_keypoints_2d': [140.49, 47.5103, 0.8667... 3Name: people, dtype: object

どのようにすれば上図表のようにできるのかわかりません。
ご教授のほどよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

素直にデータを加工した後でデータフレームに変換するのでは駄目なのでしょうか?

Python

1import json 2import pandas as pd 3import numpy as np 4 5with open('test.json') as f: 6 data = json.load(f) 7 data = np.array(data['people'][0]['pose_keypoints_2d']).reshape(-1,3) 8df = pd.DataFrame(data, columns=['X','Y','P']) 9# X Y P 10#0 140.490 47.5103 0.866778 11#1 139.464 65.4834 0.896930 12#2 115.515 65.4856 0.833801 13#3 107.443 95.5163 0.816319 14#4 103.496 124.5150 0.827791 15#5 162.482 62.5137 0.827878 16#6 170.520 93.4827 0.837408 17#7 178.473 121.4850 0.803069 18#8 138.514 129.4850 0.737967 19#9 123.528 128.5140 0.743828 20#10 122.499 176.4880 0.692097 21#11 122.512 223.5020 0.632983 22#12 152.508 129.4930 0.703248 23#13 155.442 177.4750 0.730231 24#14 157.507 221.5010 0.654844 25#15 137.488 43.5204 0.888961 26#16 145.474 43.5194 0.880843 27#17 130.516 41.4767 0.810869 28#18 149.484 41.4881 0.745051 29#19 160.493 228.5360 0.349573 30#20 166.494 228.4650 0.418727 31#21 156.467 227.4560 0.461901 32#22 122.475 229.5030 0.338244 33#23 115.519 228.5150 0.394034 34#24 124.474 227.4740 0.458006

投稿2019/07/10 06:32

magichan

総合スコア15898

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

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

aRyu

2019/07/10 06:46

numpyで加工した後にデータフレームにすればよかったんですね! pythonをあまり触ったことがなく配列の記述方法やnumpyの使い方がよく分かっておらず苦戦しておりました。勉強してきます! ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問