100日後にエンジニアになるキミ - 89日目 - データ - ETLについて

昨日までのはこちら

[100日後にエンジニアになるキミ - 88日目 - データ - データ転送について](https://qiita.com/otupy/items/e720e175c83a84e101c9)

[100日後にエンジニアになるキミ - 86日目 - データベース - Hadoopについて](https://qiita.com/otupy/items/0016a1b9f496627619b6)

[100日後にエンジニアになるキミ - 76日目 - プログラミング - 機械学習について](https://qiita.com/otupy/items/6a4f960ba4df06e27050)

[100日後にエンジニアになるキミ - 70日目 - プログラミング - スクレイピングについて](https://qiita.com/otupy/items/f53e2e7d16adf80b5acf)

[100日後にエンジニアになるキミ - 66日目 - プログラミング - 自然言語処理について](https://qiita.com/otupy/items/5828ac7450c5ba8d6931)

[100日後にエンジニアになるキミ - 63日目 - プログラミング - 確率について1](https://qiita.com/otupy/items/0196897ae4d2134794fa)

[100日後にエンジニアになるキミ - 59日目 - プログラミング - アルゴリズムについて](https://qiita.com/otupy/items/f1a5e81633b868f3b5ed)

[100日後にエンジニアになるキミ - 53日目 - Git - Gitについて](https://qiita.com/otupy/items/0abaad82a7f3fea73f1f)

[100日後にエンジニアになるキミ - 42日目 - クラウド - クラウドサービスについて](https://qiita.com/otupy/items/d1765f1541a104ed6133)

[100日後にエンジニアになるキミ - 36日目 - データベース - データベースについて](https://qiita.com/otupy/items/7af17635d576677606dc)

[100日後にエンジニアになるキミ - 24日目 - Python - Python言語の基礎1](https://qiita.com/otupy/items/6d1e5453f530e07b7aec)

[100日後にエンジニアになるキミ - 18日目 - Javascript - JavaScriptの基礎1](https://qiita.com/otupy/items/2f71d5f9c754b29d9555)

[100日後にエンジニアになるキミ - 14日目 - CSS - CSSの基礎1](https://qiita.com/otupy/items/61a97863f6df14171994)

[100日後にエンジニアになるキミ - 6日目 - HTML - HTMLの基礎1](https://qiita.com/otupy/items/cd2315dcb38671cfded0)

本日はETLについてです。

## ETLについて

`ETL`とは`Extract/Transform/Load`の略でデータウェアハウスにおける工程を指す言葉です。

`Extract` : 外部のデータソースからデータを抽出する
`Transform` : 抽出したデータを目的に応じて変換・加工する
`Load` : データウェアハウス(データベース)などに加工済みのデータをロードする

通常ログファイルなどはそのままの形でデータベースに投入することもありますが
中には不要なデータだったり、データの形状が分析する際に好ましくない形であることがあります。

そんな時はよりデータ分析をしやすい形にデータを加工してからデータ投入を行うことがあります。

この工程をまとめて`ETL`と読んでいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/7fd75720-a216-b445-1a6e-90b7c3bda352.png)


参考：
https://docs.microsoft.com/ja-jp/azure/architecture/data-guide/relational-data/etl

### 抽出 (Extract)

ETLの第1工程はデータソースからデータを抽出することです。
ファイルやデータベースが主なデータソースとなったり
たいていのデータウェアハウス構築では、複数のデータソースからデータを集積します。

ここのデータの形式がバラバラだったり、粒度もまちまちであると言うようなケースもあり
データソースから適切な形で必要な分のデータを抽出する仕組みが必要になります。

### 変換・加工 (Transform)

つぎに変換・加工の工程では、データソースから抽出したデータを一連の規則にしたがって
データ投入が可能な形に加工を行います。

変換や加工の方法には以下のようなものがあります。

・特定カラムの選択
・カラム分割(日付やカンマつなぎのデータなど)
・データの統合(複数データからの集約)
・データの集約(複数カラムでの集計、計算値の代入)
・データクレンジング(NULL値の削除、値の変換、データ型の変換、不要文字の削除)
・匿名加工(個人情報など)
・代替値に変換
・データの転置

などなど、機械学習で言う`前処理`と似たような加工を施します。
これにより投入が可能なデータに加工を行います。

### ロード (Load)

最後はデータ投入の工程です。
通常はデータウェアハウス(DWH)にロードします。

最終的には分析用のデータベースに対して加工済みのデータを投入することとなります。

### ETLを行うには

ETLは非常に複雑な工程を行うプログラムを作成することで実行することができます。
ただし、最近ではETLを専門に行うツールなどが出来ているため
それを用いて簡易に行うケースが増えているようです。

### ETLツールについて

ETLを行うためのツールはたくさん出回っていますが
いくつかのツールをご紹介します。

[AWS Glue](https://aws.amazon.com/jp/glue/?whats-new-cards.sort-by=item.additionalFields.postDateTime&whats-new-cards.sort-order=desc)

`AWS Glue`はクラウドベースのETLツールです。
データファイルを`AWS S3`などのクラウドストレージに置くケースは多く
S3上のファイルの読み書きしてデータの加工を行うことができるので親和性が高いです。

ScalaまたはPythonでETLコードを書いて複雑な加工を行うことができます。

[Cloud Data Fusion](https://cloud.google.com/data-fusion?hl=ja)
こちらもGoogle CloudのETLサービスです。
GUIからノンプログラミングでデータパイプラインが構築可能な
グラフィカルETLツールという感じでしょうか。

データを変換をプログラミングできるコンポーネントもあるので
複雑な変換ロジックへの対応も可能です。

[embulk](https://github.com/embulk/embulk)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/0ff5c02f-72c0-19c9-6b8f-10957c9c1037.png)

参考：https://github.com/embulk/embulk

オープンソースのETLツールになります。
ローカルやサーバーにインストールして使うことができます。
プラグインも多数揃っており様々なデータソースに接続しデータ加工部分も細かく指定できます。

お金をかけずに軽めにやりたいという場合に安価でETLの仕組みを作ることができます。


## まとめ

ETLはデータ分析を行うためのデータを整備する部分で必ず利用されます。
データの転送と合わせてデータ分析者にとっては欠かすことのできない部分になります。

最近ではより簡易に行うことのできるツールも増えてきているので
自前でプログラムを書くよりは正確で、工数も少なくできるため
相性の良いETLツールを調べておくことも必要かと思います。

君がエンジニアになるまであと11日

## 作者の情報
乙pyのHP：
http://www.otupy.net/

Youtube：
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter：
https://twitter.com/otupython