🔄

JSONデータ→DataFrame(Pandas)変換

に公開

はじめに

こんにちは。駆け出しエンジニアcrocoです。

今回は、JSONデータを使った機械学習の課題に取り組んだ際の学びを共有します。今まで、CSV形式で分析を経験していたのですが、今回のJSON形式のデータでは少し勝手が違いました。

この記事では、CSV形式とJSON形式のデータ分析の違いと、JSONデータをPandasのDataFrameに変換する方法について、初学者の方にも分かりやすく解説します。

過去の自分が見返した時に再現できるよう、コード例も含めて丁寧に説明していきますので、ぜひ最後までお付き合いください(^^)

CSV分析とJSON分析の2つの大きな違い

タイタニックのようなCSVでの分析経験は、JSON形式のデータ分析でも大いに役立ちます。基本的な分析の流れは似ていますが、主に2つの大きな違いがあります。

違い1: データの「読み込み方」と「構造」

CSV形式の場合

CSVファイルは、最初からExcelのような表形式のデータです。そのため、pd.read_csv()の一行を実行するだけで、すぐにきれいに整形されたDataFrameが手に入ります。

import pandas as pd

# CSV読み込み - これだけでDataFrameが完成!
df = pd.read_csv('titanic.csv')
df.head()

JSON形式の場合

JSONはCSVよりも複雑な「階層構造」を持つことができます。今回はjson.load()で読み込んだ直後は、Pythonの辞書とリストが入れ子になったデータになっています。

ここから自分で必要な情報を取り出して、表形式(DataFrame)に整えるという一手間が必要になります。

import json

# JSON読み込み - この時点ではまだ辞書とリストの入れ子
with open('data.json', 'r') as f:
    data = json.load(f)

# ここから自分でDataFrameに変換する作業が必要

違い2: 「特徴量」の意味

CSV形式の場合

列(特徴量)の意味が最初から明確で、データセットに含まれる特徴量をそのまま分析に使用できます。

JSON形式の場合

生のデータが与えられ、それ自体はまだ「特徴量」とは言えない場合があります。

生データから分析に有用な特徴量を自分で考えて作り出す必要があります。これを「特徴量エンジニアリング」と呼びます。

実践: JSONデータをDataFrameに変換する

それでは、実際にJSONデータをDataFrameに変換してみます!

1. データ構造を理解する

まず、読み込んだJSONデータの構造を確認します。

import json

# JSONファイルを読み込む
with open('sales_data.json', 'r') as f:
    data = json.load(f)

# データ構造を確認
print(type(data))  # 辞書型
print(data.keys())  # キーを確認(例: 'train', 'test'など)
print(len(data['train']))  # 訓練データの件数を確認

# 最初の1件を見てみる
print(data['train'][0])

2. 必要な情報を抽出してリストに格納

各サンプルから「商品の特徴データ」と「売上ラベル」をそれぞれ取り出してリストに格納します。

import pandas as pd

# データを格納するための空のリストを用意
features = []
sales_label = []

# data['train']の各サンプルをループ処理
for sample_data in data['train']:
    # 特徴データを取得(価格、在庫数、レビュー数など)
    features.append(sample_data['features'])
    # 売上ラベルを取得
    sales_label.append(sample_data['label']['high_sales'])

print(f"特徴データ数: {len(features)}")
print(f"ラベルデータ数: {len(sales_label)}")

3. DataFrameを作成

抽出したデータを使ってDataFrameを作成します。

# DataFrameを作成
# 各特徴に分かりやすい列名をつける
df = pd.DataFrame(features, columns=['price', 'stock', 'reviews', 'rating', 'discount'])

# 売上ラベルを追加
df['high_sales'] = sales_label

# 変換できたか最初の5行を表示して確認
print(df.head())
print(f"\nDataFrameの形状: {df.shape}")
print(f"\n列名: {df.columns.tolist()}")

完成したDataFrameの確認ポイント

  • 行数: 元のJSONデータのサンプル数と一致しているか
  • 列数: 特徴量の数 + 1個のラベル = 期待する列数になっているか
  • データ型: 数値データは数値型、ラベルは0か1の整数型になっているか
  • 欠損値: 欠損値(NaN)がないか確認
# データ型の確認
print(df.dtypes)

# 欠損値の確認
print(df.isnull().sum())

# 基本統計量の確認
print(df.describe())

次のステップ: 特徴量の可視化と作成

DataFrameが完成したら、次は以下のステップに進みます:

  1. データの可視化: 各特徴量の分布や相関関係を確認
  2. 特徴量エンジニアリング: 既存の特徴量から新しい特徴量を作成(例: 価格と割引率から実売価格を計算)
  3. 機械学習モデルの構築: 作成した特徴量を使って売上予測モデルを訓練

まとめ

今回は、JSONデータをPandasのDataFrameに変換する方法について解説しました。

重要なポイント:

  • CSVとJSONではデータ構造が異なり、JSONは自分でDataFrameに整形する必要がある
  • 座標データから意味のある特徴量を作り出す「特徴量エンジニアリング」が重要
  • データの読み込み後は、必ず形状・データ型・欠損値を確認する習慣をつける

この記事が、JSON形式のデータ分析に取り組む方の参考になれば嬉しいです!

参考リンク

Discussion