商品ごとに売上の列を持つデータを使って、売上構成比を計算したい

商品カテゴリー別の売上がそれぞれ別の列として格納されているワイド型のデータ(商品カテゴリーが増えると列が増えていくタイプのデータ)を使って、売上構成比を計算・可視化する方法を紹介します。

役立つ人

手元のデータがワイド型のデータで、注目している指標の構成比を分析したい方に役立ちます。

問題

以下のように商品カテゴリーごとの売上が別々の列として格納されているワイド型のデータでは、売上構成比を直接計算することができません。

各カテゴリーの売上が全体に占める割合を計算・可視化するためには、データ構造の変換が必要になります。

解決方法

ワイド型からロング型にデータの構造を変更し、表計算を利用することで、売上構成比を簡単に計算・可視化することができます。

今回は1行が1つの月を表し、列には各商品カテゴリー(オフィス用品、家具、電化製品)の売上の情報を持つデータを利用します。

ワイド型からロング型へのデータ変換

複数の商品カテゴリーの売上列をロング型に変換するため、以下の操作を行います。

オフィス用品から電化製品までの列を選択した状態で、列メニューから「ワイド型からロング型へ」から「選択された範囲」を選択します。

ワイド型からロング型へのダイアログが開いたら、キー列を「カテゴリー」、値の列を「売上」として設定し、実行ボタンをクリックします。

これでワイド型のデータがロング型に変換され、カテゴリーと売上の2列を持つデータを作成することができました。

チャートでの売上構成比の可視化

売上構成比を可視化するため、以下の操作を行います。

チャート・ビューに移動し、チャートタイプを「バー」に設定し、X軸に「注文日」を選択し、月で切り捨てます。

次にY軸に売上を選択し集計関数を「合計値(SUM)」に設定のうえ、色で分割に「カテゴリー」を選択します。

続いてY軸の売上メニューから表計算を選択し、「合計値に対する割合」を選択します。

これで月ごとの商品カテゴリー別の売上構成比を積み上げバーチャートとして可視化することができました。

データとしての売上構成比の計算

売上構成比をデータとして計算したい場合、先程のロング型に変換したデータに対して、以下の操作を行います。

「売上」の列ヘッダーメニューから「表計算」を選択し、「…に対する割合」の中から「合計値(SUM)」を選択します。

表計算のダイアログが開いたら、グループに「注文日」を選択し、丸め処理を月に設定します。

値の編集メニューをクリックし、列名を「売上構成比」に変更して実行ボタンをクリックします。

これで月ごとの商品カテゴリー別の売上構成比をデータとして計算することができました。

ビデオ

参考情報

商品ごとに売上の列を持つデータを使って、売上構成比を計算する方法(Rコード)

売上データの場合

今回のワイド型の売上データを使って、カスタムRコマンドで売上構成比を計算・可視化したい場合、以下のRコードのサンプルをご参考ください。

商品ごとに売上の列を持つデータを使って、売上構成比を計算するRコマンド

# 注文明細データを縦持ちに変換し、売上構成比を計算する

# 1. 商品カテゴリごとに売上を縦持ちに変換(ワイド → ロング)
pivot_longer(
  cols = オフィス用品:電化製品,  # 売上が格納されているカテゴリ列を選択
  values_to = '売上',  # 売上の値をこの列に格納
  names_to = "カテゴリー",  # 元の列名(カテゴリ名)をこの列に格納
  values_drop_na = TRUE,  # NAの値は削除
  names_repair = 'unique',  # 列名が重複した場合はユニークな名前に修正
  type_convert = TRUE  # データ型を適切に変換
) %>%
  
  # 2. 売上構成比を計算
  mutate_group(
    group_cols = c(`注文日_mon` = "注文日"),  # 「注文日」を「注文日_mon」に変換し、月単位でグループ化
    group_funs = c("rtomon"),  # 「注文日」を月単位に変換(rtomon = 月初の日付に変換)
    `売上構成比` = (売上 / sum(売上, na.rm = !all(is.na(売上)) )) * 100  # 売上の合計に対する割合を算出(%表記)
  )
Export Chart Image
Output Format
PNG SVG
Background
Set background transparent
Size
Width (Pixel)
Height (Pixel)
Pixel Ratio