青の統計学-DS Playground-

日付集計: 日次・月次・曜日別に見る

Stage 2 — 第4章 | データ分析基礎カリキュラム 推定学習時間:35〜45分 | 難易度:★★★☆☆


この章で学ぶこと

ECデータの分析では、時間の変化を見ることがとても重要です。 売上が伸びているのか、週末に注文が増えるのか、月ごとの季節性があるのかは、1件ずつ注文を見るだけではわかりません。

この章では、注文日を使って日次・月次・曜日別に集計する考え方を学びます。

この章を終えると、こんなことができるようになります:

  • 日付ごとの売上や注文件数を集計できる
  • 月次集計で大きな傾向を確認できる
  • 曜日別集計で行動パターンを見られる
  • 日付集計で注意すべき粒度と期間条件を説明できる

1. 日付集計は「いつ」を分析する入口

注文データには、多くの場合 order_date のような日付列があります。 この列を使うと、売上や注文数を時間軸で見ることができます。

たとえば、次のような問いに答えられます。

  • 日別の売上は安定しているか
  • 月ごとの売上は伸びているか
  • 注文が多い曜日はあるか
  • キャンペーン後に注文数は増えたか

日付集計では、まず「どの日付列を使うのか」を確認します。 注文日、決済日、発送日では、同じ売上でも見え方が変わることがあります。


2. 日次で集計する

日別の注文件数と売上を出す基本形です。

SELECT
            order_date,
            COUNT(*) AS order_count,
            SUM(total_amount) AS sales
          FROM orders
          WHERE status = 'completed'
          GROUP BY order_date
          ORDER BY order_date;
          

このSQLは、完了注文を注文日ごとにまとめます。 結果の1行は「1日」を表します。

日次集計は、直近の変化やキャンペーンの影響を見るときに便利です。 ただし、日ごとの変動は大きくなりやすいため、1日だけで判断しすぎないようにします。


3. 月次で集計する

月ごとの傾向を見るには、日付から年月を取り出して集計します。 データベースによって関数名は異なりますが、ここでは DATE_TRUNC を使う例で考えます。

SELECT
            DATE_TRUNC('month', order_date) AS order_month,
            COUNT(*) AS order_count,
            SUM(total_amount) AS sales
          FROM orders
          WHERE status = 'completed'
          GROUP BY DATE_TRUNC('month', order_date)
          ORDER BY order_month;
          

このSQLは、注文日を月単位に丸めて、月ごとの注文件数と売上を出します。

月次集計は、日次よりも変動がならされるため、中長期の傾向を見やすくなります。 売上が伸びているか、繁忙期があるか、施策後に変化が続いているかを確認できます。


4. 関数の書き方はデータベースによって違う

日付から月や曜日を取り出す関数は、SQLの種類によって書き方が違います。

目的
月単位に丸める DATE_TRUNC('month', order_date)
年月文字列にする TO_CHAR(order_date, 'YYYY-MM')
曜日を取り出す EXTRACT(DOW FROM order_date)

学習では、まず「日付を月や曜日に変換してから GROUP BY する」と理解しましょう。 実務では、使っているデータベースの関数に合わせて書き換えます。


5. 曜日別に集計する

曜日別の注文傾向を見る例です。

SELECT
            EXTRACT(DOW FROM order_date) AS day_of_week,
            COUNT(*) AS order_count,
            SUM(total_amount) AS sales,
            AVG(total_amount) AS average_order_amount
          FROM orders
          WHERE status = 'completed'
          GROUP BY EXTRACT(DOW FROM order_date)
          ORDER BY day_of_week;
          

曜日別集計では、週末に注文が多いのか、平日の昼に強いのかといった行動パターンを見られます。 広告配信やメール配信のタイミングを考える材料にもなります。

ただし、曜日番号が何曜日を表すかはデータベースによって異なることがあります。 結果を読む前に、0が日曜なのか月曜なのかを確認しましょう。


6. 日付集計と期間条件を組み合わせる

