主成分分析(PCA)をTableau とR連携でやってみる

Version 6

    ブログ「Tableauから始めるデータサイエンス」に内容を更新しました。

    主成分分析(PCA)をTableau とR連携でやってみる – Tableauから始めるデータサイエンス

     

    静的データではありますが、biplotライクに成分のベクトルを表示する方法を追記しています。

    ご参照ください。

    ーーーーーーーーーーーーーーーーーーーーーーーーーーーー

     

    § 今回はR連携を用いて主成分分析(PCA)の可視化をTableauで実施してみたいと思います。

     

    § 主成分分析とは・・・?

     

    主成分分析とは、多次元データのもつ情報をできるだけ損わずに. 低次元空間に情報を縮約する方法です。

    多次元データを2次元(3次元データ)に縮約できれば、データ全体の雰囲気を視覚化することができます。 視覚化によって、調査対象の類似性等、情報を解釈しやすくすることができます。

     

    詳細はこちらを参照ください。

    「R」による主成分分析 - 統計科学研究所

    www.statistics.co.jp/reference/software_R/statR_9_principal.pdf

     

     

    今回、解析するデータは都道府県のアルコール消費量で、人口当たりのビール、酒、焼酎、ワイン、ウィスキーの5種類のアルコールの消費量から、都道府県のアルコール消費傾向を探ります。

     

    § まずはRで分析を実施してみます。

     

    (文字コードをUTF-8化した)テキストデータをR Studioの”Import Dataset(画面右上Environmentタブ)から読み込みます。Delimiter Tab, Encoding DefaultまたはUTF-8とします。

     

     

    R Studio のコンソールで以下を実行します。

     

    data <- as.data.frame(sakeJ_UTF8)     # data frame に変換します

    row.names(data) <- data[,1]     #1列目(県名)を行の名前に設定します

    data = data [,2:6]   # 県名を除いたアルコール消費量のデータを入力とします

     

    result = prcomp(data,scale=TRUE)     #prcomp関数で主成分分析を行います

    result

     

    Standard deviations:
    [1] 1.4449807 1.1361589 0.8723427 0.7022989 0.6057791

    Rotation:
                                       PC1        PC2        PC3        PC4
    人口当たりビール消費量     -0.4861470  0.1988128  0.6080867 -0.5908756
    人口当たり酒消費量         -0.5479877 -0.3214838 -0.1853810  0.2388893
    人口当たり焼酎消費量        0.4174508  0.5420256  0.3622685  0.2811587
    人口当たりワイン消費量     -0.1790259  0.6512052 -0.6648496 -0.3072330
    人口当たりウィスキー消費量 -0.5070061  0.3731778  0.1503366  0.6483484
                                        PC5
    人口当たりビール消費量      0.07232707
    人口当たり酒消費量          0.71057963
    人口当たり焼酎消費量        0.56714584
    人口当たりワイン消費量      0.08639729
    人口当たりウィスキー消費量 -0.40090709

     

    次にbiplot関数に主成分1(PC1)と主成分2(PC2)2次元のグラフを書きます。

     

    biplot(result)

     

    この結果から横軸(PC1)については、焼酎消費量が多いと正の方向に酒消費量が多いと負の方向に移動する傾向のある軸だとわかります。また、縦軸(PC2)についてはワインの消費量が多いと正の方向に移動する傾向があるようです。

     

    > summary(result)
    Importance of components:
                                  PC1    PC2    PC3     PC4     PC5
    Standard deviation     1.4450 1.1362 0.8723 0.70230 0.60578
    Proportion of Variance 0.4176 0.2582 0.1522 0.09864 0.07339
    Cumulative Proportion  0.4176 0.6758 0.8280 0.92661 1.00000

     

    summary(result)を実行すると、主成分の寄与率(どれだけ説明ができるか)を見ることができます。Cumulative Proportion  から、PC1PC2 67.58%を説明するということが わかります。

     

    result$x[,n] で主成分n の値を返すことができます。

    例えば下の例では、それぞれの県の主成分1(PC1)の値を返します。

    以降、これを使ってTableauから描画をします。

     

    > result$x[,1]
           愛知        愛媛        茨城        岡山        岩手        岐阜
    -0.18486496  0.22986099  1.05832236  0.47127026  0.19954491  0.24001969
            宮崎        宮城        京都        熊本        群馬        広島
      3.59175004 -0.93710420 -0.72927314  2.31869706  1.33865165 -0.61357498
            香川        高知        佐賀        埼玉        三重        山形
      0.06862214 -1.64799493  0.48168352  1.50910245  0.50347218 -1.62605729
            山口        山梨        滋賀      鹿児島        秋田        新潟
    -0.19942634  0.41092966  0.81191123  4.23417285 -2.29032150 -3.01962931
          神奈川        青森        静岡        石川        千葉        大阪
      0.22495553 -1.26407083  0.52430448 -1.35236635  1.53334167 -2.04895194
            大分        長崎        長野        鳥取        島根        東京
      0.85266898  0.82718172 -0.29840935 -0.83643440 -0.61740533 -3.03653603
            徳島        栃木        奈良        富山        福井        福岡
      0.46161039  1.15504896  1.30085642 -1.12082616 -0.74800971  0.45715757
            福島        兵庫      北海道      和歌山
    -0.83525083 -0.05702591 -0.27027402 -1.07132921

     

     

    § それでは次にTableauから実行してみます。

     

    データソースを読み込みます。

    +   PC1 用をRから取得する計算式を作成します。

     

     

    prcomp1

    ----------------------------------------

     

    SCRIPT_REAL(

    "n <- max(.arg6)

    df <- data.frame(.arg1,.arg2,.arg3,.arg4,.arg5)

    pc <- prcomp(df, scale = TRUE)

    as.numeric(pc$x[,n])

    ",

    SUM([人口当たりビール消費量]),

    SUM([人口当たり酒消費量]),

    SUM([人口当たり焼酎消費量]),

    SUM([人口当たりワイン消費量]),

    SUM([人口当たりウィスキー消費量]),

    1

    )

    ----------------------------------------

     

    SUM([人口当たりビール消費量]),

    SUM([人口当たり酒消費量]),

    SUM([人口当たり焼酎消費量]),

    SUM([人口当たりワイン消費量]),

    SUM([人口当たりウィスキー消費量]) をデータフレームに直し、

    prcompに入力し、結果をpc に代入します。

    pc$x[,1]はPC1の値を返り値として返します。

    最後(.arg6) を2 にすればPC2の値を返します。

     

     

    + 同様にして、主成分2PC2)を返す計算式を作成します。

    prcomp

    ----------------------------------------

     

    SCRIPT_REAL(

    "n <- max(.arg6)

    df <- data.frame(.arg1,.arg2,.arg3,.arg4,.arg5)

    pc <- prcomp(df, scale = TRUE)

    as.numeric(pc$x[,n])

    ",

    SUM([人口当たりビール消費量]),

    SUM([人口当たり酒消費量]),

    SUM([人口当たり焼酎消費量]),

    SUM([人口当たりワイン消費量]),

    SUM([人口当たりウィスキー消費量]),

    2

    )

    ----------------------------------------

     

    + メジャーバリューをクロス表として表示します。

    + 県名(Pref)を列に、メジャーバリューを行にドラッグします。

    + 作成した計算式prcomp1.prcomp2 は表計算となりますので、次を使用して計算でPrefを指定してください。

     

    +  V10.2からの個別の凡例を利用してメージャーごとに異なる配色をしてみましょう。

    prcomp1 で並べ替えをしてみます。

     

     

     

    左から 人口当たりの焼酎消費量、人口当たりの酒酎消費量、PC1 の値となります。

    PC1が高い(緑色)では人口当たりの焼酎消費量の色が濃い傾向に、PC1が低い(青色)では人口当たりの酒消費量の色が濃い傾向にあるようです。

    また焼酎の消費量と酒の消費量の色のグラデーションが相反することから、焼酎の消費量と酒の消費量は反比例の関係にあるようです。

     

    これにより、主成分1は高いと焼酎消費量が高く、低いと酒消費量が高いことを示す指標となることが分かります。

     

     

     

    主成分2(PC2)についてはワインの消費量とグラデーションが似ているので、ワインの消費量の関与が大きいといえます。

     

     

    Rでみたbiplotのベクトルの方向からもこの傾向はわかります。

     

    + 次に主成分を使って散布図を作成します。

    + prcomp1 を列に、prcomp2を行に、表計算で次を使って計算でPrefを指定します。

    + 色にメジャーバリューを利用し、 prcomp1 prcomp2を使用します。

    +色に個別の凡例を使用して、透明度を低く設定すると、prcomp1の配色とprcomp2 の配色を重ねることができます。prcomp1の高低によって緑と青が変化し、prcomp2 の高さによって赤が濃くなります。

     

    例えば、鹿児島、宮崎、熊本は主成分1が強く、焼酎消費量が高い傾向、

    新潟、秋田、石川は逆に焼酎消費量が低く、日本酒消費量が強い傾向があります。

    東京、山梨、北海道は 主成分1が強く、ワイン消費量が強い傾向があります。

     

     

    バブルの大きさに焼酎消費量を使ってみると面白いかもしれません。

     

     

    Rbiplotの結果も併せてダッシュボードにするとよりわかりやすいかもしれません。

     

     

    以上のように、ビール、酒、焼酎、ワイン、ウイスキー消費量など、複数の項目指標があるときこれらの傾向を1つの図の中に表示することはできませんが、

    これらの特徴をうまく抽出する主成分を2つ作り出すことで、主成分1と主成分2の2次元の散布図を作ることができ、各都道府県の類似性を可視化することができました。

     

    RbiplotのベクトルがTableauでも表示できればよいのですが、良い手が浮かばず、どなたかアイディアがあればご教示ください。

     

    以上、参考になれば幸いです。

    よろしくお願いします。