量化商品,计算相似度

2023-11-03

如何精准寻找竞品

一般情况下,竞品的识别方式,是通过价格、规格、成分、主要宣传点、销量等维度进行判断的,然而这种方式存在一定滞后性,并且过于主观,同时没有监控到该竞品完整的生命周期,何时起量,何时打爆,都不清楚。本次专题研究的是通过量化的方式来描述商品,计算彼此之间的相似度,单纯从相似度判断是否可能成为目标竞品。

相似度算法

在这里插入图片描述

首先了解一下可落地的相似度算法,参考文章https://blog.csdn.net/Gamer_gyt/article/details/78037780
本次项目,主要是用到余弦相似度、调整余弦相似度,用来计算商品成分、功效的相似度

数据源及具体实现

流程是从生意参谋获取商品ID->进入天猫详情页->获取详情页信息(标题、主图、详情图、价格、规格)->计算商品相似度
在这里插入图片描述

第一步:进入生意参谋-市场排行-商品排行(老品建议流量排行、新品建议交易排行)获取TOP300商品ID
第二步:借助淘宝详情页接口,爬取详情页信息(主图,详情图,标题,促销价,原价,规格)
第三步:借助腾讯云图文识别接口,识别文字(资费如下)
在这里插入图片描述
第四步:构建成分、功效维度表
在这里插入图片描述

第五步:构建相似度计算模型(原理是提取目标产品与竞品详情页+主图+标题文字中的关键词,进行计数,有序排列,形成向量,计算向量夹角的余弦值)

class Similar(object):
	def __init__(self,yuan,chengfen,gongxiao,path):
		self.yuan=self.read_data(yuan)
		self.yuan=self.yuan[self.yuan['规格数字']>0]
		print(self.yuan.head())
		self.chengfen=self.read_data(chengfen)
		self.gongxiao=self.read_data(gongxiao)
		#self.price_slice(self.yuan)

		#创造向量,功效模型&成分模型
		self.yuan['新功效'] = self.yuan['产品名'] + self.yuan['字符串']
		self.yuan['新成分'] = self.yuan['产品名'] + self.yuan['字符串']
		self.yuan['功效_向量'] = self.yuan['新功效'].apply(lambda x: self.deal_data_gong(x))
		self.yuan['成分_向量'] = self.yuan['新成分'].apply(lambda x: self.deal_data_cheng(x))


		#价格模型采用 调整型余弦相似度
		avg_price=self.yuan['价格'].sum()/self.yuan['价格'].count()
		avg_price_cu = self.yuan['促销价'].sum() / self.yuan['促销价'].count()
		avg_specs = self.yuan['规格数字'].sum() / self.yuan['规格数字'].count()
		print([avg_price,avg_price_cu,avg_specs])
		self.yuan['价格_向量'] = self.yuan.apply(lambda x: [x['价格']-avg_price, x['促销价']-avg_price_cu, x['规格数字']-avg_specs], axis=1)



		print(self.yuan['价格_向量'].head())
		print(self.yuan['功效_向量'].head())
		self.yuan['功效_评分'] = self.yuan['功效_向量'].apply(lambda x: self.cosine_similarity_gai_V1(self.yuan['功效_向量'][0],x))
		self.yuan['成分_评分'] = self.yuan['成分_向量'].apply(lambda x: self.cosine_similarity_gai_V1(self.yuan['成分_向量'][0], x))

		#价格模型-余弦相似度
		#self.yuan['价格_评分'] = self.yuan['价格_向量'].apply(lambda x: self.cosine_similarity_gai_V1(self.yuan['价格_向量'][0], x))

		self.yuan['单位价格']=self.yuan.apply(lambda x: x['促销价']/x['规格数字'], axis=1)
		# 价格模型-减分制
		self.yuan['价格_评分'] = 10-self.yuan['单位价格'].apply(lambda x: self.jiage_rate(self.yuan['单位价格'][0], x))-self.yuan['促销价'].apply(lambda x: self.jiage_rate(self.yuan['促销价'][0], x))

		self.yuan['综合评分']=self.yuan['功效_评分']*0.5+self.yuan['成分_评分']*0.2+self.yuan['价格_评分']*0.3
		self.yuan.to_csv(path,encoding='utf-8-sig',index=None)



	# 获取数据源
	def read_data(self,yuan):

		if '.CSV' in yuan.upper():
			try:
				data = pd.read_csv(yuan,encoding='GB18030')
			except:
				data = pd.read_csv(yuan, encoding='utf-8')
		else:
			data=pd.read_excel(yuan)
		return data

	# jaccard公式计算相似度
	def get_jaccard_sim(self,str1, str2):

		a = set(str1)
		b = set(str2)
		c = a.intersection(b)
		print(round((float(len(c)) / (len(a) + len(b) - len(c)))*10,2))
		return round((float(len(c)) / (len(a) + len(b) - len(c)))*10,2)

	# cosine计算相似度
	def cosine_similarity_gai_V1(self,vector1, vector2):
		# 余弦相似度计算
		dot_product = 0.0
		normA = 0.0
		normB = 0.0
		for a, b in zip(vector1, vector2):
			dot_product += a * b
			normA += a ** 2
			normB += b ** 2

		if normA == 0.0 or normB == 0.0:
			return 0
		else:
			return round(dot_product / ((normA ** 0.5) * (normB ** 0.5)) * 10, 2)

	def jiage_rate(self,vector1, vector2):
		return abs(vector2/vector1-1)*10



	#切割价格段,获取本品价格区间的竞品
	def price_slice(self,data):
		'''
			price_slice功能可选可不选
		'''
		item={}
		price_duan=[0.00,0.10,0.34,0.66,0.88,0.97,1.00]
		my_price=data['促销价'][0]

		#默认第一位的产品是目标产品,其他为竞品
		print('本品价格:%s'%my_price)

		#进行价格升序
		data=data.sort_values(by='促销价',ascending=True).reset_index()
		max_count=len(data['促销价'])

		#筛选位于价格段内的竞品
		for i in range(0,len(price_duan)-1):
			if data['促销价'][int(round(price_duan[i]*max_count,0))]<my_price and data['促销价'][int(round(price_duan[i+1]*max_count,0))]>my_price:
				self.ta=data[int(round(price_duan[i]*max_count,0)):int(round(price_duan[i+1]*max_count,0))]



	#处理源数据,匹配成分、功效表
	def deal_data_gong(self,text):
		vector_=[]  #存储所有向量
		for index, row in self.gongxiao.iterrows():
			wei_list=str(row['二级维度']).split('、')
			zan=0
			for wei in wei_list:
				zan=zan+str(text).count(wei)
			vector_.append(zan)
		return vector_

	# 处理源数据,匹配成分、功效表
	def deal_data_cheng(self, text):
		vector_ = []  # 存储所有向量
		for index, row in self.chengfen.iterrows():
			wei_list = str(row['二级维度']).split('、')
			zan = 0
			for wei in wei_list:
				zan = zan + str(text).count(wei)
			vector_.append(zan)
		return vector_

