pandas json_normalize
code:norm.py
pandas.io.json.json_normalize(
data,
record_path=None, record_prefix=None
meta=None, meta_prefix=None,
errors='raise', sep='.')
上記、 パラメータの順番を変えてます。keyword付きで指定しない場合は、これではいけない。
jsonを pythonで読む(json.load, json.loads, deserializationする)と 辞書型になる。それをdataframeにしたい。
辞書の値が、辞書になってる場合
これは、カラム名が"."付きになるだけなので、問題ない。
必要なら、sep="_"みたいにして、"."以外にもできる
辞書の値が、レコードになってる。(ネストされて配列がいる)
レコードが1階層の場合
まずは、レコード型になってるキーを、record_pathに指定すれば良い。
ただ、この場合、そのままだと、そのrecord_pathの値しかかえってこない。
なので、metaを指定して、追加の列名を付与する形にする。
その際に、名前が重複してしまうとまずい、なので、record_prefix, meta_prefix を使って、衝突を回避する
このあたりが、上記のpandasの公式でも、note.nkmk.meでも書かれている。
レコードが2階層の場合
これは、たぶん、json_normalize一発では無理なので、個別でDataFrameを作っておいて、joinする。
というか、ここまでDataFrameにこだわるのが悪手の可能性たかい。
session単位が基本のテーブル行
ヒット単位レコード
ヒット単位カスタムディメンションレコード
拡張ECレコード
となり、2階層(ヒット、カスタムディメンジョン or 拡張EC)となってる。
以下のサイトの解説が良い(他の記事も良い)