Preppin Data Practice #04 (24年7月 - 2024: Week 25 SuperBytes Customer Complaints -)
Tableau Prepユーザー会のNakajima2です。
Japan Preppin Data Fam 第4回目のPreppin Data勉強会、24年7月のYouTube動画公開は、24年6月にPreppin Dataで出題された全4題(W 22 〜26、下表参照)から2024W25 の課題にチャレンジです。
以下、課題の内容、対応のポイント、参加者の解答例をご紹介します。
Preppin Data勉強会の配信動画(YouTube)も、以下リンク先からご覧ください。
公開した動画はこちらです。
1)課題の内容
Preppin Dataの課題は、下記を参照ください。
https://preppindata.blogspot.com/2024/06/2024-week-25-superbytes-customer.html
・出題の背景、対応項目
今週、スーパー・バイツはあなたに苦情データを調査してほしいと言っています。ライバルのスーパー、ウィーク・フローツが最近のデータ漏洩でエラーを発見し、その主張が正しいか確認する必要があります。彼らの主張は次の通りです
私たちのデータには製品のカテゴリーを明確に示すフィールドがない。
苦情を受け取る前に解決していた。
・データソース、Outputデータ
データソース
Excelファイルで提供されたワークシート2種からのデータソースになります。
アウトプットは、11フィールド、53列になる次のようなデータです。
11 fields
Complaint ID
Receipt Number
Customer ID
Date Received
Date Resolved
Timely Response
Response to Customer
Issue Type
Product Category
Product ID
Complaint Description
53 rows (54 including headers)
・Requirements(要求事項のポイント)
データを入力する
苦情説明フィールドを以下に分割する:
製品ID
問題の種類
苦情説明(顧客が書いた苦情の内容)
製品IDの最初の2文字を抽出し、これをカテゴリコードとする
このカテゴリコードを使用して、参照テーブルから製品カテゴリを結合する
データセットを、解決日が受領日より後の行のみにフィルタリングする
不要なフィールドを削除する
データを出力する
2)対応のポイント
文字列のフィールドから、データの分割を利用して 3種のフィールドを作成する。
2種データの結合を行うが、キー項目となるデータを2文字を利用して作成する。
日付の期日を比較して、フィルタ処理を行う。
3)参加者の解答例、Tipsなど
対応のポイントに沿って、参加者の回答方法を説明します。
文字列の分割
今回の課題では、[Complaint Description] フィールドから、文字列の分割で3種類([Product ID]、[Issue Type]、[Complaint Description])のフィールドを作成します。
[Complaint Description] フィールドが、次例の通り「 - 」、「 : 」、「 " 」の3つの記号で内容併記がされています。これを分割(置換)を行う必要があります。
分割に関するTipsは、次の通りです。
(1)ネイティブ機能の「値の分割」を利用する
確実な作業で実施出来る、ネイティブ機能の利用です。
「値の分割」で「カスタム分割」でデータに含まれている記号を利用し分割を実施。必要に応じ、フィールド名の変更、もしくは更なる「値の分割」を行い、求められている3つのフィールドを作成します。
Ai さんからのTipsです。
ネイティブ機能を利用した分割においても、作成される関数式を整理してまとめることにより、処理ステップ数を減らすことが出来ます。
作成する3つのフィールドが、シンプルな関数として記述されていることが分かります。フロー全体の処理速度向上も期待出来ますね。
(2)分割に利用する記号を、先に揃える
mitamuuさんからのTipsです。
「 - 」、「 : 」、「 " 」の3つの記号があり複数回の「値の分割」作業が必要になりますが、REPLACE などの 値の置換 をする関数を用いて事前に分割に利用する記号を統一しておくTipsです。
作業の手数が低減出来、処理速度の向上などが期待出来ますね。
(3)正規表現を利用した文字列の抽出
Mr. もりた からのTipsです。
値を抽出する [Complaint Description] フィールドのデータ規則性を確認し、正規表現を利用した文字列の抽出を行なったものです。
結合のキー項目作成(文字列 修正)
2つのテーブルからのデータを結合するためのキー項目を作成します。
「Complaints」テーブルからは、前述で作成した [Product ID] を利用する、「Categories」テーブルからは、[Product Category] を利用して作成します。
キー項目の作成方法(文字列の処理)の一例を下記に示します。
参加者の回答方法は、今回は同じものとなっていました。
日付の比較(フィルタ)
結合処理後の抽出処理として、[Date Received] と [Date Resolved] の期日比較(日付の大小を比較する)を行いデータを絞り込みます。
こちらも、いろいろな手法がありますが、一例を下記に示します。
このフィルタを作業するタイミングですが、参加者の多くは Requirements の記載通り 結合 処理の後に作業を行なっています。
Mr. もりた からのTipsとして、このフィルタ作業を「日付表示の揺れ」行なった直後のフロー初期段階で作業しています。
初期の段階でデータ数を絞り込む(抽出する)ことで、後々のデータ処理が速くなるなど、実務面でとても有益な知見です。
4)その他
たっくん さんの解説にもありますように、今回(24年6月の課題を通して)はデータソースで提供されるExcelファイルが、Prepにデータ接続した後 日付の形式(年/月/日の並び順)が変わってしまう問題が発生していました。
該当する日付データ([Date Received] と [Date Resolved] )が、Prepに読み込む、ネイティブ機能で文字列から日付に形変更することで、月/日が逆に表示されるデータが一部発生する状況でした。
詳細については、たっくん さんの解説をご覧頂ければと思いますが(日本語版Excelでの問題の様子です)、この「日付表示の揺れ」に対し、参加者それぞれが対処した方法を下記に示します。
なお、Ai さんが対応されていましたが、ExcelファイルでなくCSVファイルをデータ接続すると 「日付表示の揺れ」は発生しない状況です。
(1)日付データを分割し、文字列の列記で月日の順を補正する
[Date Received] フィールドを「 / 」でネイティブ機能で3分割し、「日付表示の揺れ」に応じて月日の順を補正しています。「2023」のデータのみ文字の長さた4桁であることを利用して、「日付表示の揺れ」の区別をしています。
(2)FINDNTH 関数の利用
mitamuuさんからのTIpsです。
「日付表示の揺れ」の法則性をデータを確認した上で利用し、「 / 」が最初に出てくる文字の位置を返してくれる FINDNTH 関数を利用して、「日付表示の揺れ」を区別する方法です。
CASE 関数を利用した条件式を用いています。データの中身をよく確認した上で対処している良い例です。
(3)LEFT 関数で「2023」の文字列存在を確認して日付に形変更する
MR. もりた からのTipsです。
「日付表示の揺れ」の法則性をデータを確認した上で、データ中の「2023」がデータの最初にあるか無いかを確認し「日付表示の揺れ」を修正する方法です。
たっくん さんが作成されたフローは、動画の中で説明時間が取れませんでした。X ツイートは下記URLになります。ご参照頂ければと思います。
5)おわりに
今回で4回目の勉強会 公開配信(ビデオ解説)になります。
毎回感じることですが、他のメンバーから聞く発表で新たな発見があり、知識の習得、定着が深く図れていると感じています。
今回は、「日付表示の揺れ」への対処が発生した参加者もあり、その対処で新たな知識を得てその情報を共有することで更に知識が増えていく。それを改めて実感した勉強会でした。
よければ、是非ご一緒に学び合いの場にご参加頂ければと思っています。
Preppin Data勉強会(Japan Preppin Data Fam)では、新規参加者を募集しています。
初心者の方も大歓迎。Tableau Prepが使い慣れた中級以上の方も、目から鱗いっぱいありますので、よろしければご参加ください。
参加希望の方は、下記までメールご連絡をお願いします。
Tableau Prepユーザー会 : tableauprep.usergroup@gmail.com