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.json
と cars.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_df
の head()
メソッドを呼び出してヘッダを出力します。
cars_df = pd.read_json('E:/datasets/cars.json')
cars_df.head()
このコードを実行すると、次のような結果が得られるはずです。
リモートファイルから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()
データセットはこんな感じです。
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ファイルを読み書きする方法を説明しました。