LoginSignup
0
1

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-10-16

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

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

使用したデータは「統計ダッシュボード」(総務省統計局)の新車販売台数。

image.png

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

image.png

インタフェースから取得できます。
今回は、こちらではなくAPIを利用します。

APIからデータ取得

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

image.png

上記の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://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
(以下続き)
image.png

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

image.png

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

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

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

image.png

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

Google Data Portalにインポート

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

image.png

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

image.png

インポートできました。

image.png

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

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

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

LEFT_TEXT(timeCd,6)

image.png

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

CONCAT(YYYYMM_Left,"01")

image.png

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

TODATE(YYYYMM_CONCAT,"%Y%m%d","%Y-%m-%d")

image.png

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

image.png

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

image.png

image.png

棒グラフに可視化

棒グラフを作ります。

image.png

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

image.png

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

image.png

image.png

image.png

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

YtoYができない・・・

ところが、インタフェースからそれらしき機能が探せません。
関数リストを見ても、さくっとできるような機能を持つものがありません。
プログラムのスキルをあまり持たないこともあると思いますが、思ったようにできなさそうです。
このため、Googleスプレッドシートに戻ることにしました。

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

=IF(AND(ISNUMBER(J2)=TRUE,ISNUMBER(#REF!))=TRUE,IFERROR(J2/#REF!,""),"")

image.png

ようやく完成

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

image.png

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

image.png

0
1
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
0
1