Python | 実際のログ解析フロー例(前処理は bisect、分析は pandas)

Python Python
スポンサーリンク

実務では「まず軽量に範囲を絞る → その後詳細分析」という流れがよく使われます。ここでは bisect で前処理し、pandas で分析する一連のフローを例示します。


ステップ1: 前処理(bisect で範囲抽出)

まず大量ログから「対象時間帯」だけを効率的に切り出します。

import bisect
from datetime import datetime

# ソート済みのログタイムスタンプ(例)
logs = [
    datetime(2025, 11, 29, 9, 0),
    datetime(2025, 11, 29, 9, 30),
    datetime(2025, 11, 29, 10, 0),
    datetime(2025, 11, 29, 10, 30),
    datetime(2025, 11, 29, 11, 0),
    datetime(2025, 11, 29, 11, 30),
]

# 範囲指定(10:00〜11:00)
start_time = datetime(2025, 11, 29, 10, 0)
end_time   = datetime(2025, 11, 29, 11, 0)

# bisectでインデックスを取得
s = bisect.bisect_left(logs, start_time)
e = bisect.bisect_right(logs, end_time)

# 対象範囲のログを抽出
filtered_logs = logs[s:e]
print(filtered_logs)
Python

👉 この段階で「対象時間帯のログ」だけを軽量に取り出せる。
👉 大量ログでもメモリに収まる部分だけを pandas に渡せる。


ステップ2: 分析(pandas で詳細処理)

抽出したログにイベント情報やユーザー情報を紐付けて、複雑な条件で分析します。

import pandas as pd

# pandas DataFrame に変換(例: イベント付きログ)
df = pd.DataFrame({
    "timestamp": filtered_logs,
    "event": ["error", "check", "end"],  # 仮のイベントデータ
    "user": ["alice", "bob", "alice"]
})

# 範囲内の ERROR イベントを抽出
errors = df[df["event"] == "error"]

# ユーザー別に件数を集計
summary = errors.groupby("user").size().reset_index(name="count")

print(summary)
Python

実行結果例

    user  count
0  alice      1

👉 pandas で「範囲内の ERROR をユーザー別に集計」といった複雑な分析が簡単にできる。


フローのメリット

  • bisect: 軽量で高速 → 大量ログから対象範囲を効率的に切り出す
  • pandas: 強力な分析機能 → 条件抽出・集計・統計処理を直感的に書ける
  • 組み合わせ: 「前処理は軽量、分析は強力」という役割分担で効率的にログ解析が可能

まとめ

  • リアルタイム処理や軽量抽出 → bisect
  • 詳細分析や複雑条件 → pandas
  • 実務では「bisect で対象範囲を絞り、pandas で分析」という二段構えが最適。

Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました