「統計ダッシュボード」APIでデータ取得。Google Data Portalで「新車販売台数」前年同月比推移の可視化、スプレッドシートを併用し何とか

##統計ダッシュボードからデータ取得

使い勝手を忘れないために、しばらく使わないツールや機能をたまに使うようにしています。
「前年同月比、Power BI DesktopとTableau Publicでは出し方を思い出せるけど、Google Data Portalではどうやるのだっただろう？」とふと思い、**「Google Data Portal」**を使うことにしました。

使用したデータは[「統計ダッシュボード」（総務省統計局）](https://dashboard.e-stat.go.jp/graph?screenCode=00170)の新車販売台数。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/0844ffba-1e55-4756-9a27-797a7c69c5bf.png)

データをダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/e211a8eb-584a-148b-64b6-1844cb5f46b8.png)

インタフェースから取得できます。
今回は、こちらではなく[**API**](https://dashboard.e-stat.go.jp/static/api)を利用します。

##APIからデータ取得

使い慣れていないので、もっと効率のよい取得ができるかもしれませんが、今回は以下のように取得します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/aa781655-f076-a894-8217-7cfeeec19aab.png)

上記の[API説明ページ](https://dashboard.e-stat.go.jp/static/api)の①を参考に、統計メタ情報から系列コード**「IndicatorCode」**を取得します。
新車販売数のコード情報**「StatCode」**が**「20100101」**なので、URLのパラメータとして指定します。

```
https://dashboard.e-stat.go.jp/api/1.0/Csv/getIndicatorInfo?StatCode=20100101
```

以下が取得できます（一部）。
**「indicatorCd」**に入っている値が**「IndicatorCode」**となり、今回は**「1001040600000010000」**です。

```
"GET_META_INDICATOR_INF"
"RESULT"
"STATUS","0"
"ERROR_MSG","正常に終了しました。"
"DATE","Thu Oct 14 23:12:42 JST 2021"
"PARAMETER"
"LANG","JP"
"INDICATOR_CODE",""
"CATEGORY",""
"TIME",""
"TIME_FROM",""
"TIME_TO",""
"CYCLE",""
"REGIONAL_RANK",""
"IS_SEASONAL_ADJUSTMENT",""
"STAT_CODE",""
"STAT_NAME","20100101"
"SEARCH_INDICATOR_WORD",""
"MODIFIED_FRROM",""
"MODIFIED_TO",""
"METADATA_INF"
"indicatorCd","indicatorNm","shortNm","cycle","regionalRank","isSeasonal","unitNm","fromDate","toDate","Term_detail","annotation","statNm"
"1001040600000010000","新車販売台数（登録車・軽自動車）","登録車･軽自動車 新車販売","1","2","1","台","20120100","99991200","新車販売=軽自動車及び自動車検査登録事務所に登録した車の新車販売台数（※新車販売台数の結果に関する権利は一般社団法人日本自動車販売協会連合会に帰属する）","","新車販売台数＜（一社）日本自動車販売協会連合会＞"
"1001040600000010000","新車販売台数（登録車・軽自動車）","登録車･軽自動車 新車販売","3","2","1","台","2012CY00","9999CY00","新車販売=軽自動車及び自動車検査登録事務所に登録した車の新車販売台数（※新車販売台数の結果に関する権利は一般社団法人日本自動車販売協会連合会に帰属する）","","新車販売台数＜（一社）日本自動車販売協会連合会＞"
……
```

API説明ページの⑥を参考に**「IndicatorCode」**の値を使い、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/f0978311-4732-5bf9-c5a8-da59e5e47b52.png)

該当する統計データを取得します。

```
https://dashboard.e-stat.go.jp/api/1.0/Csv/getData?IndicatorCode=1001040600000010000
```

得られたデータ（一部）です。

