読者です 読者をやめる 読者になる 読者になる

今私は小さな魚だけれど

ちょっぴり非日常な音楽を紹介するブログです

【解析】last.fmの"denpa"タグ上位35アーティストのネットワーク

雑記 電波ソング

この前の続きです。

【解析中】last.fmAPIを使って、電波ソングアーティストの一覧を取得してみた

last.fmの"denpa"タグのアーティストの上位35アーティスト(本当はもっとやりたかったけどAPI切れた)のリストを取得、その35アーティストそれぞれの類似アーティストを取得して、最初のリストの中にあれば線でつなぐ+類似度も取れたので重み付けをしています。

denpatag.png

※クリックすると大きく見えます。

同人勢が非常に強固に繋がっているのは、参加メンバーが被っていたりするからでしょうね。その割にSHAKING PINKがメンバー(ココ、ななひら、桃箱)とあまりつながってないのが意外ですが。

※枝の太さはAPIにあった"match"という変数を使っているので、その意味がわからないとちゃんとしたことは言えませんが。

また、でんぱ組.incがネットワーク上で孤立してるのが意外でした。そこで類似アーティストを見てみると、「いずこねこ私立恵比寿中学、Bis、ひめキュンフルーツ缶アップアップガールズ(仮)」となっており、電波ソングファンよりアイドルファンのほうがよく聞いているようです。

課題点

最初のアーティストのリストを"denpa"タグで取得しましたが、それだけでは不十分な気がします。例えばアニメ関連のアーティストでは、類似アーティストとして七森中ごらく部後ろから這いより隊Gが出てきますが、これらのアーティストはdenpaタグに含まれていないためネットワークには出てきません。

また、あべにゅうぷろじぇくと佐倉紗織など、人によってユニット名かボーカル名のどちらで登録しているのかがまちまちのものもあります。その辺をきちんと集計するために、ちゃんとしたアーティストのリストを作り、別名で同じアーティストを指しているもの(画像だと桃井はるこmomo-iなど)を整備するともっとちゃんとした結果になるんじゃないかと思います。

上の二つの問題は、どちらかというと電波ソング固有の問題なので、"rock"など別のタグで調べるのも試してみたいです。それなら別名の同アーティストとかややこしいことが少なそうです。(メンバーチェンジの多いバンドがあると別の問題も出てきそうですが)

もう一つ、もっと数の多いネットワークを描いて、コミュニティ分割とかもやってみたいですね。もしかすると電波ソングサブジャンル的なものも分かるかもしれません。

なんにせよ、ちょっと適当に描きすぎてる気がするので、もっとちゃんとしたいですね。プログラム詳しい方いませんか?


ほとんど誰も興味がないであろうPythonコード

import urllib

import json

import networkx as nx

#いずれはちゃんとファイルとして出力するつもり

#import pandas as pd

lastAPI = '(自分のAPIキー)'

method = 'tag.gettopartists'

lformat = 'json'

tag = 'denpa'

limit = "1000"

url = 'http://ws.audioscrobbler.com/2.0/?method='+ method +"&limit=" +\

limit + "&tag=" + tag + "&api_key=" + lastAPI + "&format=" + lformat

f = urllib.urlopen(url)

url_open = f.read()

artlist = json.loads(url_open)

artlist2 = artlist["topartists"]["artist"]

#取得したアーティストの数を確認

print len(artlist2)

#本当は上位50アーティストのつもりだったけどAPI切れた

#API切れたのでそのままprintしたやつをコピペ+Excelで整形

for x in range(0,50):

url_similar = "http://ws.audioscrobbler.com/2.0/?method=artist.getsimilar&artist=" + artists[x].encode() +\

"&api_key="+ lastAPI +"&format=json"

f = urllib.urlopen(url_similar)

url_open = f.read()

similar_artists = json.loads(url_open)

#アーティスト 類似アーティスト 類似度(?)

sim_list = similar_artists["similarartists"]["artist"]

for n in range(0,10):

print artists[x]+ "\t",

print sim_list[n]["name"]+ "\t",

print sim_list[n]["match"]

実行結果

1位のななひらさんから順番に、類似アーティストが10個ずつプリントされます。この結果を整形して.netファイルにして(この部分もプログラム化するのは今後の課題…)Gephiというオープンソースのネットワーク可視化ソフトにぶち込んで↑の画像を作りました。

ななひら	なゆ	1

ななひら ゆきまめ 0.926033

ななひら ココ 0.899534

ななひら ちぃむdmp☆ 0.86588

ななひら 桃箱 0.842528

ななひら とろ美 0.664193

ななひら 愛原圭織 0.532495

ななひら おでんぱ☆スタジオ 0.518225

ななひら ひなうさ 0.491373

ななひら ほたる 0.485949

U とろ美 1

U ココ 0.93547

U おでんぱ☆スタジオ 0.664354

U 真優 0.444543

U 新堂真弓 0.358808

U み~こ 0.351835

U 33.turbo 0.340625

U ひなうさ 0.295192

U doubleeleven UpperCut 0.27304

(以下略)