import pandas as pd
import numpy as np
data = pd.read_excel(r'C:\Users\ibm\Downloads\TGI指数案例数据.xlsx')
print(data.shape)
#2. 获取交易成功的数据量:
mask = data['订单状态']=='交易成功'
successful_deal_df = data.loc[mask, :]
"""
1. 计算用户平均支付金额:
2. 基于用户支付金额,判断用户是属于低客单还是高客单:
(客户总消费金额 cost, cost>55:高客单, cost<55:低客单)
3. 用透视表的方法来统计每个省市低客单、高客单人数
4. 计算总人数,以及每个城市对应的高客单占比;
5. 思考分析结果是否合理?
"""
#==1. 计算用户平均支付金额===============================================================
#(1).一个客户下了2个订单: 两个人;
#(2) 一个客户下多个订单,算一个人;
#(1)人数:
people_num = successful_deal_df['买家昵称'].drop_duplicates().size
print(successful_deal_df.dtypes)
#(2)平均消费金额:
average_payment = successful_deal_df['实付金额'].sum() / people_num
print(average_payment)
#========================================================================================
# 2. 基于用户支付金额,判断用户是属于低客单还是高客单:
# (客户总消费金额 cost, cost>55:高客单, cost<55:低客单)
groubpy_maijia = successful_deal_df.groupby(by='买家昵称')['实付金额'].sum().reset_index()
#(1)方法一:bool 切片赋值:
# mask1 = groubpy_maijia['实付金额']<55
# mask2 = groubpy_maijia['实付金额']>=55
# groubpy_maijia.loc[mask1, "买家状态"] = '低客单'
# groubpy_maijia.loc[mask2, "买家状态"] = '高客单'
# print(groubpy_maijia)
#(2)方法二: transform + 自定义函数
groubpy_maijia['客户分类'] = groubpy_maijia['实付金额'].transform(lambda x: '低客单' if x < 55 else '高客单')
#==================================================================================================================
# 3. 用透视表的方法来统计每个省市低客单、高客单人数
#(1)将客户分类表添加省与市:
# print(groubpy_maijia.shape)
right = successful_deal_df.drop_duplicates(subset='买家昵称')
concat_df = pd.merge(groubpy_maijia, right=right, on='买家昵称', how='left')
#(2)透视表:
pivot_df = pd.pivot_table(concat_df, index=['省份', '城市'], columns='客户分类', values=['买家昵称'], aggfunc=np.size,margins=True)
print(pivot_df)
#===================================================================================================
# 4. 计算总人数,以及每个城市对应的高客单占比;
# 高客单占比 = 高客单数/单个城市总客单数
# print((pivot_df['买家昵称']['高客单'] / pivot_df['买家昵称']['All']).sort_values(ascending=False).head(10))
#5. 思考分析结果是否合理?(不合理,原因部分地区的客流量很少,数据不具有代表性)
# 选择条件进行筛选:
# (1)各地高客单/ 全国总高客单数
# print(pivot_df.head())
gaokedan_num = pivot_df.loc['All', ('买家昵称', '高客单')].values[0]
print(((pivot_df['买家昵称']['高客单']) / gaokedan_num).sort_values(ascending=False))
TGI指数分析
最新推荐文章于 2023-06-07 14:42:49 发布