クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

データの流れを説明する

このレッスンのあとで: データが元のシステムからレポートまで、どう流れるかを説明することができる。

45分のレッスンコマンドなし

月曜の資料は、だれが作るのか

あるコンビニチェーンでは、毎週月曜の朝に売上会議があります。資料には、全店の先週の売上がそろっています。

でも、だれも夜中に数字を打ちこんではいません。レジのデータが、決まった道を通って、毎晩自動で本部に届いているのです。この道を作り、守るのが、データエンジニアの仕事です。

このレッスンのゴール

メモ

データが元のシステムからレポートまで、どう流れるかを説明することができる。

キーワード

ことばいみれい
データパイプラインデータを元からレポートまで運ぶ仕組みです。
抽出元のシステムからデータを取り出すことです。
変換データを直して、形をそろえることです。
ロード直したデータを保存先に入れることです。
ETL抽出、変換、ロードの三つの頭文字です。Extract, Transform, Load

学生が入力するセルは、このプレビューでは空白です。

データは三つの段階を通ります

まず抽出です。各店舗のレジから、その日の売上ファイルを取り出します。

次に変換です。空の値を外し、文字を数に変え、店名の形をそろえます。

最後にロードです。直したデータを、本部のデータベースに入れます。会議の資料は、このデータベースから作ります。

三つの段階をPythonで書きます

小さなパイプラインなら、Pythonで書けます。

下のコードは、レジから届いた文字を行に分け、空の売上を外し、リストに入れます。

段階ごとに件数を表示している点に注目してください。件数が途中で減れば、どこで何行が外れたかがすぐに分かります。

抽出、変換、ロードを動かす

コード: python
# 夜にレジから届くファイルの中身です。
export_text = """store,sales
梅田店,84000
難波店,
梅田店,12500
天王寺店,91500"""

# 1. 抽出: 文字を行に分けます。1行目は列の名前なので飛ばします。
rows = []
for line in export_text.split("\n")[1:]:
    parts = line.split(",")
    rows.append({"store": parts[0], "sales": parts[1]})
print("抽出した行:", len(rows))

# 2. 変換: 売上が空の行を外し、文字を数に変えます。
clean = []
for row in rows:
    if row["sales"] != "":
        clean.append({"store": row["store"], "sales": int(row["sales"])})
print("変換した行:", len(clean))

# 3. ロード: ここではリストに入れます。会社ではデータベースの表です。
sales_table = []
for row in clean:
    sales_table.append(row)
print("ロードした行:", sales_table)

# 「京橋店,70000」の行を足して、件数がどう変わるか見ましょう。

よくある間違い

注意

変換が終われば、元のファイルは要らないと考える人が多いです。でも、変換にまちがいが見つかることはよくあります。元のデータを残しておけば、直した変換でもう一度流せます。

やってみましょう: 店舗ごとの合計

会議の資料には、店舗ごとの売上の合計が必要です。一つの店から、レジごとに何行も届くことがあります。店名ごとに売上を足した辞書を返す関数を書いてください。

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。