【Python 入門】JSON の使い方!読み込みや pandas へのデータ変換を解説!

こんにちは、機械学習の講師をしている木下です!

Python などを用いてデータ分析をする際に json と呼ばれる形式のデータを見かけたことはありませんか?
json 形式は人間が解釈しやすく、多くの場所で利用されている記述方法になります。

そんな JSON ファイルを python で読み込みデータ分析や機械学習に応用する方法をお伝えします!

ぜひここで読み込み方をマスターしていきましょう!

実行環境

JSON とは

JSON(JavaScript Object Notation)は、軽量なデータ交換フォーマットで、人間にも機械にも読みやすい形式です。JSON は属性-値ペアの集合を表現し、多くのプログラミング言語で扱えるため、データのやり取りに広く使われています。

まずは JSON 形式とは一体どんな形なのか確認してみましょう。
JSON 形式は Python の辞書型に非常に近い形で以下のようにデータが表現されます。
json 形式についての説明

そのデータの情報であるキー(表形式のデータでは列名)と実際の値の組み合わせからデータは構成されています。このようにキーを見ることで人間視点でも機械視点でも解釈が容易なデータ形式です。

例えば以下のように書けます。

JSON
{
  "A さん": {
    "国語": "84 点",
    "数学": "79 点",
  },
  "B さん": {
    "国語": "89 点",
    "数学": "83 点",
  }
}

使用する JSON ファイル 

今回は JSON のダミーデータを返す有名な API である JSONPlaceholder を使用していきます。
具体的には、その中に含まれている user というデータを扱って、例を示していきます(参考リンク)。

参考 JsonPlaceholder の詳細説明JsonPlaceholder

JSON ファイルの読み込み方

JSON Placeholder から読み込み

それでは早速 json ファイルを読み込む方法をみていきましょう。

requests を用いて url から読み込む場合には以下のように get をした後の変数.json() で json ファイルを取得することができます。

JSON ファイルの読み込み
# ライブラリのインポート
import requests

# jsonplaceholderのURL設定
url = 'https://jsonplaceholder.typicode.com/users'

# jsonファイルの読み込み
r = requests.get(url)
users = r.json()

今回は使用しませんがローカルに保存した JSON ファイルを読み込む場合には以下のように行うとスムーズです。

ローカルに保存した json ファイルの読み込み
# 手元の json ファイルのパスを指定
with open('データセットのパス') as f:
    df = json.load(f)

JSON ファイルの確認

それでは、id, name, email といった要素を表示してみましょう。データはリストの各要素に辞書型で保存されているのでシンプルに for 文を用いて全データを確認してみます。

データの確認
# データの確認を順番に行う
for user in users:
    print(user['id'], user['name'], user['email'])
実行結果
# 実行結果
1 Leanne Graham [email protected]
2 Ervin Howell [email protected]
3 Clementine Bauch [email protected]
4 Patricia Lebsack [email protected]
5 Chelsey Dietrich [email protected]
6 Mrs. Dennis Schulist [email protected]
7 Kurtis Weissnat [email protected]
8 Nicholas Runolfsdottir V [email protected]
9 Glenna Reichert [email protected]
10 Clementina DuBuque [email protected]

このように、ユーザーごとに各データが保存されていることが確認できました。
辞書型の取り扱いについては以下の記事も参考にしてみてください。

同様にリスト型に格納して表示するコードも記述しておきます。

データの格納
# リスト型でデータを保存
user_id_list = []
user_name_list = []
user_email_list = []

# 同様に for 文を回してデータを格納
for user in users:
    user_id_list.append(user['id'])
    user_name_list.append(user['name'])
    user_email_list.append(user['email'])

このリストを以下のように表示してみると先ほどと同様の表示がされます。

データの表示
for i in range(len(user_id_list)):
    print(user_id_list[i], user_name_list[i], user_email_list[i])
# 実行結果
1 Leanne Graham [email protected]
2 Ervin Howell [email protected]
3 Clementine Bauch [email protected]
4 Patricia Lebsack [email protected]
5 Chelsey Dietrich [email protected]
6 Mrs. Dennis Schulist [email protected]
7 Kurtis Weissnat [email protected]
8 Nicholas Runolfsdottir V [email protected]
9 Glenna Reichert [email protected]
10 Clementina DuBuque [email protected]

JSON ファイルの変換

辞書型から JSON 形式の文字列へ変換 (dumps)

