同学网店的简单数据分析(一些可视化)

数据是从我朋友的电商店铺导出来的。

数据导入加处理

import pandas as pd
df = pd.read_excel('E:\python\电商数据.xlsx')
df1 = df.copy()
# 先去掉多余的参数
df1.drop(columns=['订单号','商品总价(元)','店铺优惠折扣(元)','平台优惠折扣(元)','邮费(元)','上门安装费(元)','送货入户费(元)','送货入户并安装费(元)','支付ID'], inplace=True)
df1.drop(columns=['身份证姓名','收货人','货品名称','货品类型','子货品','仓库名称','仓库所在地址','是否门店自提','门店名称','门店自定义编码','旅行类信息','消费者资料'], inplace=True)
df1.drop(columns=['手机','是否审核中','省','市','区','街道','快递公司','支付方式','是否抽奖或0元试用','是否顺丰加价','商家备注','售后状态','买家留言','关联货品编码'], inplace=True)
df1.drop(columns=['商品','商品规格','样式ID','商品id','拼单成功时间','承诺发货时间','发货时间','确认收货时间','用户购买手机号','商家编码-商品维度','海淘清关订单号'], inplace=True)

# 把数据保存起来
df1.to_excel('E:\python\处理后电商数据.xlsx')
# 重命名变量名
df1.rename(columns={'用户实付金额(元)':'ordermoney', '商家实收金额(元)' :'realmoney', '支付时间':'ordertime', '订单确认时间':'paytime', '商品数量(件)':'goodsamount', '商家编码-SKU维度':'sku'}, inplace=True)

# 处理数据
df1['是否刷单'] = df1['是否刷单'].str.replace('\t', '')
df1['快递单号'] = df1['快递单号'].str.replace('\t', '')
df1['快递单号'] = df1['快递单号'].replace('', 'NaN')
df1['sku'] = df1['sku'].str.replace('\t', '')
df1.drop(index=df1[df1.sku==''].index, inplace=True)

# 把sku的型号都换成数字
list1=['B5W-40-4', 'Q5W-30-4', 'Q5W-40-4', 'Q0W-40-4', 'Q0W-40-1', 'Q5W-40-1', 'Q5W-40-6', 'Q5W-40-5', 'Q0W-40-6', 'Q0W-40-5', 'Q5W-30-5', 'Q5W-30-6', 'Q5W-40-2', 'Q0W-40-2', 'Q5W-30-1',
'Q5W-30-2']
list2=[x for x in range(1,17)]
dict1=dict(zip(list1,list2))
for skui in dict1:
    df2['sku'].loc[df2['sku']==skui] = dict1[skui]

# 把订单状态也换成数字
list3=['已签收', '未发货,退款成功', '已发货,退款成功', '已签收,退款成功', '已发货,待签收', '待发货']
list4=[x for x in range(1,7)]
dict2=dict(zip(list3,list4))
for order in dict2:
    df2['订单状态'].loc[df2['订单状态']==order] = dict2[order]

开始分析

# 总金额GMV
df2['realmoney'].sum()

# 不包含退货的总额
real = df2.drop(index=df2[df2.订单状态==2].index, inplace=False)
real = real.drop(index=real[real.订单状态==3].index, inplace=False)
real = real.drop(index=real[real.订单状态==4].index, inplace=False)
real['realmoney'].sum()

# 没有退货和刷单的总额
realreal = real.drop(index=real[real.是否刷单=='刷单'].index, inplace=False)
realreal['realmoney'].sum()

# 退货率 0.06748318924111431
(df2['ordermoney'].count() - real['ordermoney'].count())/df2['ordermoney'].count()

说明退货率不高,能接受。

销售额折线图

df2['month'] = df2['paytime'].dt.month
real['month'] = real['paytime'].dt.month
realreal['month'] = realreal['paytime'].dt.month

# 设置字体,不至于乱码
from matplotlib import font_manager
%matplotlib inline
# mac fc-list : lang =zh
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\msyh.ttc',size=12)

import matplotlib.pyplot as plt
# 表的规格
plt.figure(figsize=(15,9))
plt.grid(alpha=0.4)

# 按照时间顺序
# 销售量
month = df2.groupby('month')['goodsamount'].count()

monthX1 = ['%d月'% x for x in range(5,13)]
monthX2 = ['%d月'% x for x in range(1,5)]
# for x in monthX2:
#     monthX1.append(x)
monthX1.extend(monthX2)
monthX = monthX1.copy()

y1 = df2.groupby('month')['realmoney'].sum().values
y1_1 = list(y1[4:13])
y1_2 =list(y1[0:4])
for y in y1_2:
    y1_1.append(y)
