🧑 博主简介:曾任某智慧城市类企业
算法总监
,目前在美国市场的物流公司从事高级算法工程师
一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907
)
💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。
【数据可视化-40】Amazon 销售数据集可视化分析
一、引言
在市场分析中,数据可视化是揭示销售趋势、探索消费者行为的强大工具。本文将利用Amazon销售数据集,从多个维度进行可视化分析,深入探讨影响产品销售的因素以及各变量之间的关系。以下分析包括完整的Python代码实现,可供读者参考和复现。
二、数据探索
2.1 数据集介绍
该数据集包含以下变量:
- product_id:产品ID
- product_name:产品名称
- category:产品类别
- discounted_price:折扣价
- actual_price:原价
- discount_percentage:折扣百分比
- rating:产品评分
- rating_count:评分人数
- about_product:产品描述
- user_id:用户ID
- user_name:用户名
- review_id:评论ID
- review_title:评论标题
- review_content:评论内容
- img_link:产品图片链接
- product_link:产品页面链接
2.2 数据清洗探索
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 加载数据
df = pd.read_csv('amazon_sales_data.csv') # 请替换为实际文件路径
# 查看数据基本信息
print(df.info())
从数据基本信息可发现:
- 数据共16个维度,都是类别型变量,在做数字统计是需要将目标类别型变量转换成数字型变量。
- 数据中缺失值情况较好,只有rating_count字段有两个缺失值,其它特征无缺失值存在
为了方便后面的数据可视化展示,将数据进行清洗,并将其转换成数值型特;
df['category'] = df['category'].apply(lambda x:x.split('|')[0])
df = df[df['rating'] != '|']
df['rating'] = df['rating'].map(float)
df['discount_percentage'] = df['discount_percentage'].apply(lambda x:x[:-1])
df['discount_percentage'] = df['discount_percentage'].map(int)
df['actual_price'] = df['actual_price'].apply(lambda x:x[1:])
df['actual_price'] = df['actual_price'].apply(lambda x:x.replace(',',''))
df = df[df['actual_price'] != '']
df['actual_price'] = df['actual_price'].map(float)
三、单维度特征可视化
3.1 产品类别分布
plt.figure(figsize=(10, 6))
sns.countplot(y='category', data=df, order=df['category'].value_counts().index)
plt.title('Product Category Distribution')
plt.xlabel('Count')
plt.ylabel('Category')
plt.show()
3.2 评分分布
plt.figure(figsize=(8, 6))
sns.histplot(df['rating'], bins=5, kde=True, color='skyblue')
plt.title('Product Rating Distribution')
plt.xlabel('Rating')
plt.ylabel('Count')
plt.show()
3.3 折扣百分比分布
plt.figure(figsize=(8, 6))
sns.boxplot(x='discount_percentage', data=df)
plt.title('Discount Percentage Distribution')
plt.xlabel('Discount Percentage')
plt.show()
四、各个特征与销售关系的可视化
4.1 价格与评分关系
plt.figure(figsize=(10, 6))
sns.scatterplot(x='actual_price', y='rating', data=df, hue='category')
plt.title('Price vs Rating Relationship')
plt.xlabel('Actual Price')
plt.ylabel('Rating')
plt.legend(title='Category', loc='upper right')
plt.show()
4.2 类别与评分关系
plt.figure(figsize=(12, 6))
category_rating = df_top_20.groupby('category')['rating'].mean().reset_index()
sns.barplot(x='category', y='rating', data=category_rating, palette='pastel')
plt.title('Average Rating by Category')
plt.xlabel('Category')
plt.ylabel('Average Rating')
plt.xticks(rotation=45)
plt.show()
4.3 折扣与评分关系
plt.figure(figsize=(10, 6))
sns.lineplot(x='discount_percentage', y='rating', data=df, marker='o', color='coral')
plt.title('Discount vs Rating Relationship')
plt.xlabel('Discount Percentage')
plt.ylabel('Average Rating')
plt.show()
4.4 多维度组合分析(类别、价格、折扣与评分)
plt.figure(figsize=(14, 8))
for i, category in enumerate(df['category'].unique()[:5], 1):
plt.subplot(2, 3, i)
sns.scatterplot(x='actual_price', y='rating', data=df[df['category'] == category],
hue='discount_percentage', palette='plasma', size='discount_percentage', legend=False)
plt.title(f'{category} - Price vs Rating')
plt.xlabel('Actual Price')
plt.ylabel('Rating')
plt.tight_layout()
plt.show()
4.5 评分人数与评分关系
plt.figure(figsize=(10, 6))
sns.regplot(x='rating_count', y='rating', data=df, scatter_kws={'alpha':0.5}, line_kws={'color':'red'})
plt.title('Rating Count vs Rating Relationship')
plt.xlabel('Rating Count')
plt.ylabel('Rating')
plt.show()
从以上可视化分析可以看出:
- 产品类别分布:不同类别产品在数据集中占比差异显著。
- 评分分布:多数产品获得较高评分,表明消费者对产品质量的认可。
- 折扣与评分:存在一定正相关关系,高折扣产品可能获得更多关注和好评。
- 价格与评分:存在一定负相关关系,高价产品评分略低,可能因消费者对高价产品期望值更高。
- 类别与评分:不同类别产品评分差异明显,电子产品通常评分较高。
- 评分人数与评分:存在一定正相关关系,评分人数多的产品通常评分较高。
以上分析为理解影响产品销售的关键因素提供了多维度视角,为进一步的市场研究和销售策略制定提供了数据支持。
五、完整代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 加载数据
df = pd.read_csv('amazon_sales_data.csv') # 请替换为实际文件路径
# 查看数据基本信息
print(df.info())
df['category'] = df['category'].apply(lambda x:x.split('|')[0])
df = df[df['rating'] != '|']
df['rating'] = df['rating'].map(float)
df['discount_percentage'] = df['discount_percentage'].apply(lambda x:x[:-1])
df['discount_percentage'] = df['discount_percentage'].map(int)
df['actual_price'] = df['actual_price'].apply(lambda x:x[1:])
df['actual_price'] = df['actual_price'].apply(lambda x:x.replace(',',''))
df = df[df['actual_price'] != '']
df['actual_price'] = df['actual_price'].map(float)
plt.figure(figsize=(10, 6))
sns.countplot(y='category', data=df, order=df['category'].value_counts().index)
plt.title('Product Category Distribution')
plt.xlabel('Count')
plt.ylabel('Category')
plt.show()
plt.figure(figsize=(8, 6))
sns.histplot(df['rating'], bins=5, kde=True, color='skyblue')
plt.title('Product Rating Distribution')
plt.xlabel('Rating')
plt.ylabel('Count')
plt.show()
plt.figure(figsize=(8, 6))
sns.boxplot(x='discount_percentage', data=df)
plt.title('Discount Percentage Distribution')
plt.xlabel('Discount Percentage')
plt.show()
plt.figure(figsize=(10, 6))
sns.scatterplot(x='actual_price', y='rating', data=df, hue='category')
plt.title('Price vs Rating Relationship')
plt.xlabel('Actual Price')
plt.ylabel('Rating')
plt.legend(title='Category', loc='upper right')
plt.show()
plt.figure(figsize=(12, 6))
category_rating = df_top_20.groupby('category')['rating'].mean().reset_index()
sns.barplot(x='category', y='rating', data=category_rating, palette='pastel')
plt.title('Average Rating by Category')
plt.xlabel('Category')
plt.ylabel('Average Rating')
plt.xticks(rotation=45)
plt.show()
plt.figure(figsize=(10, 6))
sns.lineplot(x='discount_percentage', y='rating', data=df, marker='o', color='coral')
plt.title('Discount vs Rating Relationship')
plt.xlabel('Discount Percentage')
plt.ylabel('Average Rating')
plt.show()
plt.figure(figsize=(14, 8))
for i, category in enumerate(df['category'].unique()[:5], 1):
plt.subplot(2, 3, i)
sns.scatterplot(x='actual_price', y='rating', data=df[df['category'] == category],
hue='discount_percentage', palette='plasma', size='discount_percentage', legend=False)
plt.title(f'{category} - Price vs Rating')
plt.xlabel('Actual Price')
plt.ylabel('Rating')
plt.tight_layout()
plt.show()
plt.figure(figsize=(10, 6))
sns.regplot(x='rating_count', y='rating', data=df, scatter_kws={'alpha':0.5}, line_kws={'color':'red'})
plt.title('Rating Count vs Rating Relationship')
plt.xlabel('Rating Count')
plt.ylabel('Rating')
plt.show()
如果您在后续分析中有其他问题或需要进一步的帮助,欢迎随时交流探讨!