Power BI Desktopでちょっとしたデータクレンジング手順メモ：「ピボット解除」「列の分割」利用【M言語コード掲載】

**＜今回行った手順っで生成されたコード：Power QueryのM言語＞**

~~~Java
let
    ソース = Csv.Document(Web.Contents("https://covid19.mhlw.go.jp/public/opendata/requiring_inpatient_care_etc_daily.csv"),[Delimiter=",", Encoding=65001, QuoteStyle=QuoteStyle.None]),
    昇格されたヘッダー数 = Table.PromoteHeaders(ソース, [PromoteAllScalars=true]),
    変更された型1 = Table.TransformColumnTypes(昇格されたヘッダー数,{{"Date", type date}}),
    ピボット解除された他の列 = Table.UnpivotOtherColumns(変更された型1, {"Date"}, "属性", "値"),
    区切り記号による列の分割 = Table.SplitColumn(ピボット解除された他の列, "属性", Splitter.SplitTextByDelimiter(")", QuoteStyle.Csv), {"属性.1", "属性.2"}),
    置き換えられた値 = Table.ReplaceValue(区切り記号による列の分割,"(","",Replacer.ReplaceText,{"属性.1"}),
    変更された型2 = Table.TransformColumnTypes(置き換えられた値,{{"値", Int64.Type}}),
    ピボットされた列1 = Table.Pivot(変更された型2, List.Distinct(変更された型2[属性.2]), "属性.2", "値", List.Sum),
    #"名前が変更された列 " = Table.RenameColumns(ピボットされた列1,{{"属性.1", "Prefecture"}, {" Requiring inpatient care", "Requiring inpatient care"}, {" Discharged from hospital or released from treatment", "Discharged from hospital or released from treatment"}, {" To be confirmed", "To be confirmed"}}),
    変更された型 = Table.TransformColumnTypes(#"名前が変更された列 ",{{"Date", type date}, {"Prefecture", type text}, {"Requiring inpatient care", Int64.Type}, {"Discharged from hospital or released from treatment", Int64.Type}, {"To be confirmed", Int64.Type}})
in
    変更された型
~~~


##クレンジング準備

厚労省が提供するオープンデータのフォーマットが最近変わり、データの取り直しをしました。
その手順をメモしておきます。

https://covid19.mhlw.go.jp/

入院治療等を要する者等推移のデータを例にその手順を記します。

https://covid19.mhlw.go.jp/public/opendata/requiring_inpatient_care_etc_daily.csv

- **列名に件名と計測対象の人のステータス（入院化退院かなど）が記載されているの列として分離**

することが目的です。
「Powwer BI Desktop」で取り込みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/99e7df4d-ab11-21f2-dbb5-d20f1deaaf73.png)

列名は以下のように英語表記で県別、さらに各県ごとに以下の内容に分かれています。

- **Requiring inpatient care**
- 　：　入院治療が必要
- **Discharged from hospital or released from treatment**
- 　：　退院または治療から解放
- **To be confirmed**
- 　：　確認中

~~~
（列名）
Date
(ALL) Requiring inpatient care
(ALL) Discharged from hospital or released from treatment
(ALL) To be confirmed
(Hokkaido) Requiring inpatient care
(Hokkaido) Discharged from hospital or released from treatment
(Hokkaido) To be confirmed
(Aomori) Requiring inpatient care
(Aomori) Discharged from hospital or released from treatment
(Aomori) To be confirmed
・・・（以下県ごと）
~~~

##ピボット解除と区切り記号による列の分割

**「変換」→「1行目を列のヘッダーとして使用**」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/ae23da3c-6346-2876-b4f2-ff70673290e2.png)

Dateの他の列を2列にまとめます。
Date列のみ選択し、**「変換」→「列のピボット解除」→「その他の列のピボット解除」**を実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/7d7039ea-3d32-8d7a-ecf4-46dc7af7f6e8.png)

他の列が2列にまとまります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/be8ae601-f8b2-a74e-c5a8-b72439e33f22.png)

エリア（県）の文字列と分けます。
**「ホーム」→「列の分割」→「区切り記号による列の分割」**を使います。
区切り記号として「)」（半角）を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/6a1c9b53-fa7d-d831-e532-4387c4eb0d5b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/a8ab8857-5080-cbdc-faaa-2906b26c3ebe.png)

エリア情報の列の先頭に「(」が入っているので、「""」（ブランク）と置換してなくします。
（列の先頭に半角スペースが入る場合は、同様に置換してなくします）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/a50401e4-72a1-89c4-6251-bd6da475403e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/4368fad5-828d-0447-0c2b-cd5aecdb2c81.png)

値が文字列になっているので「整数」にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/b8d6dee6-0095-0f0d-7d22-90caf17a5a62.png)

これで、後は列名を指定して、グラフ作成に移ります。
複数の要素がが1列にまとまったので、縦に長くなります。
この後の使い方によっては、後ろ2つの列を選択し**「変換」→「列のピボット」**で、まとめた列を元に戻します（横長の表に戻します）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/d0c645df-675a-7b61-9cad-b5b56e37d24a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/8389343d-0d5d-a80d-151a-609224f61573.png)

作成したグラフ例です。
「Requiring inpatient care」（入院治療が必要）の推移です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/27d75f97-2683-9e52-faf7-1c52ea9e8772.png)

**了**