STEP 2:データソースの理解

📁 STEP 2: データソースの理解

様々なデータソースの特徴を理解し、適切な取り扱い方を学びます

📋 このステップで学ぶこと

  • データソースとは何か、なぜ複数の種類があるのか
  • データベース(RDBMS)の仕組みと特徴
  • ファイル形式(CSV、JSON、Excel)の違いと使い分け
  • API(REST API)の基本的な仕組みとデータ取得方法
  • ログファイルの構造と処理方法
  • 用途に応じたデータソースの選び方

📚 1. データソースとは?

1-1. データソースの基本的な意味

データソース(Data Source)とは、文字通り「データの源(みなもと)」、つまりデータが保存されている場所のことです。

STEP 1で学んだETLの「E」(Extract:抽出)では、このデータソースからデータを取り出します。データソースを正しく理解することが、ETLの第一歩です。

1-2. 身近な例え:情報を探す場所

📚 例え話:図書館で情報を探す

図書館で調べものをするとき、情報は色々な場所にありますよね。それぞれの場所には、それぞれの特徴があります。

【図書館での情報探し】 ┌─────────────────┬───────────────────────────────────────────┐ │ 情報の場所 │ 特徴 │ ├─────────────────┼───────────────────────────────────────────┤ │ 本棚の本 │ 整理されていて、目次から探しやすい │ │ │ → データベースに似ている │ ├─────────────────┼───────────────────────────────────────────┤ │ 新聞・雑誌の綴じ │ 時系列で並んでいる、シンプルな形式 │ │ │ → CSVファイルに似ている │ ├─────────────────┼───────────────────────────────────────────┤ │ 司書さんに質問 │ 聞けば答えてくれる、リアルタイム │ │ │ → APIに似ている │ ├─────────────────┼───────────────────────────────────────────┤ │ 貸出記録 │ いつ誰が何を借りたかの履歴 │ │ │ → ログファイルに似ている │ └─────────────────┴───────────────────────────────────────────┘

1-3. なぜ複数の種類があるのか?

「データソースを1つに統一すればいいのでは?」と思うかもしれません。
しかし、データの特性や使い方によって、最適な保存方法が異なるのです。

こんな要件があるとき 最適なデータソース 理由
大量のデータを高速に検索したい データベース インデックス機能で高速検索が可能
他の人にデータを簡単に渡したい CSVファイル どんなツールでも開ける汎用性
複雑な階層構造を保存したい JSONファイル 入れ子構造を自然に表現できる
外部サービスの最新データが欲しい API リアルタイムでデータを取得できる
システムの動作履歴を調べたい ログファイル 時系列で詳細な記録が残っている

1-4. データソースの分類

データソースは、データの構造化の度合いによって分類できます。

【データソースの分類】 ■ 構造化データ(表形式で整理されたデータ) │ ├─ データベース(PostgreSQL、MySQL、Oracle、SQLite) │ → 行と列で整理、SQLで操作 │ └─ 表形式ファイル(CSV、Excel) → スプレッドシートのような形式 ■ 半構造化データ(ある程度の構造があるデータ) │ ├─ JSONファイル │ → キーと値のペア、階層構造OK │ ├─ XMLファイル │ → タグで構造化 │ └─ ログファイル → 一定のフォーマットはあるが、解析が必要 ■ 非構造化データ(決まった形式がないデータ) │ ├─ テキストファイル(メモ、文章) │ ├─ 画像・動画ファイル │ └─ PDFファイル ■ API(外部サービスからのデータ取得) │ ├─ REST API(最も一般的) │ └─ GraphQL(新しい方式)
💡 このステップで重点的に学ぶ4つのデータソース

ETLで最もよく使われる4つのデータソースを詳しく学びます:

  1. データベース(RDBMS):企業の基幹システムで使われる
  2. ファイル(CSV、JSON、Excel):データの受け渡しでよく使う
  3. API(REST API):外部サービスとの連携
  4. ログファイル:システムの動作記録

🗄️ 2. データベース(RDBMS)

2-1. データベースとは何か?

データベースとは、大量のデータを整理して保存し、必要なときに高速に取り出せるソフトウェアです。

特にRDBMS(Relational Database Management System:リレーショナルデータベース管理システム)は、データを表形式(テーブル)で管理します。

