当前位置: 首页 > news >正文

【数据可视化-39】2009-2019年亚马逊50大畅销书数据集可视化分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

【数据可视化-39】2009-2019年亚马逊50大畅销书数据集可视化分析

    • 一、引言
    • 二、数据探索
      • 2.1 数据集介绍
      • 2.2 数据清洗探索
    • 三、单维度特征可视化
      • 3.1 类型分布饼图
      • 3.2 用户评分分布直方图
      • 3.3 评论数量箱线图
    • 四、各个特征与畅销关系的可视化
      • 4.1 年度畅销趋势折线图
      • 4.2 类型与用户评分关系的柱状图
      • 4.3 价格与评论数量关系的散点图
      • 4.4 多维组合分析
    • 五、完整代码

一、引言

  在市场分析与文化研究中,数据可视化是揭示图书销售趋势、探索读者偏好的利器。本文将利用2009-2019年亚马逊50大畅销书数据集,从多个维度进行可视化分析,深入探讨影响图书畅销的因素以及各变量之间的关系。以下分析包括完整的Python代码实现,可供读者参考和复现。

二、数据探索

2.1 数据集介绍

  该数据集包含以下变量:

  • Name:书名
  • Author:作者
  • User Rating:亚马逊用户评分
  • Reviews:评论数
  • Price:价格
  • Year:上榜年份
  • Genre:类型(小说或非小说)

2.2 数据清洗探索

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# 加载数据
df = pd.read_csv('amazon_top_50_books_2009_2019.csv')  # 请替换为实际文件路径# 查看数据基本信息
print(df.info())

  从数据基本信息可发现:

  • 数据共7个维度,包含字符串、数值类型变量。
  • 数据集中一共550条数据,而且数据中不存在缺失值。

三、单维度特征可视化

3.1 类型分布饼图

# 统计各类图书数量
genre_counts = df['Genre'].value_counts()# 绘制饼图
plt.figure(figsize=(8, 8))
plt.pie(genre_counts, labels=genre_counts.index, autopct='%1.1f%%', startangle=90)
plt.title('Genre Distribution')
plt.show()

3.2 用户评分分布直方图

# 绘制用户评分分布直方图
plt.figure(figsize=(10, 6))
plt.hist(df['User Rating'].dropna(), bins=10, color='skyblue', edgecolor='black')
plt.title('User Rating Distribution')
plt.xlabel('Rating')
plt.ylabel('Count')
plt.show()

3.3 评论数量箱线图

# 绘制评论数量箱线图
plt.figure(figsize=(8, 6))
plt.boxplot(df['Reviews'].dropna())
plt.title('Reviews Distribution')
plt.ylabel('Reviews')
plt.show()

四、各个特征与畅销关系的可视化

4.1 年度畅销趋势折线图

# 按年份统计畅销书数量
yearly_counts = df['Year'].value_counts().sort_index()# 绘制折线图
plt.figure(figsize=(10, 6))
plt.plot(yearly_counts.index, yearly_counts.values, marker='o', color='orange')
plt.title('Annual Bestseller Trends')
plt.xlabel('Year')
plt.ylabel('Count')
plt.grid(True)
plt.show()

4.2 类型与用户评分关系的柱状图

# 按类型统计平均用户评分
genre_rating = df.groupby('Genre')['User Rating'].mean().reset_index()# 绘制柱状图
plt.figure(figsize=(8, 6))
plt.bar(genre_rating['Genre'], genre_rating['User Rating'], color=['lightgreen', 'salmon'])
plt.title('Average Rating by Genre')
plt.xlabel('Genre')
plt.ylabel('Average Rating')
plt.show()

4.3 价格与评论数量关系的散点图

# 绘制价格与评论数量散点图
plt.figure(figsize=(10, 6))
plt.scatter(df['Price'], df['Reviews'], alpha=0.6, color='purple')
plt.title('Price vs Reviews')
plt.xlabel('Price')
plt.ylabel('Reviews')
plt.grid(True)
plt.show()

