余弦相似度
余弦相似度是一种计算相关性的方法,它是将个体的指标数据映射到向量空间,计算两个向量之间的夹角余弦值作为两个变量之间的相似性度量。
两个向量m和n之间的余弦相似度计算公式为:
c
o
s
α
=
m
n
∣
m
∣
∣
n
∣
cos\alpha=\frac{mn}{|m||n|}
cosα=∣m∣∣n∣mn
c
o
s
<
x
,
y
>
=
∑
i
=
1
n
x
i
y
i
∑
i
=
1
n
x
i
2
∑
i
=
1
n
y
i
2
cos<x,y>=\frac{\sum_{i=1}^{n}x_{i}y_{i}}{\sqrt {\sum_{i=1}^{n}x_{i}^{2}}\sqrt {\sum_{i=1}^{n}y_{i}^{2}}}
cos<x,y>=∑i=1nxi2∑i=1nyi2∑i=1nxiyi
举例
求excel表格中A列、B列、C列、D列两两之间的余弦相关度,并将结果写入表格中
代码
from openpyxl import load_workbook #导入程序包
wb = load_workbook("a.xlsx") #加载excel文件
ws = wb.active #工作表
rows = []
for row in ws.iter_rows():
rows.append(row) #将工作表中数据导入rows中
for q in range(0,4): #求余弦相关系数
for w in range(q+1,4):
a1 = 0
a2 = 0
a3 = 0
for i in range(0,len(rows)):
a1 += rows[i][q].value * rows[i][w].value #余弦相关系数的分字
for j in range(0,len(rows)):
a2 += pow(rows[j][q].value,2)
a2 = pow(a2,.5) #余弦相关系数分母的前部分
for m in range(0,len(rows)):
a3 += pow(rows[m][w].value,2)
a3 = pow(a3,.5) #余弦相关系数分母的后部分
ws.cell(row=q+1, column=w+5, value=a1/(a2*a3)) #向单元格中写入结果
wb.save("a.xlsx") #文件保存
结果
遇到的问题
- 应将excel关闭,再运行程序,否则程序报错
- 向单元格写入结果,最初想用ws.write(),但是一直报错,所以改用了ws.cell(row=行序号, column=列序号, value=值),注意这个序号从1开始
一个简单的编程实例,里面有python对excel数据的操作,这也是第一次写博客,如有问题请指正。