DataSpiderで実装するデータクレンジング

HOME技術コラムDataSpiderで実装するデータクレンジング ~データウェアハウスやBIへの連携~

DataSpiderで実装するデータクレンジング ~データウェアハウスやBIへの連携~

1. データウェアハウス・BIとは

【1-1】データウェアハウスとは

データウェアハウスとは、企業が持つさまざまなデータを一元管理するシステムのことです。大量のデータの中から条件に該当するものを抽出したり、分析しやすい形にデータを整理・保管したりと、データ管理や活用の問題を解決することが可能です。
また、長期的なデータ保管にも適しており、一定期間のデータを蓄積し、変化の傾向を把握するのに役立ちます。


◎主な特徴

データの統合
  • 複数のシステムに分散しているデータを一元管理
  • データ品質、データの整合性の向上
データの時系列管理
  • データを時系列で保存し、履歴を追跡
  • 過去のデータを分析に活用
高速なデータ検索
  • 分析に適した形でデータを保存することで、高速な検索が可能
  • 意思決定に必要なデータをタイムリーに提供
柔軟なデータ分析
  • 様々な視点からデータを分析
  • データ分析ツールと連携することで、高度な分析が可能

【1-2】BIとは

BI(ビジネスインテリジェンス)とは、企業の情報システムなどで蓄積される様々なデータを、利用者が自らの必要に応じて分析・加工を行うという、データに基づいた意思決定が行えるようにデータ活用を支援する取り組みのことです。蓄積したデータを分析することで、顧客の傾向などを把握することができ、効果的なマーケティングに活用できます。


◎BIのプロセス

1.収集
  • データを収集する環境の整備
  • さまざまな場所に点在しているデータを、一カ所に集約
2.蓄積
  • データ収集環境整備後、そのままデータを一定期間蓄積
  • 蓄積されたデータ量が多いほど、精度の高い分析が可能
3.分析
  • 蓄積したデータの分析
  • 利用するデータや分析方法はどのような目的で分析するかによって、異なる
4.可視化
  • 分析結果の可視化
  • 誰にでも分かりやすいように可視化する

2. データクレンジング

【2-1】データクレンジングとは

データクレンジングとは、データの誤登録や表記の不統一など、データの不備や重複を修正する作業のことです。例えばデータウェアハウスやBIツールにデータを格納する前には、データクレンジングを利用し、収集したデータを抽出しデータを利用しやすい形に変換する必要があります。

データクレンジングを行うことで、下記のような様々なメリットがあります。

メリット ・データ分析精度の向上
・業務の効率化・生産性の向上
・データ維持コストの削減
・データ統合の促進
・コストの削減

【2-2】処理仕様説明

データクレンジングはDataSpiderのマッピングでも行うことができます。
今回はDataSpiderを使用して、マッピング内でデータクレンジングを行う手順を説明します。

処理フローと処理内容は以下の通りです。

読み取り
  • CSVファイル「/data/work/test/会員データ.csv」からデータを読み取る
クレンジング
  • マッピングにて、読み取ったデータのクレンジングを行う
  • クレンジング内容は、データ項目がNULL時の代替文字を追加、日付形式の統一
書き込み
  • クレンジングしたデータを、「test1」のテーブル「会員テーブル」に書き込む
  • クレンジングした内容でデータ出力されているか確認

【2-3】前提

  • データベースへの接続が済んでいること(今回はPostgresSQL13をデータベースとして使用)
  • データ連携元CSVファイルがDataSpiderファイルシステム上に配置されていること

今回連携先となる会員テーブルの、ファイル連携前の中身は以下の通りです。
cleansing_2_3_1

また、今回連携するCSVファイル「/data/work/test/会員データ.csv」の内容は以下の通りです。
連携元データは、下記の特徴があります。

  • NULL値で登録されている項目がある
  • 日付形式の不統一
  • DBに格納されている会員番号と重複するデータが存在(会員番号10011)

※会員番号、氏名、登録日は入力必須項目とします。
cleansing_2_3_2

【2-4】プロジェクト・スクリプトの作成

[プロジェクト名]:任意のプロジェクト名
[スクリプト名]:任意のスクリプト名 cleansing_2_4

【2-5】CSVファイルからデータ抽出

入力元データとなるCSVファイルの読み取り設定を行います。