y1_y = y1_1.copy()

y2 = real.groupby('month')['realmoney'].sum().values
y2_1 = list(y2[4:13])
y2_2 =list(y2[0:4])
for y in y2_2:
    y2_1.append(y)
y2_y = y2_1.copy()

y3 = realreal.groupby('month')['realmoney'].sum().values
y3_1 = list(y3[4:13])
y3_2 =list(y3[0:4])
for y in y3_2:
    y3_1.append(y)
y3_y = y3_1.copy()

plt.xlabel('月份', fontproperties=my_font)
plt.ylabel('价格', fontproperties=my_font)
plt.title('销售额走势', fontproperties=my_font, color='r', size=22)

plt.xticks(range(len(monthX)),monthX,fontproperties=my_font) 

plt.plot(monthX, y1_y, label='GMV', color='red', marker='.')
plt.plot(monthX, y2_y, label='除掉退货的销售额', color='green', marker='*')
plt.plot(monthX, y3_y, label='不包含刷单的销售额', color='blue', marker='o')

# 添加坐标
for a,b in zip(monthX, y1_y):
    plt.annotate('%.2f' % b, xy=(a,b), xytext=(-20,10), textcoords='offset points', color='red')
for a,b in zip(monthX, y2_y):
    plt.annotate('%.2f' % b, xy=(a,b), xytext=(-5,5), textcoords='offset points', color='green')
for a,b in zip(monthX, y3_y):
    plt.annotate('%.2f' % b, xy=(a,b), xytext=(0,0), textcoords='offset points', color='blue')
    
plt.legend(prop=my_font, loc='upper right')
plt.show()

在这里插入图片描述

  1. 从销售额可以看得出来,818的活动力度不是很大,双十一的活动力度以及购买力是最强的,导致10月份的销售额有点下降,1、2、3月份的销售额急速下降,说明疫情对我同学的店铺影响特别大,也是因为我同学卖的是汽车部件,疫情期间,汽车的使用减少了,所以销售额不可观。
  2. 5月份的刷单量很多,是因为店铺刚开,需要将销量刷上去。
  3. 双十一退货量有点多,这方面可以对退货客户进行回访,询问退货详情,尽量减少退货率。

周一到周日的销量图

df2['dayofweek'] = df2['paytime'].dt.dayofweek
# df2['dayofweek'].unique()
weekX = ['周一','周二','周三','周四','周五','周六','周日']
week = df2.groupby('dayofweek')['goodsamount'].count()
weekY = week.values

plt.xticks(range(len(weekX)), weekX, fontproperties=my_font)
plt.title('周一到周日销量情况', fontproperties=my_font, color='r', size=20)
weekbars = plt.bar(range(len(weekX)), weekY, width=0.3, color=['r','g','b'])

for weekbar in weekbars:
    height=weekbar.get_height()
    width=weekbar.get_width()
    x=weekbar.get_x()
    plt.text(x+width/2, height+2, str(height), ha='center')
#     plt.text(x, height, str(height), ha='right')
plt.show()

在这里插入图片描述

  1. 周五周六销量较少,可能是因为顾客都是工作的人群,周五下班到周末休息,不太用到车子,更大的可能是周一上班的时候用到了才会想着买,所以周一的销量最大。
  2. 因为周五周六销量少,所以之后如果有排班的话,周五周六可以适当放个小假;如果要投放广告的话,也可以避开这两天。

一天当中的销量

df3 = df2.copy()

hour = df3['paytime'].dt.floor('30T')

interval = pd.Timedelta(29, unit='m')
df3['paytime'] = hour.dt.strftime('%H:%M') + '-' + (hour+interval).dt.strftime('%H:%M')

hourdf = df3.groupby('paytime')['goodsamount'].count()
hourX = hourdf.index
hourY = hourdf.values

plt.figure(figsize=(20,8), dpi=80)
# 一种图的类型——加网格
plt.style.use('ggplot')  
plt.xticks(range(len(hourX)), hourX, fontproperties=my_font, rotation=80)
plt.title('一天之内的销量情况', fontproperties=my_font, color='black', size=24)

plt.bar(range(len(hourX)), hourY, width=0.3, color='orange')
plt.show()

在这里插入图片描述

  1. 因为顾客是工薪阶层的人群,因此购买的时间段集中在上班的一整个时间段,以及下班在家的一段时间,中间有个低谷,那个时间段就是下班的点。如果是学生的话,可能更多的时间段集中在晚上。

  2. 本来应该还有复购率和rfm模型的,但是同学给的数据中没有用户ID这一类数据,所以就没办法了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值