Parquetファイルとは?CSVとの違い・Pythonでの使い方

Parquetファイルとは?CSVとの違い・Pythonでの使い方

データ分析や機械学習に取り組んでいると、CSVファイル以外の形式に出会うことがあります。その中でも「Parquet」というファイル形式は、特に大量のデータを扱う現場でよく使われています。

でも、「Parquetって何?」「CSVと何が違うの?」「Pythonでどう扱うの?」という疑問を持っている方も多いのではないでしょうか。

この記事では、Parquetファイルの基本から、Pythonでの読み書き方法、可視化までを丁寧に解説します。CSVファイルとの違いや、どんな場面で便利なのかも具体例を交えて紹介します。

Parquetファイルとは?

Parquet(パーケイ)ファイルは、Apache Parquetという列指向(columnar)のデータフォーマットで、Hadoopエコシステムの一部として開発されました。

特徴

  • 列指向フォーマット:行単位ではなく列単位でデータを格納
  • 高速な読み込み:必要な列だけを読み込むことで、I/Oを大幅に削減
  • 圧縮効率が高い:同じ型のデータが続くため、圧縮しやすい
  • 構造化データに強い:スキーマ情報を持つため、型が保持される

Parquetファイルはどんな時に使う?

具体例として、100万件以上の売上データを分析する場合を考えてみましょう。

CSVで保存すると…

  • ファイルサイズが巨大になる(数百MB~GB)
  • 読み込みに時間がかかる
  • データ型が保存されない(数値が文字列になることも)

一方、Parquetで保存すると…

  • ファイルサイズが小さくなる(圧縮されるため)
  • 必要な列だけ読み込めるため、処理が速い
  • データ型が保持されるので、再読み込みも安心

つまり、データ量が多くなるほどParquetの利点が大きくなります。

PythonでParquetファイルを扱う方法

Pythonでは、pandaspyarrowライブラリを使ってParquetファイルを簡単に扱うことができます。

まずは、必要なライブラリをインストールしましょう。

pip install pandas pyarrow

Parquetファイルの書き出し

CSVファイルをParquetに変換してみましょう。

import pandas as pd

# サンプルデータを作成
df = pd.DataFrame({
    '商品名': ['りんご', 'みかん', 'ぶどう', 'バナナ'],
    '価格': [120, 80, 150, 100],
    '売上数': [30, 50, 20, 60]
})

# Parquet形式で保存
df.to_parquet('sales.parquet', engine='pyarrow')

Parquetファイルの読み込み

# Parquetファイルを読み込む
df_parquet = pd.read_parquet('sales.parquet', engine='pyarrow')
print(df_parquet)

CSVとのファイルサイズ比較

実際に100万行のデータを使って、CSVとParquetのサイズを比較してみましょう。

import numpy as np

# 大量データを生成
large_df = pd.DataFrame({
    '商品ID': np.arange(1, 1000001),
    '価格': np.random.randint(100, 500, size=1000000),
    '数量': np.random.randint(1, 10, size=1000000)
})

# CSVとParquetで保存
large_df.to_csv('large.csv', index=False)
large_df.to_parquet('large.parquet', engine='pyarrow')

この2つのファイルを比較すると、CSVは約80MB、Parquetは約20MB程度になります(※PC環境により差はあります)。Parquetの圧縮効率の良さが分かりますね。

Parquetファイルの可視化(グラフ)

読み込んだParquetファイルを使って、売上個数の棒グラフを描いてみましょう。

import matplotlib.pyplot as plt

df = pd.read_parquet('sales.parquet', engine='pyarrow')

plt.bar(df['商品名'], df['売上数'])
plt.xlabel('商品名')
plt.ylabel('売上数')
plt.title('商品の売上個数')
plt.tight_layout()
plt.show()

このように、ParquetファイルでもPandasで普通のDataFrameとして扱えるので、グラフ描画も簡単です。

Parquetの注意点

便利なParquetですが、いくつか注意点もあります。

  • Excelでは直接開けない(専用ツールやPythonなどが必要)
  • JSONなどと違い、人間が直接中身を見るのは難しい
  • ライブラリ依存がある(pyarrowfastparquetなど)

とはいえ、データ分析や機械学習の文脈では、Parquetの使いやすさと効率性は非常に魅力的です。

まとめ:Parquetはデータ分析の強い味方

  • Parquetは列指向・圧縮可能な高性能ファイル形式
  • データ型が保持され、I/Oが高速
  • Pythonならpandaspyarrowで簡単に読み書きできる
  • CSVより軽量で、大量データに向いている

今後、大規模なデータを扱う予定がある方は、ぜひParquet形式に慣れておくと、作業効率が格段にアップします。