【数据可视化-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()