ツールパレットから[ファイル]-[CSV]-[CSVファイル読み取り]を、スクリプトキャンバスにドラッグ&ドロップします。 cleansing_2_5_1

「CSVファイル読み取り処理」プロパティ設定ダイアログで、以下の通り設定を行います。

◎必須設定
[名前]:コンポーネント名
[ファイル]:読み取り対象ファイルの格納先フォルダ/ファイル
cleansing_2_5_2
◎読み取り設定
[エンコード]:読み取り対象ファイルのエンコード
[最初の行は値として取得しない]:ファイルの読み取り開始行をデータとして扱うか選択
cleansing_2_5_3

[ファイルの一行目から列名を読み取り]をクリックします。cleansing_2_5_4
ファイルの選択画面が表示されるため、今回のデータ入力元CSVファイルである「/data/work/test/会員データ.csv」を選択し、[表示キャラセット]をUTF-8に変更します。
ファイルの中身が正常なことを確認し、[開く]を押下します。 cleansing_2_5_5


列一覧に列名がセットされます。 cleansing_2_5_6


[完了]を押下すると、プロパティ設定ダイアログが閉じ、「CSVファイル読み取り処理」アイコンがキャンパスに配置されます。 cleansing_2_5_7

【2-6】PostgreSQLデータベースへのデータ書き込み

読み取ったデータを書き込む、データベースの設定を行います。

ツールパレットから[データベース]-[PostgreSQL]-[テーブル書き込み]を、スクリプトキャンバスにドラッグ&ドロップします。 cleansing_2_6_1

「テーブル書き込み処理」プロパティ設定ダイアログで、以下の通り設定を行います。

◎必須設定
[名前]:コンポーネント名
[入力データ]:入力データとなるコンポーネント名
[接続先]:グローバルリソースで設定済みの接続先
[テーブル名]:書き込み対象テーブル
cleansing_2_6_2

[キーと値と一致する行は更新]にチェックを入れ、[スキーマ定義]で[列名]が、「会員番号」の行の[キー]にチェックを入れます。
この設定によって、DBに格納されている会員番号と重複するデータが連携される場合は、連携されたデータで更新されます。 cleansing_2_6_3

[完了]を押下すると、プロパティ設定ダイアログが閉じ、「PostgreSQL書き込み処理」アイコンがキャンパスに配置され、マッピングの追加ダイアログが表示されます。 cleansing_2_6_4

【2-7】Mapperの追加・データクレンジング

Mapperを追加し、連携元データと連携先データベースのデータ連携を作成します。
またMapper内でデータクレンジングを行います。

Mapper 追加ダイアログの「はい」を選択します。 cleansing_2_7_1

「CSVファイル読み取り処理」と「PostgreSQL書き込み処理」の間に、「mapping」アイコンが配置されます。cleansing_2_7_2

配置された「mapping」アイコンをダブルクリックし、Mapperエディタを開きます。 cleansing_2_7_3

今回データクレンジングを行う内容は以下の通りです。

  • データ項目がNULL時の代替文字を追加
  • 日付形式の統一

データクレンジングを行う前に、クレンジング内容ごとに、マッピングのレイヤを分けます。
マッピングキャンバス下部のレイヤタブがない場所を右クリックし、[レイヤを追加]を押下し、「レイヤ名」を入力後、[OK]を押下します。

〇設定項目
[レイヤ名]:作成したいレイヤ名 cleansing_2_7_4

これで、レイヤが追加されました。
日付形式修正用のレイヤも、先ほどの手順で作成します。 cleansing_2_7_5

まず、連携元データ項目値がNULL時の代替文字の追加から行います。
今回、連携元データ項目値がNULLの場合には、ハイフンを出力するようにします。
レイヤを「NULL時の代替文字追加」に切り替え、Mapper エディタのツールパレットから[分岐]-[基本]-[スイッチ判定による出力の切り替え]をマッピングキャンバスにドラッグ&ドロップします。
[スイッチ判定による出力の切り替え]ロジックアイコンを使用することにより、出力データを場合分けすることができます。
(奇数番目の入力ハンドラには真偽値を、偶数番目の入力ハンドラには奇数番目のハンドラで受け取った値がtrueである場合に出力したい文字列を、最終番目の入力ハンドラには真偽値が全てfalseだった場合に出力したい文字列をマッピングします。) cleansing_2_7_6

