MENU
精度の高いデータ分析を行うには、データの整合性がとれていることが重要です。
そのためには、欠損や重複といったデータの不備を解消するデータクレンジングの作業が必要になります。
Dr.SumにはDS Scriptというスクリプト機能があり、データ加工とバッチ処理を強力に支援してくれます。
制御フローによる条件分岐や繰り返し、SQLによるデータ修正やワークテーブルを使った処理が可能です。
本記事では、DS Scriptでデータクレンジングを行う方法をサンプルコードを用いてご紹介します。
データクレンジングとは、データの重複や表記のゆれを見つけ、修正や削除を行うことです。
フォーマットや表記の統一・欠損値の補完などを行うことで、データの質を向上させることができます。
今回はDr.Sumのテーブルに格納されたデータのフォーマットを統一し、値が欠損しているレコードをワークテーブルのリストから補完する処理を実施します。
サンプルデータをDr.Sumの任意のデータベースにインポートしてください。
サンプルデータ(売上実績.csv)のダウンロード |
サンプルデータをインポートした売上実績テーブルの中身は以下のようになっています。
商品コードの桁数が違っていたり、商品名が欠損している、商品名に半角・全角が混在しているなど、
表記のゆれがあるため、このままだと同じ商品の売上がバラバラに集計されてしまいます。
以下の処理を実施するスクリプトを作成します。
//データベースに接続します(DB名は適宜変更してください)
CONNECT("サンプルDB") {
}
//Dr.SumのSQL関数でデータを修正します
SQL($_SQL_AUTO_COMMIT_ON) {
--商品コードを左ゼロ埋め5桁に統一します
UPDATE 売上実績 SET 商品コード=LPAD(商品コード,5,'0');
--商品名の半角を全角に統一します
UPDATE 売上実績 SET 商品名=FULLW(商品名);
}
//ワークテーブルに商品コードと商品名のリストを作成します
SET() {
$WORK = generate_wkname("work");
}
EXPORT_WK("サンプルDB",
$WORK,
$_EXPORT_MODE_TRUNCATE,
$_ERROR_MODE_INTERRUPTED,
$_TABLE_CREATE_MODE_NORMAL) {
SELECT 商品コード,商品名
FROM 売上実績
WHERE 商品名 IS NOT NULL GROUP BY 商品コード,商品名;
}
//商品名が欠損しているレコードをワークテーブルの同じ商品コードの名称で補完します
SET_FROM_QUERY() {
@TARGET = SELECT * FROM 売上実績 WHERE 商品名 IS NULL;
}
FOREACH (@TARGET, i) {
SET_FROM_QUERY() {
$ITEM_NAME = SELECT 商品名 FROM ${WORK} WHERE 商品コード='${TARGET_商品コード}'
}
SQL($_SQL_AUTO_COMMIT_ON) {
UPDATE 売上実績 SET 商品名='${ITEM_NAME}' WHERE 売上Seq=${TARGET_売上Seq}
}
}
上記スクリプトをスクリプトルート(SCRIPT_ROOT)に配置してください。
スクリプトファイル(data_cleansing.dhn)のダウンロード |
スクリプトルートの場所は、[Enterprise Manager]-[サーバー]-[設定]から確認できます。
コマンドプロンプトを起動し、スクリプトを実行します。
コマンド(dwscr_execute)のパラメータは左から、サーバ名・ポート番号・ユーザー名・パスワード・ファイル名・ログ出力先、となっています。各自の環境に合わせて適宜変更してください。
dwscr_execute "localhost" 6001 "Administrator" "password" "SCRIPT_ROOT/data_cleansing.dhn" ""
スクリプト実行後の売上実績テーブルの中身は以下のようになります。
商品コードと商品名の表記が統一されており、商品名も補完されていることを確認できます。
データクレンジングの内容はケースバイケースですが、スクリプトに必要な処理を記述しておけば、DS Scriptで同じデータ加工を繰り返し処理することができます。
スクリプトをバッチファイルから呼び出して、定期的にスケジュール実行することもできますので、是非ご活用ください。
Related article
Pick up
Ranking
Info