(12-3-04)动漫推荐系统:数据分析(4)

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()

对上述代码的具体说明如下所示:

  1. 首先,通过对动漫数据集进行降序排序,得到了 top_anime_temp2 数据集,该数据集按照动漫的平均评分进行排列。
  2. 然后,在一个包含两个子图的图形中,使用 Seaborn 的 histplot 函数绘制了两个直方图,分别展示了动漫的平均评分分布和用户对动漫的评分分布。
  3. 接着,第一个子图展示了动漫的平均评分分布。使用了 top_anime_temp2["rating"] 作为数据源,设置了颜色、核密度估计和边框颜色,以及直方图的填充效果。标题、轴标签和其他样式设置都旨在提高可读性。
  4. 接下来,第二个子图展示了用户对动漫的评分分布。我们使用了 fulldata["user_rating"] 作为数据源,同样设置了颜色、核密度估计和边框颜色,以及直方图的填充效果。这个子图的标题、轴标签和样式设置也旨在清晰地传达信息。
  5. 最后,通过调用 sns.despine(left=True, bottom=True) 移除了图形中的左侧和底部轴线,以提高整体外观。plt.show() 用于显示生成的可视化图,展示动漫评分的整体分布情况,如图12-13所示。

图12-13  动漫评分的整体分布情况

此时我们可以得到如下结论:

  1. 大多数动漫评分分布在5.5到8.0之间。
  2. 大多数用户评分分布在6.0到10.0之间。
  3. 用户评分分布的众数在7.0到8.0左右。
  4. 这两个分布都是左偏的。
  5. 用户评分中的值(-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()

对上述代码的具体说明如下所示:

  1. sns.barplot(...):使用 Seaborn 绘制横向条形图,展示了基于评分的热门动漫,其中包括了前14部动漫。
  2. p.bar_label(...):用于在条形图上添加标签。
  3. sns.despine(left=True, bottom=True) :用于移除图形中的轴线,使图形更清晰。
  4. plt.show():用于显示可视化图形,展示了根据评分排序的热门动漫。如图12-14所示。

图12-14  根据评分排序的热门动漫

未完待续

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农三叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值