顾名思义,用户识别,就是将每条记录按照用户分组。我们将一组有顺序的,同一个用户的访问序列视为一次会话。根据需要,我们将相同IP以及代理的记录视为一个用户的唯一标识。
import pandas as pd;
import os;
# 读取文件
outputPath = os.path.join(os.getcwd(), 'log', 'logs_handled');
logs = pd.read_pickle(outputPath);
# 根据IP和Proxy(User-Agent)字段进行分组
user_groups = logs.groupby(['IP', 'Proxy'])
通过Pandas的API,我们可以轻松的根据指定字段进行分组,返回一个groupby
对象,一下为其常用的方法
# 返回所有分组
user_groups.groups
# 返回所有分组的索引
user_groups.indices
现在我们就取一个索引看看我们的分组是怎样的
user_groups.get_group(('1.1.18.22', 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'))
user_id = 0;
def labelUserId(df):
global user_id;
user_id += 1;
df['Uid'] = user_id;
return df;
new_groups = user_groups.apply(labelUserId);
apply
方法即可给每一个记录都打上Uid
标签。groupby
对象的apply
方法,我们通过参数获取到的变量是一个dataframe
。dataframe
新增了一列。当然你也可以通过调用每一个datafram
的apply
方法来给每一条记录新增一个字段,但是显然这么做的效率要比直接给一个块(dataframe
)新增一列低的多。user_id = 0;
def labelRow(row):
global user_id;
row['Uid'] = user_id;
return row;
def labelUserId(df):
global user_id;
user_id += 1;
return df.apply(labelRow, axis=1);
new_groups = user_groups.apply(labelUserId);
本文由 Frank采用 署名 4.0 国际 (CC BY 4.0)许可
Made with ❤ and at Hangzhou.