json.dumps() を使って、辞書型のデータを JSON 形式の文字列に変換することができます。以下のコードを実行して、users を JSON 形式の文字列に変換しましょう。

辞書型から JSON 形式の文字列へ変換 (dumps)
import json

json_string = json.dumps(users, indent=2)
print(json_string)
実行結果
[
  {
    "id": 1,
    "name": "Leanne Graham",
    "username": "Bret",
    "email": "[email protected]",
    "address": {
      "street": "Kulas Light",
      "suite": "Apt. 556",
      "city": "Gwenborough",
      ...

indent 引数に整数を指定することで、出力される JSON 文字列のインデントを調整できます。

JSON 形式の文字列を辞書型に変換 (loads)

json.loads() を使って、JSON 形式の文字列を辞書型に変換することができます。先ほど作成した json_string を再び辞書型に変換してみましょう。

JSON 形式の文字列を辞書型に変換 (loads)
data_from_string = json.loads(json_string)
print(data_from_string)
実行結果
[{'id': 1, 'name': 'Leanne Graham', 'username': 'Bret'...

これで、JSON 文字列を Python の辞書型に変換できました。

JSON ファイルの書き出し (dump)

最後に、辞書型のデータを JSON ファイルに書き出す方法を見ていきましょう。json.dump() 関数を使って、辞書型のデータをファイルに書き出すことができます。

JSON ファイルの書き出し (dump)
with open("output.json", "w") as f:
    json.dump(data_from_string, f, indent=2)

これにより data_from_string を “output.json” というファイルに書き出します。indent 引数に整数を指定することで、出力される JSON ファイルのインデントを調整できます。

JSON ファイルの書き出し (dump)

pandas への変換

データ分析を行いやすいように pandas のデータフレーム型に変換する手順を示しておきます。

pandas のデータフレームへの変換
df_id = pd.DataFrame(user_id_list, columns=['id'])
df_name = pd.DataFrame(user_name_list, columns=['name'])
df_email = pd.DataFrame(user_email_list, columns=['email'])

df_user = pd.concat([df_id, df_name, df_email], axis=1, join='inner')

データフレームの確認も行っておきましょう。

データフレームの確認
print(df_user)

# 実行結果
   id                      name                      email
0   1             Leanne Graham          [email protected]
1   2              Ervin Howell          [email protected]
2   3          Clementine Bauch         [email protected]
3   4          Patricia Lebsack  [email protected]
4   5          Chelsey Dietrich   [email protected]
5   6      Mrs. Dennis Schulist    [email protected]
6   7           Kurtis Weissnat     [email protected]
7   8  Nicholas Runolfsdottir V       [email protected]
8   9           Glenna Reichert    [email protected]
9  10        Clementina DuBuque     [email protected]

このようにデータフレームで保存しておくことで pandas のさまざまなデータ分析手法が適用可能になり、非常に便利です。

最後に

本記事では python における JSON ファイルの取り扱いについて紹介しました。
JSON ファイルは csv ファイルや xml ファイル、excel ファイルなどと同様によく取り扱うデータの型なので、ぜひここで使い方をおさえておきましょう!

Excel ファイルの取り扱いは以下の記事を参考にしてみてください。

以上、Python 学習している方々のお力添えになれば幸いです!

こちらの記事もオススメ

まずは無料で学びたい方・最速で学びたい方へ

まずは無料で学びたい方: Python&機械学習入門コースがおすすめ

Python&機械学習入門コース

AI・機械学習を学び始めるならまずはここから!経産省の Web サイトでも紹介されているわかりやすいと評判の Python&機械学習入門コースが無料で受けられます!
さらにステップアップした脱ブラックボックスコースや、IT パスポートをはじめとした資格取得を目指すコースもなんと無料です!

無料で学ぶ

最速で学びたい方:キカガクの長期コースがおすすめ

一生学び放題

続々と転職・キャリアアップに成功中!受講生ファーストのサポートが人気のポイントです!

AI・機械学習・データサイエンスといえばキカガク!
非常に需要が高まっている最先端スキルを「今のうちに」習得しませんか?

無料説明会を週 2 開催しています。毎月受講生の定員がございますので確認はお早めに!

説明会ではこんなことをお話します!
  • 国も企業も育成に力を入れている先端 IT 人材とは
  • キカガクの研修実績
  • 長期コースでの学び方、できるようになること
  • 料金・給付金について
  • 質疑応答

参考リンク

参考 Python 3.9.2 ドキュメント

参考 Chainer チュートリアル