推荐算法学习记录2.1——kaggle数据集的动漫电影数据集推荐算法实践——数据集介绍

最近已经学习的差不多了那个推荐算法,开启我的实践部分,本次实践采取了一个kaggle数据集的动漫电影数据集,写一个推荐系统的算法,数据集如下所示:

数据集介绍,单独版本

1、anime_with_synopsis.csv

1
2
3
4
5
6

import pandas as pd

anime_with_synopsis = pd. read_csv('./data/archive_2/anime_with_synopsis.csv')

anime_with_synopsis.head()

对这个关键的数据集进行最基本的观察和分析:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

import pandas as pd
# 加载数据
anime_with_synopsis = pd.read_csv('./data/archive_2/anime_with_synopsis.csv')
# 打印前几行数据
print(anime_with_synopsis.head())
# 去除重复项
anime_with_synopsis = anime_with_synopsis.drop_duplicates()
# 填补缺失值
anime_with_synopsis['Synopsis'] = anime_with_synopsis['Synopsis'].fillna('No synopsis available')
# 统计每种类型的动漫数量
anime_with_synopsis['Genres'] = anime_with_synopsis['Genres'].str.split(', ')
genres_exploded = anime_with_synopsis.explode('Genres')
genre_counts = genres_exploded['Genres'].value_counts()
print(genre_counts)
# 按评分降序排列
sorted_anime = anime_with_synopsis.sort_values(by='Score', ascending=False)
print(sorted_anime.head())

synopsis: 动漫的简要描述或剧情简介。

Genres: 动漫的类型(例如:动作、冒险、喜剧等)。

Score: 动漫的评分(通常是从 1 到 10)。

Name: 动漫的名称。

MAL_ID: 动漫的唯一标识符。

2、anime.csv

1
2
3

anime = pd. read_csv('./data/archive_2/anime.csv')
anime.head()

MAL_ID: 动漫的唯一标识符(与 anime_with_synopsis.csv 中的 MAL_ID 对应)。

Name: 动漫的名称。

Score: 动漫的评分。

Genres: 动漫的类型。

English name: 动漫的英文名称(如果有)。

Japanese name: 动漫的日文名称。

Type: 动漫的类型(例如:TV、电影、OVA)。

Episodes: 动漫的集数。

Aired: 播出时间段。

Premiered: 首播季节。

其他字段:有关评分的详细数据(例如,评分的分布)。

3、 animelist.csv

1
2
3

animelist = pd. read_csv('./data/archive_2/animelist.csv')
animelist.head()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

import pandas as pd
import matplotlib.pyplot as plt

# 加载数据
animelist = pd.read_csv('./data/archive_2/animelist.csv')

# 打印前几行数据
print(animelist.head())

# 显示 DataFrame 的基本信息
print(animelist.info())

# 显示数据的描述统计信息
print(animelist.describe())

# 检查缺失值
print(animelist.isna().sum())

# 填补缺失值
animelist = animelist.fillna(0)

# 筛选评分高于 8 的记录
high_ratings = animelist[animelist['rating'] > 8]
print(high_ratings)

# 筛选已观看的动漫
watched_anime = animelist[animelist['watching_status'] == 2] # 假设 2 表示已观看
print(watched_anime)

# 筛选已观看集数超过 10 集的记录
more_than_10_episodes = animelist[animelist['watched_episodes'] > 10]
print(more_than_10_episodes)

# 计算每个用户的平均评分
user_avg_rating = animelist.groupby('user_id')['rating'].mean()
print(user_avg_rating)

# 计算每个用户观看的总集数
user_total_watched_episodes = animelist.groupby('user_id')['watched_episodes'].sum()
print(user_total_watched_episodes)

# 绘制评分分布图
plt.figure(figsize=(10, 6))
plt.hist(animelist['rating'].dropna(), bins=10, edgecolor='k', alpha=0.7)
plt.title('Rating Distribution')
plt.xlabel('Rating')
plt.ylabel('Frequency')
plt.show()


user_id: 用户的唯一标识符。

anime_id: 动漫的唯一标识符(与 anime.csv 中的 MAL_ID 对应)。

rating: 用户对动漫的评分。

watching_status: 用户对动漫的观看状态。

watched_episodes: 用户观看的集数。

4、rating_complete.csv

字段:

user_id: 用户的唯一标识符。

anime_id: 动漫的唯一标识符。

rating: 用户对动漫的评分。

5、watching_status.csv

字段:

status: 状态的唯一标识符(与 animelist.csv 中的 watching_status 对应)。

description: 状态的描述(例如:正在观看、已完成、计划观看等)。

数据集之间的关系

anime_with_synopsis.csv 和 anime.csv

关系: 这两个数据集都包含动漫的基本信息,例如 MAL_ID、Name、Score 和 Genres。

区别:

anime_with_synopsis.csv 还包括每部动漫的简要描述(synopsis)。

anime.csv 包含更详细的播出信息和评分分布数据。

animelist.csv 和 rating_complete.csv

关系: 这两个数据集都包含用户对动漫的评分信息。

区别:

animelist.csv 包含了用户的观看状态和观看的集数。

rating_complete.csv 只包含用户对动漫的评分,没有观看状态和观看集数信息。

watching_status.csv 和 status_description.csv

关系: 这两个数据集都涉及用户的观看状态。

区别:

watching_status.csv 包含了用户对动漫的观看状态和状态的标识符。

