淘宝天猫玩具销售数据可视化(上)https://developer.aliyun.com/article/1507875
附录
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')