のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

ニコニコデータセットを使ったタグ解析

Sponsored Links

皆さんこんにちは
お元気ですか。私は元気です。

さて、今日はニコニコデータセットを使って、面白いことができるのではないかなと考えてみました。
まぁ内容はニコニコ動画の動画データです但し、2013年まで

出現タグランキング!

#coding:utf-8
import json
import gzip
import os
import sys

dicts = {}
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)
			for tag in jsonData["tags"]:
				if not tag["tag"] in dicts:
					dicts[tag["tag"]] = 0
				dicts[tag["tag"]] += 1

f = open("tag_count.txt","w")
count = 1
for key,value in sorted(dicts.items(),key=lambda x:x[1],reverse=True):
	f.write(str(count)+ " " + key.encode('utf-8')  + " " + str(value)+ "\n")
	count += 1
print len(dicts)
f.close()

Top 50を掲載します。

1 ゲーム 3593302 0.0785020061224
2 実況プレイ動画 1134356 0.0247820031985
3 音楽 874535 0.0191057561887
4 歌ってみた 549536 0.0120055810607
5 投稿者コメント 444108 0.00970232085559
6 アニメ 332877 0.00727228390266
7 エンターテイメント 320617 0.00700444262602
8 東方 231043 0.00504754095273
9 もっと評価されるべき 224274 0.00489966023482
10 VOCALOID 218548 0.00477456568751
11 アイドルマスター 203616 0.00444834986834
12 実況プレイ 167938 0.00366890116784
13 ニコニコムービーメーカー 160928 0.00351575538078
14 その他 152738 0.00333683041702
15 プレイ動画 149399 0.00326388408564
16 演奏してみた 139507 0.00304777593648
17 スポーツ 134763 0.00294413490741
18 ボカロオリジナルを歌ってみた 134676 0.0029422342393
19 初音ミク 124054 0.0027101779554
20 ラジオ 113043 0.0024696232819
21 @BGM推奨 109552 0.00239335624301
22 ゆっくり実況プレイ 106936 0.00233620511905
23 動物 97558 0.0021313262045
24 作業用BGM 96833 0.00211548730356
25 政治 86974 0.00190010009748
26 MikuMikuDance 86306 0.00188550646186
27 R-18 82669 0.00180604979602
28 PS3 78062 0.00170540177306
29 踊ってみた 76040 0.00166122762449
30 洋楽 74659 0.00163105724904
31 日記 72996 0.00159472608729
32 三国志大戦 68065 0.00148699971411
33 PCゲーム 67656 0.00147806438931
34 ボーダーブレイク 65009 0.00142023601579
35 実況 54854 0.00119838216878
36 車載動画 54596 0.00119274570472
37 FPS 51098 0.00111632573851
38 ポケモン 50634 0.00110618884191
39 MUGEN 50337 0.00109970035421
40 実況プレイpart1リンク 48534 0.00106031064607
41 鉄道 48388 0.00105712101912
42 UTAU 45943 0.00100370569111
43 例のアレ 44689 0.000976309854169
44 描いてみた 44313 0.000968095472438
45 戦国大戦 43040 0.000940284547057
46 MAD 42774 0.000934473308918
47 ミクオリジナル曲 42631 0.000931349222249
48 自然 38464 0.000840313773652
49 フリーゲーム 37541 0.000820149214244
50 エロゲ 36356 0.000794260803736

皆ゲーム好きすぎるだろう。ゲームだけで全体の7%もタグが存在するとは…。

ゲームタグと同時に出てくるタグを調査した。

もちろんニコニコのタグは複数セットすることができます。そこで、一番多いゲームから他と一緒に出てくるようなタグはどんだけあるのかな

SourceCode

#coding:utf-8
import json
import gzip
import os
import sys

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)
			movie_num += 1
			containGame = False
			for tag in jsonData["tags"]:
				if tag["tag"] == u"ゲーム":
					containGame = True
					break
			if containGame == True:
				for tag in jsonData["tags"]:
					if not tag["tag"] in dicts:
						dicts[tag["tag"]] = 0
					dicts[tag["tag"]] += 1

f = open("game_similar.txt","w")
count = 0
dict_sum = sum(dicts.values())
for key,value in sorted(dicts.items(),key=lambda x:x[1],reverse=True):
	divide = float(value) / float(movie_num)
	f.write(str(count)+ " " + key.encode('utf-8')  + " " + str(value) + " " + str(divide)  + "\n")
	count += 1
print len(dicts)
f.close()

Output

1 実況プレイ動画 1106933 0.308054541477
2 投稿者コメント 190269 0.0529510183113
3 実況プレイ 160964 0.044795566863
4 プレイ動画 135239 0.0376364135272
5 ゆっくり実況プレイ 102850 0.0286226985653
6 PS3 74899 0.0208440593081
7 PCゲーム 64198 0.0178660184977
8 ボーダーブレイク 58079 0.0161631279531
9 三国志大戦 54739 0.0152336207755
10 実況 50508 0.0140561522522
11 東方 49109 0.0136668167607
12 FPS 48147 0.01339909643
13 実況プレイpart1リンク 47604 0.0132479819397
14 アイドルマスター 42231 0.0117526998844
15 ポケモン 40588 0.0112954602758
16 戦国大戦 39719 0.0110536214323
17 MUGEN 39233 0.0109183697891
18 フリーゲーム 35856 0.0099785656758
19 もっと評価されるべき 34696 0.00965574282373
20 縛りプレイ 34597 0.00962819156308
21 Xbox360 32746 0.00911306647757
22 字幕プレイ動画 31772 0.00884200660006
23 格闘ゲーム 31054 0.00864219038645
24 XBOX360 30744 0.00855591876219
25 ゲーム実況 30332 0.00844126099059
26 BORDERBREAK 26712 0.00743383105567
27 PSP 25483 0.00709180580981
28 ボーダーブレイク外部出力 24400 0.00679041171602
29 テイルズ 24132 0.00671582850537
30 ゼルダの伝説 23809 0.0066259390388
31 ファイアーエムブレム 23063 0.00641833054945
32 MHP2G 22125 0.00615728931217
33 バイオハザード 21865 0.00608493246602
34 零 21499 0.00598307629028
35 Wii 20928 0.0058241695243
36 ファルコム 20700 0.00576071813613
37 xbox360 20360 0.00566609764501
38 戦場の絆 20254 0.00563659831542
39 Minecraft 19788 0.00550691258347
40 三国志大戦3 19692 0.0054801962095
41 EXVS 19648 0.00546795120477
42 三国志大戦3 19442 0.00541062231897
43 ファミコン 18954 0.00527481408465
44 PS2 18824 0.00523863566157
45 MHP3 18240 0.00507611105329
46 バトレボ 18192 0.00506275286631
47 青鬼 17104 0.00475996729471
48 スパロボ 16886 0.00469929886216
49 ニコニコ歴史戦略ゲー 16189 0.00450532685535
50 mugen 15329 0.00426599267192

30%は実況プレイ動画でした。というかやっぱり殆どのタグがゲーム関連ですね。このことからもタグ同士に関連があることがわかります。動画の比較とかできそうだね。
というか実況プレイ動画多すぎる!?

時間かければネットワークとか構築できそうな気はする。やってみよっかな…Networkxの勉強を兼ねて。