次に、[条件]-[真偽]-[nullチェック]をマッピングキャンバスにドラッグ&ドロップします。 cleansing_2_7_7

「スイッチ判定による出力の切り替え」、「nullチェック」ロジックアイコンが配置されたら、マッピングリンクを作成します。
連携元データ内でNULL値が入力されている項目は、「郵便番号」、「住所」、「電話番号」です。
初めに、「郵便番号」から設定していきます。
入力元「郵便番号」から「nullチェック」ロジックアイコンへリンクを引き、「nullチェック」ロジックアイコンを、「スイッチ判定による出力の切り替え」ロジックアイコンの、1番目の入力ハンドラへリンクを引きます。 cleansing_2_7_8

次に、Mapper エディタのツールパレットから[文字列]-[基本]-[単一行文字列定数]をマッピングキャンバスにドラッグ&ドロップします。 cleansing_2_7_9

配置された「単一行文字列定数」ロジックアイコンをダブルクリックし、「単一行文字列定数ロジック」プロパティ設定ダイアログで、以下の通り設定を行い、[完了]を押下します。

◎必須設定
[一行文字列]:出力させたい文字列
[コメント]:スクリプト上に表示させるコメント cleansing_2_7_10

「スイッチ判定による出力の切り替え」ロジックアイコンの2番目の入力ハンドラには、先ほど配置した「単一行文字列定数」ロジックアイコンからリンクを引きます。 cleansing_2_7_11

「スイッチ判定による出力の切り替え」ロジックアイコンの3番目の入力ハンドラには、入力元「郵便番号」からリンクを引き、「スイッチ判定による出力の切り替え」ロジックアイコンから出力先「郵便番号」へリンクを引きます。cleansing_2_7_12

これにより、入力元「郵便番号」にNULL値が入力されている場合、出力先「郵便番号」にはハイフンが出力されるようになります。NULL値以外が入力されている場合には、入力元「郵便番号」に設定されている値がそのまま出力されます。
同じ手順で、「住所」、「電話番号」にも同様にマッピングを作成します。 cleansing_2_7_13

次に、日付形式の統一です。

「登録日」に入力されている日付の形式が統一されていないため、データ出力時に「yyyy/MM/dd」の形式で統一されるよう設定します。
レイヤを「日付形式修正」に切り替え、Mapper エディタのツールパレットから[文字列]-[日付]-[日時フォーマッティング]をマッピングキャンバスにドラッグ&ドロップします。 cleansing_2_7_14

配置された「日時フォーマッティング」ロジックアイコンをダブルクリックし、「日時フォーマッティングロジック」プロパティ設定ダイアログで、以下の通り設定を行い、[完了]を押下します。

◎必須設定
[フォーマット]:出力させたい文字列
[コメント]:スクリプト上に表示させるコメント cleansing_2_7_15

入力元「登録日」から「日時フォーマッティング」ロジックアイコンにリンクを引き、「日時フォーマッティング」ロジックアイコンから、出力先「登録日」へリンクを引きます。
これにより、入力元「登録日」に設定されている日付が、出力時に「yyyy/MM/dd」の形で統一されます。 cleansing_2_7_16

以上でデータのクレンジングは完了です。

【2-8】スクリプトの完成・実行

処理の順番にプロセスフローを引きます。
(「Start」→「CSVファイル読み取り処理」→「mapping」→「PostgreSQL書き込み処理」→「End」の順) cleansing_2_8_1

[デバッグ実行の開始/再開]を押下して処理を実行します。 cleansing_2_8_2
cleansing_2_8_3



連携元データがPostgreSQLに書き込まれているか確認します。 cleansing_2_8_4
cleansing_2_8_5
cleansing_2_8_6

※元々のデータは青、追加されたデータは緑、重複更新されたデータは黄色で囲っています。

クレンジングした内容で、正常にデータ出力されていることが確認できました。
以上が、マッピング内でデータクレンジングを行う手順の説明になります。

お問い合わせ

  • 資料のご請求
  • 製品Q&A
  • 詳細説明希望
  • 製品デモ希望
  • 製品価格
  • その他

何でもお気軽にご質問ください

top