新型コロナウイルス発生状況表をGoogle スプレッド、Google Data Portalに取り込む

##厚労省の公表値を取得します

取り込みに使ったサイトの表がこちら↓です。

[https://www.mhlw.go.jp/stf/covid-19/kokunainohasseijoukyou.html#h2_1](https://www.mhlw.go.jp/stf/covid-19/kokunainohasseijoukyou.html#h2_1)
（厚生労働省のサイト）

<img width="700" alt="Google Data Portal1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/dcb06496-1de6-6c7c-3f2f-1ef66093134e.png">

この表を、**Googleスプレッドシート**経由で**Google Data Portal**に取り込み、以下↓のように表示させました。

<img width="700" alt="Google Data Portal2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/8cb51fea-c375-d6df-dc7a-cf13bafd5aa0.png">

元の表では1つのセルに「累計」と「前日比」の値が入っています。
後で集計に使えるように、それぞれの値を「数字」として別の列に分けています。
簡単にできると思ったのですが、予想以上に手間がかかりました。
正確に言うと、**Googleスプレッドシート**で関数と正規表現を使い、整形した形で取り込むのに時間がかかりました。

##Googleスプレッドシートに取り込みます

**IMPORTDATA**関数を使いました。

```javascript
=IMPORTDATA("https://www.mhlw.go.jp/content/current_situation.csv")
```

<img width="700" alt="Google Data Portal3" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/f0c47d17-fc15-f533-ae6e-20796b5ae59e.png">

上記の各セルを参照し、以下のように整形します。

<img width="700" alt="Google Data Portal4" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/42b8e290-68b7-5f19-dfde-13af70fb9d49.png">

最初の列と行の項目は手入力です。
数値の取り出し方は、例えば、「##PCR検査実施人数」列のJ2の値は、**IMPORTDATA**関数で取り込んだB2セルの値を、**関数と正規表現**を使い参照しています。
※正規表現を普段あまり使わないので、あまりこなれた方法ではないと思いますが、ご容赦ください。

```javascript
=REGEXREPLACE(REGEXEXTRACT(B2,"(.+?[\n(+])"),"[\\|n|(|+|,|)]","")
```

[REGEXEXTRACT](https://support.google.com/docs/answer/3098244?hl=ja)

```
REGEXEXTRACT
正規表現に従って、一致する部分文字列を取り出します。
構文
REGEXEXTRACT(テキスト, 正規表現)
```

[REGEXREPLACE](https://support.google.com/docs/answer/3098245?hl=ja)

```
REGEXREPLACE
正規表現を使用して、テキスト文字列の一部を別のテキスト文字列に置き換えます。
構文
REGEXREPLACE(テキスト, 正規表現, 置換)
```

こういうフローです。

```json
REGEXEXTRACTで　8,856,567\n(+52,715)　から「8,856,567\n(+」を取り出します。
REGEXREPLACEで　「\n(+」を「""」に置き換えることで、「8,856,567」を残します。
```

##その他使った関数と正規表現例です

| 正規表現 | 概要 |
|:-:| :--|
| .  | 任意の1文字 に一致します。  |
| +?  | 直前の文字が 1回以上 繰り返す場合に一致します。条件に合う最短の部分に一致します（最短一致）。  |
| [...]  | 括弧に含まれるいずれか1文字に一致します  |
｜（使う際は半角で） | いずれかの条件 (OR条件) として使われます。  |
| \  | 直後の文字を「エスケープ」します。  |

※上記の参考は[こちら](https://murashun.jp/article/programming/regular-expression.html)と[こちら](https://support.google.com/a/answer/1371417?hl=ja)です。

最初のパターンを少し変えることで各値を取り出しました。

```javascript
J2：=REGEXREPLACE(REGEXEXTRACT(B2,"(.+?[\n(+])"),"[\\|n|(|+|,|)]","")
K2：=REGEXREPLACE(REGEXEXTRACT(B2,"(\+.+?[)])"),"[\\|n|(|+|,|)]","")
L2：=REGEXREPLACE(REGEXEXTRACT(C2,"(.+?[\n(+])"),"[\\|n|(|+|,|)]","")
M2：=REGEXREPLACE(REGEXEXTRACT(C2,"(\+.+?[)])"),"[\\|n|(|+|,|)]","")
N2：=REGEXREPLACE(REGEXEXTRACT(D2,"(.+?[\n(+])"),"[\\|n|(|+|,|)]","")
O2：=REGEXREPLACE(REGEXEXTRACT(D2,"((\+|\-).+?[)])"),"[\\|n|(|+|,|)]","")
P2：=REGEXREPLACE(REGEXEXTRACT(E2,"(.+?[\n(+])"),"[\\|n|(|+|,|)]","")
Q2：=REGEXREPLACE(REGEXEXTRACT(E2,"((\+|\-).+?[)])"),"[\\|n|(|+|,|)]","")
R2：=REGEXREPLACE(REGEXEXTRACT(F2,"(.+?[\n(+])"),"[\\|n|(|+|,|)]","")
S2：=REGEXREPLACE(REGEXEXTRACT(F2,"(\+.+?[)])"),"[\\|n|(|+|,|)]","")
T2：=REGEXREPLACE(REGEXEXTRACT(G2,"(.+?[\n(+])"),"[\\|n|(|+|,|)]","")
U2：=REGEXREPLACE(REGEXEXTRACT(G2,"(\+.+?[)])"),"[\\|n|(|+|,|)]","")
V2：=REGEXREPLACE(REGEXEXTRACT(H2,"(.+?[\n(+])"),"[\\|n|(|+|,|)]","")
W2：=REGEXREPLACE(REGEXEXTRACT(H2,"((\+|\-).+?[)])"),"[\\|n|(|+|,|)]","")
```

ただ、パターンが変わることがあり、これまで2回ほど正規表現の修正をしています。

**Google Data Portal**でスプレッドシートをインポートし、各項目を配置して冒頭の表を作成しました。

<img width="800" alt="Google Data Portal5" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/cf2e896e-7e00-c9de-24dc-618b7f5d8433.png">

<img width="300" alt="Google Data Portal6" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/decd6de9-c9ac-d71e-1c82-da1e238946b3.png">


**了**