分析top sales的数据
This commit is contained in:
parent
25fa9d0a8d
commit
68c9a4ea20
|
|
@ -0,0 +1,175 @@
|
|||
import pandas as pd
|
||||
from AgentProxy import AgentProxy
|
||||
from datetime import datetime # Add this import
|
||||
|
||||
# Here you need to replace the API Key and API Secret with your,I provide a test key and secret here
|
||||
api_key = '25bda2c39c0f8ca0'
|
||||
api_secret = 'e0008b9b9727cb8ceea5a132dbe62495'
|
||||
assistant_id = "66bb09a84673b57506fe7bbd"
|
||||
agent = AgentProxy(assistant_id, api_key, api_secret)
|
||||
|
||||
# Prospecting
|
||||
# Evaluation
|
||||
# Qualification
|
||||
# Bidding / Negotiating
|
||||
# Contract Review
|
||||
# Closed Won
|
||||
# Cancel
|
||||
# Closed Lost
|
||||
sales_stages = ["Prospecting", "Evaluation", "Qualification", "Bidding / Negotiating", "Contract Review", "Closed Won", "Cancel", "Closed Lost"]
|
||||
|
||||
prompt = "某公司销售阶段分为如下几个定义,你能告诉我什么信息 "+ str(sales_stages)
|
||||
print(prompt)
|
||||
# print(agent.send_message(prompt))
|
||||
|
||||
|
||||
professional_won_path = [
|
||||
{
|
||||
"销售阶段名称": "01-prospecting",
|
||||
"客户采购行为": "",
|
||||
"销售阶段任务": "了解客户信息、与客户进行交流,初步了解客户需求,并确定项目对接人,进入客户供应商名单",
|
||||
"关键获取信息": "1.联系人姓名\n2.部门\n3.职务\n4.手机\n5.预估整体项目节点数\n6.CRM情况\n7.是否是独立预算",
|
||||
"销售关键动作": "1、了解客户组织架构,了解客户现有系统使用情况、竞品使用情况\n2、判断匹配度\n3、明确关键部门及其关键人\n4、明确客户是否有对应预算",
|
||||
"售前关键动作": "",
|
||||
"客户支持行为": "1. 交流中客户较为开放,能告知需求,计划较为清晰;\n2. 愿意进一步需求沟通;\n3. 交流有多人甚至有多部门参与讨论;",
|
||||
"阶段转化标准": "1.客户有需求\n2.有明确的项目联系人"
|
||||
},
|
||||
{
|
||||
"销售阶段名称": "02-evaluation",
|
||||
"客户采购行为": "",
|
||||
"销售阶段任务": "收集客户信息,了解客户内部预算情况、预期的项目落地时间、产品和数量等,判断商机可靠性;组织技术交流,讲解公司解决方案,传递公司价值",
|
||||
"关键获取信息": "1、整理需求确认文档,客户确认\n2.在CRM录入组织架构,明确决策链和决策人\n3.预算是否完成申批\n4.是否进PCC\n5.PCC是否已申批:6.PcC状态\n7.测试类型\n8.测试项(用例)",
|
||||
"销售关键动作": "1、整理需求确认文档,客户确认\n2、在CRM录入组织架构,明确决策链和决策人\n3、了解决策链的每个客户动力;\n4.发展线人\n5、组织技术交流,传递公司及产品价值,引导客户的场景和我们的特性结合\n6、组织技术交流,了解预期的项目落地时间、产品和数量等\n7.和客户确认是否需要测试\n8、对客户提出的测试需求进行评估,确定需求我们优势够,决定是否跟进测试",
|
||||
"售前关键动作": "",
|
||||
"客户支持行为": "1.愿意透露决策链信息,预算信息,友商信息,时间信息。\n2. 能介绍高title的人\n3. 客户有对我们产品的测试计划;",
|
||||
"阶段转化标准": "1.客户有预算\n2.有明确的项目时间\n3.有预期的产品和数量"
|
||||
},
|
||||
{
|
||||
"销售阶段名称": "03-qualification",
|
||||
"客户采购行为": "",
|
||||
"销售阶段任务": "收集、确认项目立项信息,明确产品和数量;\n组织测试必要性并引导客户做poc测试,验证应用场景和技术适用性、平鼎成功入围",
|
||||
"关键获取信息": "1.立项批复\n2.立项时间\n3.立项金额\n(立项报告的内容)\n4.招标方式",
|
||||
"销售关键动作": "1、和客户确认是否需要测试\n2、对客户提出的测试需求进行评估,确定需求我们优势够,决定是否跟进测试\n3、引导客户的测试方案制定,引导将我们优势点,加入到测试方案中,如:性能、扩展性、边界\n4、在公司内部组织测试资源\n5、获取客户内部的测试报告,了解真实的测试结论\n6、了解客户对测试结果的态度和对手情况\n7、做测试正式汇报,和客户达成一致",
|
||||
"售前关键动作": "",
|
||||
"客户支持行为": "1.支持对我方有利的测试方案\n2. 提供内部真实的测试报告\n3.决策链人员认同测试效果,客户愿意引荐更高层领导汇报\n4.双方沟通项目计划且达成一致\n5.主动邀请提供招标参数或汇报材料",
|
||||
"阶段转化标准": "1.项目预算批准、项目已立项\n2.有确定产品和数量、或\n3.完成场景应用/技术适用性验证、客户确定平鼎入围(完成poc)"
|
||||
},
|
||||
{
|
||||
"销售阶段名称": "04-bidding/negotiating",
|
||||
"客户采购行为": "",
|
||||
"销售阶段任务": "确认项目是否需要招标,提前影响招投标结果并赢得标书;若不需要招标,则完成商务谈判,确认价格和产品可交付沟通与评审",
|
||||
"关键获取信息": "1.是否投标\n2.发标时间\n3.投标时间\n4.竞争对手\n5.对手产配置\n6.对手投标金额",
|
||||
"销售关键动作": "1.制定关单策略及竞争策略\n2.控制立项报告(对对手不利的参数)\n3.如果无法控制立项,制定应对策略\n4.创造机会与高层沟通汇报\n5.沟通交付计划及SOW\n6. 确定关键联系人",
|
||||
"售前关键动作": "",
|
||||
"客户支持行为": "1.反馈客户内部的进展和计划\n2. 客户内部立项成功\n3.采纳我们提交的标参数(或有利于我方)\n3. 对黑马和灰犀牛的处理,愿意提供应对处理",
|
||||
"阶段转化标准": "1.完成可交付评审;\n2.投标通过审批;\n3.投标结果确认赢标或完成商务谈判,确定价格和产品"
|
||||
},
|
||||
{
|
||||
"销售阶段名称": "05-contract review",
|
||||
"客户采购行为": "",
|
||||
"销售阶段任务": "发起合同协议审批申请,确认合同条款",
|
||||
"关键获取信息": "无",
|
||||
"销售关键动作": "",
|
||||
"售前关键动作": "",
|
||||
"客户支持行为": "",
|
||||
"阶段转化标准": "合同评审通过,完成合同协商审批,确认合同条款"
|
||||
},
|
||||
{
|
||||
"销售阶段名称": "06-closed won",
|
||||
"客户采购行为": "",
|
||||
"销售阶段任务": "合同归档,项目赢单",
|
||||
"关键获取信息": "无",
|
||||
"销售关键动作": "",
|
||||
"售前关键动作": "",
|
||||
"客户支持行为": "",
|
||||
"阶段转化标准": "合同归档"
|
||||
},
|
||||
{
|
||||
"销售阶段名称": "06-closed cancel",
|
||||
"客户采购行为": "确认项目取消原因",
|
||||
"销售阶段任务": "复盘项目输单原因",
|
||||
"关键获取信息": "取消原因",
|
||||
"销售关键动作": "",
|
||||
"售前关键动作": "",
|
||||
"客户支持行为": "",
|
||||
"阶段转化标准": "1.客户明确表示取消项目\n2.投标确认状态为输单"
|
||||
}
|
||||
]
|
||||
|
||||
pro_sales_stage_definition = """
|
||||
1. 01-prospecting:
|
||||
- 销售阶段任务: 了解客户信息、与客户进行交流,初步了解客户需求,并确定项目对接人,进入客户供应商名单
|
||||
- 销售关键动作: 1、了解客户组织架构,了解客户现有系统使用情况、竞品使用情况 2、判断匹配度 3、明确关键部门及其关键人 4、明确客户是否有对应预算
|
||||
- 阶段转化标准: 1.客户有需求 2.有明确的项目联系人
|
||||
|
||||
2. 02-evaluation:
|
||||
- 销售阶段任务: 收集客户信息,了解客户内部预算情况、预期的项目落地时间、产品和数量等,判断商机可靠性;组织技术交流,讲解公司解决方案,传递公司价值
|
||||
- 销售关键动作: 1、整理需求确认文档,客户确认 2、在CRM录入组织架构,明确决策链和决策人 3、了解决策链的每个客户动力; 4.发展线人 5、组织技术交流,传递公司及产品价值,引导客户的场景和我们的特性结合 6、组织技术交流,了解预期的项目落地时间、产品和数量等 7.和客户确认是否需要测试 8、对客户提出的测试需求进行评估,确定需求我们优势够,决定是否跟进测试
|
||||
- 阶段转化标准: 1.客户有预算 2.有明确的项目时间 3.有预期的产品和数量
|
||||
|
||||
3. 03-qualification:
|
||||
- 销售阶段任务: 收集、确认项目立项信息,明确产品和数量;组织测试必要性并引导客户做poc测试,验证应用场景和技术适用性、平鼎成功入围
|
||||
- 销售关键动作: 1、和客户确认是否需要测试 2、对客户提出的测试需求进行评估,确定需求我们优势够,决定是否跟进测试 3、引导客户的测试方案制定,引导将我们优势点,加入到测试方案中,如:性能、扩展性、边界 4、在公司内部组织测试资源 5、获取客户内部的测试报告,了解真实的测试结论 6、了解客户对测试结果的态度和对手情况 7、做测试正式汇报,和客户达成一致
|
||||
- 阶段转化标准: 1.项目预算批准、项目已立项 2.有确定产品和数量、或 3.完成场景应用/技术适用性验证、客户确定平鼎入围(完成poc)
|
||||
|
||||
4. 04-bidding/negotiating:
|
||||
- 销售阶段任务: 确认项目是否需要招标,提前影响招投标结果并赢得标书;若不需要招标,则完成商务谈判,确认价格和产品可交付沟通与评审
|
||||
- 销售关键动作: 1.制定关单策略及竞争策略 2.控制立项报告(对对手不利的参数) 3.如果无法控制立项,制定应对策略 4.创造机会与高层沟通汇报 5.沟通交付计划及SOW 6. 确定关键联系人
|
||||
- 阶段转化标准: 1.完成可交付评审; 2.投标通过审批; 3.投标结果确认赢标或完成商务谈判,确定价格和产品
|
||||
|
||||
5. 05-contract review:
|
||||
- 销售阶段任务: 发起合同协议审批申请,确认合同条款
|
||||
- 销售关键动作:
|
||||
- 阶段转化标准: 合同评审通过,完成合同协商审批,确认合同条款
|
||||
|
||||
6. 06-closed won:
|
||||
- 销售阶段任务: 合同归档,项目赢单
|
||||
- 销售关键动作:
|
||||
- 阶段转化标准: 合同归档
|
||||
|
||||
7. 06-closed cancel:
|
||||
- 销售阶段任务: 复盘项目输单原因
|
||||
- 销售关键动作:
|
||||
- 阶段转化标准: 1.客户明确表示取消项目 2.投标确认状态为输单
|
||||
"""
|
||||
|
||||
|
||||
# Read the Excel file
|
||||
df = pd.read_excel('./data_intermediate/pingcap_pipeline_top_sales.xlsx')
|
||||
|
||||
# Iterate over each row in the DataFrame
|
||||
for index, row in df.iterrows():
|
||||
# Extract the information from the column "当前详细状态及Close节奏"
|
||||
|
||||
try:
|
||||
detailed_status = row['当前详细状态及Close节奏']
|
||||
print(f"Processing row {index} at current time: {datetime.now()}")
|
||||
detailed_current_stage = row['Sales stage']
|
||||
prompt = (f"某公司当前销售定义为 {sales_stage_definition}, "
|
||||
f"当前销售阶段为 {detailed_current_stage}, "
|
||||
f"销售人员填写的销售动作日志为: {detailed_status} , "
|
||||
f"请分析当前销售阶段以及销售动作日志,判断其销售动作是否完成了前一阶段的准出标准,以及是否支持将销售阶段转化到当前阶段{detailed_current_stage},按照如下要点给出分析:"
|
||||
f"1. **销售阶段分析**"
|
||||
f"2. **销售动作日志分析**"
|
||||
f"3. **销售动作与销售阶段的关系**"
|
||||
f"4. **判断结果**"
|
||||
f"5. **销售阶段分析报告**")
|
||||
analysis_result = agent.send_message(prompt)
|
||||
print(analysis_result)
|
||||
df.at[index, '分析结果'] = analysis_result # Directly update the DataFrame
|
||||
|
||||
prompt_sales_action_analysis = (f"某公司当前销售定义为 {pro_sales_stage_definition}, "
|
||||
f"当前销售阶段为 {detailed_current_stage}, "
|
||||
f"销售人员填写的销售动作日志为: {detailed_status} , "
|
||||
f"请分析当前销售阶段以及销售动作日志,分析、总结、提炼出销售动作,给出一个概括的销售动作列表,比如拜访客户,需求讨论这种形式的动作描述")
|
||||
sales_action_analysis_result = agent.send_message(prompt_sales_action_analysis)
|
||||
print(sales_action_analysis_result)
|
||||
df.at[index, '销售动作分析'] = sales_action_analysis_result # Directly update the DataFrame
|
||||
except Exception as e:
|
||||
print(f"Error processing row {index}: {e}")
|
||||
df.at[index, '分析结果'] = f"Error: {e}" # Log the error in the DataFrame
|
||||
df.at[index, '销售动作分析'] = f"Error: {e}" # Log the error in the DataFrame
|
||||
|
||||
|
||||
df.to_excel('./data_output/analysis_result_top_sales.xlsx', index=False)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
|
|
@ -1,17 +1,49 @@
|
|||
import pandas as pd
|
||||
|
||||
# 读取Excel文件
|
||||
df = pd.read_excel('pingcap_pipeline.xlsx')
|
||||
df = pd.read_excel('./data_src/pingcap_pipeline.xlsx')
|
||||
|
||||
# 计算“当前详细状态及Close节奏”列的字数
|
||||
df['字数'] = df['当前详细状态及Close节奏'].apply(lambda x: len(str(x)))
|
||||
# # 计算"当前详细状态及Close节奏"列的字数
|
||||
# df['字数'] = df['当前详细状态及Close节奏'].apply(lambda x: len(str(x)))
|
||||
|
||||
# 按字数排序并取TOP20
|
||||
top20_df = df.sort_values(by='字数', ascending=False).head(200)
|
||||
# # 按字数排序并取TOP20
|
||||
# top20_df = df.sort_values(by='字数', ascending=False).head(200)
|
||||
|
||||
# 删除添加的字数列
|
||||
top20_df = top20_df.drop(columns=['字数'])
|
||||
# # 删除添加的字数列
|
||||
# top20_df = top20_df.drop(columns=['字数'])
|
||||
|
||||
# 输出到新的Excel文件
|
||||
top20_df.to_excel('output_top200.xlsx', index=False)
|
||||
# # 输出到新的Excel文件
|
||||
# top20_df.to_excel('output_top200.xlsx', index=False)
|
||||
|
||||
print(len(df["负责人(必填)"].unique()))
|
||||
# 统计每个负责人的数量
|
||||
responsible_person_counts = df["负责人(必填)"].value_counts()
|
||||
|
||||
# 将结果转换为DataFrame
|
||||
result_df = pd.DataFrame({'负责人': responsible_person_counts.index, '数量': responsible_person_counts.values})
|
||||
|
||||
# 按数量降序排序
|
||||
result_df = result_df.sort_values('数量', ascending=False)
|
||||
|
||||
# 打印结果
|
||||
print(result_df)
|
||||
|
||||
# 可选:将结果保存到Excel文件
|
||||
result_df.to_excel('responsible_person_counts.xlsx', index=False)
|
||||
|
||||
# 获取负责人数量最多的前10名
|
||||
top_10_responsible = result_df.head(10)['负责人'].tolist()
|
||||
|
||||
# 根据top 10负责人过滤原始数据框
|
||||
filtered_df = df[df["负责人(必填)"].isin(top_10_responsible)]
|
||||
|
||||
# 为每个负责人随机选择一半的数据
|
||||
half_filtered_df = filtered_df.groupby("负责人(必填)").apply(lambda x: x.sample(frac=0.25, random_state=42)).reset_index(drop=True)
|
||||
|
||||
# 打印过滤和减半后的数据框信息
|
||||
print(f"原始过滤后的数据框行数: {len(filtered_df)}")
|
||||
print(f"减半后的数据框行数: {len(half_filtered_df)}")
|
||||
print(f"Top 10 负责人: {top_10_responsible}")
|
||||
|
||||
# 可选:将减半后的结果保存到新的Excel文件
|
||||
half_filtered_df.to_excel('./data_intermediate/pingcap_pipeline_top_sales.xlsx', index=False)
|
||||
Loading…
Reference in New Issue