Bootstrap

Python 某电子产品销售数据分析报告及RFM模型(四)

关注微信公共号:小程在线

关注CSDN博客:程志伟的博客

#6.4.1结论先行
'''
广东、上海、北京的销售额、销量以及客户数量都是最高的
销售额与销量1-8月呈上升趋势,但是8月份之后就开始下降
618和双十一活动效果基本没有得到有效的回报,复盘一下618与双十一活动的内容。
销售额与销量在5月、7月、8月有均有上升,这三个月的新客户都有增长,幅度也不少,证明拉新活动效果不错;9月份下降,加上9月份的新客户下跌,还有9月份下订单的客户也减少了(其中新客下单的数量减少了四分之三,老客只是稍微下降一点点),是否因为9月份的拉新活动投入减少了呢?也可拆解是哪一渠道的新客减少了。
'''
#6.4.2各省销量、销售额情况

local_situation = data.groupby('local').agg(销量=('buy_cnt','sum'),销售额=('amount','sum')).sort_values('销售额')

local_situation['销售额'] = local_situation['销售额'].astype('int')

plt.figure(figsize=(16,8))
plt.barh(local_situation.index,local_situation['销售额'])
for i,j in enumerate(local_situation['销售额']):
    plt.text(j+200,local_situation['销售额'].index[i],j)
plt.title('销售额')
plt.show()

 

 

plt.figure(figsize=(16,8))
plt.barh(local_situation.index,local_situation['销量'])
for i,j in enumerate(local_situation['销量']):
    plt.text(j+200,local_situation['销量'].index[i],j)
plt.title('销量')
plt.show()

 

 

data_date = data.groupby('date').agg(销售额=('amount','sum'),销量=('buy_cnt','sum'))
data_date
Out[11]: 
                  销售额    销量
date                       
2020-01-05   77216.52   580
2020-01-06   61146.03   565
2020-01-07   82381.21   706
2020-01-08   56344.74   446
2020-01-09   58278.71   449
              ...   ...
2020-11-17  274274.37   880
2020-11-18 1148309.01  7809
2020-11-19 1124239.09  7628
2020-11-20  267638.53   685
2020-11-21  117472.30   291

[322 rows x 2 columns]

plt.figure(figsize=(20,5))
plt.plot(data_date.index,data_date['销售额'])
#plt.xticks([]) #隐藏坐标轴
#plt.xticks([data_date.index.min(),'2020-06-18','2020-11-11'])
plt.title('销售额')
plt.show()

  

plt.figure(figsize=(20,5))
plt.plot(data_date.index,data_date['销量'])
#plt.xticks([]) #隐藏坐标轴
#plt.xticks([data_date.index.min(),'2020-06-18','2020-11-11'])
plt.title('销量')
plt.show()

 

 

data_month = data.groupby('month').agg(销售额=('amount','sum'),销量=('buy_cnt','sum'))

plt.figure(figsize=(16,5))
plt.plot(data_month.index,data_month['销售额'])
plt.title('销售额')
plt.xticks(data_month.index)
plt.show()

plt.figure(figsize=(16,5))
plt.plot(data_month.index,data_month['销量'])
plt.title('销量')
plt.xticks(data_month.index)
plt.show()

 

data_user = data.groupby('user_id').agg(首次购买月份=('month','min')).reset_index()

user_all = pd.merge(data,data_user,on='user_id')
user_all['新老客户'] = np.where(user_all['month']==user_all['首次购买月份'],'新客户','老客户')
user_all.head()
Out[17]: 
              order_id           product_id  ...  首次购买月份 新老客户
0  2294359932054536986  1515966223509089906  ...       4  新客户
1  2294444024058086220  2273948319057183658  ...       4  新客户
2  2297951447913857849  2273948319057183658  ...       4  新客户
3  2297951447913857849  1515966223509088613  ...       4  新客户
4  2388440981134625996  1515966223517999094  ...       4  老客户

[5 rows x 18 columns]

user_all_new = user_all[user_all['新老客户']=='新客户'].groupby('month').agg(销售额=('amount','sum'))
user_all_new['销量'] = user_all[user_all['新老客户']=='新客户'].groupby('month').agg(销量=('buy_cnt','sum'))
user_all_new
Out[18]: 
              销售额     销量
month                   
1      1729464.93  13449
2      1710658.45  12215
3      1934702.29  11371
4      1214789.79   8221
5      5793011.10  27143
6      4383038.68  18655
7     11668313.82  50192
8     17503323.05  55533
9      8248995.19  26745
10    11695494.47  63289
11     7104580.63  39171

user_all_old = user_all[user_all['新老客户']=='老客户'].groupby('month').agg(销售额=('amount','sum'))
user_all_old['销量'] = user_all[user_all['新老客户']=='老客户'].groupby('month').agg(销量=('buy_cnt','sum'))
user_all_old
Out[19]: 
             销售额     销量
month                  
2      506013.86   4733
3      906313.29   6296
4      459660.89   3127
5     1864321.41  11523
6     3106273.64  20492
7     4380494.17  23212
8     9877576.61  40551
9     8548137.42  40564
10    7681078.28  34902
11    4670393.91  24315

plt.figure(figsize=(16,8))
line1, = plt.plot(user_all_new.index,user_all_new['销售额'],c='r')
line2, = plt.plot(user_all_old.index,user_all_old['销售额'],c='b')
plt.legend([line1,line2],['新客','老客'])
plt.xticks(user_all_new.index)
plt.title('新老客户销售额对比')
plt.show()

 