📊 例え話:超パワフルなExcel

データベースは「超パワフルなExcel」と考えると分かりやすいです。

【Excelとデータベースの比較】 ┌────────────────┬─────────────────────┬─────────────────────┐ │ 比較項目 │ Excel │ データベース │ ├────────────────┼─────────────────────┼─────────────────────┤ │ データ量 │ 数万行が限界 │ 数億行でも対応可能 │ ├────────────────┼─────────────────────┼─────────────────────┤ │ 同時アクセス │ 1人で作業が基本 │ 100人同時アクセスOK │ ├────────────────┼─────────────────────┼─────────────────────┤ │ 検索速度 │ 遅い │ インデックスで高速 │ ├────────────────┼─────────────────────┼─────────────────────┤ │ データの整合性 │ 間違いが入りやすい │ 制約で防止できる │ ├────────────────┼─────────────────────┼─────────────────────┤ │ 操作方法 │ マウスでクリック │ SQLという言語で操作 │ └────────────────┴─────────────────────┴─────────────────────┘ 企業の売上データ、顧客データ、在庫データなど、 重要なデータのほとんどはデータベースに保存されています。

2-2. 代表的なデータベース

データベースにはいくつかの種類があります。それぞれ特徴が異なります。

🐘 PostgreSQL(ポストグレスキューエル)

オープンソースで無料。高機能で信頼性が高い。データエンジニアに人気。このコースでも使用します。

🐬 MySQL(マイエスキューエル)

シンプルで使いやすい。Web開発で広く使われている。WordPressなどのCMSでも利用。

🏢 Oracle Database

大企業向け。高性能だが高価。銀行、保険会社などの基幹システムで使用。

🪶 SQLite(エスキューライト)

軽量でファイルベース。インストール不要。スマホアプリや小規模システムに最適。

2-3. データベースの構造を理解する

データベースは階層構造になっています。上から順に見ていきましょう。

【データベースの階層構造】 データベース(Database) │ └─ スキーマ(Schema)※PostgreSQLなどで使用 │ └─ テーブル(Table) │ ├─ カラム(Column)= 列(項目の種類) │ └─ レコード(Record)= 行(1件分のデータ) 【用語の説明】 ・データベース:データの大きな入れ物。1つの会社に1つが一般的 ・スキーマ :データベース内を分けるための仕切り ・テーブル :Excelのシートのようなもの ・カラム :列(例:「名前」「年齢」「住所」という項目) ・レコード :行(1人分、1件分のデータ)

具体例:ECサイトのデータベース

【ECサイトのデータベース構成例】 ec_database(データベース) │ └─ public(スキーマ) │ ├─ users(ユーザーテーブル) │ │ │ ├─ user_id(ユーザーID) │ ├─ name(名前) │ ├─ email(メールアドレス) │ └─ created_at(登録日時) │ ├─ products(商品テーブル) │ │ │ ├─ product_id(商品ID) │ ├─ product_name(商品名) │ ├─ price(価格) │ └─ stock(在庫数) │ └─ orders(注文テーブル) │ ├─ order_id(注文ID) ├─ user_id(どのユーザーか)→ usersテーブルと紐付け ├─ product_id(どの商品か)→ productsテーブルと紐付け ├─ quantity(数量) └─ order_date(注文日時)

usersテーブルの中身を表形式で見てみましょう。

user_id name email 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のシート
カラム = Excelの列見出し(A列、B列…ではなく、名前付き)
レコード = Excelの1行分のデータ

2-4. SQLでデータを取得する

データベースからデータを取得するには、SQL(Structured Query Language)という言語を使います。
SQLは「データベースに話しかける言葉」だと考えてください。

① 基本:すべてのデータを取得する

SELECT * FROM users;
📝 SQLの読み方

このSQLを日本語に訳すと、こうなります:

  • SELECT:「選んでください」(取得する命令)
  • *:「すべての列を」(ワイルドカード = 全部という意味)
  • FROM users:「usersテーブルから」

つまり「usersテーブルから、すべての列を、選んでください」という意味です。

② 必要な列だけを取得する

SELECT name, email FROM users;
📝 SQLの読み方
  • SELECT name, email:「name列とemail列を選んでください」
  • FROM users:「usersテーブルから」

