目录
- 背景描述
- 数据说明
- 数据来源
- 1. 导入模块
- 2. 乐高淘宝数据分析及其可视化
- 2.1 乐高淘宝数据概览
- 2.2 乐高淘宝数据处理
- 2.3 乐高销量排名淘宝店铺Top50
- 2.4 乐高产地数量排名top50
- 2.5 天猫乐高价格分布
- 2.6 不同价格区间的销售额整体表现分布
- 2.7 淘宝乐高标题词云图
- 3. 乐高天猫旗舰店数据分析及其可视化
- 3.1 乐高天猫旗舰店数据概览
- 3.2 乐高天猫旗舰店数据处理
- 3.3 乐高旗舰店月销量商品top50
- 3.4 乐高旗舰店不同价格区间商品数量分布
- 3.5 乐高旗舰店不同价格区间的销售额整体表现
- 3.6 乐高旗舰店商品标题词云图
- 附录
背景描述
在当前的电子商务环境中,淘宝作为中国最大的在线购物平台之一,对于各类商品的销售情况具有重要的参考价值。乐高作为一种深受消费者喜爱的创意玩具,其在淘宝上的销售情况自然也备受关注。为了更好地了解乐高商品在淘宝上的销售状况,本分析将对销售乐高的店铺及其乐高产品、销量等相关信息进行深入的探讨。
数据说明
为了确保分析的准确性和全面性,我们采用了包括多个方面的数据集。首先,我们收集了销售乐高的店铺信息,这包括但不限于店铺的规模、信誉、经营时间等重要因素,这些因素都可能影响到乐高产品的销售情况。其次,我们也关注了乐高的种类产品,因为不同种类的乐高产品可能会受到消费者的不同欢迎程度,从而影响其销售情况。最后,我们还考虑了销售省份的信息,因为不同地区的消费者可能对乐高产品的需求存在差异。
数据来源
我们的数据主要来源于淘宝和天猫这两个大型电商平台。淘宝作为中国最大的C2C电商平台,其上的商品种类繁多,销售数据丰富,能够为我们提供大量的原始数据。而天猫则主要是B2C模式,其上的商家大多是品牌商或者授权经销商,因此,从天猫获取的数据可以为我们提供更专业、更权威的信息。通过对这两个平台的数据进行分析,我们可以更全面、更准确地了解乐高商品在淘宝上的销售情况。
数据集下载:
乐高淘宝数据.csv
天猫乐高旗舰店数据.csv
乐高天猫数据概述.csv
1. 导入模块
2. 乐高淘宝数据分析及其可视化
2.1 乐高淘宝数据概览
2.2 乐高淘宝数据处理
2.3 乐高销量排名淘宝店铺Top50
使用Python的Pandas和Plotly库来处理和可视化数据。首先,从名为df_tb的数据框中按照’shop_name’列进行分组,并对每个组中的’purchase_num’列求和,然后按降序排序,并取前50个结果。
2.4 乐高产地数量排名top50
使用Plotly的px.bar函数创建一个条形图,其中x轴是地区,y轴是店铺统计数,颜色也根据店铺统计数来设置
2.5 天猫乐高价格分布
定义了价格区间和对应的标签,然后使用pandas的cut函数将价格分为不同的区间,并计算每个区间的数量。
2.6 不同价格区间的销售额整体表现分布
2.7 淘宝乐高标题词云图
3. 乐高天猫旗舰店数据分析及其可视化
3.1 乐高天猫旗舰店数据概览
3.2 乐高天猫旗舰店数据处理
3.3 乐高旗舰店月销量商品top50
3.4 乐高旗舰店不同价格区间商品数量分布
3.5 乐高旗舰店不同价格区间的销售额整体表现
3.6 乐高旗舰店商品标题词云图
附录
1. 导入模块
import numpy as np
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px
import jieba
from stylecloud import gen_stylecloud
from IPython.display import Image
2. 乐高淘宝数据分析及其可视化
2.1 乐高淘宝数据概览
df_tb =pd.read_csv('乐高淘宝数据.csv')
df_tb.head()
print("——" * 10)
print('数据集存在重复值个数:')
print(df_tb.duplicated().sum())
print("——" * 10)
print('数据集缺失值情况:')
print(df_tb.isna().sum())
print("——" * 10)
print('数据集各字段类型:')
print(df_tb.dtypes)
print("——" * 10)
print('数据总体概览:')
print(df_tb.info())
2.2 乐高淘宝数据处理
# 去除重复值
df_tb.drop_duplicates(inplace=True)
# 删除购买人数为空的记录
df_tb = df_tb[df_tb['purchase_num'].str.contains('人付款')]
# 重置索引
df_tb = df_tb.reset_index(drop=True)
df_tb.info()
# purchase_num处理
df_tb['purchase_num'] = df_tb['purchase_num'].str.extract('(\d+)').astype('int')
# 计算销售额
df_tb['sales_volume'] = df_tb['price'] * df_tb['purchase_num']
#location
df_tb['province'] = df_tb['location'].str.split(' ').str[0]
df_tb.head(5)
2.3 乐高销量排名淘宝店铺Top50
shop_top100 = df_tb.groupby('shop_name')['purchase_num'].sum().sort_values(ascending=False).reset_index()[:50]
px.bar(shop_top100, # 上面指定的数据
title="乐高销量排名淘宝店铺Top50",
template="plotly_white", # 分别主题设置为:plotly、plotly_dark
x="shop_name", # 横坐标
y="purchase_num", # 纵坐标
color="purchase_num",
labels={"shop_name": "店铺名称", "purchase_num": "销量"}) # 颜色取值
2.4 乐高产地数量排名top50
province_top50 = df_tb.province.value_counts().reset_index()[:50]
px.bar(province_top50, # 上面指定的数据
title="乐高产地数量排名top50",
template="plotly_white", # 分别主题设置为:plotly、plotly_dark
x="index", # 横坐标
y="province", # 纵坐标
color="province",
labels={"index": "地区", "province": "店铺统计数"}) # 颜色取值
2.5 天猫乐高价格分布
cut_bins = [0,50,100,200,300,500,1000,8888]
cut_labels = ['0~50元', '50~100元', '100~200元', '200~300元', '300~500元', '500~1000元', '1000元以上']
price_cut = pd.cut(df_tb['price'],bins=cut_bins,labels=cut_labels)
price_num = price_cut.value_counts().reset_index()
fig = px.pie(price_num,
names="index",
values="price",
color="price",
hole=0.3, # 设置中间空心圆的比例:0-1之间
labels={"index": "价格区间", "price": "价格数量"}
)
fig.update_layout(
title={ # 设置整个标题的名称和位置
"text":"天猫乐高价格分布",
"y":0.96, # y轴数值
"x":0.5, # x轴数值
"xanchor":"center", # x、y轴相对位置
"yanchor":"top"
}
)
fig.update_traces(
textposition='inside',
textinfo='percent+value+label',
textfont_size=20,
marker=dict(
line=dict(color='#000000',
width=1)))
fig.show()
2.6 不同价格区间的销售额整体表现分布
df_tb['price_cut'] = price_cut
cut_purchase = df_tb.groupby('price_cut')['sales_volume'].sum().reset_index()
fig = px.pie(cut_purchase,
names="price_cut",
values="sales_volume",
color="sales_volume",
hole=0.3, # 设置中间空心圆的比例:0-1之间
labels={"price_cut": "价格区间", "sales_volume": "销售额"}
)
fig.update_layout(
title={ # 设置整个标题的名称和位置
"text":"不同价格区间的销售额整体表现分布",
"y":0.96, # y轴数值
"x":0.5, # x轴数值
"xanchor":"center", # x、y轴相对位置
"yanchor":"top"
}
)
fig.update_traces(
textposition='inside',
textinfo='percent+value+label',
textfont_size=20,
marker=dict(
line=dict(color='#000000',
width=1)))
fig.show()
2.7 淘宝乐高标题词云图
def get_cut_words(content_series):
# 读入停用词表
stop_words = []
# 添加关键词
my_words = ['乐高', '悟空小侠', '大颗粒', '小颗粒']
for i in my_words:
jieba.add_word(i)
# 自定义停用词
my_stop_words = []
stop_words.extend(my_stop_words)
# 分词
word_num = jieba.lcut(content_series.str.cat(sep='。'), cut_all=False)
# 条件筛选
word_num_selected = [i for i in word_num if i not in stop_words and len(i)>=2]
return word_num_selected
text = get_cut_words(content_series=df_tb['goods_name'])
text[:10]
# 绘制词云图
gen_stylecloud(
text=' '.join(text),
collocations=False,
font_path=r'C:\Windows\Fonts\msyh.ttc',
icon_name='fas fa-plane',
size = 768,
output_name='淘宝乐高标题词云图.png'
)
Image(filename='淘宝乐高标题词云图.png')
3. 乐高天猫旗舰店数据分析及其可视化
3.1 乐高天猫旗舰店数据概览
df_tm = pd.read_csv('天猫乐高旗舰店数据.csv')
df_tm.head()
3.2 乐高天猫旗舰店数据处理
df_tm.drop_duplicates(inplace=True)
# 价格处理
def transform_price(x):
if '-' in x:
return (float(x.split('-')[1]) - float(x.split('-')[0]))/2
else:
return x
# 价格转换
df_tm['price'] = df_tm.price.apply(lambda x:transform_price(x)).astype('float')
# 使用平均值填充缺失值
df_tm['sales_num'] = df_tm.sales_num.replace('无',200)
#转换类型
df_tm['sales_num'] = df_tm.sales_num.astype('int')
df_tm['title'] = df_tm.title.str.replace('乐高旗舰店|官网|2020年', '')
#销售额
df_tm['sales_volume'] = df_tm['sales_num'] * df_tm['price']
rank_top50 = df_tm.groupby('title')['sales_num'].sum().sort_values(ascending=False).reset_index()[:50]
3.3 乐高旗舰店月销量商品top50
px.bar(rank_top50, # 上面指定的数据
title="乐高旗舰店月销量商品top50",
template="plotly_white", # 分别主题设置为:plotly、plotly_dark
x="title", # 横坐标
y="sales_num", # 纵坐标
color="sales_num",
height=1000, # 自定义高度为600
labels={"title": "商品", "sales_num": "销量"}) # 颜色取值
3.4 乐高旗舰店不同价格区间商品数量分布
cut_bins = [0,200,400,600,800,1000,2000,9469]
cut_labels = ['0~50元', '50~100元', '100~200元', '200~300元', '300~500元', '500~1000元', '1000元以上']
price_cut = pd.cut(df_tm['price'],bins=cut_bins,labels=cut_labels)
price_num = price_cut.value_counts().reset_index()
# 创建图表
fig = px.pie(
price_num,
names="index",
values="price",
color="price",
hole=0.3,
labels={"index": "价格区间", "price": "价格数量"},
template="ggplot2" # 使用ggplot2样式模板
)
# 修改布局
fig.update_layout(
title={
"text": "乐高旗舰店不同价格区间商品数量分布",
"y": 0.96,
"x": 0.5,
"xanchor": "center",
"yanchor": "top"
},
legend=dict(
yanchor="top",
y=0.9,
xanchor="left",
x=0.8,
orientation="v"
)
)
# 自定义颜色方案
colors = ['#FF9999', '#66B2FF', '#99FF99', '#FFCC99']
fig.update_traces(textposition='inside',
textinfo='percent+value+label',
textfont_size=20,marker=dict(colors=colors))
# 显示图表
fig.show()
3.5 乐高旗舰店不同价格区间的销售额整体表现
# 添加列
df_tm['price_cut'] = price_cut
cut_purchase = df_tm.groupby('price_cut')['sales_volume'].sum().reset_index()
# 创建图表
fig = px.pie(
cut_purchase,
names="price_cut",
values="sales_volume",
color="sales_volume",
hole=0.3,
labels={"price_cut": "价格区间", "sales_volume": "销售额"},
template="ggplot2" # 使用ggplot2样式模板
)
# 修改布局
fig.update_layout(
title={
"text": "乐高旗舰店不同价格区间的销售额整体表现",
"y": 0.96,
"x": 0.5,
"xanchor": "center",
"yanchor": "top"
},
legend=dict(
yanchor="top",
y=0.9,
xanchor="left",
x=0.8,
orientation="v"
)
)
# 自定义颜色方案
colors = ['#FF9999', '#66B2FF', '#99FF99', '#FFCC99']
fig.update_traces(textposition='inside',
textinfo='percent+value+label',
textfont_size=20,marker=dict(colors=colors))
# 显示图表
fig.show()
3.6 乐高旗舰店商品标题词云图
text = get_cut_words(content_series=df_tm['title'])
text[:6]
gen_stylecloud(
text=' '.join(text),
collocations=False,
font_path=r'C:\Windows\Fonts\msyh.ttc',
icon_name='fas fa-gamepad',
size=768,
output_name='乐高旗舰店商品标题词云图.png'
)
Image(filename='乐高旗舰店商品标题词云图.png')