TT Lab
料金プラン はじめる
学ぶ 学習パス コース

顧客データを扱う

壊れた注文CSVを整形する

TT Labで続きを見る

目標

顧客が渡した壊れたCSVをルールどおりにクレンジングし、何をなぜ捨てたのかを数字で説明できるようになります。

なぜ重要なのか

クレンジングスクリプトで最も危険なのは、静かに消すことです。顧客はあとで「なぜうちの売上はこれしかないのですか」と尋ね、そのとき捨てた行の数と理由を答えられなければ、そのプロジェクトのすべての数字が疑われます。そのため、このラボには、捨てた行を数えるステップが別にあります。

もう1つ。クレンジングのルールは、エンジニアが1人で決めるものではありません。「金額が負の行は返金に見えますが、除外しますか、別に数えますか」を、業務担当者に尋ねなければなりません。このラボではルールを先に決めて渡しますが、現場でそのルールがどこから来るのかを覚えておいてください。

有効な行の条件: 次の3つをすべて満たす必要があります。

ステップ

  1. /root/outputを作成し、/opt/data/orders.csvをクレンジングした結果を/root/output/clean.csvとして保存してください。
  2. clean.csvの1行目は、原本のヘッダーid,customer,amount,dateのままにしてください。
  3. 有効な行だけを残して、clean.csvがヘッダーを含めて19行になるようにしてください。
  4. 残った行が上の3つの条件をすべて満たすことを確認してください。
  5. 捨てた行の数を/root/output/bad_count.txtに書いてください。
  6. クレンジング後に残った行の金額の合計を/root/output/total.txtに書いてください。
  7. 金額の合計が最も大きい日付を/root/output/top_day.txtにYYYY-MM-DDの形で書いてください。
  8. /root/output/by_day.csvを作成してください。1行目はdate,totalで、以降は日付ごとに1行で、その日の金額の合計を書きます。

参考

クレンジング結果のファイルを作る

/root/outputを作成し、/opt/data/orders.csvをクレンジングした結果を/root/output/clean.csvとして保存してください。

/root/outputディレクトリを作成し、その中にclean.csvを作成してください。原本は/opt/data/orders.csvです。

ヘッダーを残す

clean.csvの1行目は、原本のヘッダーid,customer,amount,dateのままにしてください。

原本の1行目をそのまま残す必要があります。クレンジングの対象はデータ行だけです。

有効な行だけを残す

有効な行だけを残して、clean.csvがヘッダーを含めて19行になるようにしてください。

3つのルールをすべて満たす行だけを残します。ヘッダーを含めて19行になる必要があります。

残った行がすべてルールを満たすか確認する

残った行が上の3つの条件をすべて満たすことを確認してください。

フィールド数、空の顧客名、負または数字でない金額の3つを、それぞれ確認してください。1つでも残っていれば失敗です。

捨てた行を数える

捨てた行の数を/root/output/bad_count.txtに書いてください。

静かに消すクレンジングは時限爆弾です。原本のデータ行数から、残った行数を引けば求まります。

金額の合計を求める

クレンジング後に残った行の金額の合計を/root/output/total.txtに書いてください。

クレンジング後に残った行の金額だけを足します。awkのフィールド区切りのオプションを使えば、1行で済みます。

売上が最大の日を探す

金額の合計が最も大きい日付を/root/output/top_day.txtにYYYY-MM-DDの形で書いてください。

件数ではなく金額の合計が基準です。日付ごとに金額を累計してから、最も大きい日を選んでください。

日付別の集計表を作る

/root/output/by_day.csvを作成してください。1行目はdate,totalで、以降は日付ごとに1行で、その日の金額の合計を書きます。

date,totalのヘッダーで始まり、日付ごとに1行です。日付順に並べると読みやすくなります。