數(shù)據(jù)分析項(xiàng)目-電商銷售活動(dòng)復(fù)盤

數(shù)據(jù)分析項(xiàng)目-電商銷售活動(dòng)復(fù)盤總結(jié)
使用工具:Anaconda-jupyter、mysql
老師指路->http://www.itdecent.cn/u/1f32f227da5f

分析流程:

  • 1、總體運(yùn)營(yíng)指標(biāo)
  • 2、從價(jià)格區(qū)間找出表現(xiàn)不好的產(chǎn)品,優(yōu)化商品結(jié)構(gòu)
  • 3、從折扣區(qū)間來(lái)找出表現(xiàn)不好的產(chǎn)品,優(yōu)化商品結(jié)構(gòu)

此次分析的目標(biāo):
評(píng)估促銷活動(dòng)的結(jié)果,并根據(jù)情況優(yōu)化商品結(jié)構(gòu),以便讓自己的商品賣的更好。

import pandas as pd
import numpy as np

import warnings
warnings.filterwarnings('ignore')
#不顯示警告

讀取各部分?jǐn)?shù)據(jù)集、合并

import sqlalchemy

engine = sqlalchemy.create_engine('mysql+pymysql://username:password@localhost:3306/froghd')

# 讀取數(shù)據(jù)
# 商品信息表
sql_cmd = "select * from sales_info1"

# 執(zhí)行sql語(yǔ)句,獲取數(shù)據(jù)
dt1 = pd.read_sql(sql=sql_cmd, con=engine)

dt1.rename(columns={"sale_name":"商品名",
                    "sale_price":"售賣價(jià)",
                    "tag_price":"吊牌價(jià)",
                    "discout":"折扣率",
                    "stocks":"庫(kù)存量",
                    "stocks_value":"貨值",
                    "cost_price":"成本價(jià)",
                    "profit_rate":"利潤(rùn)率",
                    "skus":"SKU"},
          inplace=True)

dt1.head()
#engine = create_engine('dialect+driver://username:password@host:port/database')

#dialect -- 數(shù)據(jù)庫(kù)類型
#driver -- 數(shù)據(jù)庫(kù)驅(qū)動(dòng)選擇
#username -- 數(shù)據(jù)庫(kù)用戶名
#password -- 用戶密碼
#host 服務(wù)器地址
#port 端口
#database 數(shù)據(jù)庫(kù)
商品信息表
# 讀取數(shù)據(jù)
# 商品熱度表
sql_cmd = "select * from sales_info2"

# 執(zhí)行sql語(yǔ)句,獲取數(shù)據(jù)
dt2 = pd.read_sql(sql=sql_cmd, con=engine)

dt2.rename(columns={"sale_name":"商品名",
                    "uvs":"UV數(shù)",
                    "collections":"收藏?cái)?shù)",
                    "carts":"加購(gòu)物車數(shù)"},
          inplace=True)

dt2.head()
商品熱度表
# 讀取數(shù)據(jù)
# 商品銷售明細(xì)表
sql_cmd = "select * from sales_info3"

# 執(zhí)行sql語(yǔ)句,獲取數(shù)據(jù)
dt3 = pd.read_sql(sql=sql_cmd, con=engine)

dt3.rename(columns={"user_id":"用戶id",
                    "buy_date":"購(gòu)買日期",
                    "sale_name":"商品名",
                    "buy_cons":"購(gòu)買數(shù)量",
                    "buy_price":"購(gòu)買單價(jià)",
                    "cost_price":"購(gòu)買金額",
                    "is_tui":"是否退貨",
                    "tui_cons":"退貨件數(shù)",
                    "tui_price":"退貨金額"},
          inplace=True)

dt3['是否退貨']=dt3["是否退貨"].map({"是":1,"否":0})
#是否退貨用數(shù)字表示,便于統(tǒng)計(jì)
dt3.head()
商品銷售數(shù)據(jù)

合并商品信息表和商品熱度表數(shù)據(jù)

