📁 STEP 2: データソースの理解
様々なデータソースの特徴を理解し、適切な取り扱い方を学びます
📋 このステップで学ぶこと
- データソースとは何か、なぜ複数の種類があるのか
- データベース(RDBMS)の仕組みと特徴
- ファイル形式(CSV、JSON、Excel)の違いと使い分け
- API(REST API)の基本的な仕組みとデータ取得方法
- ログファイルの構造と処理方法
- 用途に応じたデータソースの選び方
📚 1. データソースとは?
1-1. データソースの基本的な意味
データソース(Data Source)とは、文字通り「データの源(みなもと)」、つまりデータが保存されている場所のことです。
STEP 1で学んだETLの「E」(Extract:抽出)では、このデータソースからデータを取り出します。データソースを正しく理解することが、ETLの第一歩です。
1-2. 身近な例え:情報を探す場所
図書館で調べものをするとき、情報は色々な場所にありますよね。それぞれの場所には、それぞれの特徴があります。
1-3. なぜ複数の種類があるのか?
「データソースを1つに統一すればいいのでは?」と思うかもしれません。
しかし、データの特性や使い方によって、最適な保存方法が異なるのです。
| こんな要件があるとき | 最適なデータソース | 理由 |
|---|---|---|
| 大量のデータを高速に検索したい | データベース | インデックス機能で高速検索が可能 |
| 他の人にデータを簡単に渡したい | CSVファイル | どんなツールでも開ける汎用性 |
| 複雑な階層構造を保存したい | JSONファイル | 入れ子構造を自然に表現できる |
| 外部サービスの最新データが欲しい | API | リアルタイムでデータを取得できる |
| システムの動作履歴を調べたい | ログファイル | 時系列で詳細な記録が残っている |
1-4. データソースの分類
データソースは、データの構造化の度合いによって分類できます。
ETLで最もよく使われる4つのデータソースを詳しく学びます:
- データベース(RDBMS):企業の基幹システムで使われる
- ファイル(CSV、JSON、Excel):データの受け渡しでよく使う
- API(REST API):外部サービスとの連携
- ログファイル:システムの動作記録
🗄️ 2. データベース(RDBMS)
2-1. データベースとは何か?
データベースとは、大量のデータを整理して保存し、必要なときに高速に取り出せるソフトウェアです。
特にRDBMS(Relational Database Management System:リレーショナルデータベース管理システム)は、データを表形式(テーブル)で管理します。
データベースは「超パワフルなExcel」と考えると分かりやすいです。
2-2. 代表的なデータベース
データベースにはいくつかの種類があります。それぞれ特徴が異なります。
🐘 PostgreSQL(ポストグレスキューエル)
オープンソースで無料。高機能で信頼性が高い。データエンジニアに人気。このコースでも使用します。
🐬 MySQL(マイエスキューエル)
シンプルで使いやすい。Web開発で広く使われている。WordPressなどのCMSでも利用。
🏢 Oracle Database
大企業向け。高性能だが高価。銀行、保険会社などの基幹システムで使用。
🪶 SQLite(エスキューライト)
軽量でファイルベース。インストール不要。スマホアプリや小規模システムに最適。
2-3. データベースの構造を理解する
データベースは階層構造になっています。上から順に見ていきましょう。
具体例:ECサイトのデータベース
usersテーブルの中身を表形式で見てみましょう。
| user_id | name | created_at | |
|---|---|---|---|
| 1 | 山田太郎 | yamada@example.com | 2024-01-10 09:00:00 |
| 2 | 佐藤花子 | sato@example.com | 2024-01-11 14:30:00 |
| 3 | 鈴木一郎 | suzuki@example.com | 2024-01-12 10:15:00 |
テーブル = Excelのシート
カラム = Excelの列見出し(A列、B列…ではなく、名前付き)
レコード = Excelの1行分のデータ
2-4. SQLでデータを取得する
データベースからデータを取得するには、SQL(Structured Query Language)という言語を使います。
SQLは「データベースに話しかける言葉」だと考えてください。
① 基本:すべてのデータを取得する
このSQLを日本語に訳すと、こうなります:
SELECT:「選んでください」(取得する命令)*:「すべての列を」(ワイルドカード = 全部という意味)FROM users:「usersテーブルから」
つまり「usersテーブルから、すべての列を、選んでください」という意味です。
② 必要な列だけを取得する
SELECT name, email:「name列とemail列を選んでください」FROM users:「usersテーブルから」
ポイント:*の代わりに列名を指定すると、必要な列だけを取得できます。
すべての列を取得するよりも効率的です。
③ 条件を指定してデータを絞り込む
SELECT *:「すべての列を選んでください」FROM orders:「ordersテーブルから」WHERE order_date >= '2024-01-01':「order_dateが2024年1月1日以降のものだけ」
ポイント:WHERE句を使うと、条件に合うデータだけを取得できます。
ETLでは「増分抽出」(前回以降のデータだけ取得)でよく使います。
④ 複数のテーブルを結合する
実際の分析では、複数のテーブルのデータを組み合わせることがよくあります。
① 取得する列を指定
o.order_id:ordersテーブルの注文IDu.name:usersテーブルのユーザー名p.product_name:productsテーブルの商品名o.quantity:ordersテーブルの数量
② 基準となるテーブル
FROM orders o:ordersテーブルを「o」という短い名前で使う
③ テーブルを結合
JOIN users u ON o.user_id = u.user_id:
「ordersのuser_idとusersのuser_idが同じものを結合」JOIN products p ON o.product_id = p.product_id:
「ordersのproduct_idとproductsのproduct_idが同じものを結合」
結合の結果、こんなデータが取得できます:
| order_id | name | product_name | quantity | order_date |
|---|---|---|---|---|
| 101 | 山田太郎 | ノートPC | 1 | 2024-01-15 |
| 102 | 佐藤花子 | マウス | 2 | 2024-01-16 |
2-5. データベースのメリット・デメリット
- 数億件のデータでも高速検索できる
- 複数の人が同時にアクセスできる
- データの整合性を保てる
- バックアップや復旧が容易
- 複雑な集計・分析ができる
- SQLの知識が必要
- セットアップがやや複雑
- 小規模なデータにはオーバースペック
- サーバーの管理・運用が必要
📄 3. ファイル(CSV、JSON、Excel)
3-1. ファイル形式の概要
データベース以外にも、ファイル形式でデータが保存されていることがよくあります。
ファイル形式は、データの受け渡しや一時的な保存によく使われます。
主な3つのファイル形式を詳しく見ていきましょう。
3-2. CSVファイル
CSV(Comma-Separated Values)は、カンマ(,)で区切られたテキスト形式のデータです。
「カンマ区切り値」という意味で、最もシンプルで広く使われているデータ形式です。
CSVファイルの中身
CSVファイルをテキストエディタで開くと、こんな内容になっています:
- 1行目:ヘッダー行(列の名前)
- 2行目以降:データ行(実際のデータ)
- カンマ(,):各項目の区切り
- 改行:各レコード(行)の区切り
PythonでCSVを読み込む
Pythonではpandasライブラリを使ってCSVを簡単に読み込めます。
① import pandas as pd
import:ライブラリを読み込む命令pandas:データ分析用のライブラリas pd:「pdという短い名前で使う」という意味
② pd.read_csv(‘ファイル名’)
pd.read_csv():CSVファイルを読み込む関数- 読み込んだデータはDataFrameという表形式になる
③ df.head()
- DataFrameの先頭5行を返す(引数で行数を指定可能)
- 大量のデータを確認する前に、まず少量を見るのがベストプラクティス
日本語の文字化けに対応する
日本語を含むCSVファイルは、文字コードの違いで文字化けすることがあります。
特にWindowsで作成されたファイルは注意が必要です。
- まずUTF-8を試す(現在の標準)
- 文字化けしたらShift-JISまたはCP932を試す
- エラーが出たら
encoding='utf-8-sig'も試してみる
CSVのメリット・デメリット
- とてもシンプルで扱いやすい
- どんなツールでも開ける
- ファイルサイズが小さい
- 人間が読める形式
- データ型情報がない
- 複雑な構造は表現できない
- 文字化けが起きやすい
- カンマを含むデータの扱いが難しい
3-3. JSONファイル
JSON(JavaScript Object Notation)は、キーと値のペアでデータを表現する形式です。
Web APIでのデータ受け渡しで最もよく使われています。
JSONファイルの中身
{ }:オブジェクト(複数のキーと値のペアを囲む)"キー": 値:キーと値のペア(キーは必ずダブルクォート)[ ]:配列(複数の値のリスト)- 入れ子構造が可能:ordersの中にさらにオブジェクトがある
CSVとJSONの構造の違い
PythonでJSONを読み込む
方法1:pandasで読み込む(単純な構造の場合)
方法2:標準ライブラリで読み込む(複雑な構造の場合)
① with open(…) as f:
with:ファイルを安全に開く構文(自動で閉じてくれる)'r':読み取り(read)モードas f:開いたファイルを「f」という名前で使う
② json.load(f)
- ファイルからJSONを読み込み、Pythonの辞書型に変換
③ data[‘orders’][0]
data['orders']:orders配列を取得[0]:配列の最初の要素(Pythonは0から数える)
JSONのメリット・デメリット
- 階層構造を自然に表現できる
- Web APIと相性が良い
- 人間が読みやすい
- ほとんどの言語でサポート
- CSVよりファイルサイズが大きい
- 単純な表形式データには冗長
- Excelで直接開けない
3-4. Excelファイル
Microsoft Excelで作成される.xlsx(または.xls)形式のファイルです。
ビジネスの現場で最も多く使われているデータ形式です。
PythonでExcelを読み込む
① pd.read_excel(‘ファイル名’)
- Excelファイルを読み込む関数
- 指定がなければ最初のシートを読み込む
② sheet_name=’シート名’
- 特定のシートを指定して読み込む
- シート番号でも指定可能(
sheet_name=0で最初のシート)
③ sheet_name=None
- すべてのシートを辞書形式で読み込む
- 複数シートを扱う場合に便利
- openpyxlライブラリが必要(
pip install openpyxl) - 古い.xls形式を読むには
xlrdが必要 - セル結合や複雑な書式は正しく読めないことがある
- 大きなファイルは読み込みに時間がかかる
Excelのメリット・デメリット
- ビジネスで広く使われている
- 複数シートを1ファイルに持てる
- 書式(色、罫線)も保存できる
- 非エンジニアでも扱える
- ファイルサイズが大きい
- 約100万行が上限
- バージョン間の互換性問題
- プログラムでの処理がやや遅い
3-5. ファイル形式の比較まとめ
| 比較項目 | CSV | JSON | Excel |
|---|---|---|---|
| 構造 | 表形式のみ | 階層構造OK | 表形式+複数シート |
| ファイルサイズ | 小さい | やや大きい | 大きい |
| 開きやすさ | どこでも開ける | 専用ツール推奨 | Excel必要 |
| データ型 | 保持されない | ある程度保持 | 保持される |
| 向いている用途 | データ交換、大量データ | API連携、設定ファイル | ビジネス資料、レポート |
🌐 4. API(REST API)
4-1. APIとは何か?
API(Application Programming Interface)とは、プログラムから他のサービスにアクセスするための窓口です。
レストランで食事をするとき、あなたは厨房に直接入って料理を作りませんよね。
ウェイターを通じて注文し、出来上がった料理を受け取ります。
4-2. REST APIの基本
REST APIは、HTTP(Webの通信規格)を使ってデータをやり取りするAPIの形式です。
現在、最も広く使われているAPI形式です。
4-3. HTTPメソッド(4つの操作)
REST APIでは、何をしたいかによって使うメソッド(方法)が異なります。
ETLでは主にGET(取得)を使います。
| メソッド | 意味 | 使用例 | ETLでの使用頻度 |
|---|---|---|---|
| GET | データを取得する | ユーザー一覧を取得、売上データを取得 | ★★★(非常に多い) |
| POST | データを作成する | 新規ユーザー登録、注文を作成 | ★☆☆(たまに使う) |
| PUT | データを更新する | ユーザー情報を変更 | ★☆☆(まれに使う) |
| DELETE | データを削除する | ユーザーを削除 | ☆☆☆(ほぼ使わない) |
4-4. PythonでAPIを呼び出す
Pythonではrequestsライブラリを使ってAPIを呼び出します。
① 基本的なGETリクエスト
① requests.get(URL)
- 指定したURLにGETリクエストを送信
- 結果は
responseオブジェクトに格納
② response.status_code
200:成功404:見つからない(URLが間違っている)401:認証エラー(APIキーが必要)500:サーバーエラー
③ response.json()
- レスポンスをJSON形式からPythonの辞書型に変換
- 変換後は
data['key']のようにアクセスできる
② 認証が必要なAPI
多くのAPIは、不正アクセスを防ぐために認証(APIキーやトークン)が必要です。
- APIキー:サービスから発行される文字列をヘッダーに含める
- Bearer Token:
'Authorization': 'Bearer トークン'形式 - Basic認証:ユーザー名とパスワードを使う(古い方式)
注意:APIキーやトークンは秘密情報です。
コードに直接書かず、環境変数などで管理しましょう(後のステップで学びます)。
③ パラメータを指定してデータを絞り込む
パラメータを使うと、必要なデータだけを効率的に取得できます。
よく使われるパラメータ:
start_date、end_date:日付範囲の指定limit:取得件数の上限offsetまたはpage:ページネーション(次のページ)sort:並び順の指定
④ 完成コード:API呼び出しの実践例
4-5. よく使われるAPI
📊 Google Analytics API
Webサイトのアクセスデータを取得。ページビュー、ユーザー数、滞在時間などを分析できます。
💰 Stripe API / PayPal API
決済データを取得。売上、返金、顧客の支払い情報などを分析できます。
🏢 Salesforce API
CRM(顧客管理)データを取得。営業活動、商談情報などを分析できます。
📧 SendGrid / Mailchimp API
メール配信データを取得。開封率、クリック率などのマーケティング分析に使えます。
4-6. APIのメリット・デメリット
- 外部サービスのデータをリアルタイムで取得
- データを自動更新できる
- 自社でデータ管理不要
- プログラムで自動化しやすい
- インターネット接続が必要
- APIの仕様変更で動かなくなる
- 利用制限がある(1日1000回まで等)
- 料金がかかることがある
📝 5. ログファイル
5-1. ログファイルとは何か?
ログファイルとは、システムやアプリケーションの動作記録を保存したファイルです。
サーバーやアプリケーションが自動的に記録します。
ログファイルは、システムが書く「業務日報」のようなものです:
- 10:30:45 ユーザーAがログインしました
- 10:31:12 商品ページを閲覧しました
- 10:32:03 商品を購入しました
- 10:33:15 【エラー】決済処理に失敗しました
この記録を分析することで、「いつ、誰が、何をしたか」「どこで問題が起きたか」を調べることができます。
5-2. ログファイルの種類
| ログの種類 | 記録される内容 | 用途 |
|---|---|---|
| アクセスログ | 誰がいつどのページを見たか | アクセス分析、人気ページの特定 |
| エラーログ | エラーの発生日時と内容 | 障害調査、バグの特定 |
| アプリケーションログ | アプリの動作状況 | 処理の追跡、パフォーマンス分析 |
| セキュリティログ | ログイン試行、権限変更 | 不正アクセスの検知、監査 |
5-3. ログファイルの形式
よく見るログファイルの形式を紹介します。
Apacheアクセスログ(Webサーバー)
各部分の意味:
192.168.1.1:アクセス元のIPアドレス[15/Jan/2024:10:30:45 +0900]:アクセス日時"GET /index.html HTTP/1.1":リクエスト内容(GETでindex.htmlを要求)200:ステータスコード(200=成功、404=見つからない)1234:レスポンスのサイズ(バイト)
5-4. Pythonでログファイルを処理する
ログファイルはテキスト形式ですが、構造化されていません。
正規表現を使ってパース(解析)する必要があります。
ステップ1:ログファイルを読み込む
ステップ2:正規表現でパースする
ステップ3:全体をDataFrameに変換(完成コード)
5-5. ログファイルのメリット・デメリット
- システムの動作を詳細に追跡できる
- トラブル発生時の原因調査に役立つ
- 自動的に記録される
- 時系列で分析できる
- 構造化されていないため処理が必要
- ファイルサイズが大きくなりやすい
- フォーマットがシステムごとに異なる
- 正規表現の知識が必要
🎯 6. データソースの選び方
6-1. 用途別の選択ガイド
データソースを選ぶときの判断基準をまとめました。
| こんな場合 | おすすめ | 理由 |
|---|---|---|
| 大量データ(100万件以上)を高速検索 | データベース | インデックスで高速検索可能 |
| 他の人にデータを簡単に渡したい | CSV | どんなツールでも開ける |
| 階層構造のあるデータを保存 | JSON | 入れ子構造を自然に表現 |
| 外部サービスの最新データを取得 | API | リアルタイムで取得可能 |
| システムの動作を調査・分析 | ログファイル | 詳細な記録が残っている |
| ビジネス資料として見栄えも重要 | Excel | 書式設定・グラフが簡単 |
6-2. 実務での組み合わせ例
実際の仕事では、1つのデータソースだけを使うことはまれです。
複数のデータソースを組み合わせて、より深い分析を行います。
このコースを通じて、すべてのデータソースを適切に扱えるようになります。
複数のデータソースを組み合わせた分析ができることは、データエンジニアの重要なスキルです。
📝 STEP 2 のまとめ
- データソースとは、データが保存されている場所のこと
- データベース(RDBMS):大量データの高速検索、SQLで操作
- CSVファイル:シンプルで汎用的、データ交換に最適
- JSONファイル:階層構造を表現、API連携によく使う
- Excelファイル:ビジネスで広く使用、レポート作成に便利
- API(REST API):外部サービスからリアルタイムでデータ取得
- ログファイル:システムの動作記録、監視や分析に使用
- 実務では複数のデータソースを組み合わせて使う
データソースごとに特徴と得意分野があります。
それぞれの特性を理解し、用途に応じて適切に選択できることが大切です。
次のSTEP 3では、「PythonでのDB接続基礎」を学びます。
- psycopg2ライブラリを使ったPostgreSQL接続
- SQLiteを使った練習環境の構築
- 接続プールの基礎概念
- エラーハンドリングの実装
実際にPythonからデータベースに接続して、データを取得する方法を習得しましょう!
学習メモ
ETL・データパイプライン構築 - Step 2