余弦相似度原理
import pandas as pd
import numpy as np
# 导入余弦相似度
from sklearn.metrics.pairwise import cosine_similarity
# 读取问卷星答题数据加载数据(问卷是以评分矩阵的方式统计便于计算余弦相似度,这里简单的以1代表喜欢0代表不喜欢)
data = pd.read_excel("./余弦相似度计算推荐体育项目爱好问卷_20_20.xlsx")
data
# 计算用户之间的余弦相似度矩阵
similarity_matrix = cosine_similarity(rating_matrix)
similarity_matrix
# 相似度排序 每一行相似度从小到大排序 返回的是数组中的索引
sorted_indices = np.argsort(similarity_matrix,axis=1)
sorted_indices
# 相似度排序 每一行相似度从小到大排序 返回的是数组中的值
sorted_rows = np.sort(similarity_matrix,axis=1)
sorted_rows
from pyecharts import options as opts
from pyecharts.charts import Graph
from pyecharts.globals import ThemeType
# 模拟的数据,实际中替换为真实全班同学的数据
# 字典的键是同学名字,值是对应的相似好友名字列表
classmate_relations = classmate_relations
# 节点数据列表
nodes = []
# 边数据列表
links = []
# 生成节点数据,为每个同学创建一个节点信息
for classmate in classmate_relations:
nodes.append({"name": classmate, "symbolSize": 20})
# 生成边数据,根据相似好友关系来创建边
for classmate, similar_friends in classmate_relations.items():
for friend in similar_friends:
links.append({"source": classmate, "target": friend})
# 创建Graph图表对象
graph = Graph()
# 添加节点和边数据到图表
graph.add(
"",
nodes,
links,
repulsion=500
)
# 设置全局配置项,比如图表标题等
graph.set_global_opts(
title_opts=opts.TitleOpts(title="全班爱好相似关系图"),
)
# 生成节点数据后,打印节点数据查看
print("Nodes:", nodes)
# 生成边数据后,打印边数据查看
print("Links:", links)
# 渲染生成HTML文件,在浏览器中查看图表,你也可以使用render_notebook()
# 如果是在Jupyter Notebook环境下直接展示图表
graph.render("student_friends_relation_graph.html")
graph.render_notebook()
0 评论 最近
没有评论!