```
"GET_STATS"
"RESULT"
"STATUS","0"
"ERROR_MSG","正常に終了しました。"
"DATE","Thu Oct 14 23:15:55 JST 2021"
"PARAMETER"
"LANG","JP"
"INDICATOR_CODE","1001040600000010000"
"REGION_CODE",""
"PARENT_REGION_CODE",""
"REGION_LEVEL",""
"TIME",""
"TIME_FROM",""
"TIME_TO",""
"CYCLE",""
"REGIONAL_RANK",""
"IS_SEASONAL_ADJUSTMENT",""
"STAT_NAME",""
"VALUE_CONDITION",""
"META_GET_FLG",""
"SECTION_HEADER_FLG",""
"MODIFIED_FROM",""
"MODIFIED_TO",""
"STATISTICAL_DATA"
"RESULT_INF"
"TOTAL_NUMBER","126"
"TABLE_INF"
"STAT_CD","20100101"
"STAT_NAME","新車販売台数＜（一社）日本自動車販売協会連合会＞"
"GOV_ORG","一般社団法人 日本自動車販売協会連合会  "
"indicatorCd","unitCd","statCd","regionCd","timeCd","cycle","regionRank","isSeasonal","isProvisional","value","cellAnnotations"
"1001040600000010000","100","20100101","00000","20120100","1","2","1","0","415923",
"1001040600000010000","100","20100101","00000","20120200","1","2","1","0","519623",
"1001040600000010000","100","20100101","00000","20120300","1","2","1","0","751886",
"1001040600000010000","100","20100101","00000","20120400","1","2","1","0","359620",
"1001040600000010000","100","20100101","00000","20120500","1","2","1","0","394944",
"1001040600000010000","100","20100101","00000","20120600","1","2","1","0","505337",
"1001040600000010000","100","20100101","00000","20120700","1","2","1","0","513122",
"1001040600000010000","100","20100101","00000","20120800","1","2","1","0","370772",
"1001040600000010000","100","20100101","00000","20120900","1","2","1","0","446679",
"1001040600000010000","100","20100101","00000","20121000","1","2","1","0","359329",
"1001040600000010000","100","20100101","00000","20121100","1","2","1","0","393925",
"1001040600000010000","100","20100101","00000","20121200","1","2","1","0","338501",
"1001040600000010000","100","20100101","00000","20130100","1","2","1","0","383500",
……
```

##Googleスプレッドに取り込む

Googleスプレッドシートに取り込みます。
**「IMPORTDATA」**関数を使います。

```
=IMPORTDATA("https://dashboard.e-stat.go.jp/api/1.0/Csv/getData?IndicatorCode=1001040600000010000")
```

以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/253837cb-7da1-0846-638b-b1596a056348.png)
（以下続き）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/1e14ac5c-669f-ec79-1bf8-c833f4ff7693.png)

「ヘッダ（列名）」と「値」列というきれいな形になっていないので、もう1つシートを作り、そこに列名のセルを指定します。
この際、（実際にはGoogle Data Poetalに取り込んでから不具合が起こり気づいたのですが）時間列（timeCd）の最後の方を見ると**「2012CY00」**と**「YC」（暦年=1年）**の値が入っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/d41c4137-9a87-f261-def8-f3f95cce1283.png)

時系列データとして扱う際、この文字列がノイズになるので外します。
Google Data Poetal上で外すことを試みたのですが、「Power BI Desktop」が持つ「Power Query Editor」のような編集機能がないので、自分の技量ではあきらめました、
Googleスプレッドシートで取り除きます。
**「IF」**関数を使い、**「timeCd」**列の隣の列**「cycle」**が**「3」**の時に**「""」**とブランクをコピーすることで外しました。

```
=IF('元データ'!$F31=3,"",'元データ'!A31)
```

下記のように**「cycle」**が**「3」**の行が消えています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/4ea0b278-98a6-5dbe-4c4f-fa9c1b6f187d.png)

なお、今後毎月データが追加されるので、取得行数より多めに指定範囲（コピー先範囲）取っています。

##Google Data Portalにインポート

先ほどのGoogleスプレッドシートのデータをインポートします。
データの追加で「Googleスプレッドシート」を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/1302ac63-e02e-4a5c-e627-c8f8430b80a6.png)

該当スプレッドシートを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/236f80c5-3f1d-8021-9048-bfd726944acc.png)

