12.4.8 按类别划分的动漫评分分布
(1)探索 TV 类别的评分分布信息,展示TV 类别中动漫的平均评分分布和用户对这些动漫的评分分布。
# 创建包含两个子图的图形
_, axs = plt.subplots(1, 2, figsize=(20, 8), sharex=False, sharey=False)
plt.tight_layout(pad=4.0)
# 绘制第一个子图:TV 类别中动漫的平均评分分布
sns.histplot(top_anime_temp2[top_anime_temp2["type"]=="TV"]["rating"], color=palette[0], kde=True, ax=axs[0], bins=20, alpha=1, fill=True, edgecolor=palette[12])
axs[0].lines[0].set_color(palette[11])
axs[0].set_title("\nAnime's Average Ratings Distribution [Category : TV]\n", fontsize=20)
axs[0].set_xlabel("Rating")
axs[0].set_ylabel("Total")
# 绘制第二个子图:TV 类别中用户对动漫的评分分布
sns.histplot(fulldata[fulldata["type"]=="TV"]["user_rating"], color=palette[0], kde=True, ax=axs[1], bins="auto", alpha=1, fill=True, edgecolor=palette[12])
axs[1].lines[0].set_color(palette[11])
# axs[1].set_yscale("log")
axs[1].set_title("\nUsers Anime Ratings Distribution [Category : TV]\n", fontsize=20)
axs[1].set_xlabel("Rating")
axs[1].set_ylabel("Total")
# 移除图形中的轴线
sns.despine(left=True, bottom=True)
plt.show()
上述代码绘制了两个子图,分别展示了 TV 类别中动漫的平均评分分布和用户对这些动漫的评分分布。左侧的子图展示了动漫的平均评分分布,右侧的子图展示了用户对这些动漫的评分分布。如图12-15所示。
图12-15 TV 类别中动漫的平均评分分布和用户对这些动漫的评分分布
此时可以得出如下结论:
- 大多数动漫评分分布在6.0到8.0之间。
- 大多数用户评分分布在6.0到10.0之间。
- 用户评分分布的众数在7.0到9.0左右。
- 这两个分布都是左偏的。
- 用户评分中的值(-1)是用户评分中的异常值,可以被丢弃。
(2)探索 OVA 类别的评分分布信息,具体实现代码如下所示。
# 创建包含两个子图的图形
_, axs = plt.subplots(1, 2, figsize=(20, 8), sharex=False, sharey=False)
plt.tight_layout(pad=4.0)
# 绘制第一个子图:OVA 类别中动漫的平均评分分布
sns.histplot(top_anime_temp2[top_anime_temp2["type"]=="OVA"]["rating"], color=palette[1], kde=True, ax=axs[0], bins=20, alpha=1, fill=True, edgecolor=palette[12])
axs[0].lines[0].set_color(palette[11])
axs[0].set_title("\nAnime's Average Ratings Distribution [Category : OVA]\n", fontsize=20)
axs[0].set_xlabel("Rating")
axs[0].set_ylabel("Total")
# 绘制第二个子图:OVA 类别中用户对动漫的评分分布
sns.histplot(fulldata[fulldata["type"]=="OVA"]["user_rating"], color=palette[1], kde=True, ax=axs[1], bins="auto", alpha=1, fill=True, edgecolor=palette[12])
axs[1].lines[0].set_color(palette[11])
# axs[1].set_yscale("log")
axs[1].set_title("\nUsers Anime Ratings Distribution [Category : OVA]\n", fontsize=20)
axs[1].set_xlabel("Rating")
axs[1].set_ylabel("Total")
# 移除图形中的轴线
sns.despine(left=True, bottom=True)
plt.show()
上述代码绘制了两个子图,分别展示了 OVA 类别中动漫的平均评分分布和用户对这些动漫的评分分布。左侧的子图展示了动漫的平均评分分布,右侧的子图展示了用户对这些动漫的评分分布。如图12-16所示。
图12-16 OVA 类别中动漫的平均评分分布和用户对这些动漫的评分分布
此时我们可以得出如下结论:
- 大多数动漫评分分布在5.5到7.5之间。
- 大多数用户评分分布在5.5到10.0之间。
- 用户评分分布的众数在7.0到8.0左右。
- 这两个分布都是左偏的。
- 用户评分中的值(-1)是用户评分中的异常值,可以被丢弃。
(3)探索 MOVIE 类别的评分分布信息,具体实现代码如下所示。
# 创建包含两个子图的图形
_, axs = plt.subplots(1, 2, figsize=(20, 8), sharex=False, sharey=False)
plt.tight_layout(pad=4.0)
# 绘制第一个子图:MOVIE 类别中动漫的平均评分分布
sns.histplot(top_anime_temp2[top_anime_temp2["type"]=="Movie"]["rating"], color=palette[2], kde=True, ax=axs[0], bins=20, alpha=1, fill=True, edgecolor=palette[12])
axs[0].lines[0].set_color(palette[3])
axs[0].set_title("\nAnime's Average Ratings Distribution [Category : Movie]\n", fontsize=20)
axs[0].set_xlabel("Rating")
axs[0].set_ylabel("Total")
# 绘制第二个子图:MOVIE 类别中用户对动漫的评分分布
sns.histplot(fulldata[fulldata["type"]=="Movie"]["user_rating"], color=palette[2], kde=True, ax=axs[1], bins="auto", alpha=1, fill=True, edgecolor=palette[12])
axs[1].lines[0].set_color(palette[3])
# axs[1].set_yscale("log")
axs[1].set_title("\nUsers Anime Ratings Distribution [Category : Movie]\n", fontsize=20)
axs[1].set_xlabel("Rating")
axs[1].set_ylabel("Total")
# 移除图形中的轴线
sns.despine(left=True, bottom=True)
plt.show()
上述代码绘制了两个子图,分别展示了 MOVIE 类别中动漫的平均评分分布和用户对这些动漫的评分分布,如图12-17所示。左侧的子图展示了动漫的平均评分分布,右侧的子图展示了用户对这些动漫的评分分布。
图12-17 MOVIE 类别中动漫的平均评分分布和用户对这些动漫的评分分布
此时可以得出如下结论:
- 大多数动漫评分分布在4.5到8.5之间。
- 大多数用户评分分布在5.0到10.0之间。
- 用户评分分布的众数在7.0到9.0左右。
- 这两个分布都是左偏的。
- 用户评分中的值(-1)是用户评分中的异常值,可以被丢弃。
(4)开始探索 SPECIAL 类别的评分分布信息,具体实现代码如下所示。
# 创建包含两个子图的图形
_, axs = plt.subplots(1, 2, figsize=(20, 8), sharex=False, sharey=False)
plt.tight_layout(pad=4.0)
# 绘制第一个子图:SPECIAL 类别中动漫的平均评分分布
sns.histplot(top_anime_temp2[top_anime_temp2["type"]=="Special"]["rating"], color=palette[3], kde=True, ax=axs[0], bins=20, alpha=1, fill=True, edgecolor=palette[12])
axs[0].lines[0].set_color(palette[11])
axs[0].set_title("\nAnime's Average Ratings Distribution [Category : Special]\n", fontsize=20)
axs[0].set_xlabel("Rating")
axs[0].set_ylabel("Total")
# 绘制第二个子图:SPECIAL 类别中用户对动漫的评分分布
sns.histplot(fulldata[fulldata["type"]=="Special"]["user_rating"], color=palette[3], kde=True, ax=axs[1], bins="auto", alpha=1, fill=True, edgecolor=palette[12])
axs[1].lines[0].set_color(palette[11])
# axs[1].set_yscale("log")
axs[1].set_title("\nUsers Anime Ratings Distribution [Category : Special]\n", fontsize=20)
axs[1].set_xlabel("Rating")
axs[1].set_ylabel("Total")
# 移除图形中的轴线
sns.despine(left=True, bottom=True)
plt.show()
上述代码绘制了两个子图,分别展示了 SPECIAL 类别中动漫的平均评分分布和用户对这些动漫的评分分布,如图12-18所示。左侧的子图展示了动漫的平均评分分布,右侧的子图展示了用户对这些动漫的评分分布。
图12-18 SPECIAL 类别中动漫的平均评分分布和用户对这些动漫的评分分布
此时可以得出如下结论:
- 大多数动漫评分分布在5.5到8.0之间。
- 大多数用户评分分布在5.0到10.0之间。
- 用户评分分布的众数在7.0到8.0左右。
- 这两个分布都是左偏的。
- 用户评分中的值(-1)是用户评分中的异常值,可以被丢弃。
(5)下面开始探索 ONA 类别的评分分布信息,具体实现代码如下所示,
# 创建包含两个子图的图形
_, axs = plt.subplots(1, 2, figsize=(20, 8), sharex=False, sharey=False)
plt.tight_layout(pad=4.0)
# 绘制第一个子图:ONA 类别中动漫的平均评分分布
sns.histplot(top_anime_temp2[top_anime_temp2["type"]=="ONA"]["rating"], color=palette[4], kde=True, ax=axs[0], bins=20, alpha=1, fill=True, edgecolor=palette[12])
axs[0].lines[0].set_color(palette[3])
axs[0].set_title("\nAnime's Average Ratings Distribution [Category : ONA]\n", fontsize=20)
axs[0].set_xlabel("Rating")
axs[0].set_ylabel("Total")
# 绘制第二个子图:ONA 类别中用户对动漫的评分分布
sns.histplot(fulldata[fulldata["type"]=="ONA"]["user_rating"], color=palette[4], kde=True, ax=axs[1], bins="auto", alpha=1, fill=True, edgecolor=palette[12])
axs[1].lines[0].set_color(palette[3])
# axs[1].set_yscale("log")
axs[1].set_title("\nUsers Anime Ratings Distribution [Category : ONA]\n", fontsize=20)
axs[1].set_xlabel("Rating")
axs[1].set_ylabel("Total")
# 移除图形中的轴线
sns.despine(left=True, bottom=True)
plt.show()
上述代码绘制了两个子图,分别展示了 ONA 类别中动漫的平均评分分布和用户对这些动漫的评分分布,如图12-19所示。左侧的子图展示了动漫的平均评分分布,右侧的子图展示了用户对这些动漫的评分分布。
图12-19 ONA 类别中动漫的平均评分分布和用户对这些动漫的评分分布
此时可以得出如下结论:
- 大多数动漫评分分布在4.0到7.0之间。
- 大多数用户评分分布在5.0到10.0之间。
- 用户评分分布的众数在7.0到8.0左右。
- 这两个分布都是左偏的。
- 用户评分中的值(-1)是用户评分中的异常值,可以被丢弃。
(6)下面开始探索 MUSIC 类别的评分分布信息,具体实现代码如下所示。
# 创建包含两个子图的图形
_, axs = plt.subplots(1, 2, figsize=(20, 8), sharex=False, sharey=False)
plt.tight_layout(pad=4.0)
# 绘制第一个子图:MUSIC 类别中动漫的平均评分分布
sns.histplot(top_anime_temp2[top_anime_temp2["type"]=="Music"]["rating"], color=palette[5], kde=True, ax=axs[0], bins=20, alpha=1, fill=True, edgecolor=palette[12])
axs[0].lines[0].set_color(palette[11])
axs[0].set_title("\nAnime's Average Ratings Distribution [Category : Music]\n", fontsize=20)
axs[0].set_xlabel("Rating")
axs[0].set_ylabel("Total")
# 绘制第二个子图:MUSIC 类别中用户对动漫的评分分布
sns.histplot(fulldata[fulldata["type"]=="Music"]["user_rating"], color=palette[5], kde=True, ax=axs[1], bins="auto", alpha=1, fill=True, edgecolor=palette[12])
axs[1].lines[0].set_color(palette[11])
# axs[1].set_yscale("log")
axs[1].set_title("\nUsers Anime Ratings Distribution [Category : Music]\n", fontsize=20)
axs[1].set_xlabel("Rating")
axs[1].set_ylabel("Total")
# 移除图形中的轴线
sns.despine(left=True, bottom=True)
plt.show()
上述代码绘制了两个子图,分别展示了 MUSIC 类别中动漫的平均评分分布和用户对这些动漫的评分分布,如图12-20所示。左侧的子图展示了动漫的平均评分分布,右侧的子图展示了用户对这些动漫的评分分布。
图12-20 MUSIC 类别中动漫的平均评分分布和用户对这些动漫的评分分布
此时可以得出如下结论:
- 大多数动漫评分分布在4.0到7.5之间。
- 大多数用户评分分布在5.0到10.0之间。
- 用户评分分布的众数在6.5到8.0左右。
- 这两个分布都是左偏的。
- 用户评分中的值(-1)是用户评分中的异常值,可以被丢弃。