Oracle Analytics Cloud：データ準備で正規表現を使ってみる

# はじめに
最近はオープンデータとして様々なデータが手に入ります。
タダで使わせてもらっている身でこんなことを言うのは気がひけますが、使用するまでに加工しなければならないことも結構あります。
例えば、余分な空白の除去など。

あるデータを入手したところ、都道府県名に空白が含まれていることがわかりました。
今回は、Oracle Analytics Cloud（**OAC**）のデータ準備機能で余分な空白を取り除いてみようと思います。

# どんなデータだったか
オリジナルのデータはこんな感じでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/4ff28724-3ef5-588e-b600-8cc08f804202.png)
幅？を合わせるために空白で調整されています。
しかも！ 半角と全角が入り乱れていました。例えば青森は「青」と「森」の間に全角空白が1つと半角空白が2つあります。
岩手は「岩」と「手」の間に半角空白4つ、秋田は「秋」と「田」の間に全角空白2つがあります。

# どのようにしたいか
- 全角であれ、半角であれ空白は全部取り除きます。
- 都府県を付与します（北海道以外）。
できあがりイメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/4b68bdaa-02eb-2863-df0f-f99f0830440e.png)

# データセットから空白を削除
問題のデータが含まれるデータセットを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/4e7796fc-62db-4451-258d-e01bcfdf9ad0.png)
列名の「オプション」メニューから「置換」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/887a0e78-1ccf-c601-212f-0ce0103240e0.png)
「置換する文字列」として全角空白を入力し、「新規文字列」には何も入力しません。
「一部の値と一致」オプションが選択されているのを確認します。
「秋　　田」は全角空白が取り除かれて、「秋田」になっているのがわかります。「青　  森」は「青  森」になりました。
確認できたら「ステップの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/bd0c8255-5b42-1ad3-900b-e5e842320e6c.png)
続いて、もう一度同じ列のオプションメニューから「置換」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/b9ce32f7-8cd4-84d7-854e-07b2917e4e40.png)
先ほどと同じ要領で、今度は「置換する文字列」に半角空白を入力し、「ステップの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/dad24d28-1a57-5f9e-d39a-fce50cc2aa41.png)
左の準備スクリプトのリストが、このようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/7eb4c4a3-19b2-5b4a-df27-f8828fcb58fa.png)

# データに「都府県」を付与します
## 大阪か京都の場合は「府」を付与します
これまでと同じ手順で、列のオプションメニューから「置換」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/4cb4bb7c-5725-8835-d348-cdce918c1bb3.png)
「置換する文字列」は「(大阪|京都)」と入力します。
「新規文字列」は「$1府」と入力します。
「正規表現の使用」オプションを選択し、プレビューで大阪と京都のみ「府」が付与されているのを確認したら、「ステップの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/a30f8415-ce0e-0c70-5551-3e1d4b219545.png)

## 東京に「都」を付与します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/79ee5b8f-2ffc-2cdd-f7c8-e46dcc6c07e3.png)
「置換する文字列」は「(東京)」、新規文字列は「$1都」、「正規表現の使用」オプションを選択します。
プレビューを確認したら「ステップの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/9a40b3b0-c285-f4d3-39f2-5df5014cea9c.png)

## 北海道、東京都、京都府、大阪府以外に「県」を付与します
列のオプションメニューから「置換」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/ee2cb848-2476-a3f6-76da-cad9f073ec50.png)
「置換する文字列」は「^(?!北海道|東京都|京都府|大阪府)(.*)」と入力します。
「新規文字列」は「$1県」と入力します。
「正規表現の使用」オプションを選択し、プレビューを確認します。
問題なければ、「ステップの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/d13f11c0-70a8-827e-2854-aa978e99eb5d.png)

# スクリプトを適用
左の準備スクリプトのリストがこのようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/cb40d782-3b94-122c-d737-b448d8baa774.png)
「適用スクリプト」ボタンをクリックします。
これにより、これまでのステップがデータセットに反映されます。

# ワークブックを作って確認
動作確認できました。完成！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/cfb00baa-8a1d-8089-fc66-76b56da2b948.png)
と、思ったらおかしなところを見つけてしまいました。
「長野県」と「長崎県」のデータがありません。
いやいや、そんなことはないはず。表にはありますよね？

## ちょっと修正
というわけで、元データをメモ帳で読み込んでみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/5f593b30-cc65-b358-9cdc-96d093ea85e1.png)
「長」の字が普通の「長」ではありませんでした。
「あるある」です。
データセットにもう一つ「置換」を追加します。
ぱっと見、「置換する文字列」と「新規文字列」に同じ「長」が入力されているように見えますが違います。
「置換する文字列」はメモ帳からコピペしてきた奇妙な方の「長」で、「新規文字列」は通常の「長」です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/2df5db07-a2ad-837d-5e97-610d04f5bcd4.png)
「ステップの追加」をクリックして、「適用スクリプト」ボタンをクリックします。

# ふたたび確認
今度は、全部の都道府県をちゃんと認識できました。（カラフルにしてみました）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/8c57d70d-4e7d-3507-ea7b-50f177911a24.png)

# 参考情報
[置換を使用したデータの変換](https://docs.oracle.com/cd/E83857_01/paas/analytics-cloud/acubi/transform-data-using-replace.html#GUID-BE59CBC5-758A-4F37-B1E9-2DF584FD43E8)