status_description.csv 提供了这些状态标识符的描述。

animelist.csv 和 watching_status.csv

关系: animelist.csv 中的 watching_status 列与 watching_status.csv 中的 status 列相对应,表示用户的观看状态。

---------------------------------------------------------------------------------------------------

官网的网址:

https://www.kaggle.com/datasets/hernan4444/anime-recommendation-database-2020/data

kaggle官网介绍:

MyAnimeList 数据库 2020

推荐数据来自 MyAnimeList 网站的 320,000 用户和 16,000 动漫。

这个数据集包含关于 17,562 部动漫和 325,772 不同用户的偏好信息。具体来说,这个数据集包含:

  • 每个用户的动漫列表,包括已弃置、已完成、计划观看、正在观看和搁置的动漫。
  • 用户对其完全观看过的动漫所给出的评分。
  • 动漫的相关信息,如类型、统计数据、制作公司等。
  • 包含动漫信息的 HTML 文件进行数据抓取。这些文件包含诸如评论、剧情简介、工作人员信息、动漫统计、类型等信息。

内容

数据抓取时间为 2 月 26 日至 3 月 20 日。

  • “html” 文件夹包含每个动漫的 1 个 zip 文件(共 17,562 个动漫)。每个 zip 文件包含从 MyAnimeList 抓取的不同 HTML 页面,包括:

    • 主页
    • 评论
    • 推荐
    • 统计数据
    • 角色和工作人员
  • animelist.csv
    包含用户登记的所有动漫列表及其相应评分、观看状态和观看的集数。这个数据集包含 1.09 亿行、17,562 部不同的动漫和 325,772 名不同的用户。文件包含以下列:

    • user_id: 不可识别的随机生成用户 ID。
    • anime_id: MyAnimeList 动漫 ID。(例如:1)
    • score: 用户给出的 1 到 10 分的评分。如果用户未评分,则为 0。(例如:10)
    • watching_status: 用户动漫列表中的该动漫的状态 ID。(例如:2)
    • watched_episodes: 用户观看的集数。(例如:24)
  • watching_status.csv
    描述
    animelist.csv
    中 “watching_status” 列的所有可能状态。

  • rating_complete.csv

    animelist.csv
    的子集。这个数据集只考虑用户完全观看(watching_status==2)并评分(score!=0)的动漫。这个数据集包含 5,700 万个评分,涉及 16,872 部动漫和 310,059 名用户。文件包含以下列:

    • user_id: 不可识别的随机生成用户 ID。
    • anime_id: 用户评分的 MyAnimeList 动漫 ID。
    • rating: 用户给出的评分。
  • anime.csv
    包含每部动漫(共 17,562 部)的常规信息,如类型、统计数据、制作公司等。文件包含以下列:

    • MAL_ID: MyAnimeList 动漫 ID。(例如:1)
    • Name: 动漫全名。(例如:Cowboy Bebop)
    • Score: MyAnimeList 数据库中所有用户给出的平均评分。(例如:8.78)
    • Genres: 动漫类型的逗号分隔列表。(例如:Action, Adventure, Comedy, Drama, Sci-Fi, Space)
    • English name: 动漫的英文全名。(例如:Cowboy Bebop)
    • Japanese name: 动漫的日文全名。(例如:カウボーイビバップ)
    • Type: 动漫类型,如 TV、电影、OVA 等。(例如:TV)
    • Episodes: 动漫的集数。(例如:26)
    • Aired: 播出日期。(例如:Apr 3, 1998 to Apr 24, 1999)
    • Premiered: 首播季节。(例如:Spring 1998)
    • Producers: 制作公司的逗号分隔列表。(例如:Bandai Visual)
    • Licensors: 发行商的逗号分隔列表。(例如:Funimation, Bandai Entertainment)
    • Studios: 制作公司的逗号分隔列表。(例如:Sunrise)
    • Source: 动漫的来源,如漫画、轻小说、书籍等。(例如:Original)
    • Duration: 每集的时长。(例如:24 min. per ep.)
    • Rating: 年龄分级。(例如:R - 17+ (violence & profanity))
    • Ranked: 根据评分的排名。(例如:28)
    • Popularity: 根据添加到用户列表的用户数量的排名。(例如:39)
    • Members: 动漫的社区成员数量。(例如:1251960)
    • Favorites: 将该动漫标为最爱的用户数量。(例如:61,971)
    • Watching: 正在观看该动漫的用户数量。(例如:105808)
    • Completed: 已完成观看该动漫的用户数量。(例如:718161)
    • On-Hold: 将该动漫搁置的用户数量。(例如:71513)
    • Dropped: 弃置该动漫的用户数量。(例如:26678)
    • Plan to Watch: 计划观看该动漫的用户数量。(例如:329800)
    • Score-10: 评分为 10 的用户数量。(例如:229170)
    • Score-9: 评分为 9 的用户数量。(例如:182126)
    • Score-8: 评分为 8 的用户数量。(例如:131625)
    • Score-7: 评分为 7 的用户数量。(例如:62330)
    • Score-6: 评分为 6 的用户数量。(例如:20688)
    • Score-5: 评分为 5 的用户数量。(例如:8904)
    • Score-4: 评分为 4 的用户数量。(例如:3184)
    • Score-3: 评分为 3 的用户数量。(例如:1357)
    • Score-2: 评分为 2 的用户数量。(例如:741)
    • Score-1: 评分为 1 的用户数量。(例如:1580)