曲目リストあります。各曲には、アーティスト、ライター、ジャンルがあります。
パターンを探すことができるように、有向グラフを作成したいと考えています。
そこで、アーティストごとにノードを持ちたいので、アーティストに基づいて曲をクラスタリングすることから始めます。
次に、作曲者も見つけて、すでにクラスター化されている曲を何らかの方法でアレンジして、作家に近づけたいと考えています。
後でジャンル別にグループ化する予定ですが、最初の 2 つにとどまっています。
したがって、私の最初のアプローチは、(テストされていません)のようなことをすることです:
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 のように 1 つの曲に複数のアーティストが含まれている場合に問題が発生します。
しかし、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 の近くに配置する必要があります。この2曲は作曲者が同じです。
したがって、アーティストは曲とは別の新しいノードになりますが、各クラスター内の曲の実際の配置は、少なくとも 1 つの他の関係に依存します。後でその関係も示すことになるかもしれないので、現在 3D でマッピングしています。