逆カテゴリ頻度


Wikipediaデータを用いてコンテンツ（アニメ・漫画・映画・ゲーム・小説）のデータ分析やデータ整理を行っています。本記事では、カテゴリ情報を用いて、コンテンツの特徴を算出することを試みます。

# 逆カテゴリ頻度
逆カテゴリ頻度とは、TF-IDFにおける**逆文書頻度**からのアイデアです。造語です。

TF-IDFは、ある文書における単語の重要度について、
1\. その文書にたくさん出現する
2\. 他の文書にあまり出現しない
なら、その単語は、その文書で重要な単語である、というような考え方です。

逆文書頻度は、2です。今回使いたい考え方は、2の**他の文書にあまり出現しないほうが重要**ということです。

これをWikipediaのカテゴリ情報に転用します。


## 例

私が好きなドラマに[奇跡の人（Wikipedia）](https://ja.wikipedia.org/wiki/%E5%A5%87%E8%B7%A1%E3%81%AE%E4%BA%BA_(2016%E5%B9%B4%E3%81%AE%E3%83%86%E3%83%AC%E3%83%93%E3%83%89%E3%83%A9%E3%83%9E))があります。これは盲聾（視力と聴力との両方の障がい）を主題としたヒューマンドラマです。

このドラマについてのWikipediaの記事には、以下のカテゴリに分類されています。
1\. Category:2016年のテレビドラマ
2\. Category:日テレアックスオンのテレビドラマ
3\. Category:視覚障害を扱ったテレビドラマ
4\. Category:日本の恋愛ドラマ
5\. Category:聴覚障害を扱ったテレビドラマ
6\. Category:岡田惠和脚本のテレビドラマ
7\. Category:プレミアムドラマ

これらのカテゴリにスコアをつけて差（順位）を出します（今回はスコアではなく頻度だけです）。

```SQL
WITH v_tag AS (
    SELECT id, UNNEST(tags) AS tag
    FROM t_wh_contents_tags 
    WHERE id = 3379751 -- このコンテンツIDは後述
)
SELECT
    id
    , category
    , count -- これは関数ではないです（後述のCSVの説明に記載）
FROM v_tag v
LEFT JOIN t_wh_contents_categories_count t ON v.tag = t.category 
WHERE tag LIKE 'Category:%'
```

この出力は以下のようになります。
```console
id	category	count
3379751	Category:2016年のテレビドラマ	434
3379751	Category:日テレアックスオンのテレビドラマ	198
3379751	Category:視覚障害を扱ったテレビドラマ	33
3379751	Category:日本の恋愛ドラマ	685
3379751	Category:聴覚障害を扱ったテレビドラマ	27
3379751	Category:岡田惠和脚本のテレビドラマ	74
3379751	Category:プレミアムドラマ	81
```

これは「日本の恋愛ドラマ」にカテゴライズされているコンテンツは685個あります。「聴覚障害を扱ったテレビドラマ」にカテゴライズされているコンテンツは27個しかなく、比較的少ないです。
**これは後者のカテゴリのほうが、よりこのコンテンツの特徴を表している**と考えることができます。

当該コンテンツを好むユーザに、**属するコンテンツがより少ないカテゴリを重視**しつつ、類似度を算出し、類似コンテンツを推薦します。


### 備考
なお、IDの3379751は、以下のSQLで探しています。

```SQL
SELECT * FROM t_wh_contents_title
WHERE title LIKE '奇跡の人%'
```

# 次回以降
本記事では、逆カテゴリ頻度を提案し、
1\. 逆カテゴリ頻度を用いてコンテンツ類似度を算出
2\. そのコンテンツ類似度からレコメンド
を記載したいと思っています。


# 利用したデータ

利用するデータは[ココ](https://hypergraph.jp/dl)に少しずつ整備しています。
今回利用するデータは以下です。
[コンテンツのタイトル(形式:csv、サイズ:5.3MB)](https://hypergraph.jp/dl/title.csv)
[コンテンツのタグ(形式:csv、サイズ:158MB)](https://hypergraph.jp/dl/tags.csv)

XXXにおけるカテゴリ情報も利用します。
これについては後述します。

## XXXにおけるカテゴリ情報

今回、以下のデータを追加しました。

[アニメ漫画におけるカテゴリ情報(形式:csv、サイズ:132KB)](https://hypergraph.jp/dl/categories_animanga.csv)
[映画におけるカテゴリ情報(形式:csv、サイズ:339KB)](https://hypergraph.jp/dl/categories_film.csv)
[ゲームにおけるカテゴリ情報(形式:csv、サイズ:69KB)](https://hypergraph.jp/dl/categories_game.csv)
[音楽におけるカテゴリ情報(形式:csv、サイズ:463KB)](https://hypergraph.jp/dl/categories_music.csv)
[小説におけるカテゴリ情報(形式:csv、サイズ:93KB)](https://hypergraph.jp/dl/categories_novel.csv)

このファイルは、以下のようなCSVになっています。「アニメ漫画におけるカテゴリ情報」における先頭数行です。

| id | category | count |type|
|:-----------:|:------------|:------------:|:------------:|
| 1 | Category:恋愛漫画 | 1485 | genre |
| 2 | Category:高等学校を舞台とした漫画作品 | 1220 | stage |
| 3 | Category:ギャグ漫画 | 1206 | genre |
| 4 | Category:ファンタジー漫画 | 970 | genre |
| 5 | Category:ギャグアニメ | 820 | genre |
| 6 | Category:日本のオリジナルテレビアニメ | 800 | original |

各列の概説は以下になります。

| 列 | 説明 | 
|:-----------:|:------------|
|id|一意の番号です。今のところ、他と結びつけることに使えていません。|
|category|wikipediaで付加されたカテゴリ名です。|
|count|そのカテゴリに属するコンテンツ数です。|
|type|カテゴリ自体をカテゴライズしたものです。|

## 前記事
本記事は、以下の記事の続きです。前記事にもデータの説明があります。

https://qiita.com/foj05123425/items/7ddfa1a8c119c414c0b1