LoginSignup
6
2

More than 1 year has passed since last update.

酒税の数量データで主成分分析

Last updated at Posted at 2022-12-12

概要

mediba Advent Calendar 2022の13日目です。

この記事では国税庁が公開している酒税の数量データで主成分分析を行い、都道府県ごとのお酒の消費状況の特徴を把握してみます。

主成分分析とは

主成分分析(Principal Component Analysis)は次元圧縮・変数削減など情報集約を目的に使われます。

手順としては相関行列・相関行列の固有値・固有ベクトルを求め、各個体の第1・第2主成分得点を計算・プロット という流れになり、Rにおいてはprcomp()およびbiplot()にて主成分分析とプロットでの可視化をすることができます。

データソース

今回は以下の2つの統計データを利用します。

1) 酒類 販売統計

国税庁の令和2年度の間接税のデータから、都道府県ごとの酒類の販売(消費)数量を抽出します。今回は以下ページで公開されている「製成数量」のエクセルの「4(3)都道府県別の販売(消費)数量」のシートを利用します。

2) 人口統計

販売統計を人口あたりの数値に変換するため、総務省統計局の人口統計を利用します。

データソースの整形

元のエクセルは不要なセルが含まれておりそのままでは扱いづらいので、Googleスプレッドシート上で分析に適した形に整形します。

1) 酒類 販売統計

スクリーンショット 2022-10-19 14.40.13.png

2) 人口統計

スクリーンショット 2022-10-19 14.40.17.png

前処理

ライブラリの読み込み

tidyverseとgooglesheet4を読み込み、プロット時の文字化けを防ぐためpar()でグラフィックスパラメータのフォント指定をしておきます。

library(tidyverse)
library(googlesheets4)
par(family = "HiraKakuProN-W3")

データの読み込み

googlesheet4ライブラリのread_sheet()を利用して、スプレッドシートのデータをtibbleデータフレームとして読み込みます。ssパラメータではシートID、rangeパラメータではシート名を指定します。

df_sales <- read_sheet(
  ss = "SPREADSHEET_ID",
  range = "販売数量"
)
df_population <- read_sheet(
  ss = "SPREADSHEET_ID",
  range = "人口"
)

この2つのデータフレームは「都道府県」のカラムをキーとしてJOINさせます。

df_merged <-
    left_join(df_sake, df_population, by = "都道府県")
df_merged

## # A tibble: 47 × 16
##    都道府県  清酒 合成清酒 連続式蒸留焼酎 単式蒸留焼酎 みりん ビール 果実酒
##    <chr>    <dbl>    <dbl>          <dbl>        <dbl>  <dbl>  <dbl>  <dbl>
##  1 北海道   17379      943          28783         5259   3540  88577  14736
##  2 青森      5440      430           6271         3142    474  18966   2690
##  3 岩手      5499      271           4588         3573    527  18833   2723
##  4 宮城      9495      448           6092         7130   1657  33130   6244
##  5 秋田      5942      373           5005         2133    416  15557   1925
##  6 山形      5808      359           5168         2142    786  15417   2469
##  7 福島      9611      371           4232         6997   1149  27043   3491
##  8 茨城      9650      485           7074         7931   1283  33434   6068
##  9 栃木      6783      273           6048         4638    847  22771   3539
## 10 群馬      6211      246           8065         3537   1124  21494   3765
## # … with 37 more rows, and 8 more variables: 甘味果実酒 <dbl>,
## #   ウイスキー <dbl>, ブランデー <dbl>, 発泡酒 <dbl>,
## #   `原料用アルコール・スピリッツ` <dbl>, リキュール <dbl>, その他 <dbl>,
## #   人口 <dbl>

都道府県を1レコードとして各酒類の販売数量および人口のカラムを持ったデータフレームとなりました。

データの整形

データフレームを主成分分析(prcomp)に適した形に整形します。

df_pca <- df_merged %>% 
  mutate_if(.predicate = is.numeric, .funs = ~ . / 人口) %>% 
  select(-その他, -みりん, -人口) %>%  ## 不要なカラムの除去
  column_to_rownames(var = "都道府県")

mutate_if()では第一引数に条件としての叙述関数(predicate)、第二引数に実行したい関数を渡すことで「任意の条件に当てはまるカラムに関数を適用」することができます。

