日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python计算消费总额_【数据分析案例】用户消费行为

發(fā)布時間:2025/3/21 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python计算消费总额_【数据分析案例】用户消费行为 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

"""user_ud 用戶ID

order_dt: 購買日期

order_products: 購買產(chǎn)品數(shù)

order_amount: 購買金額"""

importpandas as pdimportnumpy as npimportmatplotlib.pyplot as plt

pd.set_option('display.max_columns', None) #顯示完整的列

pd.set_option('display.max_rows', None) #顯示完整的行

plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標(biāo)簽

columns= ['用戶ID','購買日期','購買產(chǎn)品數(shù)','購買金額']

data= pd.read_table('CDNOW_master.txt',names=columns,sep='\s+') #names設(shè)置表頭 \s+任意的空字符串

#查看是否存在缺失值#print(data.info())

#order_dt: 購買日期 轉(zhuǎn)換成日期類型

#def time_style(x):#time = str(x)[0:4] + "-" + str(x)[4:6] + "-" + str(x)[6:8]#return time#data['購買日期'] = data['購買日期'].apply(time_style)

data['購買日期'] = pd.to_datetime(data['購買日期'],format="%Y%m%d")#print(data.head(3).dtypes)

#計算每個用戶購買商品的平均數(shù)量#print(data.groupby('用戶ID')['購買產(chǎn)品數(shù)'].mean())

#計算所每個用戶購買商品的平均花費(fèi)#print(data.groupby('用戶ID')['購買金額'].mean())

#describe是描述統(tǒng)計 # 計算所有用戶購買商品的平均數(shù)量#print(data.describe())

#M 對月進(jìn)行統(tǒng)計

data['month'] = data['購買日期'].values.astype('datetime64[M]')print(data.head())#用戶每月花費(fèi)的總金額

use_months_by = data.groupby('month')['購買金額'].sum()#print(use_months_by)#

#plt.figure(figsize=(5,4))#plt.plot(use_months_by.index,use_months_by.values,label="用戶每月花費(fèi)的總金額")#plt.legend(loc=0)#plt.savefig("用戶每月花費(fèi)的總金額.jpg")#plt.show()

#所有用戶每月的產(chǎn)品購買量#print(data.groupby('month')['購買產(chǎn)品數(shù)'].sum())

#所有用戶每月的消費(fèi)總次數(shù)#print(data.groupby('month')['用戶ID'].count())

#統(tǒng)計每月的消費(fèi)人數(shù) # 同一個人可能消費(fèi)多次,所以 消費(fèi)人數(shù) 只能是唯一的 .nunique() 去重后余下的#print(data.groupby('month')['用戶ID'].nunique())

#各個用戶消費(fèi)總金額和消費(fèi)總次數(shù)的統(tǒng)計描述#print("各個用戶消費(fèi)總金額",data.groupby('用戶ID')['購買金額'].sum())#print("各個用戶消費(fèi)總次數(shù)",data.groupby('用戶ID')['購買產(chǎn)品數(shù)'].nunique())

#print(data.groupby('用戶ID').sum().describe())

#各個用戶消費(fèi)總金額和消費(fèi)總次數(shù)的散點(diǎn)圖#plt.scatter(data.groupby('用戶ID').sum()['購買產(chǎn)品數(shù)'],#data.groupby('用戶ID').sum()['購買金額'])#plt.xlabel("購買產(chǎn)品數(shù)")#plt.ylabel("購買金額")#plt.show()

#各個用戶消費(fèi)總金額的直方分布圖(消費(fèi)金額在1000之內(nèi)的分布)#總結(jié):在groupby條件后直接限制條件, 限制條件后的結(jié)果取值 作圖#data_f = data.groupby('用戶ID').sum().query(" 購買金額 < 1000 " )['購買金額']#print(data_f)#plt.hist(data_f,bins=10) # bins柱子的個數(shù)#plt.show()

#各個用戶消費(fèi)總次數(shù)的直方分布圖(消費(fèi)次數(shù)在于100內(nèi))#by_number = data.groupby('用戶ID').sum().query('購買產(chǎn)品數(shù) < 100')['購買產(chǎn)品數(shù)']#print(by_number)#plt.hist(by_number,bins=30)#plt.show()

#消費(fèi)次數(shù)在100以內(nèi)的 只有8個人消費(fèi)次數(shù)超過100#print((data['用戶ID'].value_counts() < 100).value_counts() ) # 每個data['用戶ID']出現(xiàn)的次數(shù)(出現(xiàn)次數(shù) == 消費(fèi)的次數(shù))#True 23562#False 8

