python – 计算文本字段交互之间的时间

在几个月的时间里,我有一个跨应用程序的数十个用户进行文本字段交互的数据集.我正在尝试计算熊猫击键之间的平均时间.数据看起来像这样:

timestamp                before_text     after_text
1453481138188                  NULL               a
1453481138600                     a              ab 
1453481138900                    ab             abc
1453481139400                   abc            abcd
1453484000000    Enter some numbers               1
1453484000100                     1              12
1453484000600                    12             123

timestamp包含用户按下键的unix时间,before_text是用户点击键之前包含的文本字段,after_text是键击后字段的样子.

这样做的最佳方法是什么?我知道这并不像做以下事情那么简单:

(df["timestamp"] - df["timestamp"].shift()).mean()

因为这将计算两个交互之间边界上的非常大的时间差.看起来最好的方法是将每行的一些函数传递给df.groupby,以便我可以将上面的代码片段应用到每一行.如果我有这个magic_function,我可以这样做:

df.groupby(magic_function).apply(lambda x: x["timestamp"] - x["timestamp"].shift()).mean()

什么是实现magic_function的好方法,还是我认为这一切都错了?

最佳答案 我是通过计算’之前’和’之后’之间的文本差异来做到的.如果差异大于某个阈值,那么这是一个新会话.

它要求Levenshtein导入距离为ld.我通过像这样安装它:

pip install python-levenshtein

然后:

from Levenshtein import distance as ld
import pandas as pd

# taking just these two columns and transposing and back filling.
# I back fill for one reason, to fill that pesky NA with after text.
before_after = df[['before_text', 'after_text']].T.bfill()

distances = before_after.apply(lambda x: ld(*x))

# threshold should be how much distance constitutes an obvious break in sessions.
threshold = 2
magic_function = (distances > 2).cumsum()

df.groupby(magic_function) \
  .apply(lambda x: x["timestamp"] - x["timestamp"].shift()) \
  .mean()

362.4
点赞