# 把商品信息加上該商品的熱度信息
# 得到基礎(chǔ)的商品信息,以及商品的一些熱度信息:加購(gòu)物車數(shù)量,收藏?cái)?shù)量、uv數(shù)
dt_product = dt1.merge(dt2,how="left",on="商品名")
#左連接,顯示全部信息
dt_product.head()
商品信息+商品熱度

合并商品信息表和商品熱度表和用戶銷售明細(xì)表

# 統(tǒng)計(jì)每個(gè)商品的一個(gè)銷售情況

product_sales = dt3.groupby("商品名").agg({"購(gòu)買數(shù)量":"sum",
                                                 "購(gòu)買金額":"sum",
                                                 "退貨件數(shù)":"sum",
                                                 "退貨金額":"sum",
                                                 "購(gòu)買單價(jià)":"mean",
                                                 "用戶id":pd.Series.nunique}).reset_index()
product_sales.rename(columns={"購(gòu)買數(shù)量":"商品銷售數(shù)量",
                              "購(gòu)買金額":"商品銷售金額",
                              "是否退貨":"商品退貨數(shù)量",
                              "退貨金額":"商品退貨金額",
                              "購(gòu)買單價(jià)":"商品銷售單價(jià)",
                              "用戶id":"購(gòu)買用戶數(shù)量"},inplace=True)
product_sales.head()
每件商品銷售情況
# 合并商品信息(三個(gè)表格數(shù)據(jù))
dt_product_sales = dt_product.merge(product_sales,how="left",on="商品名")
dt_product_sales.head()
合并表

一、總體運(yùn)營(yíng)情況評(píng)價(jià)

總體運(yùn)營(yíng)部分,主要關(guān)注銷售額、售賣比、UV、轉(zhuǎn)化率等指標(biāo),其他指標(biāo)作為輔助指標(biāo)。銷售額用來(lái)和預(yù)期目標(biāo)做對(duì)比,售賣比用來(lái)看商品流轉(zhuǎn)情況。

  • GMV:銷售額,在平臺(tái)里稱為到手價(jià)。
  • 實(shí)銷:GMV – 拒退金額。
  • 銷量:累計(jì)銷售量(含拒退)。
  • 客單價(jià):GMV / 客戶數(shù),客單價(jià)與毛利率息息相關(guān),一般客單價(jià)越高,毛利率越高。
  • UV:商品所在頁(yè)面的獨(dú)立訪問數(shù)。
  • 轉(zhuǎn)化率:客戶數(shù) / UV。
  • 折扣率:GMV / 吊牌總額(吊牌總額 = 吊牌價(jià) * 銷量),在日常工作中,吊牌額是必不可少的。
  • 備貨值:吊牌價(jià) * 庫(kù)存數(shù)。
  • 售賣比:又稱售罄率,GMV / 備貨值。
  • 收藏?cái)?shù):收藏某款商品的用戶數(shù)量。
  • 加購(gòu)數(shù):加購(gòu)物車人數(shù)。
  • SKU數(shù):促銷活動(dòng)中的SKU計(jì)數(shù)(一般指貨號(hào))。
  • SPU數(shù):促銷活動(dòng)中的SPU計(jì)數(shù)(一般指款號(hào))。
  • 拒退量:拒收和退貨的總數(shù)量。
  • 拒退額:拒收和退貨的總金額。
#1、GMV:銷售額,包含退貨的金額
gmv = dt_product_sales["商品銷售金額"].sum()

#2、實(shí)際銷售額=GMV - 退貨金額
return_sales = dt_product_sales["商品退貨金額"].sum()
return_money = gmv - return_sales

#3、銷量:累計(jì)銷售量(含拒退)
all_sales = dt_product_sales["商品銷售數(shù)量"].sum()

#4、客單價(jià):GMV / 客戶數(shù),客單價(jià)與毛利率息息相關(guān),一般客單價(jià)越高,毛利率越高。
# dt3.user_id.unique().count()
custom_price = gmv / dt_product_sales["購(gòu)買用戶數(shù)量"].sum()

