如何解决将聊天数据划分为会话
我在 csv 中有过去一年与客户聊天的数据。这一切都是按照他们的时间戳顺序排列的。我想将每个客户分成多个会话,以便我可以分析单独的聊天会话。
Timestamp Customer Message
2019-06-22 04:37:32 x Hello,I price for 10 pens?
2019-06-22 04:38:11 y whats the price of a new book?
2019-06-22 04:38:23 x can you place an order for 9 only
2019-06-22 05:12:10 y Ok I want to order 1
2019-06-22 05:17:45 z Hello
2019-06-22 06:31:12 x Please cancel my order
2019-06-23 12:13:02 y I want to place an order for 100 pencils
我想以一种可以根据某个时间范围然后根据客户对它们进行分组的方式来分割这些数据。如果还有更好的方法,将其划分为聊天会话,我会非常高兴。谢谢。
解决方法
一个起点是在一个时间段(比如 60 分钟)内对您的数据集进行分组,count
每个客户在时间范围内有多少消息,以及 list()
每个客户的所有消息:
import pandas as pd
from datetime import datetime
# Convert to timestamp if needed
df['Timestamp'] = pd.to_datetime(df['Timestamp'],errors='coerce')
# Perform the operation
res = df.groupby([pd.Grouper(key='Timestamp',freq='60min'),'Customer']).agg({'Message': lambda m: m.tolist(),'Customer':'count'})
# Rename the columns
res.rename(columns = {'Customer':'cust_msgs_per_hour'},inplace=True)
以上会给你:
res.sort_values('Customer')
Out[264]:
Message cust_msgs_per_hour
Timestamp Customer
2019-06-22 04:00:00 x [Hello,I price for 10 pens?,can you place an... 2
2019-06-22 06:00:00 x [Please cancel my order] 1
2019-06-22 04:00:00 y [whats the price of a new book?] 1
2019-06-22 05:00:00 y [Ok I want to order 1] 1
2019-06-23 12:00:00 y [I want to place an order for 100 pencils] 1
2019-06-22 05:00:00 z [Hello] 1
,
Yoy 可以使用 pandas.DataFrame.groupby
。通过这种方式,您的数据集按所需的列分组。即:
grouped_data = df.groupby(by='Customer')
然后在分组的对象上应用一些函数。
查看文档以获取更多资源: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html
,要查看特定时间范围和特定客户的条目,首先为您的会话定义 start_time 和 end_time。还要指定您要查看的客户:
#Example
start_time = pd.to_datetime('2019-06-22 04:37:32')
end_time = pd.to_datetime('2019-06-23 12:13:02 ')
customer_to_view = 'x'
然后使用以下代码行查看指定会话期间来自指定客户的消息:
df[(df['Timestamp'] > start_time) & (df['Timestamp'] < end_time) ][df['Customer'] == customer_to_view]
以上示例的输出为:
Timestamp Customer Message
2 2019-06-22 04:38:23 x can you place an order for 9 only
5 2019-06-22 06:31:12 x Please cancel my order
注意:记住将您的“时间戳”列转换为日期时间对象以使其工作:这可以使用以下代码行完成:
df['Timestamp'] = pd.to_datetime(df['Timestamp'])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。