对于一个研究项目,我们正在对话系统中记录击键。我们的日志分为3层:ext
(有关会话本身的元数据,包括用户/发言人),ext2
(会话中的每条消息)和conversation
(每个键)键入或删除的时间戳(以毫秒为单位)。
样本数据:
message
我们的目标是为每个用户,总计,每个消息和每个会话计算各种类型的打字率度量(例如,每分钟有多少个字母,还包括单词之间的停顿之类的东西)。
考虑到我们的数据分析目标和方法,keystrokes
似乎是一个合理的选择。
但是,操纵3个相关的分层数据帧(1 import pandas as pd
conversations = pd.DataFrame({'convId': [1],
'userId': [849]})
messages = pd.DataFrame({'convId': [1,1],
'msgId': [1,2],
'text': ['Hi!', 'How are you?']})
keystrokes = pd.DataFrame({'msgId': [1,1,1,2,2,2,2],
'key': ['H', 'i', '!',
'H', 'o', 'w', ' '],
'time': ['2018-07-13 13:16:56.001', '2018-07-13 13:16:56.354', '2018-07-13 13:16:56.958',
'2018-07-13 13:17:07.012', '2018-07-13 13:17:07.123', '2018-07-13 13:17:07.653', '2018-07-13 13:17:07.430']})
∋N pandas
∋NNN conversation
)孤立地产生了很多复杂性。例如,我们尝试计算写一条消息所花费的总时间(=最后的messages
-确定的keystrokes
的第一个keystroke.time
),但是从一个数据帧开始计算(keystroke.time
),然后填充另一个(message.msgId
)在矢量化命令中似乎已经非常复杂。
管理此数据集的最佳方法是什么?我最近了解了hierarchical indexes and multi-index:我们是否应将所有内容都放入一个巨大的单个数据帧中,而每个单独的keystrokes
的{{1}}和messages
数据要重复多次(一种“长”格式)?会不会引起更多的性能问题(我们正在查看成千上万的消息和数百万的按键)?还是有一种方法可以在conversations
的{{1}}中进行messages
的操作?