4.4 多维组合分析

# 创建组合图
fig, axs = plt.subplots(2, 2, figsize=(15, 12))# 类型分布饼图
genre_counts = df['Genre'].value_counts()
axs[0, 0].pie(genre_counts, labels=genre_counts.index, autopct='%1.1f%%', startangle=90)
axs[0, 0].set_title('Genre Distribution')# 用户评分分布直方图
axs[0, 1].hist(df['User Rating'].dropna(), bins=10, color='skyblue', edgecolor='black')
axs[0, 1].set_title('User Rating Distribution')
axs[0, 1].set_xlabel('Rating')
axs[0, 1].set_ylabel('Count')# 年度畅销趋势折线图
yearly_counts = df['Year'].value_counts().sort_index()
axs[1, 0].plot(yearly_counts.index, yearly_counts.values, marker='o', color='orange')
axs[1, 0].set_title('Annual Bestseller Trends')
axs[1, 0].set_xlabel('Year')
axs[1, 0].set_ylabel('Count')
axs[1, 0].grid(True)# 价格与评论数量散点图
axs[1, 1].scatter(df['Price'], df['Reviews'], alpha=0.6, color='purple')
axs[1, 1].set_title('Price vs Reviews')
axs[1, 1].set_xlabel('Price')
axs[1, 1].set_ylabel('Reviews')
axs[1, 1].grid(True)plt.tight_layout()
plt.show()

  从以上可视化分析可以看出:

  • 类型分布:非小说类图书在畅销书中占比较高。
  • 用户评分:多数畅销书获得较高用户评分,表明读者对畅销书的认可。
  • 评论数量:评论数量分布差异显著,部分书籍引发大量读者讨论。
  • 年度趋势:畅销书籍数量呈现一定波动,可能受市场变化和读者偏好影响。
  • 类型与评分:两类图书在平均评分上存在一定差异,非小说类图书略高。
  • 价格与评论:存在一定正相关关系,高价图书可能获得更多关注和讨论。

  以上分析为理解影响图书畅销的因素提供了多维度视角,为进一步的市场研究和出版策略制定提供了数据支持。

  如果您在后续分析中有其他问题或需要进一步的帮助,欢迎随时交流探讨!

