PythonでPandasを使ったJSONファイルの読み出しと書き込み

Pandas は、データ処理と可視化のために最も一般的に使用される Python ライブラリの 1 つです。Pandasライブラリは、様々なファイル形式で保存されたデータを効率的に読み取り、操作し、視覚化するために使用できるクラスと機能を提供します。

この記事では、PythonとPandasを使ってJSONファイルを読み書きします。

JSONファイルとは?

JavaScript Object Notation (JSON) は、人間が読める形でデータを保存するデータ形式です。技術的にはストレージとして使用することもできますが、JSONファイルは主にシリアライズとクライアントとサーバー間の情報交換に使用されます。

JavaScriptから派生したフォーマットですが、プラットフォームに依存せず、広く普及しており、REST APIで最も多く使用されています。

JSONファイルの作成

PythonでJSONファイルを作成するには、データをある方法で保存する必要があります。Pythonを使用してこのデータを格納する方法は複数あります。そのうちのいくつかの方法については、本記事で解説しています。

まず、コアPythonを使ってファイルを作成し、Pandasを使ってそのファイルを読み書きすることにします。

ネストした辞書を使ったJSONデータの作成

Pythonでは、JSONデータを作成するために、ネストされた辞書を使用することができます。外側の辞書の中の各項目は、JSONファイルのカラムに対応する。

各項目のキーは列のヘッダーで、値はその特定の列の行からなる別の辞書です。架空の患者の記録を格納する JSON ファイルを作成するために使用できる辞書を作成してみましょう。

patients = {
         "Name":{"0":"John","1":"Nick","2":"Ali","3":"Joseph"},
         "Gender":{"0":"Male","1":"Male","2":"Female","3":"Male"},
         "Nationality":{"0":"UK","1":"French","2":"USA","3":"Brazil"},
         "Age" :{"0":10,"1":25,"2":35,"3":29}
}


上のスクリプトでは、最初の項目が Name カラムに対応する。項目の値は、辞書の項目が行を表す辞書から構成されます。内部の辞書項目のキーは行のインデックス番号に対応し、値は行の値を表す。

これだけではちょっとわかりにくいので、視覚的に表現してみましょう。

Nameカラムでは、最初のレコードは 0 番目のインデックスに格納され、レコードの値はJohnとなる。同様に、Nameカラムの 2 行目に格納される値はNick` という具合になる。

辞書のリストによるJSONデータの作成

JSONデータを作成するもう一つの方法は、辞書のリストを使用することです。リストの各項目は辞書で構成され、各辞書は1つの行を表します。この方法は、ネストされた辞書を使うよりもずっと読みやすい。

さまざまな車に関する情報を格納するJSONファイルを作成するために使用できるリストを作成してみましょう。

cars = [
    {"Name":"Honda", "Price": 10000, "Model":2005, "Power": 1300},
    {"Name":"Toyota", "Price": 12000, "Model":2010, "Power": 1600},
    {"Name":"Audi", "Price": 25000, "Model":2017, "Power": 1800},
    {"Name":"Ford", "Price": 28000, "Model":2009, "Power": 1200},

]


各辞書の項目は、JSONファイルの行に対応する。例えば、最初の辞書の最初の項目は、NameカラムにHondaという値を格納しています。同様に、最初の行の Price カラムの値は 10000 となり、以下同様となる。

PythonによるJSONファイルへのデータ書き込み

ネストされた辞書と辞書のリストがあれば、このデータをJSONファイルに格納することができます。これを実現するために、jsonモジュールとdump()メソッドを使用します。

import json
with open('E:/datasets/patients.json', 'w') as f:
    json.dump(patients, f)

with open('E:/datasets/cars.json', 'w') as f:
    json.dump(cars, f)


これで、2つのJSONファイル、 patients.jsoncars.json ができました。次のステップは、Pandasライブラリを使ってこれらのファイルを読み込むことです。

Core PythonでのJSONのファイルへの読み書きについてもっと読みたい方は、こちらをご覧ください。

PandasによるJSONファイルの読み込み

Pandas を使って JSON ファイルを読み込むには、 read_json() メソッドを利用し、読み込みたいファイルへのパスを渡します。このメソッドは、カラムと行の形式でデータを格納するPandasの DataFrame を返します。

しかし、まず最初にPandasをインストールする必要があります。

$ pip install pandas


ローカルファイルからJSONを読み込む

以下のスクリプトは、ローカルシステムのディレクトリにある patients.json ファイルを読み込み、その結果を patients_df データフレームに格納します。データフレームのヘッダは head() メソッドで出力されます。

import pandas as pd
patients_df = pd.read_json('E:/datasets/patients.json')
patients_df.head()


このコードを実行すると、次のような結果が得られるはずです。

同様に、次のスクリプトはローカルシステムから cars.json ファイルを読み込み、cars_dfhead() メソッドを呼び出してヘッダを出力します。

cars_df = pd.read_json('E:/datasets/cars.json')
cars_df.head()


このコードを実行すると、次のような結果が得られるはずです。

cars dataframe

リモートファイルからJSONを読み込む

read_json()` メソッドはローカルファイルを読むだけにとどまりません。リモートサーバーにある JSON ファイルを読み込むこともできます。関数の呼び出しにリモート JSON ファイルのパスを渡すだけでよいのです。