ポイント:*の代わりに列名を指定すると、必要な列だけを取得できます。
すべての列を取得するよりも効率的です。

③ 条件を指定してデータを絞り込む

SELECT * FROM orders WHERE order_date >= ‘2024-01-01’;
📝 SQLの読み方
  • SELECT *:「すべての列を選んでください」
  • FROM orders:「ordersテーブルから」
  • WHERE order_date >= '2024-01-01':「order_dateが2024年1月1日以降のものだけ」

ポイント:WHERE句を使うと、条件に合うデータだけを取得できます。
ETLでは「増分抽出」(前回以降のデータだけ取得)でよく使います。

④ 複数のテーブルを結合する

実際の分析では、複数のテーブルのデータを組み合わせることがよくあります。

SELECT o.order_id, u.name, p.product_name, o.quantity, o.order_date FROM orders o JOIN users u ON o.user_id = u.user_id JOIN products p ON o.product_id = p.product_id;
📝 SQLの読み方(複雑なので順を追って)

① 取得する列を指定

  • o.order_id:ordersテーブルの注文ID
  • u.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とは?

CSV(Comma-Separated Values)は、カンマ(,)で区切られたテキスト形式のデータです。
「カンマ区切り値」という意味で、最もシンプルで広く使われているデータ形式です。

CSVファイルの中身

CSVファイルをテキストエディタで開くと、こんな内容になっています:

product_id,product_name,price,stock 1,ノートPC,89800,5 2,マウス,1980,20 3,キーボード,4500,15 4,モニター,35000,8
📝 CSVの構造
  • 1行目:ヘッダー行(列の名前)
  • 2行目以降:データ行(実際のデータ)
  • カンマ(,):各項目の区切り
  • 改行:各レコード(行)の区切り

PythonでCSVを読み込む

Pythonではpandasライブラリを使ってCSVを簡単に読み込めます。

# pandasライブラリを読み込む # pandasはデータ分析に必須のライブラリで、表形式データを扱うのに最適 import pandas as pd # CSVファイルを読み込んで、DataFrameという表形式に変換 # dfはDataFrameの略で、変数名としてよく使われる df = pd.read_csv(‘products.csv’) # 読み込んだデータの先頭5行を表示 # head()は先頭のデータを確認するのに便利 print(df.head())
📝 コードの詳細解説

① import pandas as pd

  • import:ライブラリを読み込む命令
  • pandas:データ分析用のライブラリ
  • as pd:「pdという短い名前で使う」という意味

② pd.read_csv(‘ファイル名’)

  • pd.read_csv():CSVファイルを読み込む関数
  • 読み込んだデータはDataFrameという表形式になる

③ df.head()

  • DataFrameの先頭5行を返す(引数で行数を指定可能)
  • 大量のデータを確認する前に、まず少量を見るのがベストプラクティス

日本語の文字化けに対応する

⚠️ 日本語CSVの文字化け問題

日本語を含むCSVファイルは、文字コードの違いで文字化けすることがあります。
特にWindowsで作成されたファイルは注意が必要です。

# UTF-8で読み込む(Linuxや最近のファイルはこちら) df = pd.read_csv(‘data.csv’, encoding=’utf-8′) # Shift-JISで読み込む(Windowsで作成された古いファイル) df = pd.read_csv(‘data.csv’, encoding=’shift_jis’) # CP932で読み込む(Windows日本語環境の標準) df = pd.read_csv(‘data.csv’, encoding=’cp932′)
📝 文字コードの選び方
  • まずUTF-8を試す(現在の標準)
  • 文字化けしたらShift-JISまたはCP932を試す
  • エラーが出たらencoding='utf-8-sig'も試してみる

CSVのメリット・デメリット

✅ CSVのメリット
  • とてもシンプルで扱いやすい
  • どんなツールでも開ける
  • ファイルサイズが小さい
  • 人間が読める形式
⚠️ CSVのデメリット
  • データ型情報がない
  • 複雑な構造は表現できない
  • 文字化けが起きやすい
  • カンマを含むデータの扱いが難しい

3-3. JSONファイル

📊 JSONとは?

JSON(JavaScript Object Notation)は、キーと値のペアでデータを表現する形式です。
Web APIでのデータ受け渡しで最もよく使われています。

