YouTubeの視聴履歴から自分の好みを分析してみた

2024/08/26

Python

はじめに

このサイトを作った時に、さすがに記事0はないな…と思ったので何か作ることにしました(と言いつつ、2ヶ月以上放置しています)。 自分は趣味が多い(方だと思っている)のですが、結局自分は何が好きなんだと言うことが気になったのでYouTubeの視聴履歴から頻出単語TOP100を見てみようと思います。

視聴履歴の取得

以下のサイトを参考に取得しました。

YouTubeの視聴履歴を振り返ってみよう ~あなたはどのようにしてぽこピーにハマったのか?~

分析の準備

上記の記事でGoogle Colaboratoryを使っていたので、なんとなく自分もそうしました。

ノートブックを新規作成し、取得したjsonファイルを置きます。pythonでデータ分析ということで、pandasを入れてjsonファイルを読み込みました。 全部見たいので、max_rowsをNoneにしています。

import pandas
import json

pandas.set_option('display.max_rows', None)
data = pandas.read_json("watch-history.json", encoding="utf-8")

データには余計な「 を視聴しました」という文言が入っていたので、取り除いておきます。

data['title'] = data.title.str.rstrip(" を視聴しました").dropna()

これをdata['title']で表示してみましょう。

0	社会人3年目やのに残業が多すぎるからA5ランクの焼肉行く
1	【12,000円課金】新キャラ引くまで無限にガチャ回します!【メガニケ】
2	Super Street Fighter 2X Turbo スパ2X 超級快打旋風 超級街霸...
3	生徒人気ゼロの生活指導
4	鹿島アントラーズ  Kashima Antlers 北海道コンサドーレ札幌 Hokkaid...
5	【衝撃】マックで使える超便利な裏技がこちらwww #マジック #魔法使い #ドッキリ
6	7月27日新曲公開🪞#鏡音リンレン #vocaloid
7	DJふぉいがウーバーを利用しなくなった理由【レペゼン切り抜き】
8	GOAT #mbappe #kylianmbappe #championsleague #b...
9	「阿鼻叫喚の夏祭り」自衛隊 第一空挺団についての雑学
10	🔥130万再生突破!!!感動の迷言集〜運命の再会〜【2ch感動スレ】#shorts
11	イチロー衰えない #イチロー #安打製造機 #振り子打法 #甲子園
12	ICE COLD FROM DROGBA
13	絶対に聞かれるこの質問はこうやって答える!
14	MBTI全16種類がいる飲み会
...

できましたね。「なんだこのラインナップ…」とも思いますが進みましょう。

単語を取り出す

文を単語に分ける操作のことを、自然言語処理の言葉で形態素解析というそうです。これはを自力でやるのは難しいので、オープンソースの形態素解析エンジンMecabを使っていきます。

まずはMecabとおまじないたちのインストール&import。正規表現を使うので、ついでにreもimportします。

# MeCabのインストール
!sudo apt-get install mecab libmecab-dev mecab-ipadic-utf8
# Pythonのバインディングをインストール
!pip install mecab-python3
# 辞書
!pip install ipadic

import MeCab
import ipadic
import re

dataの中にはurlや数字、記号など余計なものが入っているので、それらを取り除く関数を定義します。

def preprocess_text(text):
    text = re.sub(r'http\S+|www\S+|https\S+', '', text, flags=re.MULTILINE)
    text = re.sub(r'\d+', '', text)
    text = re.sub(r'[^\w\s]', '', text)
    return text

以上を使って、出てくる単語たちを数えていきます。

nouns = []
for title in data['title']:
  cleaned_title = preprocess_text(title)
  node = mecab.parseToNode(cleaned_title)
  while node:
      if node.feature.startswith('名詞'):
          nouns.append(node.surface)
      node = node.next

word_count = Counter(nouns)

word_countに、単語とその単語の出現回数の組が入っています。

完成、そして結果発表

以上でほぼ完成です。それでは、ランキングTOP10を表示しましょう。

most_common_words = pandas.DataFrame(word_count.most_common(10), columns=['単語', '出現回数'])
most_common_words
	単語	出現回数
0	shorts	8502
1	雑学	1888
2	人	1539
3	Shorts	1445
4	マリオ	1378
5	切り抜き	1275
6	サッカー	1212
7	ゲーム	1063
8	クラブ	953
9	さん	951
10	中	823

...shortsが一位という,なんとも言い難い結果でした.

参考文献