分析top sales的数据

This commit is contained in:
Tiger Ren 2024-08-26 00:23:26 +08:00
parent 25fa9d0a8d
commit 68c9a4ea20
4 changed files with 216 additions and 9 deletions

175
analysis_pipeline_v2.py Normal file
View File

@ -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 yourI 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.

View File

@ -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)