日付集計では、対象期間を明確にすることが重要です。 たとえば、2026年1月から3月までの月次売上を見るSQLです。

SELECT
            DATE_TRUNC('month', order_date) AS order_month,
            COUNT(*) AS order_count,
            SUM(total_amount) AS sales
          FROM orders
          WHERE status = 'completed'
            AND order_date >= '2026-01-01'
            AND order_date < '2026-04-01'
          GROUP BY DATE_TRUNC('month', order_date)
          ORDER BY order_month;
          

日付時刻型で時刻まで入っている場合、BETWEEN '2026-01-01' AND '2026-03-31' では3月31日の夜のデータを取りこぼすことがあります。 そのため、実務では「開始日以上、翌期間の開始日未満」と書くことがよくあります。


7. ゼロの日をどう扱うか

日次集計では、注文が1件もない日は結果に出ないことがあります。

SELECT
            order_date,
            COUNT(*) AS order_count
          FROM orders
          WHERE status = 'completed'
          GROUP BY order_date
          ORDER BY order_date;
          

このSQLは、orders に存在する日付だけを返します。 注文がゼロの日も表に出したい場合は、日付カレンダーのテーブルを用意して結合する必要があります。

この章では詳しく扱いませんが、日付集計では「データがない日」と「ゼロだった日」の違いを意識しましょう。 グラフを作るときに重要になります。


8. 日次・月次・曜日別の使い分け

集計単位 向いている分析 注意点
日次 直近変化、キャンペーン影響、異常検知 変動が大きい
月次 中長期トレンド、売上成長、季節性 細かい変化は見えにくい
曜日別 行動パターン、配信タイミング検討 祝日やセール日の影響を受ける

同じ売上データでも、集計単位を変えると見えるものが変わります。 分析目的に合わせて、日次・週次・月次・曜日別を使い分けましょう。


実務での使いどころ: 時間軸で変化を見る

日付集計は、売上や利用状況の変化を見るための基本です。 同じ売上100万円でも、毎日安定して売れているのか、特定の日だけ大きく売れたのかで判断は変わります。

SELECT
            DATE_TRUNC('day', order_date) AS order_day,
            COUNT(*) AS order_count,
            SUM(total_amount) AS sales
          FROM orders
          WHERE status = 'completed'
          GROUP BY DATE_TRUNC('day', order_date)
          ORDER BY order_day;
          

日次、週次、月次はそれぞれ向いている用途が違います。

集計単位 向いている用途
日次 キャンペーン直後、障害、曜日差を見る
週次 日々のばらつきを少しならして見る
月次 事業全体のトレンドを見る
曜日別 曜日による行動差を見る

期間比較では、対象期間の長さもそろえます。 31日ある月と28日ある月を単純比較すると、日数差の影響を受けることがあります。

ミニ演習

次の目的に合う日付集計を考えてください。

  1. キャンペーン開始後3日間の注文数を見たい。
  2. 半年間の売上トレンドを見たい。
  3. 曜日によって注文数が違うか見たい。
  4. 月次売上を比較するとき、日数差に注意すべき理由を説明する。

まとめ

構文・考え方 意味
日次集計 日付ごとに集計する GROUP BY order_date
月次集計 月ごとに集計する DATE_TRUNC('month', order_date)
曜日別集計 曜日ごとに集計する EXTRACT(DOW FROM order_date)
期間条件 集計対象期間を決める order_date >= ... AND order_date < ...

この章のキーメッセージ: 日付集計は、データを時間軸で見るための基本です。どの日付列を使うか、どの粒度で見るか、どの期間を対象にするかを明確にしましょう。


この章の確認

  1. 日次集計と月次集計では、それぞれ何を見るのに向いていますか?
  2. 完了注文の日別売上を出すSQLを書いてください。
  3. 月次集計で DATE_TRUNC('month', order_date) のような処理を使う理由を説明してください。
  4. 注文がゼロの日が結果に出ない場合、どのような点に注意が必要ですか?

関連演習