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

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 类别中动漫的平均评分分布和用户对这些动漫的评分分布

此时可以得出如下结论:

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

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

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

此时可以得出如下结论:

  1. 大多数动漫评分分布在4.5到8.5之间。
  2. 大多数用户评分分布在5.0到10.0之间。
  3. 用户评分分布的众数在7.0到9.0左右。
  4. 这两个分布都是左偏的。
  5. 用户评分中的值(-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 类别中动漫的平均评分分布和用户对这些动漫的评分分布

此时可以得出如下结论:

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

此时可以得出如下结论:

  1. 大多数动漫评分分布在4.0到7.0之间。
  2. 大多数用户评分分布在5.0到10.0之间。
  3. 用户评分分布的众数在7.0到8.0左右。
  4. 这两个分布都是左偏的。
  5. 用户评分中的值(-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 类别中动漫的平均评分分布和用户对这些动漫的评分分布

此时可以得出如下结论:

  1. 大多数动漫评分分布在4.0到7.5之间。
  2. 大多数用户评分分布在5.0到10.0之间。
  3. 用户评分分布的众数在6.5到8.0左右。
  4. 这两个分布都是左偏的。
  5. 用户评分中的值(-1)是用户评分中的异常值,可以被丢弃。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码农三叔

感谢鼓励

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

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

打赏作者

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

抵扣说明:

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

余额充值