はじめに
お久しぶりです。Power BI 王子こと優吾です( ← 自分で言うのって結構恥ずかしいんですが、わかりやすを優先しております故🙇
本記事は、私の書籍「Power BI 入門」(翔泳社) の中で取り扱っている CSV データのお話です。Amazon や Twitter で見られるコメントの中に
「CSVデータがダウンロードできない」
というものがあります。
より具体的に言うと、第6章「BIに必要なこと」の中で、東京都の新型コロナウイルスのオープンデータを使用しているのですが、これが執筆時からデータのまとめ方が変更されていて、伴って URL が変更されているため、書籍に載せてある URL では CSV に接続できない(ダウンロードできない) という方がいらっしゃったようです。
(後述しますが、2022年10月29日現在はダウンロード可能になっています)
現在は ダウンロード可能 となっているとはいえ、今後もそういうことが起こるかもしれません。その対応策を本記事で紹介しておきます。
私が公開している Power BI レポートの紹介
書籍の第6章「BIに必要なこと」の中で東京都の新型コロナウイルスのオープンデータを使用してレポートをイチから作成していくのですが、冒頭で私が公開している Power BI レポートの URL を載せております。
本題
第6章 P.131 では対象データの CSV の URL を以下の様に記載しております。
https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv
一時期、上記の URL がアクセスできなくなっていたという方が一定数いらっしゃったようです。(私は確認していませんが、事実としてそういう方からコメントを頂きました)
繰り返しになりますが、2022年7月7日現在は、アクセス可能になっております。
✅2022年10月29日現在
上記の URL はアクセスできなくなっています。以下に読み替えてください
https://data.stopcovid19.metro.tokyo.lg.jp/130001_tokyo_covid19_patients_9e4b6290e76826a41c5e34ac575ec04f.csv
「上記の URL でアクセス可能だから、それでいいじゃん」 で終わったら、この記事の意味がありません。
もう少し詳しく解説しておきたいと思います。
URL が示されたら、そのデータの出自を確認する
私の書籍、または本記事に限りませんが、URL が示されたら、必ず URL をきちんと確認しましょう。
具体的には https://{この部分}/xxx/yyyy/zzz.csv
です。この部分 は、ドメインというやつで、簡単にいうと、どこのサーバーかを表しています。
私がよくやるのは、上記のような
https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv
という URL が提供されたら、
まず
https://stopcovid19.metro.tokyo.lg.jp/
にアクセスしてみます。
なぜか?
2つの理由があります。
1つ目の理由は、最も単純な URL にアクセスできなかったとしたら、提供された URL が怪しいということになります。そんなことは滅多にありませんが、念のための確認です。
2つ目の理由は、どこのホームページでデータが公開されているのか、その出自を確認するためです。
ファイル名まで含まれた URL にアクセスすると、いきなりダウンロードが始まってしまうので、上記が確認できません。
どんなに信頼のおける人から共有された URL であっても、共有された URL はクリックする前に、上記を確認することをオススメします。(できれば InPrivate や シークレットモード で)
さて、https://stopcovid19.metro.tokyo.lg.jp/
にアクセスしてみましょう。
そう、これは東京都が新型コロナウイルス情報を提供しているサイトです。詳細は省きますが、どうやら出自は問題なさそうです。
書籍で紹介している URL をサイトから取得してみる
画面が表示されたら、少し下にスクロールしてください。
そうすると、グラフが表示されますよね。「報告日別による陽性者数の推移」というグラフの左下に オープンデータを入手 というリンクがあります。これをクリックしてください。
警告
以前は上記の [オープンデータを入手] で以下のページに遷移したのですが、2022年10月29日現在、違うページに遷移しますので、
↓ にアクセスしてください
https://catalog.data.metro.tokyo.lg.jp/dataset/t000010d0000000068
「TOKYO OPEN DATA - 東京都オープンデータカタログサイト」 が開いたはずです。
私が書籍の中で示している URL はこのページで取得できます。
「東京都_新型コロナウイルス陽性患者発表詳細(全期間一括版)」 の [探索] をクリック - [ダウンロード] を右クリック - [リンクのコピー] をクリックした後、メモ帳などに張り付けてください。
https://data.stopcovid19.metro.tokyo.lg.jp/130001_tokyo_covid19_patients_9e4b6290e76826a41c5e34ac575ec04f.csv
という URL が取得できたはずです。この URL を書籍の中で紹介しているということです。
ところで気になる記述があるのですが...
「東京都_新型コロナウイルス陽性患者発表詳細(全期間一括版)」 というタイトルの下に気になる記述が見えます。
全期間一括データ」はファイルサイズの制限により2022年3月18日以降更新を停止しています。
ん?ということは、2022年3月18日以降のデータはこのファイルには含まれていないということか...🤔
試しに 「東京都_新型コロナウイルス陽性患者発表詳細(全期間一括版)」 というタイトルをクリックしてください。
赤枠で囲った部分に全文が記載されています。
なるほど、ファイルサイズの制限に引っかかってしまったので、ファイルを分割した、ということのようですね。
ワンポイントアドバイス
私の書籍の第6章を進めるには、2022年3月18日以降のデータがなくても、問題はありません。そこまでのデータで学習可能となっています。ただ、オープンデータですから、今後、この URL で CSV がダウンロードできなくなることもありえます。不安な方は、CSV ファイルをダウンロードしておいて、手元に置いておくとよいでしょう。
「私は最新のデータまで取得して、スケジュール更新で常に最新の状態にしておきたいのだ!」 という方、いらっしゃいますよね。
そんな方は、もういちどサイトをよく見ましょう。
なるほど、ファイルサイズの制限に引っかかったので、2020年、2021年と年別にファイルを分けたようですね。ただ、2022年については「その1」と「その2」の2つに既に分かれているようです。
確認するとわかるのですが、すべてのファイルはスキーマ(列定義)が共通となっています。これはチャンスですね。
それぞれのファイルの URL を先ほどと同様の方法で取得すると以下の様になっています(URL が変わっている可能性があるので、必ずご自身でご確認ください🙇
2022年10月29日現在の URL
東京都_新型コロナウイルス陽性患者発表詳細(全期間一括版)
https://data.stopcovid19.metro.tokyo.lg.jp/130001_tokyo_covid19_patients_9e4b6290e76826a41c5e34ac575ec04f.csv
東京都_新型コロナウイルス陽性患者発表詳細(年別分割版_2020年)
https://data.stopcovid19.metro.tokyo.lg.jp/130001_tokyo_covid19_patients_2020.csv
東京都_新型コロナウイルス陽性患者発表詳細(年別分割版_2021年)
https://data.stopcovid19.metro.tokyo.lg.jp/130001_tokyo_covid19_patients_2021.csv
東京都_新型コロナウイルス陽性患者発表詳細(年別分割版_2022年その1)
https://data.stopcovid19.metro.tokyo.lg.jp/130001_tokyo_covid19_patients_2022.csv
東京都_新型コロナウイルス陽性患者発表詳細(年別分割版_2022年その2)
https://data.stopcovid19.metro.tokyo.lg.jp/130001_tokyo_covid19_patients_2022-1.csv
年別にファイルが分かれていて、すべてのファイルは同一フォーマットで作られているということがわかれば、あとは簡単です。
それぞれの URL から CSV を取得する Power Query を作成して、それらを合体させる Power Query を作ればいいのです。
Power Query で年別のファイルを取得したい人へ
私がどうやって対応しているかを例として挙げておきます。
なお、詳細な解説はしませんのであしからず。むしろ、こういうケースにどのように対応するかは、とてもよい勉強になりますので、果敢にトライしてみてください。また、私が紹介する方法が唯一の方法ではないので、より効率の良い方法を思いついた方は、ぜひともコメントにて教えてください🙇
それぞれの URL をパラメータ化してTable.Combine で UNION
URL が複数あるので、それぞれの URL をパラメータにしておきます。
つぎに 2020年 ~ 2022年その1 までの URL から CSV を取得します(2行目~10行目)
12行目~18行目で、Table.Combine を使用して、縦に合体しています(SQL でいうところの UNION です)
Table.Combine 関数に付いては以下を参照。
あとは、もともとの整形をしているだけです。
「2022年その2」 は?と思われた方。そう、なぜ上記3つまでを先に取得したか。これはアーキテクチャを考える上で他のケースにも応用できることなのですが、
- 2020年
- 2021年
- 2022年その1
これら3つのファイルは、今後更新されることがないわけです。過去データですから、既に Fix しているわけですね。だとしたら、こちらとしても、スケジュール更新で毎回取得したくないわけです。リソースがもったいない。ですから、更新され得ないデータは一度読んで、更新対象から外してあります。
[レポートの更新に含める] のチェックを外し、[読み込みを有効にする] のチェックも外してあります。
「2022年その2」 については、まず単独で読み込んで、最後に過去分のデータと UNION してあります。
3行目で 「2022年その2」 の CSV を取得して、データ整形し、16行目で過去分のデータと Table.Combine しているということです。
まとめ
今回お伝えしたかったことは2つあります。
1つ目は、CSV がダウンロードできない!と言われている方に、今(2022年10月29日現在)はダウンロード可能ですよーということ。安心して、第6章を進めてください。
2つ目は、今回のケースに限らず、第3者が作るデータは予期せず変更されることがあります。その変更に柔軟に対応することが Power Query では可能です。あきらめずに工夫して対応してみてください。
みなさんの Power BI がより良いものになることを心より願っております😁
みなさんへのお願い
本記事を読者の方に一人でも多くお届けしたいので、よろしければ、SNS 等や会社での共有をしていただけると幸いです🙇