12.4.6 总体动漫评价
总体动漫评价是对动漫作品整体质量或受欢迎程度的综合评价,在数据分析或推荐系统中,这表示对所有动漫的平均评分、中位数评分或其他综合指标的分析。使用 Seaborn 绘制了两个子图,用于展示动漫评分的分布情况。
# 根据动漫评分降序排序
top_anime_temp2 = top_anime.sort_values(["rating"], ascending=False)
# 创建包含两个子图的图形
_, axs = plt.subplots(2, 1, figsize=(20, 16), sharex=False, sharey=False)
plt.tight_layout(pad=6.0)
# 绘制第一个子图:动漫的平均评分分布
sns.histplot(top_anime_temp2["rating"], color=palette[11], kde=True, ax=axs[0], bins=20, alpha=1, fill=True, edgecolor=palette[12])
axs[0].lines[0].set_color(palette[12])
axs[0].set_title("\nAnime's Average Ratings Distribution\n", fontsize=25)
axs[0].set_xlabel("Rating\n", fontsize=20)
axs[0].set_ylabel("Total", fontsize=20)
# 绘制第二个子图:用户对动漫的评分分布
sns.histplot(fulldata["user_rating"], color=palette[12], kde=True, ax=axs[1], bins="auto", alpha=1, fill=True)
axs[1].lines[0].set_color(palette[11])
# axs[1].set_yscale("log")
axs[1].set_title("\n\n\nUsers Anime Ratings Distribution\n", fontsize=25)
axs[1].set_xlabel("Rating", fontsize=20)
axs[1].set_ylabel("Total", fontsize=20)
# 移除图形中的轴线
sns.despine(left=True, bottom=True)
# 显示图形
plt.show()
对上述代码的具体说明如下所示:
- 首先,通过对动漫数据集进行降序排序,得到了 top_anime_temp2 数据集,该数据集按照动漫的平均评分进行排列。
- 然后,在一个包含两个子图的图形中,使用 Seaborn 的 histplot 函数绘制了两个直方图,分别展示了动漫的平均评分分布和用户对动漫的评分分布。
- 接着,第一个子图展示了动漫的平均评分分布。使用了 top_anime_temp2["rating"] 作为数据源,设置了颜色、核密度估计和边框颜色,以及直方图的填充效果。标题、轴标签和其他样式设置都旨在提高可读性。
- 接下来,第二个子图展示了用户对动漫的评分分布。我们使用了 fulldata["user_rating"] 作为数据源,同样设置了颜色、核密度估计和边框颜色,以及直方图的填充效果。这个子图的标题、轴标签和样式设置也旨在清晰地传达信息。
- 最后,通过调用 sns.despine(left=True, bottom=True) 移除了图形中的左侧和底部轴线,以提高整体外观。plt.show() 用于显示生成的可视化图,展示动漫评分的整体分布情况,如图12-13所示。
图12-13 动漫评分的整体分布情况
此时我们可以得到如下结论:
- 大多数动漫评分分布在5.5到8.0之间。
- 大多数用户评分分布在6.0到10.0之间。
- 用户评分分布的众数在7.0到8.0左右。
- 这两个分布都是左偏的。
- 用户评分中的值(-1)是用户评分中的异常值,可以被丢弃。
12.4.7 基于评分的热门动漫
使用 Seaborn 绘制了一个横向条形图,展示了基于评分的热门动漫。
# 设置图形大小
plt.subplots(figsize=(20, 8))
# 绘制横向条形图
p = sns.barplot(x=top_anime_temp2["name"][:14], y=top_anime_temp2["rating"], palette=palette, saturation=1, edgecolor="#1c1c1c", linewidth=2)
# 设置标题和轴标签
p.axes.set_title("\nTop Animes Based On Ratings\n", fontsize=25)
plt.ylabel("Average Rating", fontsize=20)
plt.xlabel("\nAnime Title", fontsize=20)
# 旋转 x 轴标签
plt.xticks(rotation=90)
# 在条形图上添加标签
for container in p.containers:
p.bar_label(container, label_type="center", padding=10, size=15, color="black", rotation=0,
bbox={"boxstyle": "round", "pad": 0.6, "facecolor": "orange", "edgecolor": "black", "alpha": 1})
# 移除图形中的轴线
sns.despine(left=True, bottom=True)
# 显示图形
plt.show()
对上述代码的具体说明如下所示:
- sns.barplot(...):使用 Seaborn 绘制横向条形图,展示了基于评分的热门动漫,其中包括了前14部动漫。
- p.bar_label(...):用于在条形图上添加标签。
- sns.despine(left=True, bottom=True) :用于移除图形中的轴线,使图形更清晰。
- plt.show():用于显示可视化图形,展示了根据评分排序的热门动漫。如图12-14所示。
图12-14 根据评分排序的热门动漫