第六步:结果输出,二次验证,筛选目标竞品
在这里插入图片描述
第七步:追踪竞品,建立预警机制,实时警报

思考与应用

这里,如果只是输出竞品list,该项目的价值产出确实有限,后续可考虑加入其他模块,形成完整竞品分析流程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

量化商品,计算相似度 的相关文章

  • Pandas:将增量数字添加到一列的重复值的后缀,这些重复值按另一列的值分组并按索引排序

    我试图将下划线和增量数字添加到按索引排序的任何重复值以及由另一列定义的组内 例如 我希望 化学 列中的重复值具有下划线和增量数字 并按索引排序并按 循环 列分组 df pd DataFrame 1 1 1 1 1 1 2 2 2 2 2 2
  • 导入错误:无法导入名称“FFProbe”

    我无法获取ffprobe包 https github com simonh10 ffprobe在 Python 3 6 中工作 我使用 pip 安装它 但是当我输入import ffprobe it says Traceback most
  • GUI 测试工具 PyUseCase 与 Dogtail 相比如何?

    GUI测试工具如何Py用例 http pypi python org pypi PyUseCase重命名为故事文本 http pypi python org pypi StoryText 相比于Dogtail http en wikiped
  • 从所有数据帧列中删除子字符串

    我有一个单词列表 大约 1000 个单词 我称之为负面单词 CAST ARTICLES SANITARY JAN CLAUSES SPECIAL ENDORSEMENT 我很快就会用这个单词列表制作一个数据框 我还有一个数据框 看起来像 F
  • App Engine 上的 Django 与 webapp2 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何通过 python 中的函数运行列表?

    我试图通过我创建的函数运行我的列表 但不断收到错误 我不知道出了什么问题 温度 F temp f 19 21 21 21 23 功能 def fahrToCelsius tempFahrenheit return tempFahrenhei
  • 使用 Python 和 lmfit 拟合复杂模型?

    我想适合椭偏仪 http en wikipedia org wiki Ellipsometry使用 LMFit 将数据转换为复杂模型 两个测量参数 psi and delta 是复杂函数中的变量rho 我可以尝试将问题分离为实部和虚部共享参
  • Python Selenium 打印另存为 PDF 等待文件名输入

    我正在尝试通过打印对话框将网站另存为 PDF 我的代码允许我另存为pdf 但要求我输入文件名 我不知道如何将文件名传递到弹出框 附上我的代码 import time from selenium import webdriver import
  • 使用 Tkinter 打开网页

    因此 我的应用程序需要能够打开其中的单个网页 并且它必须来自互联网并且未保存 特别是我想使用 Tkinter GUI 工具包 因为它是我最熟悉的工具包 最重要的是 我希望能够在窗口中生成事件 例如单击鼠标 但无需实际使用鼠标 有什么好的方法
  • Python speedtest.net,或等效的[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 是否有一个 Python 库可以实现 SpeedTest net 测试或等效的互联网连接速度测试 GitHub上有一个项目叫速度检查 https gi
  • 如何找到多个 pandas 数据框中一对列与任意顺序对的交集?

    我有多个 pandas 数据框 为了简单起见 假设我有三个 gt gt df1 col1 col2 id1 A B id2 C D id3 B A id4 E F gt gt df2 col1 col2 id1 B A id2 D C id
  • 获取 Keras model.summary() 作为表

    我在 Keras 中创建了相当大的模型 我正在用 LaTeX 写一篇关于它的文章 为了很好地描述 LaTeX 中的 keras 模型 我想用它创建一个 LaTeX 表 我可以手动实现它 但我想知道是否有任何 更好 的方法来实现这一点 我四处
  • Python在没有pandas的情况下解码excel表

    我正在尝试在 python 中读取 excel 文件而不使用pandas or xlrd 我一直在尝试将结果转换为bytes to utf 8没有任何成功 xls 文件中的数据 colA colB colC spc 1D0 20190705
  • Eclipse/PyDev 中未使用导入警告,尽管已使用

    我正在我的文件中导入一个绘图包 如下所示 import matplotlib pyplot as plt 稍后我会在我的代码中成功使用此导入 fig plt figure figsize 16 10 然而 Eclipse 告诉我 未使用的导
  • Python脚本从字母和两个字母组合生成单词

    我正在编写一个简短的脚本 它允许我使用我设置的参数生成所有可能的字母组合 例如 b a 参数 单词 5 个字母 第三 第五个字母 b a 第一个字母 ph sd nn mm 或 gh 第二 第四个字母 任意元音 aeiouy 和 rc 换句
  • 如何将 URL 添加到 Telegram Bot 的 InlineKeyboardButton

    我想制作一个按钮 可以从 Telegram 聊天中在浏览器中打开 URL 外部超链接 目前 我只开发了可点击的操作按钮 update message reply text Subscribe to us on Facebook and Te
  • 如何检测一个二维数组是否在另一个二维数组内?

    因此 在堆栈溢出成员的帮助下 我得到了以下代码 data needle s which is a png image base64 code goes here decoded data decode base64 f cStringIO
  • 类返回语句不打印任何输出

    我正在学习课程 但遇到了问题return语句 它是语句吗 我希望如此 程序什么也没有打印出来 它只是结束而不做任何事情 class className def createName self name self name name def
  • py2exe ImportError:没有名为 的模块

    我已经实现了一个名为 myUtils 的包 它由文件夹 myUtils 文件 组成 init py 和许多名称为 myUtils 的 py 文件 该包包含在 myOtherProject py 中 当我从 Eclipse 运行它们时可以找到
  • PyObjC + Python 3.0 问题

    默认情况下 Cocoa Python 应用程序使用默认的 Python 运行时版本 2 5 如何配置我的 Xcode 项目以便它使用较新的 Python 3 0 运行时 我尝试用新版本替换项目中包含的Python framework 但它不

随机推荐

  • Java将List对象导入Excel文件

    通过poi依赖将java对象写入excel之中 核心理念是通过反射获取Java对象的getter方法和属性 使用getter方法获取要写入excel中的值 再通过属性上的自定义注解获取excel标题行 然后以文件流的方式写入excel 代码
  • 记录一次Nginx转发请求给Ocelot网关响应500错误排查

    先说明下我们的Http请求流转及系统部署方式 当Http请求发起时 会先到达Nginx 然后Nignx会将请求转发至Ocelot网关服务 Ocelot网关服务会再将请求转发给下游真实提供API服务的应用 我们的应用是基于Net Core 3
  • 接口:mock 模拟数据以及接口调用遇到的 axios的坑

    项目用的 react dva 由于后端接口还没有好 所以需要用mock创数据 拦载 ajax 返回 mock 里面的数据 那么问题来了 怎么用 mock 呢 看了官方文档 我表示没有看明白 问团儿 这个问题 团儿解答 在你现在的里面写 ge
  • Maven项目连接&发布到Nexus私服

    前言 接上一篇 如果你本地还没有安装maven 那就 传送门 如果你还没有搭建Nexus环境 那就 传送门 环境 Windows7 x64 Eclipse Mars Nexus 2 14 5 02 apache maven 3 3 3 JD
  • VMWare虚拟机使用中且无法获取所有权解决措施

    一 事情起因 由于VMWare开启了过多虚拟机导致卡顿现象 动弹不得 关闭也显示 虚拟机正在繁忙 最后将其余靶机暂停并重启电脑 但是电脑是18年的 设备硬件些许落后 重启了很久 最后忍无可忍直接强制重启 重启后发现暂停的虚拟机开启不了了 一
  • MySQL 游标示例

    退出游标这个很难搞啊 查了半天 还是看原文档 CREATE DEFINER root localhost PROCEDURE LoopByLine BEGIN DECLARE MyStation char 20 DECLARE N int
  • 【Zabbix实战之运维篇】Zabbix监控平台的邮件报警配置

    Zabbix实战之运维篇 Zabbix监控平台的邮件报警配置 一 检查Zabbix监控平台状态 1 检查Zabbix各组件容器状态 2 检查Zabbix server状态 二 Zabbix的媒介管理配置 1 进入媒介管理界面 2 创建媒介类
  • 解决 元素隐式具有 “any“ 类型,因为类型为 “string“ 的表达式不能用于索引类型 “Object“。 在类型 “Object“ 上找不到具有类型为 “string“ 的参数的索引签名

    问题 元素隐式具有 any 类型 因为类型为 string 的表达式不能用于索引类型 Object 在类型 Object 上找不到具有类型为 string 的参数的索引签名 描述 在写代码的时候 对一个对象做了一个for in循环 然后取到
  • springboot+mysql租房管理平台-计算机毕业设计源码54739

    摘 要 2l世纪 随看全球经济的逢勃发展 众多经济字豕纷纷提出了新的管理理念 信息管理 强调了用信息支持决策 随着社会的发展 人们又提出了一个新的名词 管理信息系统 管理信息系统在强调信息的现代社会中变的越来越普及 它是一个利用计算机软硬件
  • Java软件编程开发:Mybatis和Url路由详细解析

    1 3 Mybatis MyBatis 本是apache的一个开源项目iBatis 2010年这个项目由apache software foundation 迁移到了google code 并且改名为MyBatis MyBatis是一个基于
  • 拉伸无锯齿的SVG图片

    package com moonlight example import com larvalabs svgandroid SVG import android content Context import android graphics
  • 电脑每次开机杀毒软件报iusb3mon.exe病毒已清除,电脑中病毒iusbmon杀毒办法,工具杀毒

    不知道什么时候开始 我电脑C盘的系统数据存储文件夹programdata 不知不觉就没了 找不到了 programdata文件夹为存储系统数据文件的 这个文件不见了 而且我打开了显示隐藏文件和文件夹还是没有显示 然后我重启电脑 杀毒软件报i
  • springboot 整合springmvc

    项目结构 引入web启动器 pom xml
  • ora-01536 超出表空间 'xxx' 的空间限额

    解决方案 1 alter user 你的用户名 quota 2g on 你建表的表空间的名字 有限制 2 alter user 你的用户名 quota unlimited on 你建表的表空间的名字 无限制 知识总结 表空间的大小与用户的配
  • 矩阵特征值与行列式、迹的关系

    矩阵特征值与行列式 迹的关系 from http www cnblogs com AndyJee p 3737592 html 矩阵的特征值之积等于矩阵的行列式 矩阵的特征值之和等于矩阵的迹 简单的理解证明如下 1 二次方程的韦达定理 请思
  • Python股票历史数据预处理(二)

    Python股票历史数据预处理 二 从网上下载的股票历史数据往往不能直接使用 需要转换为自己所需要的格式 下面以Python代码编程为工具 将csv文件中存储的股票历史数据提取出来并处理 处理的数据结果为是30天涨跌幅子数据库 下载地址为
  • 网桥、网关、网卡之间的区别

    如果要在全世界范围内把数以百万计的网络都互连起来 并且能够互相通信 那么这样的任务一定非常复杂 将网络互相连接起来要使用一些中间设备 物理层使用的中间设备叫转发器 数据链路层使用的中间设备叫做网桥 网络层使用的中间设备叫做路由器 在网络层以
  • 应用不能远程访问RabbitMQ的5672端口

    目录 1 背景 2 环境 3 步骤 1 添加用户 2 设置权限 3 停止服务 4 修改配置 5 启动rabbitmq的服务 6 应用配置 4 参考文档 1 背景 在使用SpringBoot开发的应用中 使用到RabbitMQ 需要通过567
  • 前端知识整理

    1 闭包 JS 中的闭包是什么 1 什么是闭包 函数和函数内部可以访问的变量组合一起就叫做闭包 闭包
  • 量化商品,计算相似度

    量化商品 计算相似度 如何精准寻找竞品 相似度算法 数据源及具体实现 思考与应用 如何精准寻找竞品 一般情况下 竞品的识别方式 是通过价格 规格 成分 主要宣传点 销量等维度进行判断的 然而这种方式存在一定滞后性 并且过于主观 同时没有监控