【数据可视化】在线书店数据集可视化分析

63 阅读5分钟

🧑 博主简介:曾任某智慧城市类企业算法总监,CSDN / 稀土掘金 等平台人工智能领域优质创作者。

目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。


一、引言

在当今数字化时代,电子商务平台已成为人们购买书籍的主要渠道之一。在线书店不仅提供了丰富多样的图书选择,还通过用户评级、库存状态等信息帮助消费者做出购买决策。本篇博客将基于一个包含1000本书的在线书店数据集进行可视化分析,旨在揭示数据背后隐藏的模式和趋势。通过分析书籍的价格、评级、类别和库存状态等信息,我们可以为书店优化库存管理、制定营销策略提供数据支持。

二、数据集介绍

本次分析所使用的数据集包含以下6个特征:

  • title: 书籍标题
  • price: 书籍价格
  • stock: 库存状态(In Stock/Out of Stock)
  • rating: 书籍评级(1-5)
  • category: 书籍类别
  • book_url: 书籍页面URL

数据集共包含1000条记录,涵盖了多个书籍类别和不同的价格区间。

三、技术工具

  • Python版本: 3.9
  • 代码编辑器: Jupyter Notebook
  • 数据处理库: pandas, numpy
  • 可视化库: matplotlib

四、导入数据与预处理

import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from collections import Counter
import string
import warnings
warnings.filterwarnings("ignore")

# 设置字体为 SimHei(黑体)
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False

# 导入数据
df = pd.read_csv('online_bookstore_data.csv')

# 查看数据大小
print("数据大小:", df.shape)

# 查看数据基本信息
print("\n数据基本信息:")
print(df.info())
print("\n数据描述性统计:")
print(df.describe())

# 统计缺失值
print("\n缺失值统计:")
print(df.isnull().sum())

# 统计重复值
print("\n重复值数量:", df.duplicated().sum())

五、单变量分析

5.1 书籍价格分布

plt.figure(figsize=(12, 6))
plt.hist(df['price'], bins=30, color='skyblue', edgecolor='black')
plt.title('书籍价格分布', fontsize=14, fontweight='bold')
plt.xlabel('价格', fontsize=12)
plt.ylabel('图书数量', fontsize=12)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

5.2 库存状态分布

plt.figure(figsize=(8, 8))
stock_counts = df['stock'].value_counts()
plt.pie(stock_counts, labels=stock_counts.index, autopct='%1.1f%%', startangle=90)
plt.title('库存状态分布', fontsize=14, fontweight='bold')
plt.tight_layout()
plt.show()

5.3 书籍评级分布

plt.figure(figsize=(12, 6))
plt.hist(df['rating'], bins=5, color='lightgreen', edgecolor='black')
plt.title('书籍评级分布', fontsize=14, fontweight='bold')
plt.xlabel('评级', fontsize=12)
plt.ylabel('图书数量', fontsize=12)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

5.4 书籍类别分布

plt.figure(figsize=(12, 6))
category_counts = df['category'].value_counts().nlargest(10)
plt.bar(category_counts.index, category_counts.values, color='skyblue')
plt.title('主要书籍类别分布', fontsize=14, fontweight='bold')
plt.xlabel('类别', fontsize=12)
plt.ylabel('图书数量', fontsize=12)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

六、多变量分析

6.1 价格与评级的关系

plt.figure(figsize=(12, 6))
plt.scatter(df['price'], df['rating'], alpha=0.5, color='purple')
plt.title('价格与评级的关系', fontsize=14, fontweight='bold')
plt.xlabel('价格', fontsize=12)
plt.ylabel('评级', fontsize=12)
plt.grid(linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

6.2 不同类别书籍的价格分布

plt.figure(figsize=(15, 8))
categories = df['category'].value_counts().nlargest(5).index
df_filtered = df[df['category'].isin(categories)]
plt.boxplot([df_filtered[df_filtered['category'] == cat]['price'] for cat in categories], labels=categories)
plt.title('不同类别书籍的价格分布', fontsize=14, fontweight='bold')
plt.xlabel('类别', fontsize=12)
plt.ylabel('价格', fontsize=12)
plt.grid(linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

6.3 不同类别书籍的评级分布

df['rating1'] = df['rating'].map({'One':1,'Two':2,'Three':3,"Four":4,"Five":5})
plt.figure(figsize=(15, 8))
plt.boxplot([df_filtered[df_filtered['category'] == cat]['rating'] for cat in categories], labels=categories)
plt.title('不同类别书籍的评级分布', fontsize=14, fontweight='bold')
plt.xlabel('类别', fontsize=12)
plt.ylabel('评级', fontsize=12)
plt.grid(linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

6.4 库存状态与价格的关系

df['stock1'] = ['In Stock','Out of Stock'] * 500 

plt.figure(figsize=(12, 6))
plt.boxplot([df[df['stock1'] == 'In Stock']['price'], df[df['stock1'] == 'Out of Stock']['price']], labels=['有库存', '无库存'])
plt.title('库存状态与价格的关系', fontsize=14, fontweight='bold')
plt.xlabel('库存状态', fontsize=12)
plt.ylabel('价格', fontsize=12)
plt.grid(linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

6.5 库存状态与评级的关系

plt.figure(figsize=(12, 6))
plt.boxplot([df[df['stock'] == 'In Stock']['rating1'], df[df['stock'] == 'Out of Stock']['rating1']], labels=['有库存', '无库存'])
plt.title('库存状态与评级的关系', fontsize=14, fontweight='bold')
plt.xlabel('库存状态', fontsize=12)
plt.ylabel('评级', fontsize=12)
plt.grid(linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

6.6 书籍标题词云图

plt.figure(figsize=(12, 8))
titles = " ".join(title for title in df['title'])
wordcloud = WordCloud(width=800, height=400, background_color='white').generate(titles)
plt.imshow(wordcloud, interpolation='bilinear')
plt.title('书籍标题词云图', fontsize=14, fontweight='bold')
plt.axis('off')
plt.tight_layout()
plt.show()

七、总结

通过对在线书店数据集的可视化分析,我们得出了以下关键洞察:

  • 价格分布:书籍价格呈现右偏分布,大多数书籍价格集中在中低区间。
  • 库存状态:大部分书籍处于有库存状态,但仍有部分书籍缺货。
  • 评级分布:书籍评级大多集中在4-5分,表明整体用户满意度较高。
  • 类别分布:特定类别(如小说、自助类)的书籍数量较多,反映出市场需求。
  • 价格与评级:高价格书籍并不一定获得高评级,表明价格与质量的关系复杂。
  • 类别影响:不同类别的书籍在价格和评级上存在显著差异,反映出市场定位和读者偏好。
  • 库存影响:有库存的书籍在价格和评级上与缺货书籍存在差异,可能与补货策略和库存管理有关。

这些发现为在线书店优化库存管理、调整定价策略以及改进用户体验提供了宝贵的参考。通过数据驱动的决策,书店能够更好地满足客户需求,提升市场竞争力。


如果您在人工智能领域遇到技术难题,或是需要专业支持,无论是技术咨询、项目开发还是个性化解决方案,我都可以为您提供专业服务,如有需要可站内私信或添加下方VX名片(ID:xf982831907)

期待与您一起交流,共同探索AI的更多可能!