JSONファイルの中身

{ “user_id”: 1, “name”: “山田太郎”, “email”: “yamada@example.com”, “orders”: [ { “order_id”: 101, “product”: “ノートPC”, “price”: 89800 }, { “order_id”: 102, “product”: “マウス”, “price”: 1980 } ] }
📝 JSONの構造
  • { }:オブジェクト(複数のキーと値のペアを囲む)
  • "キー": 値:キーと値のペア(キーは必ずダブルクォート)
  • [ ]:配列(複数の値のリスト)
  • 入れ子構造が可能:ordersの中にさらにオブジェクトがある

CSVとJSONの構造の違い

【CSVの場合】表形式しか表現できない user_id,name,order_id,product 1,山田太郎,101,ノートPC 1,山田太郎,102,マウス ← 山田太郎が重複してしまう 【JSONの場合】階層構造を自然に表現できる { “user_id”: 1, “name”: “山田太郎”, “orders”: [ ← 1人のユーザーに複数の注文を紐付け {“order_id”: 101, “product”: “ノートPC”}, {“order_id”: 102, “product”: “マウス”} ] }

PythonでJSONを読み込む

方法1:pandasで読み込む(単純な構造の場合)

# pandasでJSONを読み込む import pandas as pd # JSONファイルをDataFrameに変換 df = pd.read_json(‘data.json’) print(df)

方法2:標準ライブラリで読み込む(複雑な構造の場合)

# jsonは Python標準ライブラリなので追加インストール不要 import json # ファイルを開いてJSONを読み込む # ‘r’ は読み取りモード、encoding=’utf-8′ で文字化けを防ぐ with open(‘user.json’, ‘r’, encoding=’utf-8′) as f: data = json.load(f) # 読み込んだデータはPythonの辞書型になる print(data[‘name’]) # 山田太郎 print(data[‘orders’][0]) # 最初の注文データ print(data[‘orders’][0][‘product’]) # ノートPC
📝 コードの詳細解説

① 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のメリット・デメリット

✅ JSONのメリット
  • 階層構造を自然に表現できる
  • Web APIと相性が良い
  • 人間が読みやすい
  • ほとんどの言語でサポート
⚠️ JSONのデメリット
  • CSVよりファイルサイズが大きい
  • 単純な表形式データには冗長
  • Excelで直接開けない

3-4. Excelファイル

📊 Excelファイルとは?

Microsoft Excelで作成される.xlsx(または.xls)形式のファイルです。
ビジネスの現場で最も多く使われているデータ形式です。

PythonでExcelを読み込む

# pandasでExcelを読み込む import pandas as pd # 基本的な読み込み(最初のシートを読み込む) df = pd.read_excel(‘report.xlsx’) # 特定のシートを指定して読み込む df = pd.read_excel(‘report.xlsx’, sheet_name=’売上データ’) # すべてのシートをまとめて読み込む # 結果は辞書型で、キーがシート名、値がDataFrame all_sheets = pd.read_excel(‘report.xlsx’, sheet_name=None) # 特定のシートにアクセス sales_df = all_sheets[‘売上データ’] customer_df = all_sheets[‘顧客データ’]
📝 コードの詳細解説

① pd.read_excel(‘ファイル名’)

  • Excelファイルを読み込む関数
  • 指定がなければ最初のシートを読み込む

② sheet_name=’シート名’

  • 特定のシートを指定して読み込む
  • シート番号でも指定可能(sheet_name=0で最初のシート)

③ sheet_name=None

  • すべてのシートを辞書形式で読み込む
  • 複数シートを扱う場合に便利