# 5、UV:商品所在頁(yè)面的獨(dú)立訪問數(shù)
uv_cons = dt_product_sales["UV數(shù)"].sum()

# 6、轉(zhuǎn)化率:客戶數(shù) / UV。
uv_rate = dt_product_sales["購(gòu)買用戶數(shù)量"].sum() / dt_product_sales["UV數(shù)"].sum()

# 7、折扣率:GMV / 吊牌總額(吊牌總額 = 吊牌價(jià) * 銷量),在日常工作中,吊牌額是必不可少的。
tags_sales = np.sum(dt_product_sales["吊牌價(jià)"] * dt_product_sales["商品銷售數(shù)量"])
discount_rate= gmv / tags_sales 

# 8、備貨值:吊牌價(jià) * 庫(kù)存數(shù)。
goods_value = dt_product_sales["貨值"].sum()

# 9、售賣比:又稱售罄率,GMV / 備貨值。
sales_rate = gmv / goods_value

# 10、收藏?cái)?shù):收藏某款商品的用戶數(shù)量。
coll_cons = dt_product_sales["收藏?cái)?shù)"].sum()

# 11、加購(gòu)數(shù):加購(gòu)物車人數(shù)。
add_shop_cons = dt_product_sales["加購(gòu)物車數(shù)"].sum()

# 12、SKU數(shù):促銷活動(dòng)中的最小品類單元(一般指貨號(hào))。
sku_cons = dt_product_sales["SKU"].sum()

# 13、SPU數(shù):促銷活動(dòng)中的SPU計(jì)數(shù)(一般指款號(hào))。
spu_cons = len(dt_product_sales["商品名"].unique())

# 14、拒退量:拒收和退貨的總數(shù)量。退貨件數(shù)
reject_cons = dt_product_sales["退貨件數(shù)"].sum()

# 15、拒退額:拒收和退貨的總金額。
reject_money = dt_product_sales["商品退貨金額"].sum()

匯總統(tǒng)計(jì),與去年銷售情況比較

sales_state_dangqi = pd.DataFrame(
    {"GMV":[gmv,],"實(shí)際銷售額":[return_money,],"銷量":[all_sales,],"客單價(jià)":[custom_price,],
     "UV數(shù)":[uv_cons,],"UV轉(zhuǎn)化率":[uv_rate,],"折扣率":[discount_rate,],"貨值":[goods_value,],
     "售賣比":[sales_rate,],"收藏?cái)?shù)":[coll_cons,],"加購(gòu)數(shù)":[add_shop_cons,],"sku數(shù)":[sku_cons,],
     "spu數(shù)":[spu_cons,],"拒退量":[reject_cons,],"拒退額":[reject_money,],}, 
    ) #index=["今年雙11",]

# 去年的數(shù)據(jù)已經(jīng)統(tǒng)計(jì)好了,不需要計(jì)算
sales_state_tongqi = pd.DataFrame(
    {"GMV":[2261093,],"實(shí)際銷售額":[1464936.517,],"銷量":[7654,],"客單價(jià)":[609.34567,],
     "UV數(shù)":[904694,],"UV轉(zhuǎn)化率":[0.0053366,],"折扣率":[0.46,],"貨值":[12610930,],
     "售賣比":[0.1161,],"收藏?cái)?shù)":[4263,],"加購(gòu)數(shù)":[15838,],"sku數(shù)":[82,],
     "spu數(shù)":[67,],"拒退量":[2000,],"拒退額":[651188.57,],}, 
    ) #index=["去年雙11",]

#sales_state = pd.concat([sales_state_dangqi, sales_state_tangqi])
sales_state_dangqi_s = pd.DataFrame(sales_state_dangqi.stack()).reset_index().iloc[:,[1,2]]
sales_state_dangqi_s.columns = ["指標(biāo)","今年雙11"]
#數(shù)據(jù)置成列,新命名字段

