0Pricing
Pandas & NumPy Academy · レッスン

月次トレンドの可視化

月次売上を折れ線グラフで描画し、3か月移動平均を重ねて、売上のピーク月とボトム月に注釈を付けます。

「月次トレンドの可視化」はCoddyKit上の無料Pandas & NumPy Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPandas & NumPy Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Pandas & NumPy Academyコースには全4レッスンが含まれています。

月間売上合計の計算

グラフを作成する前に、売上 DataFrame を月ごとの合計に集計します。year_month の Period 列でグループ化し、売上を合計します。.to_timestamp() を使って PeriodIndex を DatetimeIndex に変換すると、Matplotlib の日付フォーマッターで目盛りラベルを正しく表示できます。インデックスで並べ替えると、折れ線グラフが時系列順に左から右へ流れます。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_parquet('sales_features.parquet')

monthly = df.groupby('year_month')['revenue'].sum().sort_index()
monthly.index = monthly.index.to_timestamp()
print(monthly.head())

月間売上折れ線グラフの作成

plt.subplots(figsize=(12, 5)) で Figure と Axes を作成し、ax.plot() を呼び出して月間売上のトレンドを描画します。marker='o' を使うと各月に点を配置でき、線が滑らかな場合でも個々のデータポイントを確認できます。色と線幅を設定して、後から追加する重ね合わせ要素より主要なトレンドが目立つようにします。

fig, ax = plt.subplots(figsize=(12, 5))

ax.plot(monthly.index, monthly.values,
        color='steelblue', linewidth=2, marker='o', markersize=5,
        label='Monthly Revenue')

ax.set_title('Monthly Revenue Trend')
ax.set_xlabel('Month')
ax.set_ylabel('Revenue (USD)')
plt.tight_layout()
plt.show()

3 か月移動平均の重ね合わせ

月間売上の生の折れ線は、季節的なノイズによってギザギザに見えることがあります。monthly.rolling(3).mean() で計算した3 か月移動平均を重ねると、基礎となるトレンドをより明確に示せます。生の系列を隠さないよう、対照的な色の破線で描画します。

rolling_avg = monthly.rolling(3).mean()

ax.plot(rolling_avg.index, rolling_avg.values,
        color='darkorange', linewidth=2, linestyle='--',
        label='3-Month Moving Avg')

ax.legend()
plt.show()

ピーク月の注釈

ax.annotate() を使って、売上が最も高い月に印を付けます。monthly.idxmax() でピークの月を、monthly.max() でその値を求めます。注釈の矢印はテキストラベルからピークのデータポイントへ向かうため、PNG や PDF でグラフを受け取る人を含め、読者がすぐにその情報を把握できます。

peak_date = monthly.idxmax()
peak_val = monthly.max()

ax.annotate(f'Peak: ${peak_val:,.0f}',
            xy=(peak_date, peak_val),
            xytext=(peak_date, peak_val * 1.1),
            arrowprops=dict(arrowstyle='->', color='red'),
            color='red', fontsize=10)
plt.show()

谷となる月の注釈

同様に、monthly.idxmin()を使って収益が最も低い月に印を付け、季節性や混乱の可能性を把握します。ピークと谷の両方に注釈を付けることで、全体像を把握できます。関係者は最も良い月だけでなく、収益がどの程度まで落ち込む可能性があるかも確認できるため、キャッシュフロー計画に役立ちます。

trough_date = monthly.idxmin()
trough_val = monthly.min()

ax.annotate(f'Trough: ${trough_val:,.0f}',
            xy=(trough_date, trough_val),
            xytext=(trough_date, trough_val * 0.85),
            arrowprops=dict(arrowstyle='->', color='navy'),
            color='navy', fontsize=10)
plt.show()

日付目盛りラベルの書式設定

Matplotlibのデフォルトの日付目盛りラベルは、重なったり読みにくい形式になったりすることがよくあります。matplotlibからmdatesをインポートし、MonthLocatorとDateFormatterを設定して、目盛りの間隔とラベル形式を制御します。目盛りラベルを45度回転させると、12か月の軸上でラベルが重なるのを防げます。

import matplotlib.dates as mdates

ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))

plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()

第4四半期への網掛け領域の追加

ax.axvspan()を使って、第4四半期(10月から12月)の期間を背景の網掛けで強調します。これにより季節的なパターンがすぐに分かるようになります。ピークが一貫して網掛け部分にある場合、第4四半期は重要な販売時期であり、プロモーションの対象にする価値があります。alphaパラメーターで網掛けの透明度を調整します。

import datetime

q4_start = datetime.datetime(2023, 10, 1)
q4_end = datetime.datetime(2023, 12, 31)