Iris Dataset の先頭部分を読み込んで出力してみましょう。このデータセットには、さまざまなアイリスの花に関する情報が含まれています。

import pandas as pd
iris_data = pd.read_json("https://raw.githubusercontent.com/domoritz/maps/master/data/iris.json")
iris_data.head()


このコードを実行すると、次のような結果が得られるはずです。

Pandasを使ったJSONデータファイルの書き方

Pandas のデータフレームを JSON ファイルに変換するために、データフレームに対して to_json() 関数を使用し、パラメータとしてファイルへのパスを渡します。

ここでは、データ可視化ライブラリSeabornに含まれるtipsデータセットからJSONファイルを作成してみましょう。

まず、Seabornをインストールしましょう。

$ pip install seaborn


そして、インポートして、tipsをデータセットに読み込みましょう。

import seaborn as sns


dataset = sns.load_dataset('tips')
dataset.head()


データセットはこんな感じです。

tips dataset header

Seabornの load_dataset() 関数はPandasの DataFrame を返すので、このようにデータセットを読み込むと、 to_json() 関数を呼んで変換するだけでいいのです。

データセットを手に入れたら、その内容をJSONファイルに保存してみましょう。ここでは、datasetsディレクトリを作成しています。

dataset.to_json('E:/datasets/tips.json')


E:/datasetsディレクトリに移動すると、tips.jsonが表示されるはずです。このファイルを開くと、Pandasのデータフレームにあるtips` データセットのレコードに対応するJSONを見ることができます。

{
   "total_bill":{
       "0":16.99,
       "1":10.34,
       "2":21.01,
       "3":23.68,
       "4":24.59,
       "5":25.29,
       ...
   }
   "tip":{
       "0":1.01,
       "1":1.66,
       "2":3.5,
       "3":3.31,
       "4":3.61,
       "5":4.71,
       ...
   }
   "sex":{
        "0":"Female",
        "1":"Male",
        "2":"Male",
        "3":"Male",
        "4":"Female",
        "5":"Male",
        ...
   }
    "smoker":{
        "0":"No",
        "1":"No",
        "2":"No",
        "3":"No",
        "4":"No",
        "5":"No",
        ...
    }
    ...


結論

JSONは、クライアントとサーバー間のデータの保存と交換に広く使われているフォーマットです。開発者は、軽量で読みやすいという理由で、XMLのような形式よりもこの形式をよく使用します。

この記事では、Pythonの人気ライブラリPandasを使用して、ローカルファイルからリモートファイルまで、JSONファイルを読み書きする方法を説明しました。

タイトルとURLをコピーしました