ここではチルダから始まるラムダ式を利用して、numeric型のカラムに対して人口での割り算を適用しています。(人口あたりの指標に変換しています)

またこの後の主成分分析で「行名(rownames)」が必要となるため、column_to_rownames()で任意のカラム(都道府県)の行名変換を行なっています。

主成分分析

それではデータフレームをprcomp()に渡して主成分分析を実行してみます。

df_pca %>% 
  prcomp(scale = T) 

ここではscaleパラメータにTを指定し、標準化した値(単位を揃えた値)で計算しています。

※標準化:各値を平均で引いて標準偏差で割ること(↓)

z_i = \frac{x_i-\bar{x}}{sdx}

累積寄与率の確認

今回の分析結果の精度を確認してみます。

df_pca %>% 
  summary()

## Importance of components:
##                           PC1    PC2    PC3     PC4     PC5     PC6     PC7
## Standard deviation     1.9933 1.5056 1.2497 1.05235 0.92764 0.82102 0.66080
## Proportion of Variance 0.3311 0.1889 0.1301 0.09229 0.07171 0.05617 0.03639
## Cumulative Proportion  0.3311 0.5200 0.6502 0.74245 0.81416 0.87033 0.90672
##                            PC8     PC9    PC10    PC11    PC12
## Standard deviation     0.59553 0.51532 0.46761 0.41901 0.32394
## Proportion of Variance 0.02955 0.02213 0.01822 0.01463 0.00874
## Cumulative Proportion  0.93627 0.95840 0.97662 0.99126 1.00000

Standard deviationが標準偏差、Proportion of Varianceが寄与率、Cumulative Proportionが累積寄与率となります。

主成分分析では分散が最大の軸から順に主成分軸が決まるため、Standard deviationは分散の大きい順に並びます。
Proportion of Varianceは当該主成分が占める情報量の割合です。つまり第二主成分までで情報量の52%(PC1 + PC2 = 52%)が説明できる ということになります。

今回の場合、第二主成分までの累積寄与率では情報の損失が大きく、2軸だけでは解釈が難しいかもしません。

プロットと考察

主成分分析の結果をbiplotで可視化してみます。

df_pca %>% 
  biplot()

Rplot.png

12次元(12列)の酒類の数量データが2次元に圧縮され、興味深い結果が得られました。

焼酎の軸(単式・連続式)

すぐに目に着くのは焼酎の軸です。単式蒸留焼酎と連続式蒸留焼酎がそれぞれ対極になっています。

01.jpg

左上に伸びているのは単式蒸留焼酎、右下に伸びているのが連続式蒸留焼酎です。
前者は九州の「鹿児島・宮崎」、後者は東北の「新潟・秋田・山形」が強い傾向にあるようです。

※単式蒸留焼酎と連続式蒸留焼酎
単式蒸留焼酎は原料の特徴が残るため 米・麦・さつまいもなどの焼酎となり、連続式蒸留焼酎はクセのない味わいのためキンミヤ焼酎など、サワー等の割材として使われます。

IMG_4678-2.jpg

沖縄と発泡酒

02.jpg

沖縄は他の地域と比較して発泡酒が消費されやすい傾向にあるようです。
宮崎や鹿児島に近い方向に位置しているのは、泡盛(単式蒸留焼酎)の影響かもしれません、

東京の多様性

03.jpg

東京は果実酒(ワイン等)、ブランデー、リキュール、ビール、ウイスキーなど醸造酒・蒸留酒ともに幅広く消費される傾向にあるようです。

おわりに

主成分分析によって情報縮約し各都道府県のポジショニングを可視化することができましたが、もしかすると今回の内容は因子分析(Factor Analysis)の方が適切だったのかもしれません。というのも都道府県の消費傾向は背後に複数の因子(気候、平均所得、文化の多様性 等の違い)が考えられるからです。

実際に酒類と気温の相関を示すデータもあるようです。

沖縄では暑さによって発泡酒が好まれ、東北では寒さによって日本酒が好まれる ということはありそうです。

勉強も兼ねて主成分分析前提で進めてみたものの、やはり多変量解析はなかなか難しい世界だと実感しました。

参考URL・講座

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2