sales_state_tongqi_s = pd.DataFrame(sales_state_tongqi.stack()).reset_index().iloc[:,[1,2]]
sales_state_tongqi_s.columns = ["指標(biāo)","去年雙11"]
#數(shù)據(jù)置成列,新命名字段

sales_state = pd.merge(sales_state_dangqi_s, sales_state_tongqi_s,on="指標(biāo)")
#通過(guò) 指標(biāo) 關(guān)聯(lián)兩張表
sales_state["同比"] = (sales_state["今年雙11"] - sales_state["去年雙11"]) / sales_state["去年雙11"]
sales_state
15個(gè)指標(biāo)年對(duì)比

二、從價(jià)格區(qū)間來(lái)優(yōu)化商品結(jié)構(gòu)

需要做的是,深入探究不同區(qū)間的數(shù)據(jù),以此來(lái)優(yōu)化后期的促銷結(jié)構(gòu)。
首先需要找到在本次促銷中此區(qū)間的銷售源數(shù)據(jù),源數(shù)據(jù)要求顯示具體的款號(hào)、銷售額、銷量等信息。
第二步,計(jì)算出每個(gè)款的轉(zhuǎn)化率、折扣率等數(shù)據(jù)。

# 劃分價(jià)格區(qū)間段
#設(shè)置切分區(qū)域
listBins = [0,200, 400, 100000]

#設(shè)置切分后對(duì)應(yīng)標(biāo)簽
listLabels = ['1_200','200_400','400及以上']

#利用pd.cut進(jìn)行數(shù)據(jù)離散化切分,注意分組標(biāo)簽和分組數(shù)要一致
"""
pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3,include_lowest=False)
x:需要切分的數(shù)據(jù)
bins:切分區(qū)域
right : 是否包含右端點(diǎn)默認(rèn)True,包含
labels:對(duì)應(yīng)標(biāo)簽,用標(biāo)記來(lái)代替返回的bins,若不在該序列中,則返回NaN
retbins:是否返回間距bins
precision:精度
include_lowest:是否包含左端點(diǎn),默認(rèn)False,不包含
"""
dt_product_sales['價(jià)格分組'] = pd.cut(dt_product_sales['售賣價(jià)'], bins=listBins, labels=listLabels, include_lowest=True)
dt_product_sales.head()
價(jià)格分組

價(jià)格區(qū)間銷售情況統(tǒng)計(jì)

  • 價(jià)格區(qū)間
  • 貨值
  • 貨值占比
  • 銷售額
  • 售賣比
  • 銷售占比
  • 銷量
  • 客單價(jià)
  • UV
  • 收藏?cái)?shù)
  • 加購(gòu)數(shù)
  • 轉(zhuǎn)化率
dt_product_sales_info = dt_product_sales.groupby("價(jià)格分組").agg({
                                        "貨值":"sum",
                                        "商品銷售金額":"sum",
                                        "商品銷售數(shù)量":"sum",
                                        "UV數(shù)":"sum",
                                        "購(gòu)買用戶數(shù)量":"sum",
                                        "收藏?cái)?shù)":"sum",
                                        "加購(gòu)物車數(shù)":"sum"
                                        }).reset_index()

# 貨值占比、銷售占比、客單價(jià)、轉(zhuǎn)化率
dt_product_sales_info["貨值占比"]=dt_product_sales_info["貨值"]/dt_product_sales_info["貨值"].sum()
dt_product_sales_info["銷售占比"]=dt_product_sales_info["商品銷售金額"]/dt_product_sales_info["商品銷售金額"].sum()
dt_product_sales_info["客單價(jià)"]=dt_product_sales_info["商品銷售金額"]/dt_product_sales_info["購(gòu)買用戶數(shù)量"]
dt_product_sales_info["轉(zhuǎn)化率"]=dt_product_sales_info["購(gòu)買用戶數(shù)量"]/dt_product_sales_info["UV數(shù)"]

dt_product_sales_info
價(jià)格分組

取出400及以上價(jià)格區(qū)間的數(shù)據(jù)內(nèi)容

product_400 = dt_product_sales[dt_product_sales["價(jià)格分組"]=='400及以上']

