對一家全球超市四年(2011-2014)的銷售數據進行 「人、貨、場」分析,並給出提高銷量的針對性建議。python
場:總體運營狀況分析,包括銷售額、銷量、利潤、客單價、市場佈局等具體狀況分析。網絡
貨:商品結構、優點/爆款商品、劣勢/待優化商品等狀況分析。app
人:客戶數量、新老客戶、RFM模型、復購率、回購率等用戶行爲分析。框架
數據來源爲kaggle平臺,這是一份全球大型超市四年的零售數據集,數據詳盡。機器學習
數據集爲 「superstore_dataset2011-2015.csv」,共有51290條數據,共24個特徵。函數
1.1 加載相關庫和數據集佈局
使用的庫主要有:pandas、numpy、matplotlib、seaborn學習
使用的數據集:
superstore_dataset2011-2015.csv優化
# 加載數據分析須要使用的庫 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warnings plt.rcParams['font.sans-serif'] = ['SimHei'] warnings.filterwarnings('ignore') # 加載零售數據集,使用'ISO-8859-1'編碼方式 df = pd.read_csv('superstore_dataset2011-2015.csv',encoding='ISO-8859-1') df.head()
1.2 數據概覽編碼
首先看一下數據集大小(行列信息):
df.shape --------------- (51290, 24)
看一下數據概況:
# df.info() df.describe()
2.1 列名重命名
從上面發現列名不符合Python的命名規範,對列名進行一下重命名,採用下劃線命名法:
df.rename(columns = lambda x: x.replace(' ', '_').replace('-', '_'), inplace=True)
看一下重命名後的列名:
df.columns ----------------- Index(['Row_ID', 'Order_ID', 'Order_Date', 'Ship_Date', 'Ship_Mode', 'Customer_ID', 'Customer_Name', 'Segment', 'City', 'State', 'Country', 'Postal_Code', 'Market', 'Region', 'Product_ID', 'Category', 'Sub_Category', 'Product_Name', 'Sales', 'Quantity', 'Discount', 'Profit', 'Shipping_Cost', 'Order_Priority'], dtype='object')
2.2 數據類型處理
查看一下各個列的數據類型:
df.dtypes ----------------- Row_ID int64 Order_ID object Order_Date object Ship_Date object Ship_Mode object Customer_ID object Customer_Name object Segment object City object State object Country object Postal_Code float64 Market object Region object Product_ID object Category object Sub_Category object Product_Name object Sales float64 Quantity int64 Discount float64 Profit float64 Shipping_Cost float64 Order_Priority object dtype: object
從上面看到,大部分爲object類型,銷量、銷售額、利潤等爲數值型,不須要進行數據類型處理。下單日期應爲datetime類型,須要進行處理。
df["Order_Date"] = pd.to_datetime(df["Order_Date"]) df["Order_Date"].sample(5) ---------------------------------- 9319 2013-04-10 30390 2012-03-19 31025 2013-08-19 32210 2014-03-20 43430 2012-11-26 Name: Order_Date, dtype: datetime64[ns]
爲了便於分析每一年和每個月的銷售狀況,增長年份列和月份列:
df['year'] = df["Order_Date"].dt.year df['month'] = df['Order_Date'].values.astype('datetime64[M]')
2.3 缺失值處理
查看缺失值狀況:
df.isnull().sum(axis=0) ---------------------------- Row_ID 0 Order_ID 0 Order_Date 0 Ship_Date 0 Ship_Mode 0 Customer_ID 0 Customer_Name 0 Segment 0 City 0 State 0 Country 0 Postal_Code 41296 Market 0 Region 0 Product_ID 0 Category 0 Sub_Category 0 Product_Name 0 Sales 0 Quantity 0 Discount 0 Profit 0 Shipping_Cost 0 Order_Priority 0 year 0 month 0 dtype: int64
發現有一列缺失值比較多,此列表示郵編信息,對咱們的分析沒有太多做用,可直接刪除:
df.drop(["Postal_Code"],axis=1, inplace=True)
2.4 異常值處理
簡單查看一下是否有異常值:
df.describe()
沒發現明顯的異常值,不須要進行處理。
2.5 重複值處理
看一下是否有重複值:
df.duplicated().sum() --------------------- 0
也沒有重複值,不須要進行處理。
首先構造總體銷售狀況的數據集:
# 總體銷售狀況子數據集,包含下單日期、銷售額、銷量、利潤、年份、月份信息 sales_data = df[['Order_Date','Sales','Quantity','Profit','year','month']] sales_data.sample(5) ------------------------------ Order_Date Sales Quantity Profit year month 45436 2014-11-27 38.040 2 12.1728 2014 2014-11-01 12625 2013-11-11 20.368 1 7.3834 2013 2013-11-01 24800 2011-11-15 40.320 7 14.0000 2011 2011-11-01 35508 2014-01-22 27.936 4 9.4284 2014 2014-01-01 39183 2013-06-24 179.880 6 61.0800 2013 2013-06-01
按照年份、月份對銷售子數據集進行分組求和:
sales_year = sales_data.groupby(['year','month']).sum() sales_year
對以上數據進行拆分,每一年爲一個表:
# slice(None), 是Python中的切片操做,這裏用來選擇所有數據 year_2011 = sales_year.loc[(2011,slice(None)),:].reset_index() year_2012 = sales_year.loc[(2012,slice(None)),:].reset_index() year_2013 = sales_year.loc[(2013,slice(None)),:].reset_index() year_2014 = sales_year.loc[(2014,slice(None)),:].reset_index() year_2014 # 看一下2014年的數據
1.1 銷售額分析
構建銷售表:
sales=pd.concat([year_2011['Sales'],year_2012['Sales'], year_2013['Sales'],year_2014['Sales']],axis=1) # 對行名和列名進行重命名 sales.columns=['Sales-2011','Sales-2012','Sales-2013','Sales-2014'] sales.index=['Jau','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] # 顏色越深,銷售額越高 sales.style.background_gradient()
從上圖能夠看出,基本上每年都是下半年銷售額比上半年要高,並且隨着年份的增大,銷售額也有明顯的增長,說明銷售業績增加較快,發展仍是比較好的。
肉眼可見的是每年的銷售額都比前一年要好,來實際計算一下具體的增加率和每一年的銷售總額:
# 計算年度銷售額並圖表展現 sales_sum=sales.sum() sales_sum.plot(kind='bar',alpha=0.5) plt.grid() # 計算每一年增加率 rise_12=sales_sum[1]/sales_sum[0]-1 rise_13=sales_sum[2]/sales_sum[1]-1 rise_14=sales_sum[3]/sales_sum[2]-1 rise_rate=[0,rise_12,rise_13,rise_14] # 顯示增加率 sales_sum=pd.DataFrame({'sales_sum':sales_sum}) sales_sum['rise_rate']=rise_rate sales_sum ------------------------------------------ sales_sum rise_rate Sales-2011 2.259451e+06 0.000000 Sales-2012 2.677439e+06 0.184995 Sales-2013 3.405746e+06 0.272017 Sales-2014 4.299866e+06 0.262533
從上面能夠看出,後兩年的銷售額增加率達到26%,2014年銷售額將近是2011的兩倍,發展勢頭良好,經營在逐步穩定。結合年度銷售額及增加率,再結合公司總體戰略規劃,能夠預測或制定下一年度總銷售額業績指標。
瞭解了超市總體銷售額後,再對每一年每個月的銷售額進行分析,瞭解不一樣月份的銷售狀況,找出是否有淡旺季之分,找出重點銷售月份,以便制定經營策略與業績月度及季度指標拆分。
看一下銷售額的面積堆疊圖:
# 面積堆疊圖 sales.plot.area(stacked=False)
從上圖能夠大體看出,該超市的銷售季節性明顯,整體上半年是淡季,下半年是旺季。上半年中6月份銷售額比較高,下半年中7月份的銷售額偏低。
對於旺季的月份,運營推廣等策略要繼續維持,還能夠加大投入,提升總體銷售額。
對於淡季的月份,能夠結合產品特色進行新產品拓展,舉辦一些促銷活動等吸引客戶。
1.2 銷量分析
構建銷量表:
quantity = pd.concat([year_2011['Quantity'],year_2012['Quantity'], year_2013['Quantity'],year_2014['Quantity']],axis=1) # 對行名和列名進行重命名 quantity.columns=['Quantity-2011','Quantity-2012','Quantity-2013','Quantity-2014'] quantity.index=['Jau','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] # 顏色越深,銷量越高 quantity.style.background_gradient()
看一下銷量增加率和每一年的銷量總和:
# 計算年度銷量並圖表展現 quantity_sum=quantity.sum() quantity_sum.plot(kind='bar',alpha=0.5) plt.grid() # 計算每一年增加率 rise_12=quantity_sum[1]/quantity_sum[0]-1 rise_13=quantity_sum[2]/quantity_sum[1]-1 rise_14=quantity_sum[3]/quantity_sum[2]-1 rise_rate=[0,rise_12,rise_13,rise_14] # 顯示增加率 quantity_sum=pd.DataFrame({'quantity_sum':quantity_sum}) quantity_sum['rise_rate']=rise_rate quantity_sum ------------------------------ quantity_sum rise_rate Quantity-2011 31443 0.000000 Quantity-2012 38111 0.212066 Quantity-2013 48136 0.263047 Quantity-2014 60622 0.259390
從上面能夠看出,2011-2014年銷量變化趨勢與銷售額是同樣的,下半年銷量總體高於上半年,同時銷量同比上一年均在提升。
1.3 利潤分析
構建利潤表:
profit=pd.concat([year_2011['Profit'],year_2012['Profit'], year_2013['Profit'],year_2014['Profit']],axis=1) profit.columns=['Profit-2011','Profit-2012','Profit-2013','Profit-2014'] profit.index=['Jau','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] profit.style.background_gradient()
計算每一年總利潤和利潤率:
# 計算年度總利潤並圖表展現 profit_sum=profit.sum() profit_sum.plot(kind='bar',alpha=0.5) plt.grid() profit_sum=pd.DataFrame({'profit_sum':profit_sum}) profit_sum["year"] = [2011, 2012, 2013, 2014] sales_sum=pd.DataFrame({'sales_sum':sales.sum()}) sales_sum["year"] = [2011, 2012, 2013, 2014] profit_sum = pd.merge(profit_sum, sales_sum) profit_sum["profit_rate"] = profit_sum["profit_sum"] / profit_sum["sales_sum"] profit_sum ----------------------------- profit_sum year sales_sum profit_rate 0 248940.81154 2011 2.259451e+06 0.110178 1 307415.27910 2012 2.677439e+06 0.114817 2 406935.23018 2013 3.405746e+06 0.119485 3 504165.97046 2014 4.299866e+06 0.117252
從上面的結果能夠看出,每一年的利潤和銷售額同樣,是在逐年增長的,說明企業經營仍是比較妥善的,可是利潤率整體平穩,穩定在11%-12%之間,整體利潤率也仍是不錯的。
1.4 客單價分析
客單價是指商場(超市)每個顧客平均購買商品的金額,客單價也便是平均交易金額。從某種程度上反映了企業的消費羣體的許多特色以及企業的銷售類目的盈利狀態是否健康。
總消費次數:同一天內,同一我的發生的全部消費算做一次消費。
客單價=總消費金額 / 總消費次數
# 2011-2014年客單價 for i in range(2011,2015): data=df[df['year']==i] price=data[['Order_Date','Customer_ID','Sales']] # 計算總消費次數 price_dr=price.drop_duplicates( subset=['Order_Date', 'Customer_ID']) # 總消費次數:有多少行 total_num=price_dr.shape[0] print('{}年總消費次數='.format(i),total_num) unit_price = price['Sales'].sum()/total_num print('{}年客單價='.format(i), unit_price,'\n') --------------------------------------------------- 2011年總消費次數= 4453 2011年客單價= 507.3997070604087 2012年總消費次數= 5392 2012年客單價= 496.55762136498515 2013年總消費次數= 6753 2013年客單價= 504.3308824788983 2014年總消費次數= 8696 2014年客單價= 494.4647965225392
從上面結果來看,每一年的消費次數呈不斷上升趨勢,可是客單價整體浮動範圍不是很大 ,穩定在500左右。
1.5 市場佈局分析
由於這是一家全球超市,在不一樣地區都會有市場,因此看一下不一樣地區之間的銷售狀況:
Market_Year_Sales = df.groupby(['Market', 'year']).agg({'Sales':'sum'}).reset_index().rename(columns={'Sales':'Sales_amounts'}) Market_Year_Sales.head() -------------------------------- Market year Sales_amounts 0 APAC 2011 6.392453e+05 1 APAC 2012 7.627193e+05 2 APAC 2013 9.745809e+05 3 APAC 2014 1.209199e+06 4 Africa 2011 1.271873e+05
用圖表顯示各個地區每一年的銷售狀況:
sns.barplot(x='Market', y='Sales_amounts', hue='year', data = Market_Year_Sales) plt.title('2011-2014 market sales')
再看一下四年來各個地區銷售額佔總銷售額的百分比:
Market_Sales = df.groupby(['Market']).agg({'Sales':'sum'}) Market_Sales["percent"] = Market_Sales["Sales"] / df["Sales"].sum() Market_Sales.style.background_gradient()
從以上圖表能夠看出,每一個地區每一年銷售額整體處於上升趨勢,其中APAC(亞太地區)、EU(歐盟)、US(美國)、LATAM(拉丁美洲)的銷售額超過了總銷售額的85%,整體也與地區的經濟發展相匹配。其中加拿大Canada的銷售額微乎其微,能夠結合公司總體戰略佈局進行取捨。
先看一下銷量前10名的商品:
productId_count = df.groupby('Product_ID').count()['Customer_ID'].sort_values(ascending=False) print(productId_count.head(10)) -------------------------------------- Product_ID OFF-AR-10003651 35 OFF-AR-10003829 31 OFF-BI-10002799 30 OFF-BI-10003708 30 FUR-CH-10003354 28 OFF-BI-10002570 27 OFF-BI-10004140 25 OFF-BI-10004195 24 OFF-BI-10001808 24 OFF-BI-10004632 24 Name: Customer_ID, dtype: int64
銷售額前10名的商品:
productId_amount = df.groupby('Product_ID').sum()['Sales'].sort_values(ascending=False) print(productId_amount.head(10)) ----------------------------------- Product_ID TEC-CO-10004722 61599.8240 TEC-PH-10004664 30041.5482 OFF-BI-10003527 27453.3840 TEC-MA-10002412 22638.4800 TEC-PH-10004823 22262.1000 FUR-CH-10002024 21870.5760 FUR-CH-10000027 21329.7300 OFF-AP-10004512 21147.0840 FUR-TA-10001889 20730.7557 OFF-BI-10001359 19823.4790 Name: Sales, dtype: float64
從上面能夠看出,銷量最高的大部分是辦公用品,而銷售額最高的大部分是電子產品、傢俱這些單價較高的商品。
利潤前10的商品:
productId_Profit= df.groupby('Product_ID').sum()['Profit'].sort_values(ascending=False) print(productId_Profit.head(10)) ------------------------------------ Product_ID TEC-CO-10004722 25199.9280 OFF-AP-10004512 10345.5840 TEC-PH-10004823 8121.4800 OFF-BI-10003527 7753.0390 TEC-CO-10001449 6983.8836 FUR-CH-10002250 6123.2553 TEC-PH-10004664 5455.9482 OFF-AP-10002330 5452.4640 TEC-PH-10000303 5356.8060 FUR-CH-10002203 5003.1000 Name: Profit, dtype: float64
利潤前10的商品有一半是電子產品,能夠重點考慮提高這部分產品的銷量,來增長總體的利潤。
具體商品種類的銷售狀況:
# 根據商品種類和子種類,從新重合成一個新的種類 df['Category_Sub_Category'] = df[['Category','Sub_Category']].apply(lambda x:str(x[0])+'_'+str(x[1]),axis=1) # 按照新的種類進行分組,統計銷售額和利潤 df_Category_Sub_Category=df.groupby("Category_Sub_Category").agg({"Profit":"sum","Sales":"sum"}).reset_index() # 按照銷售額倒序排序 df_Category_Sub_Category.sort_values(by=["Sales"],ascending=False, inplace=True) # 每一個種類商品的銷售額累計佔比 df_Category_Sub_Category['cum_percent'] = df_Category_Sub_Category['Sales'].cumsum()/df_Category_Sub_Category['Sales'].sum() df_Category_Sub_Category
從圖表中能夠很清晰的看到不一樣種類商品的銷售額貢獻對比,有將近一半的商品的總銷售佔比達到84%,應該是自家優點主營產品,後續經營中應繼續保持,能夠結合總體戰略發展適當加大投入,逐漸造成本身的品牌。
同時,也能夠發現,末尾佔比16%的產品中大部分是辦公用品中的小物件。能夠考慮與其餘主營產品結合,連帶銷售來提高銷量,或者考慮對這些商品進行優化。
可是值得關注的是,Tables(桌子)的利潤是負,代表這個產品目前處於虧損狀態,應該是促銷讓利太多。經過檢查原數據,發現Tabels大部分都在打折,打折的銷量高達76%。若是是在清庫存,這個效果仍是不錯的,但若是不是,說明這個產品在市場推廣上遇到了瓶頸,或者是遇到強競爭對手,須要結合實際業務進行分析,適當改善經營策略。
3.1 不一樣類型的客戶佔比
df["Segment"].value_counts().plot(kind='pie', autopct='%.2f%%', shadow=True, figsize=(14, 6))
從上圖能夠看出,這四年來,普通消費者的客戶佔比最多,達到51.7%。
再看一下每年不一樣類型的客戶數量狀況:
Segment_Year = df.groupby(["Segment", 'year']).agg({'Customer_ID':'count'}).reset_index() sns.barplot(x='Segment', y='Customer_ID', hue='year', data = Segment_Year) plt.title('2011-2014 Segment Customer')
從上面能夠看出,每類客戶每一年均在保持增加趨勢,客戶結構仍是很是不錯的。
看一下不一樣類型的客戶每一年貢獻的銷售額:
Segment_sales = df.groupby(["Segment", 'year']).agg({'Sales':'sum'}).reset_index() sns.barplot(x='Segment', y='Sales', hue='year', data = Segment_sales) plt.title('2011-2014 Segment Sales')
各個類型的客戶每一年貢獻的銷售額都在穩步提高,普通消費者貢獻的銷售額最多,這和客戶佔比也有必定關係。
3.2 客戶下單行爲分析
首先截取Customer_ID, Order_Date, Quantity, Sales, month爲新的子集,並對Order_Date進行排序,方便後續分析 :
grouped_Customer = df[['Customer_ID','Order_Date', 'Quantity', 'Sales', 'month']].sort_values(['Order_Date']).groupby('Customer_ID') grouped_Customer.head()
看一下用戶的第一次購買日期分佈:
grouped_Customer.min().Order_Date.value_counts().plot()
再來看一下用戶的最後一次購買日期分佈:
grouped_Customer.max().Order_Date.value_counts().plot()
從上面能夠看出, 在13年初之後新用戶增加的趨勢緩慢,商家能夠經過廣告等推廣策略吸取更多的新用戶;而經過觀察最近一次購買日期,能夠發現用戶基本沒有流失,也驗證了每一年銷售額的增加趨勢。
整體來講新客戶數量是在逐年遞減的,說明該企業老客戶的維繫不錯,但新客獲取率較低。若是可以在新客戶獲取上可以突破,會給企業帶來很大的增加空間。
再來看看只購買過一次的客戶數量 :
# 統計每一個客戶第一次和最後一次購買記錄 Customer_life = grouped_Customer.Order_Date.agg(['min','max']) # 查看只有一次購買記錄的顧客數量,第一次和最後一次是同一條記錄,則說明購買只有一次 (Customer_life['min'] == Customer_life['max']).value_counts() ----------------------------------------------------- False 1580 True 10 dtype: int64
從結果來看,只購買一次的用戶只有10個,大部分用戶都會購買屢次,說明回頭率很高,也驗證了上面關於該企業老客戶的維繫不錯的結論。
3.3 RFM模型分析
RFM的含義:
R(Recency):客戶最近一次交易時間的間隔。R值越大,表示客戶交易發生的日期越久,反之則表示客戶交易發生的日期越近。
F(Frequency):客戶在最近一段時間內交易的次數。F值越大,表示客戶交易越頻繁,反之則表示客戶交易不夠活躍。
M(Monetary):客戶在最近一段時間內交易的金額。M值越大,表示客戶價值越高,反之則表示客戶價值越低。
RFM分析就是根據客戶活躍程度和交易金額的貢獻,進行客戶價值細分的一種方法。
首先構建RFM表:
rfm = df.pivot_table(index='Customer_ID', values = ["Quantity","Sales","Order_Date"], aggfunc={"Quantity":"sum","Sales":"sum","Order_Date":"max"}) # 全部用戶最大的交易日期爲標準,求每筆交易的時間間隔即爲R rfm['R'] = (rfm.Order_Date.max() - rfm.Order_Date)/np.timedelta64(1,'D') # 每一個客戶的總銷量即爲F,總銷售額即爲M rfm.rename(columns={'Quantity':'F','Sales':'M'},inplace = True) rfm.head()
接着對客戶價值進行標註,將客戶分爲8個等級(2 x 2 x 2):
# 基於平均值作比較,超過均值爲1,不然爲0 rfm[['R','F','M']].apply(lambda x:x-x.mean()) def rfm_func(x): level =x.apply(lambda x:'1'if x>0 else '0') level =level.R +level.F +level.M d = { "111":"重要價值客戶", "011":"重要保持客戶", "101":"重要挽留客戶", "001":"重要發展客戶", "110":"通常價值客戶", "010":"通常保持客戶", "100":"通常挽留客戶", "000":"通常發展客戶" } result = d[level] return result rfm['label']= rfm[['R','F','M']].apply(lambda x:x-x.mean()).apply(rfm_func,axis =1) rfm.head()
對重要價值客戶和非重要價值客戶進行可視化展現:
rfm.loc[rfm.label=='重要價值客戶','color']='g' rfm.loc[~(rfm.label=='重要價值客戶'),'color']='r' rfm.plot.scatter('F','R',c= rfm.color)
經過RFM識別不一樣的客戶羣體,可以衡量客戶價值和客戶利潤創收能力,能夠指定個性化的溝通和營銷服務,爲更多的營銷決策提供有力支持,爲企業創造更大的利益。
3.4 新用戶、活躍用戶、不活躍用戶和迴歸用戶分析
設置Customer_ID爲索引,month爲列名,統計每月的購買次數:
pivoted_counts = df.pivot_table(index= 'Customer_ID', columns= 'month', values= 'Order_Date', aggfunc= 'count').fillna(0) # 大於一次的所有設爲1 df_purchase = pivoted_counts.applymap(lambda x:1 if x>0 else 0) df_purchase.head() python數據分析實戰之超市零售分析 定義狀態函數並進行狀態標記: def active_status(data): status = [] for i in range(48): if data[i] == 0: if len(status)>0: if status[i-1] == "unreg": # 未註冊客戶 status.append("unreg") else: # 不活躍用戶 status.append("unactive") else: status.append("unreg") # 若本月消費了 else: if len(status) == 0: # 新用戶 status.append("new") else: if status[i-1] == "unactive": # 迴歸用戶 status.append("return") elif status[i-1] == "unreg": status.append("new") else: status.append("active") return pd.Series(status) purchase_stats = df_purchase.apply(active_status,axis =1) purchase_stats.head()
用NaN替代 「unreg」,並統計每個月各狀態客戶數量:
purchase_stats_ct = purchase_stats.replace('unreg',np.NaN).apply(lambda x:pd.value_counts(x)) # 用0填充NaN purchase_stats_ct.fillna(0).T.plot.area()
從以上結果能夠發現活躍客戶、新客戶和迴歸客戶,每一年呈必定的規律起伏,這可能和年長年末大促有關,須要更多數據進行佐證;同時能夠發現新客數量每一年均在減小,說明該商家新客獲取率較低,若是能在新客戶獲取上取得突破,會給商家帶來很大的增加空間。
3.5 復購率和回購率分析
復購率計算指標:用戶在該月購買過一次以上算復購。
purchase_r = pivoted_counts.applymap(lambda x :1 if x>1 else np.NaN if x==0 else 0) (purchase_r.sum()/purchase_r.count()).plot(figsize=(10,4))
回購率計算指標:在該月購買過,且在下月也購買時計入回購。
def purchase_back(data): status=[] for i in range(47): if data[i] ==1: if data[i+1] == 1: status.append(1) if data[i+1] == 0: status.append(0) else: status.append(np.NaN) status.append(np.NaN) return status purchase_b = df_purchase.apply(purchase_back,axis =1,result_type='expand') (purchase_b.sum()/purchase_b.count()).plot(figsize=(10,4))
從上能夠發現復購率基本大於0.525,且呈整體上升趨勢,說明客戶忠誠度高,回購率在年中年底呈峯形態,可能與商家折扣活動或節日有關。
本文分別經過「場、貨、人」三個不一樣的角度去分析一家全球超市的銷售、商品、用戶狀況,並根據分析結果給出一些有利於拓展用戶、提高銷量的辦法。
固然,這份數據集包含信息不少,還能夠進行其它一些方面的分析,來給出更好的建議。
文源網絡,僅供學習之用,若有侵權請聯繫刪除。在學習Python的道路上確定會碰見困難,別慌,我這裏有一套學習資料,包含40+本電子書,800+個教學視頻,涉及Python基礎、爬蟲、框架、數據分析、機器學習等,不怕你學不會!
https://shimo.im/docs/JWCghr8... 《Python學習資料》關注公衆號【Python圈子】,優質文章每日送達。