ax.axvspan(q4_start, q4_end, alpha=0.15, color='gold', label='Q4')
ax.legend()
plt.show()

時間経過に伴うカテゴリ別収益のプロット

各線が1つの商品カテゴリを表す複数折れ線グラフを作成します。月別・カテゴリ別のDataFrameをピボットし、列をカテゴリ、インデックスを時系列にしてから、列を順に処理してそれぞれにax.plot()を呼び出します。同じAxesに対して繰り返し呼び出すと、Matplotlibが各線に異なる色を自動的に割り当てます。

monthly_cat = df.groupby(['year_month', 'category'])['revenue'].sum().unstack('category')
monthly_cat.index = monthly_cat.index.to_timestamp()

fig, ax = plt.subplots(figsize=(12, 6))
for col in monthly_cat.columns:
    ax.plot(monthly_cat.index, monthly_cat[col], label=col, linewidth=1.5)

ax.legend(loc='upper left', fontsize=8)
ax.set_title('Monthly Revenue by Category')
plt.tight_layout()
plt.show()

月別収益の積み上げ棒グラフ

積み上げ棒グラフでは、月ごとの総収益を示しながら、その内訳として各カテゴリの寄与も確認できます。ピボット済みのDataFrameに対して、monthly_cat.plot(kind='bar', stacked=True, ax=ax)を直接使用します。積み上げ棒グラフは、カテゴリが6未満の場合に適しています。それ以上になると、色の見分けが難しくなります。

fig, ax = plt.subplots(figsize=(12, 5))

monthly_cat.plot(kind='bar', stacked=True, ax=ax, colormap='tab10')

ax.set_title('Monthly Revenue by Category (Stacked)')
ax.set_xlabel('Month')
ax.set_ylabel('Revenue')
ax.legend(loc='upper left', fontsize=8)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

前月比成長率

前月比の増加率を収益と併せてプロットすると、状況をより適切に把握できます。たとえば、1月の棒が視覚的に小さくても、前月から20 %増加している場合があります。monthly.pct_change() * 100で成長率を計算し、ax.twinx()を使って第2のy軸にプロットします。これにより同じx軸を共有しながら、単位を混同せずに表示できます。

growth = monthly.pct_change() * 100

fig, ax1 = plt.subplots(figsize=(12, 5))
ax2 = ax1.twinx()

ax1.bar(monthly.index, monthly.values, width=20, color='steelblue', alpha=0.6, label='Revenue')
ax2.plot(growth.index, growth.values, color='red', marker='o', label='MoM Growth %')

ax1.set_ylabel('Revenue')
ax2.set_ylabel('MoM Growth %')
plt.title('Revenue and Month-over-Month Growth')
plt.tight_layout()
plt.show()

レポート用の図の保存

fig.savefig('monthly_trend.png', dpi=150, bbox_inches='tight')を使うと、スライド資料やWebダッシュボードに適した高解像度のPNGを作成できます。bbox_inches='tight'引数は余分な余白を切り詰め、dpi=150はファイルサイズを過度に大きくせずに鮮明な画像を作成します。印刷品質のレポート用に、PDFとしても保存してください。

fig.savefig('monthly_trend.png', dpi=150, bbox_inches='tight')
fig.savefig('monthly_trend.pdf', bbox_inches='tight')
print('Figure saved as PNG and PDF')

理解度チェック

このレッスンで学んだデータ分析の概念を理解できているか確認しましょう。

レッスンのまとめ

このレッスンでは、月ごとの総収益を計算し、折れ線グラフとしてプロットする方法、移動平均を重ね、収益のピーク月と谷の月に注釈を付ける方法、そして出版品質の図をPNGとPDFに保存する方法を学びました。次は、ユーザー行動データにおけるセッション化とイベント順序について学びます。

よくある質問

「月次トレンドの可視化」レッスンは無料ですか?

はい。「月次トレンドの可視化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Pandas & NumPy Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Pandas & NumPy Academyコースには全4レッスンが含まれています。

「月次トレンドの可視化」で何を学びますか?

月次売上を折れ線グラフで描画し、3か月移動平均を重ねて、売上のピーク月とボトム月に注釈を付けます。 ブラウザで直接実行するハンズオンコードでPandas & NumPy Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Pandas & NumPy Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPandas & NumPy Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「月次トレンドの可視化」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPandas & NumPy Academyレッスンでコードを書いて実行できますか?

はい。すべてのPandas & NumPy Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 売上データセットの読み込みと監査
  2. 売上計算と特徴量エンジニアリング
  3. 地域とカテゴリ別のGroupBy分析
  4. 月次トレンドの可視化
← Pandas & NumPy Academyに戻る