計(jì)算商品指標(biāo)

  • 銷售額
  • 銷量
  • 件單價(jià)
  • 客戶數(shù)
  • UV
  • 轉(zhuǎn)換率=客戶數(shù) / UV
  • 庫(kù)存
  • 備貨值=吊牌價(jià) * 庫(kù)存數(shù)
  • 售賣比=又稱售罄率,GMV / 備貨值
# 轉(zhuǎn)換率=客戶數(shù) / UV
product_400['轉(zhuǎn)換率'] = product_400["購(gòu)買用戶數(shù)量"]/product_400["UV數(shù)"]
# 備貨值=吊牌價(jià) * 庫(kù)存數(shù)
product_400["備貨值"] = product_400["吊牌價(jià)"]*product_400["商品銷售數(shù)量"]
product_400["售賣比"] = product_400["商品銷售金額"]/product_400["備貨值"]
product_400[["商品名","商品銷售金額","商品銷售數(shù)量","商品銷售單價(jià)","購(gòu)買用戶數(shù)量","UV數(shù)",'轉(zhuǎn)換率',"庫(kù)存量","備貨值","售賣比"]]
400以上
優(yōu)化方案:

轉(zhuǎn)化率大于0.7%的商品,暫時(shí)保留,用于下次促銷活動(dòng);
轉(zhuǎn)化率小于0.7%的商品,但是售賣比大于36%的商品予以保留參加下次促銷活動(dòng),
轉(zhuǎn)化率小于0.7%的商品,并且售賣比小于36%的商品進(jìn)行清倉(cāng)處理。

# 挑選合格的商品:
# 1、保留商品:轉(zhuǎn)化率大于0.7%的商品予以保留
stay_stocks571 = product_400[product_400["轉(zhuǎn)換率"]>0.007]
# 售賣比=又稱售罄率,GMV / 備貨值
product_400["售賣比"] = product_400["商品銷售金額"]/product_400["備貨值"]

# 挑選合格的商品:
# 2、保留商品:找出轉(zhuǎn)化率小于0.7% 但是 售賣比大于36%的部分予以保留
stay_stocks573 = product_400[(product_400["售賣比"]>=0.36)&(product_400["轉(zhuǎn)換率"]<0.007)

# 3、清倉(cāng)處理商品,找出轉(zhuǎn)化率小于0.7%并且售賣比小于36%的部分
stay_stocks574 = product_400[(product_400["售賣比"]<0.36)&(product_400["轉(zhuǎn)換率"]<0.007)]

三、從折扣區(qū)間來(lái)優(yōu)化商品結(jié)構(gòu)

折扣區(qū)間銷售情況統(tǒng)計(jì)

  • 價(jià)格區(qū)間
  • 貨值
  • 貨值占比
  • 銷售額
  • 售賣比
  • 銷售占比
  • 銷量
  • 客單價(jià)
  • UV
  • 收藏?cái)?shù)
  • 加購(gòu)數(shù)
  • 轉(zhuǎn)化率

1、劃分價(jià)格區(qū)間段
2、取出0.35-0.4價(jià)格區(qū)間(表現(xiàn)好的折扣區(qū)間)的數(shù)據(jù)內(nèi)容
3、計(jì)算商品指標(biāo)

  • 銷售額
  • 銷量
  • 件單價(jià)
  • 客戶數(shù)
  • UV
  • 轉(zhuǎn)換率=客戶數(shù) / UV
  • 庫(kù)存
  • 貨值=吊牌價(jià) * 庫(kù)存數(shù)
  • 售賣比=又稱售罄率,GMV / 備貨值
優(yōu)化方案:

折扣率大于37%的部分找出售賣比大于36.5%且轉(zhuǎn)化率大于0.7%的商品予以保留,其余進(jìn)行清倉(cāng)處理;

折扣率小于37%的部分找出售賣比大于36.5%且轉(zhuǎn)化率大于0.7%的部分予以保留,其余進(jìn)行清倉(cāng)處理。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容