🧑 博主简介:曾任某智慧城市类企业算法总监,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的更多可能!