微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将聊天数据划分为会话

如何解决将聊天数据划分为会话

我在 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_timeend_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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?