分析目標(biāo)
本次分析的目標(biāo)以用戶和消費(fèi)產(chǎn)品為主衷蜓,意在構(gòu)建用戶畫像拟糕。找出熱門銷售產(chǎn)品判呕,為下一次促銷做準(zhǔn)備。
數(shù)據(jù)獲取
數(shù)據(jù)來源于kaggle的Black Friday數(shù)據(jù)集送滞,數(shù)據(jù)特征如下:
- 客戶ID
- 產(chǎn)品ID
- 性別
- 年齡段
- 客戶職業(yè)
- 所在城市類別
- 在當(dāng)前城市生活年份
- 婚姻狀況
- 購(gòu)買產(chǎn)品所屬類別1
- 購(gòu)買產(chǎn)品所屬類別2
- 購(gòu)買產(chǎn)品所屬類別3
- 消費(fèi)額(美元)
數(shù)據(jù)導(dǎo)入
導(dǎo)入相關(guān)包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# 中文設(shè)置
plt.rcParams['font.sans-serif'] = ['SimHei']
# 坐標(biāo)軸正常顯示負(fù)數(shù)
plt.rcParams['axes.unicode_minus'] = False
# 使用R語(yǔ)言的繪圖風(fēng)格
plt.style.use('ggplot')
df = pd.read_csv('black_friday.csv')
df.head()
首先查看數(shù)據(jù)整體情況侠草,檢查是否存在缺失值。
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 550068 entries, 0 to 550067
Data columns (total 12 columns):
User_ID 550068 non-null int64
Product_ID 550068 non-null object
Gender 550068 non-null object
Age 550068 non-null object
Occupation 550068 non-null int64
City_Category 550068 non-null object
Stay_In_Current_City_Years 550068 non-null object
Marital_Status 550068 non-null int64
Product_Category_1 550068 non-null int64
Product_Category_2 376430 non-null float64
Product_Category_3 166821 non-null float64
Purchase 550068 non-null int64
dtypes: float64(2), int64(5), object(5)
memory usage: 50.4+ MB
Product_Category_2和Product_Category_3都存在大量的缺失值犁嗅。
print('Product_Category_2 缺失值占比:', df.Product_Category_2.isna().sum()/len(df))
print('Product_Category_3 缺失值占比:', df.Product_Category_3.isna().sum()/len(df))
Product_Category_2 缺失值占比: 0.3156664266963357
Product_Category_3 缺失值占比: 0.6967265865311197
品類2缺失數(shù)據(jù)166986條边涕,缺失數(shù)據(jù)占比達(dá)31%,品類3缺失數(shù)據(jù)373299條褂微,缺失數(shù)據(jù)占比達(dá)69%功蜓,品類數(shù)據(jù)缺失過于嚴(yán)重,即使進(jìn)行填充宠蚂,也會(huì)產(chǎn)生極大的誤差式撼,因此分析時(shí)忽略品類2、品類3的數(shù)據(jù)求厕。
刪除品類2和品類3的數(shù)據(jù)著隆。
df = df.dropna(axis=1)
df.head()
構(gòu)建用戶畫像
性別對(duì)消費(fèi)的影響
genderPurchase = df.pivot_table(index=['User_ID', 'Gender'], values='Purchase', aggfunc='sum').reset_index()
genderCount = genderPurchase.groupby('Gender').size().reset_index(name='peoNum')
genderCount['Percentage'] = genderCount.peoNum / genderCount.peoNum.sum()
genderCount
女性消費(fèi)者人數(shù)為1666人扰楼,占所有消費(fèi)者的28.3%;男性消費(fèi)者人數(shù)為4225人美浦,占所有消費(fèi)者的71.7%弦赖,是女性消費(fèi)者的2.5倍。消費(fèi)者以男性為主體抵代。
groupedGender = (df.groupby('Gender').Purchase.sum() / 100000000).round(2).reset_index()
groupedGender['Percentage'] = groupedGender.Purchase / groupedGender.Purchase.sum()
groupedGender
女性消費(fèi)總額為11.86億元,占總銷售額的23.3%;男性消費(fèi)總額為39.10億元腾节,占總銷售額的76.7%,
是女性消費(fèi)總量的3.3倍荤牍。
plt.figure(figsize=(10, 5))
plt.bar(groupedGender.Gender, groupedGender.Purchase)
plt.title('性別-消費(fèi)總額對(duì)比')
plt.xlabel('性別')
plt.ylabel('消費(fèi)總額/億元')
plt.pie(groupedGender.Purchase,labels=groupedGender.Gender,autopct='%.1f%%')
plt.title('黑色星期五\n男vs女消費(fèi)占比')
男性消費(fèi)者數(shù)量是女性消費(fèi)者的2.5倍案腺,但消費(fèi)總額卻是女性消費(fèi)總額的3.3倍。原因推測(cè)為男性購(gòu)買商品的客單價(jià)比女性的要高康吵。
年齡對(duì)消費(fèi)的影響
agePurchase = (df.groupby('Age').Purchase.sum() / 100000000).round(3).reset_index()
agePurchase
消費(fèi)主力為18-25劈榨、26-35、36-45三個(gè)年齡段晦嵌,三者總額占比近8成同辣。其中26-35年齡段為主力中的主力,需要重點(diǎn)維護(hù)惭载。18-25和36-45兩個(gè)年齡段應(yīng)想辦法進(jìn)行突破旱函,刺激這兩個(gè)群體消費(fèi),擴(kuò)大盤口描滔。
plt.figure(figsize=(10, 5))
plt.bar(agePurchase.Age, agePurchase.Purchase)
plt.title('不同年齡段消費(fèi)貢獻(xiàn)')
plt.xlabel('年齡段')
plt.ylabel('消費(fèi)總額/億元')
text = agePurchase.Purchase
for i in range(len(text)):
plt.text(i, text[i]+0.3, str(text[i]), ha='center', va='bottom', fontsize=10)
plt.figure(figsize=(10, 5))
plt.pie(agePurchase.Purchase, labels=agePurchase.Age, autopct='%.1f%%')
plt.title('黑色星期五\n不同年齡段消費(fèi)占比')
餅圖能較為直觀的看出各年齡段的消費(fèi)占比棒妨,其中18-45歲區(qū)間內(nèi)的消費(fèi)者需要重點(diǎn)維護(hù)。
城市對(duì)消費(fèi)的影響
cityPurchase = (df.groupby('City_Category').Purchase.sum() / 100000000).round(3).reset_index()
cityPurchase
plt.figure(figsize=(10, 5))
plt.bar(cityPurchase.City_Category, cityPurchase.Purchase)
plt.title('不同城市消費(fèi)貢獻(xiàn)')
plt.xlabel('城市')
plt.ylabel('消費(fèi)總額/億元')
text = cityPurchase.Purchase
for i in range(len(text)):
plt.text(i, text[i]+0.3, str(text[i]), ha='center', va='bottom', fontsize=10)
plt.figure(figsize=(10, 5))
plt.pie(cityPurchase.Purchase, labels=cityPurchase.City_Category, autopct='%.1f%%')
plt.title('黑色星期五\n不同城市消費(fèi)占比')
B城市消費(fèi)總額為21.155億元占比41.5%含长,排名第一券腔;C城市消費(fèi)總額16.638億元占比32.7%排第二;A城市消費(fèi)總額13.165億元占比25.8%排最后拘泞。
職業(yè)對(duì)消費(fèi)的影響
occupationPurchase = (df.groupby('Occupation').Purchase.sum() / 10000000).round(2).reset_index()
occupationPurchase.head()
plt.figure(figsize=(10, 5))
plt.bar(occupationPurchase.Occupation, occupationPurchase.Purchase)
plt.title('不同職業(yè)消費(fèi)貢獻(xiàn)')
plt.xlabel('職業(yè)')
plt.ylabel('消費(fèi)總額/億元')
text = occupationPurchase.Purchase
for i in range(len(text)):
plt.text(i, text[i]+0.3, str(text[i]), ha='center', va='bottom', fontsize=10)
occupationPurchase.sort_values(by='Purchase', ascending=False).head()
排名前五的職業(yè)為4,0,7,1,17纷纫,前五名消費(fèi)總額占比為:
occupationPurchase.sort_values(by='Purchase', ascending=False).head().Purchase.sum() / occupationPurchase.Purchase.sum()
0.5253355836407881
結(jié)合圖形可知,消費(fèi)能力最強(qiáng)的5中職業(yè)分別是職業(yè)4陪腌、職業(yè)0辱魁、職業(yè)7、職業(yè)1诗鸭、職業(yè)17商叹,職業(yè)4、職業(yè)0是所有職業(yè)中消費(fèi)能力最強(qiáng)的只泼,應(yīng)當(dāng)重點(diǎn)關(guān)注。
婚姻狀況對(duì)消費(fèi)的影響
maritalPurchase = (df.groupby('Marital_Status').Purchase.sum() / 10000000).round(2).reset_index()
maritalPurchase.Marital_Status[0] = '未婚'
maritalPurchase.Marital_Status[1] = '已婚'
maritalPurchase
plt.figure(figsize=(10, 5))
plt.pie(maritalPurchase.Purchase,labels=maritalPurchase.Marital_Status,autopct='%.1f%%')
plt.title('黑色星期五\n已婚vs未婚消費(fèi)總額占比')
未婚人群總消費(fèi)占比比已婚人群高接近20%
城市生活年份對(duì)消費(fèi)的影響
scyPurchase = (df.groupby('Stay_In_Current_City_Years').Purchase.sum()/100000000).round(2).reset_index()
scyPurchase
plt.figure(figsize=(10, 5))
plt.bar(scyPurchase.Stay_In_Current_City_Years, scyPurchase.Purchase)
plt.title('城市生活年份對(duì)消費(fèi)的影響')
plt.xlabel('年份')
plt.ylabel('消費(fèi)總額/億元')
text = list(scyPurchase.Purchase)
for i in range(len(scyPurchase)):
plt.text(i, text[i]+0.2, str(text[i]), ha='center', va='bottom', fontsize=10)
plt.figure(figsize=(10, 5))
plt.pie(scyPurchase.Purchase, labels=scyPurchase.Stay_In_Current_City_Years, autopct='%.1f%%')
plt.title('黑色星期五\n城市生活年份消費(fèi)總額占比')
在當(dāng)前城市中生活一年左右的人消費(fèi)力最強(qiáng)卵洗,其次是在當(dāng)前城市生活2请唱、3年的弥咪。
商品分析
熱銷品、滯銷品分析
熱銷品前五:
df.Product_Category_1.astype(str)
productPurchase = df.pivot_table(index=['Product_ID', 'Product_Category_1'], values='Purchase', aggfunc='sum').reset_index()
productPurchase.groupby('Product_ID').Purchase.sum().reset_index().sort_values(by='Purchase', ascending=False).head()
滯銷品前五:
productPurchase.groupby('Product_ID').Purchase.sum().reset_index().sort_values(by='Purchase', ascending=False).tail()
熱銷品類前五:
productPurchase.groupby('Product_Category_1').Purchase.sum().reset_index().sort_values(by='Purchase', ascending=False).head()
滯銷品類前五:
productPurchase.groupby('Product_Category_1').Purchase.sum().reset_index().sort_values(by='Purchase', ascending=False).tail()
熱銷品前五依次為P00025442十绑、P00110742聚至、P00255842、P00059442本橙、P00184942扳躬,這幾款產(chǎn)品銷售額在2500000左右,應(yīng)該作為下次大促主推產(chǎn)品甚亭。P00309042贷币、P00091742這兩個(gè)商品嚴(yán)重滯銷,應(yīng)考慮清倉(cāng)甩貨或者重新包裝上架亏狰。熱銷品類前五分別為1役纹、5、8暇唾、6促脉、2,其中1類產(chǎn)品的銷售額是排名第二名的5類產(chǎn)品的兩倍策州,應(yīng)重點(diǎn)關(guān)注瘸味。
銷售量分析
purchaseCount = df[['Product_ID', 'Purchase']].groupby('Product_ID').Purchase.count().reset_index().sort_values(by='Purchase', ascending=False)[:10]
purchaseCount
plt.figure(figsize=(10, 5))
plt.bar(purchaseCount.Product_ID, purchaseCount.Purchase)
plt.xlabel('產(chǎn)品ID')
plt.ylabel('銷量')
text = list(purchaseCount.Purchase)
for i in range(len(purchaseCount)):
plt.text(x[i], text[i]+0.5, str(text[i]), ha='center', va='bottom', fontsize=10)
plt.title('銷量前十商品')
產(chǎn)品銷量前3分別是:P00265242、P00110742够挂、P00112142,應(yīng)當(dāng)予以重點(diǎn)關(guān)注旁仿,P00265242產(chǎn)品銷量雖然高但是沒有進(jìn)入銷售額前10名,說明銷售單價(jià)較低下硕,可考慮下一次大促作為引流爆款丁逝。
總體營(yíng)收指標(biāo)分析
客單價(jià)
pct = df.groupby('User_ID').Purchase.sum().reset_index()
(pct.Purchase.sum() / pct.User_ID.count()).round(2)
865016.59
客單價(jià)為865016.59美元。由于缺乏訂單ID和銷售數(shù)量等特征梭姓,件單價(jià)和連帶率無法計(jì)算霜幼。
用戶累計(jì)銷售金額占比
userCumsum = df.groupby('User_ID').sum().sort_values(by='Purchase', ascending=False).apply(lambda x:x.cumsum()/x.sum()).reset_index()
userCumsum[['User_ID', 'Purchase']].head()
plt.figure(figsize=(10, 5))
userCumsum.Purchase.plot()
plt.title("用戶累計(jì)消費(fèi)占比")
plt.ylabel('消費(fèi)占比')
plt.xlabel('排序索引')
userCumsum.loc[userCumsum.Purchase>0.8,['User_ID', 'Purchase']][:5]
經(jīng)過查詢得知索引為2520的顧客累計(jì)消費(fèi)金額為80%,可以導(dǎo)出這批顧客的id誉尖,作為重點(diǎn)對(duì)象精心維護(hù)罪既。
總結(jié)
- 用戶畫像
男性消費(fèi)者
26-35歲
B城市
職業(yè)0、4铡恕、7
未婚
當(dāng)前所在城市生活1-2年
暢銷產(chǎn)品P00025442琢感、P0011074銷售額在2500000左右,應(yīng)該作為下次大促主推盈利型產(chǎn)品探熔。
P00309042驹针、P00091742嚴(yán)重滯銷,應(yīng)該調(diào)整戰(zhàn)略選擇清倉(cāng)放棄或重新‘包裝’暢銷類目前5名為1诀艰、5柬甥、8饮六、6、2苛蒲,1類產(chǎn)品是第二名的2倍卤橄,應(yīng)該重點(diǎn)關(guān)注并給予一定的資源傾斜,這幾大類產(chǎn)品應(yīng)該作為重點(diǎn)保障品類臂外,備足貨源窟扑,合理安排庫(kù)存并對(duì)庫(kù)存進(jìn)行實(shí)時(shí)預(yù)警。
P00265242產(chǎn)品銷量雖然排名第一但是沒有進(jìn)入銷售額前10名漏健,說明銷售單價(jià)較低嚎货,可考慮作為下一次大促時(shí)的引流爆款
A、B城市消費(fèi)能力較強(qiáng)漾肮,C城市與之相比有較大的上升空間厂抖,下次大促不妨對(duì)C城市適當(dāng)傾斜一定資源,測(cè)試其消費(fèi)上升空間
對(duì)于累計(jì)消費(fèi)額占比達(dá)80%的這批頭部客戶克懊,需要精心維護(hù)忱辅;優(yōu)惠券之類的促銷手段可以適當(dāng)向已婚人士?jī)A斜