#用戶第一次消費(fèi)的月的分布,和人數(shù)統(tǒng)計 month已經(jīng)轉(zhuǎn)成時間數(shù)據(jù)類型#print(data.groupby('用戶ID')['month'].min()) # 分組出用戶ID,然后選出分組后每個用戶ID最小的那個#print(data.groupby('用戶ID')['month'].min().value_counts()) # 每個月份的人數(shù)統(tǒng)計#data.groupby('用戶ID')['month'].min().value_counts().plot() # 首購分布圖#plt.show()

#用戶最后一次消費(fèi)的時間分布,人數(shù)統(tǒng)計#print(data.groupby('用戶ID')['month'].max())#print(data.groupby('用戶ID')['month'].max().value_counts())#data.groupby('用戶ID')['month'].max().value_counts().plot() # 最后一次購買的時間分布圖#plt.show()

#新用戶 (只購買一次)

#獲取每個用戶的首購 跟尾夠#第一種方式(結(jié)果是錯誤的)因?yàn)槭且淮蜗M(fèi)的用戶,所有只要挑出購買產(chǎn)品數(shù)為1的 ) 學(xué)到的知識是 判斷兩數(shù)組對比方式#data_left = data.groupby("用戶ID")['month'].agg(['min','max']) # 得到min max日期#print((data_left['min'] == data_left['max']).value_counts())

#print( (data.groupby("用戶ID")['購買產(chǎn)品數(shù)'].sum() == 1).value_counts().values) # 第二種方式[X,X1]

#每個用戶的總購買量 總消費(fèi)金額 and 最近一次消費(fèi)的表格rfm (每個用戶在最近的一次消費(fèi))

rfm = data.pivot_table(index='用戶ID',aggfunc={'購買產(chǎn)品數(shù)':'sum','購買金額':'sum','購買日期':'max',})#每個用戶最近一次交易的時間間隔 (購買日期 - 購買日期的最大值) || 去掉days: / np.timedelta64(1,'D')

rfm['R'] = -(rfm['購買日期'] - rfm['購買日期'].max()) / np.timedelta64(1,'D')#修改名字

rfm.rename(columns={'購買金額':'M',"購買產(chǎn)品數(shù)":"F"},inplace=True)#print(rfm.head())

## 分層次

defrfm_func(x):

level= x.map(lambda x:'1' if x >= 0 else '0') #如果是負(fù)數(shù)的就是0,不是就是1

laber = level.R + level.F + level.M #拼接成 d 對應(yīng)的數(shù)值 進(jìn)行區(qū)分客戶等級

d ={'111':'重要價值客戶','011':'重要保持客戶','101':'重要挽留客戶','001':'重要發(fā)展客戶','110':'一般價值客戶','010':'一般保持客戶','100':'一般挽留客戶','000':'一般發(fā)展客戶',

}

result=d[laber]returnresult

rfm['laber'] =rfm[['R','F','M']].apply(lambda x: x - x.mean()).apply(rfm_func,axis=1)#print(rfm)

#print(rfm.groupby('laber').count())

#

#rfm.loc[rfm.laber == '重要價值客戶','color'] = 'g'#rfm.loc[~(rfm.laber == '重要價值客戶'),'color'] = 'r'#rfm.plot.scatter("F",'R',c = rfm.color)#plt.show()

#統(tǒng)計每個用戶每個月的消費(fèi)次數(shù)

user_order_count_data = data.pivot_table(index='用戶ID',values='購買日期',aggfunc='count',columns='month').fillna(0).head()#1 0 0 0 0 0 0#2 0 0 0 0 0 0

#統(tǒng)計每個用戶每個月是否消費(fèi) 消費(fèi)記錄為1 否者記錄消費(fèi)為0#apply 每一行的數(shù)據(jù)#applymap() 每一個數(shù)據(jù)都執(zhí)行一遍

data_purchase = user_order_count_data.applymap(lambda x:1 if x >= 1 else0)#print(data_purchase)

#活躍用戶判斷

col= ['1997-01-01', '1997-02-01', '1997-03-01', '1997-04-01','1997-05-01', '1997-06-01', '1997-07-01', '1997-08-01','1997-09-01', '1997-10-01', '1997-11-01', '1997-12-01','1998-01-01', '1998-02-01', '1998-03-01', '1998-04-01','1998-05-01', '1998-06-01']defactive_status(data):

status=[]for i in range(18):#若本月沒有消費(fèi)

if data[i] ==0:if len(status) >0:if status[i - 1] == 'unreg': #unreg未注冊用戶

status.append('unreg')else:

status.append('unactive') #不活躍用戶

else:

status.append('unreg')#若本月消費(fèi)

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, index=col)

p_status= data_purchase.apply(active_status,axis=1) #將每一行數(shù)據(jù)執(zhí)行函數(shù)一次#print(p_status)

print(p_status.replace('unreg',np.NAN).apply(lambda x:pd.value_counts(x)).T)

總結(jié)

以上是生活随笔為你收集整理的python计算消费总额_【数据分析案例】用户消费行为的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。