Pythonでニコニコタグ解析、ネットワーク作ってみた
Sponsored Links
皆さんこんにちは
お元気ですか。私は元気です。
今回もニコニコタグ解析をやってみようと思います。
最近ですが、タグでネットワークを構築してみました。
見た目が悪すぎて泣きそう。皆どうやって作ってるの。ネットワーク。
まぁ一応作ってみたので公開してみる。
#coding:utf-8 import json import gzip import os import sys import networkx import pylab node = [] def construct_dictionary(word,dict={},deeply=5,already_array=[]): node.append(word.decode("utf-8")) if deeply == 0: return dict dicts,movie_num = createWordDict(word) already_array.append(word) count = 0 for key,value in sorted(dicts.items(),key=lambda x:x[1],reverse=True): if count == 5: break if not key in already_array: dict[(word.decode("utf-8"),key)] = float(value) / float(movie_num) construct_dictionary(key.encode("utf-8"), dict, deeply-1,already_array[:]) count += 1 return dict def createWordDict(word): dicts = {} movie_num = 0 data_dir = sys.argv[1] for file in os.listdir(data_dir): if file.endswith(".dat.gz"): print file, len(dicts) filepath = os.path.join(data_dir,file) for line in gzip.open(filepath): jsonData = json.loads(line) containWord = False for tag in jsonData["tags"]: if tag["tag"] == word.decode("utf-8"): containWord = True movie_num += 1 break if containWord == True: for tag in jsonData["tags"]: if not tag["tag"] in dicts: dicts[tag["tag"]] = 0 dicts[tag["tag"]] += 1 return dicts,movie_num dicts = construct_dictionary("ゲーム") graph = networkx.DiGraph() graph.add_nodes_from(node) edge_list = [] for key,value in dicts.items(): edge_list.append(key) graph.add_edges_from(edge_list) pos = networkx.spring_layout(graph) networkx.draw_networkx_nodes(graph, pos, node_size=100, node_color="w") networkx.draw_networkx_edges(graph, pos, width=1) networkx.draw_networkx_edge_labels(graph, pos, edge_labels=dicts) networkx.draw_networkx_labels(graph, pos, font_size=16, font_color="r") pylab.xticks([]) pylab.yticks([]) pylab.show()
※実行時間はかなりかかるのでご注意ください。
実行結果
えっと見方ですが、
有向グラフとなっており、ゲームが中心です。
ゲームのトップ5のタグを検出し、そのタグを中心にトップ5のタグを検出してつないでいます。
数字はタグを検出できたときに他のタグがどの程度検出されるかを示しています。
例えば中央の方にFPSのタグがあるのですが、PCゲームのタグがある時にFPSが出る確率は27%程度ということです。
ゲーム近辺は複雑すぎてなんだか意味不明ですが・・・これを見る限りでもなんか連結されているのがありそうだなぁ・・・というのが沢山出てきてますね。
この手のツールで便利なソフトを求めています。表示が・・・表示がががが。
うん、いや本当に見難いこの画像。