从日志分析到用户行为预测:用Python实战泊松过程与点过程建模
当服务器突然出现异常流量高峰,或是电商平台在促销期间面临订单激增时,能否提前预测这些离散事件的发生规律?点过程建模正是解决这类问题的数学利器。本文将带你用Python从零实现事件序列分析,不纠缠数学公式,而是聚焦如何用代码解决实际问题。
1. 事件数据预处理:从原始日志到结构化序列
原始事件数据往往像一团乱麻。以Nginx访问日志为例,每条记录包含时间戳、请求路径和状态码,但我们需要将其转换为建模所需的"事件发生时间序列"。
python复制import pandas as pd
from datetime import datetime
def parse_log_to_events(log_file, event_filter=None):
"""将日志文件解析为时间戳列表"""
logs = pd.read_csv(
log_file,
sep=r'\s(?=(?:[^"]*"[^"]*")*[^"]*$)',
engine='python',
names=['ip', 'time', 'request', 'status', 'size', 'referer', 'agent']
)
# 转换时间格式 例如:[21/Nov/2023:14:30:22 +0800] -> datetime
logs['timestamp'] = logs['time'].apply(
lambda x: datetime.strptime(x.split()[0], '[%d/%b/%Y:%H:%M:%S'))
# 应用事件筛选条件
if event_filter:
logs = logs[logs['status'].isin(event_filter.get('status', [])) |
logs['request'].str.contains(event_filter.get('pattern', ''))]
return logs['timest
