Chuang Ye

重复度计算

2019-07-14 python excel 数据分析
Word count: 858 | Reading time: 3min

诗咏真系好靓

【需求:比较6个商业项目的品牌重合度】

一开始接到时就有几个想法,现在实现了一下,看看哪种的效率高点?

总体思路

1、用python来实现【5分钟搞定!】

1
把品牌放进列表中,用set函数去除重复的品牌,再去求项目品牌的交集,最后用项目品牌的交集除以项目品牌的并集,得出重合率

2、用Excel的函数实现【这种方法最后花了一个早上才搞定6个项目,我哭了!】

1
2
3
4
用WPS自带的删除重复项去除重复品牌;
判断是否重合:IF(COUNTIF(A:A,B1)=1,"1","没有重合"),即拿B1跟A列做对比,如果相同的个数为1,则显示1,否则就显示没有重合 ;
重合品牌的数量:COUNTIF(C$2:C$31,1)计算该列的1出现的次数;
重合度计算: (A项目和B项目品牌的交集 / A项目和B项目品牌的并集)*100% ;

实现一:python实现

读取excel中的数据

Code

使用xlrd库读取excel中的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import xlrd

# 打开excel
data1 = xlrd.open_workbook('重合度python实现.xlsx')
# sheet数
table = data1.sheets()[0]
# 行数
nrows = table.nrows
# 列数
ncols = table.ncols

all = []
#读取每一列的数据
for i in range(ncols):
col_values = table.col_values(i)
# 去除空元素
k = [j for j in col_values if j != '']
# 去除项目名(非品牌数据)
k.remove(k[0])
all.append(k)

Result

1
['Apple Store', 'H&M', 'JINS', '煮葉', ......]

重合度计算

Code

用set函数去除列表中的重复数据,利用set的union函数求并集,同时也可以用set的intersection函数求交集

1
2
3
4
5
6
7
8
9
10
11
def contact_ratio(Lista, Listb):

# 交集
k1 = [i for i in Lista if i in Listb]

# 并集
k2 = list(set(Lista).union(set(Listb)))

result = len(k1)/len(k2)

return k1,k2,result

All_Codes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import xlrd
def contact_ratio(Lista, Listb):
k1 = [i for i in Lista if i in Listb]
k2 = list(set(Lista).union(set(Listb)))
result = len(k1)/len(k2)
return k1, k2, result
if __name__ == '__main__':
data1 = xlrd.open_workbook('重合度python实现.xlsx')
table = data1.sheets()[0]
nrows = table.nrows
ncols = table.ncols
all = []
for i in range(ncols):
col_values = table.col_values(i)
k = [j for j in col_values if j != '']
k.remove(k[0])
all.append(k)
A, B, C =contact_ratio(all[0], all[1])
print("交集=", A)
print("并集=", B)
print("重合度=", format(C, '0.13%'))

Result

实现二:excel实现

删除重复项

判断是否重合

使用excel的公式 IF(COUNTIF(A:A,B1)=1,”1”,”没有重合”);

公式解析:拿B1单元格跟A列的数据做对比,如果相同的个数为1,则显示1,否则就显示没有重合 ;如果没有做第一步的去重的话,COUNTIF函数可能返回会2,3 …等大于1的结果,影响IF函数的结果;

具体情况具体分析:这里第一行的数据是项目的名字,所以具体的使用公式是IF(COUNTIF(B$2:B$804,A2)=1,”1”,”没有重合”),然后用十字下拉即可

重合品牌的数量

COUNTIF(C$2:C$31,1)计算前面判断是否重合公司那一列的1出现的次数,这里既是两个项目品牌的交集

重合度计算:

(A项目和B项目品牌的交集 / A项目和B项目品牌的并集)*100%

具体情况具体分析:A项目和B项目品牌的并集 = A项目品牌的数量+ B项目品牌 - A项目和B项目品牌的交集

Excel的实现文件

顺便放上重合度python实现这个文件吧

< PreviousPost
Python调用百度OCR
NextPost >
Endgame