五、完整代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# 加载数据
df = pd.read_csv('amazon_top_50_books_2009_2019.csv')  # 请替换为实际文件路径# 查看数据基本信息
print(df.info())# 统计各类图书数量
genre_counts = df['Genre'].value_counts()# 绘制饼图
plt.figure(figsize=(8, 8))
plt.pie(genre_counts, labels=genre_counts.index, autopct='%1.1f%%', startangle=90)
plt.title('Genre Distribution')
plt.show()# 绘制用户评分分布直方图
plt.figure(figsize=(10, 6))
plt.hist(df['User Rating'].dropna(), bins=10, color='skyblue', edgecolor='black')
plt.title('User Rating Distribution')
plt.xlabel('Rating')
plt.ylabel('Count')
plt.show()# 绘制评论数量箱线图
plt.figure(figsize=(8, 6))
plt.boxplot(df['Reviews'].dropna())
plt.title('Reviews Distribution')
plt.ylabel('Reviews')
plt.show()# 按年份统计畅销书数量
yearly_counts = df['Year'].value_counts().sort_index()# 绘制折线图
plt.figure(figsize=(10, 6))
plt.plot(yearly_counts.index, yearly_counts.values, marker='o', color='orange')
plt.title('Annual Bestseller Trends')
plt.xlabel('Year')
plt.ylabel('Count')
plt.grid(True)
plt.show()# 按类型统计平均用户评分
genre_rating = df.groupby('Genre')['User Rating'].mean().reset_index()# 绘制柱状图
plt.figure(figsize=(8, 6))
plt.bar(genre_rating['Genre'], genre_rating['User Rating'], color=['lightgreen', 'salmon'])
plt.title('Average Rating by Genre')
plt.xlabel('Genre')
plt.ylabel('Average Rating')
plt.show()# 绘制价格与评论数量散点图
plt.figure(figsize=(10, 6))
plt.scatter(df['Price'], df['Reviews'], alpha=0.6, color='purple')
plt.title('Price vs Reviews')
plt.xlabel('Price')
plt.ylabel('Reviews')
plt.grid(True)
plt.show()# 创建组合图
fig, axs = plt.subplots(2, 2, figsize=(15, 12))# 类型分布饼图
genre_counts = df['Genre'].value_counts()
axs[0, 0].pie(genre_counts, labels=genre_counts.index, autopct='%1.1f%%', startangle=90)
axs[0, 0].set_title('Genre Distribution')# 用户评分分布直方图
axs[0, 1].hist(df['User Rating'].dropna(), bins=10, color='skyblue', edgecolor='black')
axs[0, 1].set_title('User Rating Distribution')
axs[0, 1].set_xlabel('Rating')
axs[0, 1].set_ylabel('Count')# 年度畅销趋势折线图
yearly_counts = df['Year'].value_counts().sort_index()
axs[1, 0].plot(yearly_counts.index, yearly_counts.values, marker='o', color='orange')
axs[1, 0].set_title('Annual Bestseller Trends')
axs[1, 0].set_xlabel('Year')
axs[1, 0].set_ylabel('Count')
axs[1, 0].grid(True)# 价格与评论数量散点图
axs[1, 1].scatter(df['Price'], df['Reviews'], alpha=0.6, color='purple')
axs[1, 1].set_title('Price vs Reviews')
axs[1, 1].set_xlabel('Price')
axs[1, 1].set_ylabel('Reviews')
axs[1, 1].grid(True)plt.tight_layout()
plt.show()

相关文章:

  • 【网络原理】 网络编程套接字
  • 探索排序算法的奥秘(上):冒泡排序、选择排序、插入排序
  • Babel、core-js、Loader之间的关系和作用全解析
  • 【Google Colab】利用unsloth针对医疗数据集进行大语言模型的快速微调(含跑通原代码)
  • 科技打头阵,创新赢未来——中科视界携千眼狼超高速摄像机亮相第三届科交会
  • 二叉树的前序、中序和后序遍历:详解与实现
  • FastAPI系列06:FastAPI响应(Response)
  • 信号量函数
  • 计算机网络全栈精讲:从 TCP/UDP 原理到 Socket 编程与 HTTP 协议实战(含代码实现)
  • Matlab 报错:尝试将 SCRIPT vl_sift 作为函数执行:
  • Linux 【杂谈】基础知识(一)
  • 双目RealSense系统配置rs_camera.launch----实现D435i自制rosbag数据集到离线场景的slam建图
  • 贪心算法-860.柠檬水找零-力扣(LeetCode)
  • Linux系统编程:信号量Semaphore详解 (IPC)
  • vue3中ref在js中为什么需要.value才能获取/修改值?
  • C++:STL——list
  • 可以隐藏列的表格
  • 单片机 + 图像处理芯片 + TFT彩屏 复选框控件
  • Linux内核中的编译时安全防护:以网络协议栈控制块校验为例
  • 单片机之间的双向通信
  • 赛力斯拟赴港上市:去年扭亏为盈净利59亿元,三年内实现百万销量目标
  • 挤占学生伙食费、公务考察到景区旅游……青岛通报5起违规典型问题
  • 中央纪委办公厅公开通报3起整治形式主义为基层减负典型问题
  • 5月动漫|“爱死机”即将回归,《明末》或是下一个大IP?
  • 伊朗港口爆炸事件已致195人受伤
  • 理想汽车副总裁刘杰:不要被竞争牵着鼻子走,也不迷信护城河