【发布时间】:2013-07-06 19:27:01
【问题描述】:
我有一个歌曲列表。对于每首歌曲,我都有艺术家、作家和流派。
我想创建一个有向图,以便查找模式。
所以,我想为每个艺术家都有一个节点,所以我将从基于艺术家对歌曲进行聚类开始。
那我也想找作曲家,把已经聚集的歌曲整理好,让它们离作曲家更近。
稍后我也会根据流派进行分组,但我停留在前两个。
所以,我的第一种方法是只做类似(未测试):
pos_x = 20
for x in songs:
pos_y = 20
artist_list = [s for s in songs if s.artist==x.artist]
for y in len(artist_list):
artist_list[y].x = pos_x
pos_x += 10 * len(artist_list[y].title)
artist_list[y].y = pos_y
pos_y += 10
然后我会遍历艺术家列表,创建初始图表,但是当多个艺术家在一首歌曲上时会出现问题,例如 We are the world。
但是,我相信在 Python 中这是一个非常有缺陷的方法,因为我的下一个方法是获取歌曲,使它们与艺术家相对接近,但循环获取作曲家并对要放入的组进行小改动那些相关联的很近,所以艺术家的歌曲集群可能会被移动。
我正在使用pyglet 来执行此操作,所以基本上我在 OpenGL 中执行此操作。
我可以做的实际定位,但这是我关心的方法,因为我被困在如何解决这个问题上。
更新
我正在寻找的是这样的:
Song A1 Song A3 Song A2
Artist A
Artist B
Song B1 Song B2
我会有从 A1、A2、A3 到艺术家 A 的线条,以及从 B1、B2 到艺术家 B 的线条,但 A3 和 B1、B2 连接到艺术家 B,但我也希望艺术家 B 的位置更靠近 A2和 B2,因为这两首歌的作曲家是一样的。
因此,艺术家将是一个新节点,与歌曲分开,但歌曲在每个集群中的实际位置将取决于至少一个其他关系。稍后我可能最终也会展示这种关系,这就是我现在在 3D 中映射的原因。
【问题讨论】:
标签: python-2.7 graph