[Tableau Tips #2] Advanced Analytics - 訪日外客と円レートの相関

[[Tableau Tips #1] Advanced Analytics - Tabpy環境構築](https://qiita.com/tanj/items/987334a28fe26d631f73)
でTabpyの環境を構築したので、今回はPythonを使って、データの相関係数をTableau上で計算してみます。

##概要
[JNTO-日本政府観光局](https://www.jnto.go.jp/jpn/index.html)は訪日外国人の統計データを公開しています。データをみると、近年訪日外国人数も増加している傾向で、特に中国、韓国からの訪問者数が2Topになっています。もちろん呼び込み策をいろいろ出していますが、個人的に長期間の円安もその追い風になっているのではないかと思います。
なので、実際訪日者数と円安はどれくらいの相関（因果関係ではない）があるか検証してみます。

##データ

###分析データ取得先
* 訪日外国人：[統計データ（訪日外国人・出国日本人）]
(https://www.jnto.go.jp/jpn/statistics/visitor_trends/index.html)
![image1.png](https://qiita-image-store.s3.amazonaws.com/0/191079/01a3f7b4-5e1e-68f9-627e-b7dd921ddd9a.png)
から上記のようなExcel（[国籍/月別 訪日外客数 (2003年～2018年)(Excel)](https://www.jnto.go.jp/jpn/statistics/since2003_tourists.xlsx)）がダウンロードできます。

* 対人民元レート：[CNY JPY 過去データ - Investing.com](https://jp.investing.com/currencies/cny-jpy-historical-data)
* 対韓国ウォンレート：[KRW JPY 過去データ - Investing.com](https://jp.investing.com/currencies/krw-jpy-historical-data)


###データ加工
ダウンロードした国籍/月別 訪日外客数データはExcelで年別シートで持っていて、かつ月別の横持なので、そのままTableauから読み込んで利用するのが難しいです。
今回は[Alteryx](https://classmethod.jp/partner/alteryx/?pattern=Cc1&gclid=CjwKCAjwyrvaBRACEiwAcyuzRHJsd4yK8FLT7V749vL2FhhpVsJ0u-NbdgBi_GD5dWfsFztRQLhKOhoC5DkQAvD_BwE)というデータプレパレーションツールを使って加工しました。
訪日外客数Excelの複数シートをくっつけるには[Dynamic Input](https://dev.classmethod.jp/business-analytics-tools-alteryx/alteryx-dynamic-input-tool/)コンポーネントを利用し、その後[Transpose](https://help.alteryx.com/current/Transpose.htm)コンポーネントで横縦変換し、為替データとJoinしました。
結果以下の赤枠で囲んだデータなような感じに仕上げました。
![image_mo.png](https://qiita-image-store.s3.amazonaws.com/0/191079/ae5e1c4b-81ef-a763-1e1f-c944fee31aba.png)
どうやったか詳細はまた別の機会で。

###データOverView
データをTableauに読み込み、まず2010年1月～2018年5月までの各国からの訪日者を集計してみました。
やはり韓国、中国からの訪問者数が群の抜いています。
![image_overview.png](https://qiita-image-store.s3.amazonaws.com/0/191079/59cd857b-66cd-ead6-d414-b46513c82d52.png)

##相関係数

###相関係数とは
相関係数はwikiでは以下のように定義しています。データの関連性を示すものと理解しています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191079/07a5be94-15d8-309f-d333-3faae86d8f46.png)

相関係数の値と相関

|相関係数 r の値|相関|
|:---|:---:|
|-1&nbsp;&nbsp;&nbsp;&nbsp;≦ r ≦&nbsp;-0.7|強い負の相関|
|-0.7&nbsp;≦ r ≦&nbsp;-0.4|負の相関|
|-0.4&nbsp;≦ r ≦&nbsp;-0.2|弱い負の相関|
|-0.2&nbsp;≦ r ≦&nbsp;&nbsp;0.2|ほとんど相関がない|
|&nbsp;0.2&nbsp;≦ r ≦&nbsp;&nbsp;0.4|弱い正の相関|
|&nbsp;0.4&nbsp;≦ r ≦&nbsp;&nbsp;0.7|正の相関|
|&nbsp;0.7&nbsp;≦ r ≦&nbsp;&nbsp;1|強い正の相関|


###Tabpyで相関係数を計算
**Step1**：Tableauの新しいワークシートで中国訪日者数の合計を列に、CNY対JPYのレートの平均（月次データ）を行に、散布図をまず作ります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191079/67207ec1-d2cb-67f5-8adb-b903e65c5b56.png)
**Step2**：データ粒度が月次のため、YMを使って月粒度の散布図にします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191079/ebf760cb-7d7b-e33d-dd16-c58224c0cea5.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191079/605ca610-bece-24e0-9461-c50326104b01.png)

**Step3**：相関係数の計算フィールドを作成します
SCRIPT関数に、相関係数を算出するPythonを書いて、引数に「訪日者」合計、「CNY対JPY」レートの平均データを渡します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191079/a626c57b-b67a-f3e6-1d6f-2c7f210cff39.png)
傾向線をつけて、良い感じの散布図の完成です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191079/9e6e1c37-e2fe-e0f4-58fd-c6afeb3df8d9.png)

**Debugのやり方について**
SCRIPT_REAL等のSCRIPT関数を使った外部サービスと接続する際に、Debugが難しくなります。
特に引数のデータ粒度が合わないとすぐエラーが出るので、ここでprintを活用し、どんなデータを渡されたかサーバ側のTabpyのコンソールから出力されます。確認して調整していきましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191079/053a5943-7820-d65f-40f7-a40d8e437543.png)

##結果
上の部分にCNY、KRW両方で訪日者数と為替レートの時系列2軸グラフを作成、傾向をみます。
下の部分にそれぞれの相関係数（および散布図）を出して比較しましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191079/45cd7d6a-8a3b-16e2-fa29-561a9bdf0054.png)
時系列2軸グラフを見ると、両国とも近年勢いよく訪日者数が増えていますが、相関係数では0.5前後で円安と正の相関はあるものの、強い相関は見当たりませんでした。

##参考
[[Tableau Tips #1] Advanced Analytics - Tabpy環境構築](https://qiita.com/tanj/items/987334a28fe26d631f73)
[Tabpy - Tableau + Python 連携  を使ってみよう！（その１：Tabpy導入編）](https://community.tableau.com/docs/DOC-10160)
[相関係数の意味と求め方 - 公式と計算例](https://sci-pursuit.com/math/statistics/correlation-coefficient.html)
[wiki-相関係数](https://ja.wikipedia.org/wiki/%E7%9B%B8%E9%96%A2%E4%BF%82%E6%95%B0)