plt.figure(figsize=(16,8))
line1, = plt.plot(user_all_new.index,user_all_new['销量'],c='r')
line2, = plt.plot(user_all_old.index,user_all_old['销量'],c='b')
plt.legend([line1,line2],['新客','老客'])
plt.xticks(user_all_new.index)
plt.title('新老客户销量对比')
plt.show()

  

data_weekday = data.groupby('weekday').agg(销售额=('amount','sum'),销量=('buy_cnt','sum'))
plt.figure(figsize=(16,5))
plt.plot(data_weekday.index,data_weekday['销售额'])
plt.title('销售额')
plt.xticks(data_weekday.index)
plt.show()

 

plt.figure(figsize=(16,5))
plt.plot(data_weekday.index,data_weekday['销量'])
plt.title('销量')
plt.xticks(data_weekday.index)
plt.show()

data_hour = data.groupby('hour').agg(销售额=('amount','sum'),销量=('buy_cnt','sum'))

plt.figure(figsize=(16,5))
plt.plot(data_hour.index,data_hour['销售额'])
plt.title('销售额')
plt.xticks(data_hour.index)
plt.show()

 

plt.figure(figsize=(16,5))
plt.plot(data_hour.index,data_hour['销量'])
plt.title('销量')
plt.xticks(data_hour.index)
plt.show()

new_user = data.groupby('user_id').agg({'month':'min'}).reset_index()
new_user.head()
Out[27]: 
               user_id  month
0  1515915625439951872      7
1  1515915625440038400      9
2  1515915625440051712     10
3  1515915625440099840      5
4  1515915625440121600      5

new_user_month = new_user.groupby('month').agg(新用户数量=('user_id','nunique'))
new_user_month['环比'] = new_user_month.pct_change()
new_user_month
Out[28]: 
       新用户数量    环比
month             
1       1813   nan
2       1613 -0.11
3       1491 -0.08
4       4178  1.80
5      13913  2.33
6       8951 -0.36
7      22036  1.46
8      22052  0.00
9       8163 -0.63
10      5607 -0.31
11      2938 -0.48

plt.figure(figsize=(16,5))
plt.plot(new_user_month.index,new_user_month['新用户数量'])
plt.title('新用户数量')
plt.xticks(new_user_month.index)
plt.show()

 

data_buy = data.groupby(['user_id','month','date']).agg(是否购买=('user_id','nunique')).reset_index()
data_buy_month = data_buy.groupby(['user_id','month']).agg(每月购买次数=('是否购买','sum')).reset_index()

data_repurchase = data_buy_month[data_buy_month['每月购买次数']>=2].groupby('month').agg(每月复购人数=('user_id','nunique'))
data_repurchase['每月购买人数'] = data.groupby('month').agg(每月购买人数=('user_id','nunique'))
data_repurchase['复购率'] = data_repurchase['每月复购人数'] / data_repurchase['每月购买人数']

data_repurchase
Out[32]: 
       每月复购人数  每月购买人数  复购率
month                     
1         333    1813 0.18
2         511    2237 0.23
3         674    2572 0.26
4         839    5410 0.16
5        3576   17156 0.21
6        2750   13841 0.20
7        8179   29807 0.27
8       10377   35061 0.30
9        6662   19545 0.34
10       4863   14288 0.34
11       2257    8498 0.27

fig,ax1 = plt.subplots(figsize=(16,5))
line1, = ax1.plot(data_repurchase.index,data_repurchase['复购率'],c='r')
ax1.set_ylabel('复购率')

ax2 = ax1.twinx() #twinx将ax1的X轴共用与ax2

line2, = ax2.plot(data_repurchase.index,data_repurchase['每月复购人数'])
ax2.set_ylabel('每月复购人数')
plt.title('每月复购率及复购人数')
plt.xticks(data_repurchase.index)

plt.legend([line1,line2],['复购率','每月复购人数'])
plt.show()

plt.subplots(figsize=(16,5))
plt.plot(data_repurchase.index,data_repurchase['每月购买人数'],c='r')
plt.title('每月购买人数')
plt.xticks(data_repurchase.index)
plt.show()

 

data_user = data.groupby('user_id').agg(首次购买月份=('month','min')).reset_index()

#data_buy_month 是上面求得的:每个用户每月的购买次数
user = pd.merge(data_buy_month,data_user)
user['新老客户'] = np.where(user['month']==user['首次购买月份'],'新客户','老客户')
#新客户购买人数
user_buy = user[user['新老客户']=='新客户'].groupby('month').agg(新客购买人数=('user_id','nunique'))
#老客户购买人数
user_buy['老客购买人数'] = user[user['新老客户']=='老客户'].groupby('month').agg(老客购买人数=('user_id','nunique'))
user_buy = user_buy.fillna(0)
user_buy
Out[35]: 
       新客购买人数   老客购买人数
month                 
1        1813     0.00
2        1613   624.00
3        1491  1081.00
4        4178  1232.00
5       13913  3243.00
6        8951  4890.00
7       22036  7771.00
8       22052 13009.00
9        8163 11382.00
10       5607  8681.00
11       2938  5560.00

plt.subplots(figsize=(16,5))
line1, = plt.plot(user_buy.index,user_buy['新客购买人数'],c='r')
line2, = plt.plot(user_buy.index,user_buy['老客购买人数'])
plt.title('新老客购买人数')
plt.xticks(user_buy.index)

plt.legend([line1,line2],['新客','老客'])
plt.show()

 

;