サイトアイコン アマチュア無線局JS2IIU

【Pandas】 melt メソッドで解析しやすいデータを作る

こんにちは、JS2IIUです。

今回は、Pythonのデータ分析ライブラリpandasの強力なツールの一つ、meltメソッドについて解説します。meltメソッドは、データの形式を変換する際に非常に役立ち、データ分析や可視化の前処理をグッと楽にしてくれます。この記事では、meltの基本的な使い方から、実際のデータ分析、可視化までを、具体的な例を通して丁寧に説明していきます。

1. meltメソッドって何?

meltメソッドは、pandasのDataFrameを「ワイドフォーマット」から「ロングフォーマット」へ変換するためのメソッドです。「ワイドフォーマット」とは、複数の種類のデータが複数の列にまたがって格納されている形式で、「ロングフォーマット」とは、それらのデータが特定の列(通常は「変数」と「値」の2つの列)にまとめられている形式です。

言葉だけでは少しわかりにくいので、具体的な例を見てみましょう。

ワイドフォーマットのデータ (例:月別商品売上)

MonthProductAProductBProductC
Jan15090120
Feb16095125
Mar175110135
Apr180115140
May190125150
Jun200130160

ロングフォーマットのデータ (例:月別商品売上)

MonthProductSales
JanProductA150
FebProductA160
MarProductA175
JunProductC160

meltメソッドを使うと、このようなデータフォーマットの変換を簡単に行うことができます。

2. meltメソッドの使い方

meltメソッドの基本的な使い方は以下の通りです。

.melt()メソッドのシグネチャ:

Python
pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None, ignore_index=True)

使い方解説:

Python
df_long = pd.melt(df_wide, id_vars=['識別変数となる列'], var_name='変数名となる列の名前', value_name='値となる列の名前')

3. 実践!meltでデータ分析&可視化

それでは、実際にmeltメソッドを使ってデータ分析と可視化を行ってみましょう。ここでは、月別の商品売上データを使って、以下のステップで進めていきます。

  1. ワイドフォーマットのDataFrameを作成
  2. meltを使ってロングフォーマットに変換
  3. データ分析:商品ごとの平均売上を計算
  4. データ可視化:月別売上推移を折れ線グラフで表示
  5. データ可視化:月別売上を商品別に棒グラフで表示

3.1 ワイドフォーマットのDataFrameを作成

まず、分析対象となる月別商品売上データ(ワイドフォーマット)を作成します。

Python
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# Create a wide-format DataFrame
data = {
    'Month': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
    'ProductA': [150, 160, 175, 180, 190, 200],
    'ProductB': [90, 95, 110, 115, 125, 130],
    'ProductC': [120, 125, 135, 140, 150, 160]
}

df_sales = pd.DataFrame(data)
print("Wide-Format DataFrame:")
print(df_sales)
Plaintext
Wide-Format DataFrame:
  Month  ProductA  ProductB  ProductC
0   Jan       150        90       120
1   Feb       160        95       125
2   Mar       175       110       135
3   Apr       180       115       140
4   May       190       125       150
5   Jun       200       130       160

3.2 meltを使ってロングフォーマットに変換

次に、meltメソッドを使って、このデータをロングフォーマットに変換します。

Python
# Transform to long format
df_sales_long = pd.melt(df_sales, id_vars=['Month'], var_name='Product', value_name='Sales')
print("\nLong-Format DataFrame:")
print(df_sales_long)
Plaintext
Long-Format DataFrame:
   Month   Product  Sales
0    Jan  ProductA    150
1    Feb  ProductA    160
2    Mar  ProductA    175
3    Apr  ProductA    180
4    May  ProductA    190
5    Jun  ProductA    200
6    Jan  ProductB     90
7    Feb  ProductB     95
8    Mar  ProductB    110
9    Apr  ProductB    115
10   May  ProductB    125
11   Jun  ProductB    130
12   Jan  ProductC    120
13   Feb  ProductC    125
14   Mar  ProductC    135
15   Apr  ProductC    140
16   May  ProductC    150
17   Jun  ProductC    160

Month列は識別変数として残し、ProductAProductBProductCの各列をProductSalesという2つの列にまとめています。

3.3 データ分析:商品ごとの平均売上を計算

ロングフォーマットに変換したデータを使って、商品ごとの平均売上を計算してみましょう。

Python
# Data Analysis: Calculate average sales per product
average_sales = df_sales_long.groupby('Product')['Sales'].mean()
print("\nAverage Sales per Product:")
print(average_sales)
Plaintext
Average Sales per Product:
Product
ProductA    175.833333
ProductB    110.833333
ProductC    138.333333
Name: Sales, dtype: float64

groupby()メソッドを使うことで、簡単に商品ごとの平均売上を算出できました。

3.4 データ可視化:月別売上推移を折れ線グラフで表示

最後に、seabornライブラリを使って、月別売上推移を折れ線グラフで可視化します。

Python
# Data Visualization: Plot monthly sales trend for each product
plt.figure(figsize=(10, 6))
sns.lineplot(x='Month', y='Sales', hue='Product', data=df_sales_long)
plt.title('Monthly Sales Trend by Product')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.show()

各商品の売上推移が一目でわかるグラフが作成できました!

3.5 データ可視化:月別売上を商品別に棒グラフで表示

最後に、seabornライブラリを使って、月別売上を商品別に棒グラフで可視化します。

Python
# Data Visualization: Plot monthly sales by product using barplot
plt.figure(figsize=(10, 6))
sns.barplot(x='Month', y='Sales', hue='Product', data=df_sales_long)
plt.title('Monthly Sales by Product')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.show()

各月の各商品の売上が一目でわかるグラフが作成できました!

4. ロングフォーマットとワイドフォーマット:利点と使い所

ロングフォーマット

利点:

使い所:

ワイドフォーマット

利点:

使い所:

まとめ

特徴ロングフォーマットワイドフォーマット
データの可視化容易(特に複数カテゴリ)特定の項目の比較は容易
データの分析集計処理と組み合わせやすい特定のセルへのアクセスが容易
データ容量場合によっては削減可能繰り返しが多いと冗長になる場合がある
直感的な理解やや慣れが必要人間にとって理解しやすい
データベース正規化された形式として扱いやすい場合によっては正規化が必要

多くの場合、データ分析や可視化の前処理にはロングフォーマットが適しており、人間が閲覧・編集する際にはワイドフォーマットが適しています。 pandasmeltpivotを使いこなして、状況に応じて適切なフォーマットを選択しましょう!

5. まとめ

pandasmeltメソッドは、データ分析や可視化の前処理として非常に強力なツールです。ワイドフォーマットのデータをロングフォーマットに変換することで、データの集計や可視化がより簡単かつ柔軟に行えるようになります。この記事を参考に、meltメソッドを使いこなして、データ分析のスキルアップを目指しましょう!

このmeltメソッドとは反対にロングフォーマットをワイドフォーマットに変換するpivotメソッドについての記事を書きましたので、こちらも併せて参考にして下さい。

6. 参考情報

これらのリソースも活用して、さらに理解を深めていってください!

Pythonに関する書籍のです。

24年9月に出版された「ハイパーモダンPython-信頼性の高いワークフローを構築するモダンテクニック」、Claudio Jolowicz著、嶋田、鈴木訳。開発環境の構築、プロジェクトの管理、テストに関して実践的な内容でとても参考になる一冊です。

ぜひFREE PREVIEWで内容チェックしてみて下さい!

最後まで読んでいただきありがとうございました。

モバイルバージョンを終了