作者:小啊小二饼(iconfont)

🌑

Spaghetti.ink

Appreciation, Modesty, Persistence


【毕设专栏-2】数据预处理-数据清洗

研究背景

预处理目的

输入:读取并初步处理后的数据

raw_data
输出:用户会话

预处理步骤

  1. 数据清洗
    • 删除HTTP响应状态不成功的记录,即保留2XX状态的响应
    • 删除请求方法不为GET的记录
    • 删除爬虫记录。爬虫对应的用户代理往往带有robot、spider关键字
    • 删除无关的资源访问记录,如多媒体文件.png, .jpg等以及Js, CSS文件
    • 删除无关字段,减少资源消耗
  2. 用户识别
    用户识别时将日志数据根据不同用户进行离散,挖掘独立用户的访问路径和行为特征,研究将采用启发式规则来进行用户识别,步骤如下
    • 比较IP字段,IP字段不同则不是同一个用户
    • 若IP字段相同,则比较代理字段,代理字段不同则用户不同
    • 以上条件都满足时,参照网站拓扑结构,若不能当前页不能直接跳转则用户不同
  3. 会话识别
    一般的,我们将每次访问用一个二元组来表示,一个用户从开始访问服务器到结束访问服务器期间进行的连续访问页面的有限集合就叫做一次会话。
    如果连续的两个请求之间的时间间隔超过25.5分钟,则不视为一次会话(可能出现了中断行为),电商行业将时间间隔设置为30分钟。在处理中,我们也将阈值设置为30分钟。同时,我们将删除整体会话时间较小的访问,避免爬虫等无关访问数据的影响。
  4. 路径补充
    • 根据网站的拓扑结构,解决因为网站缓存原因导致的路径丢失问题。

数据清洗

import pandas as pd;
import os;

# 加载数据
logPath = os.path.join(os.getcwd(), 'log', 'logs');
logs = pd.read_pickle(logPath);

# 筛选GET请求
logs = logs[logs['Method']=='GET']

# 筛选响应2XX的记录
logs = logs[logs['Status'].str.match(r'2\d{2}')]

# 删除资源文件访问记录
logs.drop(logs[logs['Url'].str.contains('.gif|.png|.jpg|.js|.css')].index, inplace=True)

# 提取Url中的路径
def getPath(data):
    return data.split('?')[0];

# 提取Url路径
logs['Url'] = logs['Url'].map(getPath)

# 提取Reference路径
logs['Reference'] = logs['Reference'].map(getPath)

# 重新排序
logs.reset_index(drop=True, inplace=True);

# 数据清洗步骤结束了,我们将最终的结果输出
outputPath = os.path.join(os.getcwd(), 'log', 'logs_handled');
logs.to_pickle(outputPath);

下一个阶段,我们要根据清理后的访问记录生成网络的拓扑结构并且执行用户识别以及会话识别步骤。

本文由 Frank采用 署名 4.0 国际 (CC BY 4.0)许可

, — 2021年3月26日

本文总阅读量

数据分析

本站总访问量