インポートできました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/99ae4cbf-f50f-2e01-181f-0eaec963f4f1.png)

##可視化する前に時間軸に変換

時系列データにするにはもう一工夫必要でした、
**「timeCd」**の形式は**「YYYYMM00」**と**「00」**が末尾に付いており、日付型にそぐいません。
効率的な方法が思いつかなかったので、強引なやり方ですが、以下3つのステップで**日付型**に変換しました。

①**「YYYYMM00」**の左から6文字を抽出するフィールドを追加します。
フィールド名称は**「YYYYMM_Left」**と名付けします。
このフィールドは**テキスト型**にします。

```
LEFT_TEXT(timeCd,6)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/2e800a62-d06a-b913-c6f4-9318e169d20a.png)

②上記**「YYYYMM_Left」**を**「YYYYMMMDD」**形式にするために**「01」**を追加します（n月1日にします）。
フィールド名称は**「YYYYMM_CONCAT」**と名付けします。
このフィールドも**テキスト型**です。

```
CONCAT(YYYYMM_Left,"01")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/8c1efd56-db7c-29f4-c763-87f9674a34d3.png)

③**「YYYYMM_CONCAT」**を**「日付型」**とするために**「TODATE」**関数を使います。
このステップはなくてもいいかもしれませんが、過去に**「日付型」**に扱えない**「YYYYMMMDD」**形式のデータで手間取ったことがあるので、**「TODATE」**関数を使うようにしています。
フィールド名称は**「YYYYMM_todate」**と名付けします。
このフィールドは**日付型**にし、時間軸要素として使います、

```
TODATE(YYYYMM_CONCAT,"%Y%m%d","%Y-%m-%d")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/87116f4a-9794-1602-5418-12de3ce92195.png)

これらをGoogle Data Studioで表に並べるとこうなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/8b799855-d6b3-2acb-420a-770c7636b4a8.png)

**「YYYYMM_todate」**の表記形式を**「年月」**に変えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/5e04d557-b750-d82f-c23a-a6f4ecb6fa66.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/7ff367d5-8ca1-3fd3-f91f-9b20ea1c752b.png)

##棒グラフに可視化

棒グラフを作ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/ed72d287-a5ea-afba-a6d0-9e44eaa78b6f.png)

**「比較期間」**機能を使い、2021年と2020年のグラフを並べます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/6af64dbd-a8a8-122e-b1a3-de5de414e15e.png)

**「内部ディメンジョン」**に**「YYYYMM_todate」**を配置し、**「粒度」**を**「年」**にします。
ディメンジョン（x軸）の**「粒度」**は**「月」**にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/512a6e59-9923-226f-ea79-dae2bb040086.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/9dad3986-1364-816e-d97c-041d91862788.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/48303672-6401-4ce2-3dc4-d830df9c3896.png)

ようやく、本題の**前年同月比（YtoY）**に進みます。

##YtoYができない・・・

ところが、インタフェースからそれらしき機能が探せません。
[関数リスト](https://support.google.com/datastudio/table/6379764?hl=ja&ref_topic=7570421)を見ても、さくっとできるような機能を持つものがありません。
プログラムのスキルをあまり持たないこともあると思いますが、思ったようにできなさそうです。
このため、**Googleスプレッドシート**に戻ることにしました。

除算で前年同月比を求めます。
計算エラーや、結果がゼロの場合はブランクになるようにしました。

```
=IF(AND(ISNUMBER(J2)=TRUE,ISNUMBER(#REF!))=TRUE,IFERROR(J2/#REF!,""),"")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/264c3627-de5a-343e-116e-8cbead10d687.png)

##ようやく完成

Google Data Portalに再取り込みします。
棒グラフで、先ほどGoogleスプレッドシートに追加した**「YtoY」**を配置します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/ec0f24bc-cc8f-164d-55f2-521308ef6daa.png)

データ公開時の年（2021年）に指定します。
この時点ではの9月が最新の数値でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/d7d676fd-0057-574a-6c7a-1b5e27cfbceb.png)

**了**