⚠️ Excelを扱う際の注意点
  • openpyxlライブラリが必要(pip install openpyxl
  • 古い.xls形式を読むにはxlrdが必要
  • セル結合や複雑な書式は正しく読めないことがある
  • 大きなファイルは読み込みに時間がかかる

Excelのメリット・デメリット

✅ Excelのメリット
  • ビジネスで広く使われている
  • 複数シートを1ファイルに持てる
  • 書式(色、罫線)も保存できる
  • 非エンジニアでも扱える
⚠️ Excelのデメリット
  • ファイルサイズが大きい
  • 約100万行が上限
  • バージョン間の互換性問題
  • プログラムでの処理がやや遅い

3-5. ファイル形式の比較まとめ

比較項目 CSV JSON Excel
構造 表形式のみ 階層構造OK 表形式+複数シート
ファイルサイズ 小さい やや大きい 大きい
開きやすさ どこでも開ける 専用ツール推奨 Excel必要
データ型 保持されない ある程度保持 保持される
向いている用途 データ交換、大量データ API連携、設定ファイル ビジネス資料、レポート

🌐 4. API(REST API)

4-1. APIとは何か?

API(Application Programming Interface)とは、プログラムから他のサービスにアクセスするための窓口です。

🍜 例え話:レストランで注文する

レストランで食事をするとき、あなたは厨房に直接入って料理を作りませんよね。
ウェイターを通じて注文し、出来上がった料理を受け取ります。

【レストランとAPIの対応】 あなた → プログラム(データが欲しい側) メニュー → APIドキュメント(何が注文できるか) ウェイター → API(注文を受け付ける窓口) 厨房 → サーバー(データを持っている場所) 料理 → データ(レスポンス) 【流れ】 ① あなた:「Aランチをください」(リクエスト) ② ウェイター:厨房に注文を伝える ③ 厨房:料理を作る ④ ウェイター:「お待たせしました」(レスポンス) ⑤ あなた:料理を受け取る APIも同じ流れで、「このデータをください」とリクエストすると、 サーバーがデータを返してくれます。

4-2. REST APIの基本

REST APIは、HTTP(Webの通信規格)を使ってデータをやり取りするAPIの形式です。
現在、最も広く使われているAPI形式です。

【REST APIの通信の流れ】 ┌──────────────────┐ ┌──────────────────┐ │ あなたの │ │ サーバー │ │ プログラム │ │ (データを持つ) │ │ (クライアント) │ │ │ └────────┬─────────┘ └────────┬─────────┘ │ │ │ ① リクエストを送信 │ │ GET https://api.example.com/users │ │ ─────────────────────────────→ │ │ │ │ │ ② データを │ │ 準備する │ │ │ ③ レスポンスを返す │ │ ステータス: 200 OK │ │ データ: {“users”: […]} │ │ ←───────────────────────────── │ │ │

4-3. HTTPメソッド(4つの操作)

REST APIでは、何をしたいかによって使うメソッド(方法)が異なります。
ETLでは主にGET(取得)を使います。

メソッド 意味 使用例 ETLでの使用頻度
GET データを取得する ユーザー一覧を取得、売上データを取得 ★★★(非常に多い)
POST データを作成する 新規ユーザー登録、注文を作成 ★☆☆(たまに使う)
PUT データを更新する ユーザー情報を変更 ★☆☆(まれに使う)
DELETE データを削除する ユーザーを削除 ☆☆☆(ほぼ使わない)

4-4. PythonでAPIを呼び出す

Pythonではrequestsライブラリを使ってAPIを呼び出します。

① 基本的なGETリクエスト

# requestsライブラリを読み込む # APIを呼び出すための定番ライブラリ import requests # GETリクエストを送信 # 指定したURLにアクセスして、データを取得する response = requests.get(‘https://api.example.com/users’) # ステータスコードを確認(200なら成功) print(response.status_code) # レスポンスをJSON形式で取得 # PythonのDictionary(辞書型)として扱える data = response.json() print(data)
📝 コードの詳細解説

① 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キーをヘッダーに設定 # headers(ヘッダー)はリクエストに付加する追加情報 headers = { ‘Authorization’: ‘Bearer YOUR_API_KEY_HERE’ } # ヘッダー付きでリクエストを送信 response = requests.get( ‘https://api.example.com/data’, headers=headers ) # 成功したかチェック if response.status_code == 200: data = response.json() print(“データ取得成功!”) else: print(f”エラー: {response.status_code}”)
📝 認証方式の種類
  • APIキー:サービスから発行される文字列をヘッダーに含める
  • Bearer Token'Authorization': 'Bearer トークン'形式
  • Basic認証:ユーザー名とパスワードを使う(古い方式)

注意:APIキーやトークンは秘密情報です。
コードに直接書かず、環境変数などで管理しましょう(後のステップで学びます)。

③ パラメータを指定してデータを絞り込む

# パラメータを辞書で定義 # URLの末尾に「?start_date=2024-01-01&end_date=…」と追加される params = { ‘start_date’: ‘2024-01-01’, # 開始日 ‘end_date’: ‘2024-01-31’, # 終了日 ‘limit’: 100 # 取得件数の上限 } # パラメータ付きでリクエストを送信 response = requests.get( ‘https://api.example.com/sales’, params=params ) # 実際に送信されるURL # https://api.example.com/sales?start_date=2024-01-01&end_date=2024-01-31&limit=100
📝 パラメータの使い方

パラメータを使うと、必要なデータだけを効率的に取得できます。
よく使われるパラメータ:

  • start_dateend_date:日付範囲の指定
  • limit:取得件数の上限
  • offsetまたはpage:ページネーション(次のページ)
  • sort:並び順の指定

④ 完成コード:API呼び出しの実践例

# ===== API呼び出しの完成コード ===== import requests def fetch_sales_data(api_key, start_date, end_date): “”” 売上データをAPIから取得する関数 Parameters: api_key: APIキー start_date: 開始日(YYYY-MM-DD形式) end_date: 終了日(YYYY-MM-DD形式) Returns: 取得したデータ(辞書型)または None(エラー時) “”” # APIのURL url = ‘https://api.example.com/sales’ # ヘッダー(認証情報) headers = { ‘Authorization’: f’Bearer {api_key}’ } # パラメータ(検索条件) params = { ‘start_date’: start_date, ‘end_date’: end_date, ‘limit’: 1000 } # リクエストを送信 response = requests.get(url, headers=headers, params=params) # ステータスコードをチェック if response.status_code == 200: return response.json() else: print(f”エラー: {response.status_code}”) print(f”詳細: {response.text}”) return None # 使用例 api_key = ‘your_api_key_here’ data = fetch_sales_data(api_key, ‘2024-01-01’, ‘2024-01-31’) if data: print(f”取得件数: {len(data[‘sales’])}”)

4-5. よく使われるAPI

📊 Google Analytics API

Webサイトのアクセスデータを取得。ページビュー、ユーザー数、滞在時間などを分析できます。

💰 Stripe API / PayPal API

決済データを取得。売上、返金、顧客の支払い情報などを分析できます。

🏢 Salesforce API

CRM(顧客管理)データを取得。営業活動、商談情報などを分析できます。

📧 SendGrid / Mailchimp API

メール配信データを取得。開封率、クリック率などのマーケティング分析に使えます。

4-6. APIのメリット・デメリット

✅ APIのメリット
  • 外部サービスのデータをリアルタイムで取得
  • データを自動更新できる
  • 自社でデータ管理不要
  • プログラムで自動化しやすい
⚠️ 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 – – [15/Jan/2024:10:30:45 +0900] “GET /index.html HTTP/1.1” 200 1234 192.168.1.2 – – [15/Jan/2024:10:31:12 +0900] “POST /login HTTP/1.1” 200 567 192.168.1.3 – – [15/Jan/2024:10:32:03 +0900] “GET /products/123 HTTP/1.1” 404 0
📝 ログの読み方

各部分の意味:

  • 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:ログファイルを読み込む

# ファイルを開いてすべての行を読み込む with open(‘access.log’, ‘r’) as f: logs = f.readlines() # 何行あるか確認 print(f”ログの行数: {len(logs)}”) print(f”最初の行: {logs[0]}”)

ステップ2:正規表現でパースする

# 正規表現ライブラリを読み込む import re # 正規表現パターンを定義 # \S+ は「空白以外の文字が1回以上」という意味 # .*? は「任意の文字(最短マッチ)」という意味 # (\d+) は「数字を1回以上」という意味で、( )で囲むとグループ化される pattern = r'(\S+) .* \[(.*?)\] “(.*?)” (\d+) (\d+)’ # テスト:最初の行をパースしてみる line = ‘192.168.1.1 – – [15/Jan/2024:10:30:45 +0900] “GET /index.html HTTP/1.1″ 200 1234’ match = re.match(pattern, line) if match: ip, datetime, request, status, size = match.groups() print(f”IP: {ip}”) print(f”日時: {datetime}”) print(f”リクエスト: {request}”) print(f”ステータス: {status}”) print(f”サイズ: {size}”)

ステップ3:全体をDataFrameに変換(完成コード)

# ===== ログファイル処理の完成コード ===== import re import pandas as pd def parse_access_log(filepath): “”” ApacheアクセスログをパースしてDataFrameに変換する Parameters: filepath: ログファイルのパス Returns: pandas DataFrame “”” # 正規表現パターン pattern = r'(\S+) .* \[(.*?)\] “(.*?)” (\d+) (\d+)’ # ログファイルを読み込む with open(filepath, ‘r’) as f: logs = f.readlines() # 各行を解析してデータを抽出 data = [] for log in logs: match = re.match(pattern, log) if match: ip, datetime_str, request, status, size = match.groups() data.append({ ‘ip’: ip, ‘datetime’: datetime_str, ‘request’: request, ‘status’: int(status), ‘size’: int(size) }) # DataFrameに変換 df = pd.DataFrame(data) return df # 使用例 df = parse_access_log(‘access.log’) print(df.head()) # 分析例:ステータスコードごとの件数 print(df[‘status’].value_counts())

5-5. ログファイルのメリット・デメリット

✅ ログファイルのメリット
  • システムの動作を詳細に追跡できる
  • トラブル発生時の原因調査に役立つ
  • 自動的に記録される
  • 時系列で分析できる
⚠️ ログファイルのデメリット
  • 構造化されていないため処理が必要
  • ファイルサイズが大きくなりやすい
  • フォーマットがシステムごとに異なる
  • 正規表現の知識が必要

🎯 6. データソースの選び方

6-1. 用途別の選択ガイド

データソースを選ぶときの判断基準をまとめました。

こんな場合 おすすめ 理由
大量データ(100万件以上)を高速検索 データベース インデックスで高速検索可能
他の人にデータを簡単に渡したい CSV どんなツールでも開ける
階層構造のあるデータを保存 JSON 入れ子構造を自然に表現
外部サービスの最新データを取得 API リアルタイムで取得可能
システムの動作を調査・分析 ログファイル 詳細な記録が残っている
ビジネス資料として見栄えも重要 Excel 書式設定・グラフが簡単

6-2. 実務での組み合わせ例

💡 実務では複数のデータソースを組み合わせて使う

実際の仕事では、1つのデータソースだけを使うことはまれです。
複数のデータソースを組み合わせて、より深い分析を行います。

【例:天気と売上の相関分析】 ① データベースから売上データを取得 SELECT order_date, SUM(amount) as total_sales FROM orders GROUP BY order_date ② 天気APIから天気データを取得 response = requests.get(‘https://api.weather.com/history’) ③ CSVで顧客リストを受け取る df_customers = pd.read_csv(‘customers.csv’) ④ すべてのデータを統合して分析 → 「雨の日は売上が10%減少する傾向がある」 → 「晴れの日は特定の商品カテゴリが伸びる」
✅ このコースで身につくスキル

このコースを通じて、すべてのデータソースを適切に扱えるようになります。
複数のデータソースを組み合わせた分析ができることは、データエンジニアの重要なスキルです。

📝 STEP 2 のまとめ

✅ このステップで学んだこと
  • データソースとは、データが保存されている場所のこと
  • データベース(RDBMS):大量データの高速検索、SQLで操作
  • CSVファイル:シンプルで汎用的、データ交換に最適
  • JSONファイル:階層構造を表現、API連携によく使う
  • Excelファイル:ビジネスで広く使用、レポート作成に便利
  • API(REST API):外部サービスからリアルタイムでデータ取得
  • ログファイル:システムの動作記録、監視や分析に使用
  • 実務では複数のデータソースを組み合わせて使う
💡 重要ポイント

データソースごとに特徴と得意分野があります。
それぞれの特性を理解し、用途に応じて適切に選択できることが大切です。

🎯 次のステップの予告

次のSTEP 3では、「PythonでのDB接続基礎」を学びます。

  • psycopg2ライブラリを使ったPostgreSQL接続
  • SQLiteを使った練習環境の構築
  • 接続プールの基礎概念
  • エラーハンドリングの実装

実際にPythonからデータベースに接続して、データを取得する方法を習得しましょう!

📝

学習メモ

ETL・データパイプライン構築 - Step 2

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE