天猫订单数据综合分析

人工智能52

一、项目介绍

本项目通过对天猫成交数据的探索,通过python对数据预处理,整个项目分为项目目的的确定、数据的预处理、对数据的分析和项目总结这五个部分。(本项目参考凹凸数据)

二、项目流程

项目目的

从结果指标出发确定目标,通过过程指标定位问题,提出合理建议

数据来源

本数据集来源于和鲸社区

一共收录了发生在一个月内的28010条数据
数据字段:'订单编号', '总金额', '买家实际支付金额', '收货地址 ', '订单创建时间', '订单付款时间 ', '退款金额'共7个字段

  • 买家实际支付金额:最终成交金额,分为已付款和未付款两种情况
  • 已付款情况下:买家实际支付金额 = 总金额 - 退款金额
  • 未付款情况下:买家实际支付金额 = 0
  • 收货地址:买家的收货地址,记录维度为省市,共记录了31个省市
  • 订单创建时间:2020年2月1日 至 2020年2月29日
  • 订单付款时间:2020年2月1日 至 2020年3月1日
  • 退款金额:付款后申请退款的金额,如果没有退款,退款金额为0

指标维度梳理

通过对上述字段的梳理可以看到,除了交易金额作为结果指标外,还有一系列的流程指标,因此需要对指标之间的关系进行逻辑梳理。

[En]

Through the carding of the above fields, we can see that in addition to the transaction amount as the result index, there are a series of process indicators, so we need to sort out the relationship between the indicators logically.

这里我们引入电商的分析中最经典的公式: 销售额 = UV * 转化率 * 客单价

  • 指标梳理:
  • UV:一般指独立访客,在本数据集中,没有客户id作为UV数据,但我们可以把订单创建数量作为UV的数据
  • 转化率:转化流程为订单创建 -> 订单付款 -> 订单成交 -> 订单全额成交
  • 客单价:平均每单的售价,在本数据集当中,亦可以理解为各个产品的销量情况
  • 维度梳理:
  • 时间维度:(周/日)订单创建/付款时间
  • 地域:各省市
  • 产品:假设每一种金额对应唯一的产品时,总金额便可以作为产品品类的标识

数据预处理

主要是运用python预处理。

导入模块

天猫订单数据综合分析

读取数据

天猫订单数据综合分析

整体观察

天猫订单数据综合分析

重复值处理

天猫订单数据综合分析

缺失值处理

天猫订单数据综合分析

天猫订单数据综合分析

字段处理

天猫订单数据综合分析

日期格式提取

天猫订单数据综合分析

结果指标

#销售额图df_true_money=df.groupby('订单创建月日')['买家实际支付金额'].sum()x1=df_true_money.indexy1=df_true_money.valuesdf_true_money_sum=df['买家实际支付金额'].sum()picture_size=plt.figure(figsize=(20,8),dpi=80)#设置绘图大小plt.text(1, 200000, '二月份总销售额为{}'.format(df_true_money_sum),fontsize=20)#不能将图表中的内容移动至图片大小设置前面plt.rcParams['font.sans-serif']=['SimHei']#设置字体样式plt.xticks(range(len(x1)),x1,rotation=60,size=15)plt.xlabel('时间',size=20)plt.ylabel('销售额',size=20)plt.title('销售额每日变化折线图',size=25)for i,j in zip(x1,y1):    plt.text(i,j+70,'%s'%int(j),ha='center',size=15)#为折线图将各坐标点标上数值plt.plot(x1,y1)plt.grid(alpha=0.2)plt.show()

天猫订单数据综合分析

  1. 整体的销售额为190万
  2. 4号出现局部峰值,5-8号持续型下降,每日成交额低于万级水平
  3. 10-16日共一周时间的销售额几乎低于千级,需要特别留意数据的真实性
  4. 17日后出现持续型增长,25日出现本月峰值

但仅有上述信息不足以支持这一决定,因此我们在案件中增加了一些背景假设:

[En]

But the above information alone is not enough to support the decision, so we add some background assumptions to the case:

  1. 本月的销售额目标是230万
  2. 除10-16日之外,所有数据的采集均没有错误
  3. 10-16日的实际日均销售额为2万

在增加假设后,我们可以得知本月的真实销售额为200万,距离目标还差30万。接下来将从公式中的三个指标来拆解是什么环节出现问题,应该如何提升销售额。

查看过程指标,进一步锁定问题

用户行为路径整体转化率

从字段梳理中可以得知用户行为路径为:订单创建 -> 订单付款 -> 订单成交 -> 订单全额成交。而转化率的计算方法有两种:

  • 绝对转化率:每一个环节的订单数除以初始环节的订单数
  • 相对转化率:每一个环节的订单数除以上一个环节的订单数
dict_convs = dict()key_1 = '&#x603B;&#x8BA2;&#x5355;&#x6570;'dict_convs[key_1] = len(df) #&#x603B;&#x8BA2;&#x5355;key_2 = '&#x4ED8;&#x6B3E;&#x8BA2;&#x5355;&#x6570;'df_payed = df[df['&#x8BA2;&#x5355;&#x4ED8;&#x6B3E;&#x65F6;&#x95F4;'].notnull()] # &#x4ED8;&#x6B3E;&#x65F6;&#x95F4;&#x4E0D;&#x4E3A;&#x7A7A;&#x7684;&#xFF0C;&#x8868;&#x793A;&#x4ED8;&#x8FC7;&#x6B3E;dict_convs[key_2] = len(df_payed)key_3 = '&#x5230;&#x6B3E;&#x8BA2;&#x5355;&#x6570;'# &#x4E70;&#x5BB6;&#x5B9E;&#x9645;&#x652F;&#x4ED8;&#x91D1;&#x989D;&#xFF1A;&#x603B;&#x91D1;&#x989D; - &#x9000;&#x6B3E;&#x91D1;&#x989D;&#xFF08;&#x5728;&#x5DF2;&#x4ED8;&#x6B3E;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF09;# &#x4E70;&#x5BB6;&#x5B9E;&#x9645;&#x652F;&#x4ED8;&#x91D1;&#x989D;&#x4E0D;&#x4E3A;0&#x7684;&#xFF0C;&#x8BF4;&#x660E;&#x8BA2;&#x5355;&#x5546;&#x5BB6;&#x6536;&#x5230;&#x8FC7;&#x6B3E;df_trans = df_payed[df_payed['&#x4E70;&#x5BB6;&#x5B9E;&#x9645;&#x652F;&#x4ED8;&#x91D1;&#x989D;'] != 0]dict_convs[key_3] = len(df_trans)key_4 = '&#x5168;&#x989D;&#x5230;&#x6B3E;&#x8BA2;&#x5355;&#x6570;'# &#x5728;&#x4ED8;&#x6B3E;&#x7684;&#x8BA2;&#x5355;&#x4E2D;&#xFF0C;&#x9000;&#x6B3E;&#x91D1;&#x989D;&#x4E3A;0&#x7684;&#xFF0C;&#x8BF4;&#x660E;&#x6CA1;&#x6709;&#x9000;&#x6B3E;&#xFF0C;&#x8868;&#x793A;&#x5168;&#x989D;&#x6536;&#x6B3E;df_trans_full = df_payed[df_payed['&#x9000;&#x6B3E;&#x91D1;&#x989D;'] == 0]dict_convs[key_4] = len(df_trans_full)df_convs = pd.Series(dict_convs, name='&#x8BA2;&#x5355;&#x6570;').to_frame()df_convs['&#x603B;&#x4F53;&#x8F6C;&#x5316;&#x7387;']=df_convs['&#x8BA2;&#x5355;&#x6570;'].apply(lambda x: round(x*100/df_convs.iloc[0,0],3))name = '&#x603B;&#x4F53;&#x8F6C;&#x5316;&#x7387;'funnel = Funnel().add(                    series_name = name,                    data_pair = [ list(z) for z in zip(df_convs.index,df_convs[name]) ],                    is_selected = True,                    label_opts = opts.LabelOpts(position = 'inside',formatter='{b}:{c}%')                    )funnel.set_series_opts(tooltip_opts = opts.TooltipOpts(formatter = '{a}<br>{b}:{c}%'))funnel.set_global_opts( title_opts = opts.TitleOpts(title = name) )                        funnel.render_notebook()

天猫订单数据综合分析

根据 TrustData的报告显示,淘宝平时的订单成功率(指提交订单支付的支付成功率)为97.4%[2]。若以此作为标准,本次分析当中的付款转化率85.99%低于预期标准,实际成交及全额成交的环节转化率甚至不到7成。属于比较低的水平。

#5.&#x5236;&#x4F5C;&#x6F0F;&#x6597;&#x56FE;picture_size=plt.figure(figsize=(20,8),dpi=80)#&#x8BBE;&#x7F6E;&#x7ED8;&#x56FE;&#x5927;&#x5C0F;plt.rcParams['font.sans-serif'] = ['SimHei']#&#x8BBE;&#x7F6E;&#x5B57;&#x4F53;&#x6837;&#x5F0F;width=0.55#&#x77E9;&#x5F62;&#x5BBD;&#x5EA6;x0=np.array(df_convs['&#x5355;&#x4E00;&#x73AF;&#x8282;&#x8F6C;&#x5316;&#x7387;'])#&#x6570;&#x636E;labels=['&#x603B;&#x8BA2;&#x5355;&#x6570;','&#x4ED8;&#x6B3E;&#x8BA2;&#x5355;&#x6570;','&#x5230;&#x6B3E;&#x8BA2;&#x5355;&#x6570;','&#x5168;&#x989D;&#x5230;&#x6B3E;&#x8BA2;&#x5355;&#x6570;']#&#x6807;&#x7B7E;N=x0.size#&#x83B7;&#x53D6;&#x6570;&#x636E;&#x957F;&#x5EA6;max_value = x0.max()#&#x83B7;&#x53D6;&#x6570;&#x636E;&#x6700;&#x5927;&#x503C;x = x0*np.eye(N)#&#x5F62;&#x6210;1*4&#x77E9;&#x9635;blank= np.array((x0.max()-x0)/2) # &#x5360;&#x4F4D;y = np.arange(N-1,-1,-1) # &#x5012;&#x8F6C;y&#x8F74; [3,2,1,0]ax = picture_size.add_subplot(111)#&#x7ED8;&#x5236;&#x6761;&#x5E45;zeros = np.zeros(N)#&#x5F62;&#x6210;&#x7528;0&#x586B;&#x5145;&#x7684;&#x6570;&#x7EC4;&#xFF0C;&#x957F;&#x5EA6;&#x4E3A;Nalpha_step = (1-0.3)/(N-1)for i in range(N-1):    ax.barh(y,x[i],width,tick_label=labels,            color='cornflowerblue',alpha=0.3+alpha_step*i,left=blank)ax.barh(y,x[N-1],width,tick_label=labels,        color='crimson',alpha=0.3+alpha_step*(N-1),left=blank) #&#x7ED8;&#x5236;&#x6700;&#x540E;&#x4E00;&#x5C42;&#x7684;&#x6761;&#x5E45;#&#x7ED8;&#x5236;&#x8FB9;&#x7EBF;rightblank = np.array([i+j for i,j in zip(blank,x0)])ax.plot(blank,y,'crimson',alpha=0.7)ax.plot(rightblank,y,'crimson',alpha=0.7)#&#x7ED8;&#x5236;&#x8F6C;&#x6362;&#x7387;&#x6807;&#x7B7E;x1=np.array(df_convs['&#x8BA2;&#x5355;&#x6570;'])transform = ['%.2f%%'%((x1[i+1]/x1[i])*100) for i in range(N-1)]l = [(max_value/2,i) for i in range(N-2,-1,-1)] #for a,b in zip(transform,l):    offsetbox = TextArea(a, minimumdescent=False)    ab = AnnotationBbox(offsetbox, b,                        xybox=(0, 40),                        boxcoords="offset points",                        arrowprops=dict(arrowstyle="->"))    ax.add_artist(ab)ax.set_xticks([0,max_value])ax.set_yticks(y)plt.title('&#x5404;&#x73AF;&#x8282;&#x8F6C;&#x5316;&#x7387;&#x56FE;',size=25)plt.show()

天猫订单数据综合分析

由各环节转化率可看到,全额付款相对于上一环节转化率达到97.29%,而付款订单数和到款订单数相对于上一环节的转化率的相对较低,重点关注付款订单数和到款订单数的转化。

#&#x5B9E;&#x9645;&#x8F6C;&#x5316;&#x7387;&#x968F;&#x65F6;&#x95F4;&#x53D8;&#x5316;&#x6298;&#x7EBF;&#x56FE;df_day=df.groupby(by=['&#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x6708;&#x65E5;']).agg(    &#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x6570;=('&#x8BA2;&#x5355;&#x4ED8;&#x6B3E;&#x65F6;&#x95F4;', 'count'),    &#x8BA2;&#x5355;&#x6210;&#x4EA4;&#x6570;=('&#x6210;&#x4EA4;&#x60C5;&#x51B5;', 'sum'))df_day['&#x5B9E;&#x9645;&#x6210;&#x4EA4;&#x8F6C;&#x5316;&#x7387;']=round(df_day['&#x8BA2;&#x5355;&#x6210;&#x4EA4;&#x6570;']/df_day['&#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x6570;'],2)df_dayx3=df_day.indexy3=df_day['&#x5B9E;&#x9645;&#x6210;&#x4EA4;&#x8F6C;&#x5316;&#x7387;'].values# df_order_sum=df.shape[0]picture_size=plt.figure(figsize=(25,8),dpi=80)#&#x8BBE;&#x7F6E;&#x7ED8;&#x56FE;&#x5927;&#x5C0F;# plt.text(1, 3000, '&#x4E8C;&#x6708;&#x4EFD;&#x603B;&#x8BA2;&#x5355;&#x91CF;&#x4E3A;{}'.format(df_order_sum),fontsize=20)plt.rcParams['font.sans-serif']=['SimHei']#&#x8BBE;&#x7F6E;&#x5B57;&#x4F53;&#x6837;&#x5F0F;plt.xticks(range(len(x3)),x3,rotation=60,size=15)#&#x8BBE;&#x7F6E;x&#x8F74;&#x5750;&#x6807;plt.xlabel('&#x65F6;&#x95F4;',size=20)plt.ylabel('&#x8F6C;&#x5316;&#x7387;',size=20)plt.title('&#x8BA2;&#x5355;&#x6210;&#x4EA4;&#x8F6C;&#x5316;&#x7387;&#x6BCF;&#x65E5;&#x53D8;&#x5316;&#x6298;&#x7EBF;&#x56FE;',size=25)for i,j in zip(x3,y3):    plt.text(i,j+0.01,'%s'%j,ha='center',size=15)#&#x4E3A;&#x6298;&#x7EBF;&#x56FE;&#x5C06;&#x5404;&#x5750;&#x6807;&#x70B9;&#x6807;&#x4E0A;&#x6570;&#x503C;plt.plot(x3,y3)    plt.grid(alpha=0.2)plt.show()

天猫订单数据综合分析

忽略2月10号到2月16号,可以看到转化率在2月6号出现明显上升趋势,可能是疫情稳定,订单成交开始回暖,2月17号在0.8附近波动,2月23号转化率出现明显下移。

订单量增长情况

#&#x8BA2;&#x5355;&#x91CF;&#x6298;&#x7EBF;&#x56FE;df_order_num=df.groupby('&#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x6708;&#x65E5;')['&#x8BA2;&#x5355;&#x7F16;&#x53F7;'].count()x2=df_order_num.indexy2=df_order_num.valuesdf_order_sum=df.shape[0]picture_size=plt.figure(figsize=(20,8),dpi=80)#&#x8BBE;&#x7F6E;&#x7ED8;&#x56FE;&#x5927;&#x5C0F;plt.text(1, 3000, '&#x4E8C;&#x6708;&#x4EFD;&#x603B;&#x8BA2;&#x5355;&#x91CF;&#x4E3A;{}'.format(df_order_sum),fontsize=20)plt.rcParams['font.sans-serif']=['SimHei']#&#x8BBE;&#x7F6E;&#x5B57;&#x4F53;&#x6837;&#x5F0F;plt.xticks(range(len(x2)),x2,rotation=60,size=15)#&#x8BBE;&#x7F6E;x&#x8F74;&#x5750;&#x6807;plt.xlabel('&#x65F6;&#x95F4;',size=20)plt.ylabel('&#x8BA2;&#x5355;&#x91CF;',size=20)plt.title('&#x8BA2;&#x5355;&#x91CF;&#x6BCF;&#x65E5;&#x53D8;&#x5316;&#x6298;&#x7EBF;&#x56FE;',size=25)for i,j in zip(x2,y2):    plt.text(i,j+70,'%s'%j,ha='center',size=15)#&#x4E3A;&#x6298;&#x7EBF;&#x56FE;&#x5C06;&#x5404;&#x5750;&#x6807;&#x70B9;&#x6807;&#x4E0A;&#x6570;&#x503C;plt.plot(x2,y2)    plt.grid(alpha=0.2)plt.show()

天猫订单数据综合分析

按照现有的转化率情况进行估算,10-16日的日均订单创建量约为167+(190/200=2.8/x),即2月的整体订单创建数为2万9千左右。在转化率及客单价均不变的情况下,订单创建数至少要增加多4k才能达到目标值。

现在假设消费额作为商品类别,查看各品类数据

品类数据占比情况

df1=df[df['&#x4E70;&#x5BB6;&#x5B9E;&#x9645;&#x652F;&#x4ED8;&#x91D1;&#x989D;']>0]hot_=pd.DataFrame({    '&#x9500;&#x91CF;':df1['&#x603B;&#x91D1;&#x989D;'].value_counts(),    '&#x5168;&#x989D;&#x4ED8;&#x6B3E;&#x9500;&#x91CF;':df1[df1['&#x4E70;&#x5BB6;&#x5B9E;&#x9645;&#x652F;&#x4ED8;&#x91D1;&#x989D;']==df1['&#x603B;&#x91D1;&#x989D;']]['&#x603B;&#x91D1;&#x989D;'].value_counts()}).sort_values(by='&#x9500;&#x91CF;',ascending=False)hot_['&#x603B;&#x9500;&#x91CF;&#x5360;&#x6BD4;(%)']=hot_['&#x9500;&#x91CF;'].apply(lambda x : round((x/hot_['&#x9500;&#x91CF;'].sum())*100,2))hot_['&#x9500;&#x552E;&#x989D;']=df1.groupby(by='&#x603B;&#x91D1;&#x989D;')['&#x4E70;&#x5BB6;&#x5B9E;&#x9645;&#x652F;&#x4ED8;&#x91D1;&#x989D;'].sum()hot_['&#x9500;&#x552E;&#x989D;&#x5360;&#x6BD4;(%)']=hot_['&#x9500;&#x552E;&#x989D;'].apply(lambda x : round((x/hot_['&#x9500;&#x552E;&#x989D;'].sum())*100,2))print(f'{"-"*20}&#x70ED;&#x5356;&#x524D;20{"-"*20}')print(hot_.head(20))plt.figure(figsize=(8, 6),dpi=160)# &#x5C06;&#x9500;&#x552E;&#x91CF;&#x524D;10&#x4E4B;&#x5916;&#x7684;&#x54C1;&#x7C7B;&#x5F52;&#x4E3A;&#x5176;&#x4ED6;a=hot_.iloc[10:].sum().to_frame('&#x5176;&#x4ED6;').unstack().unstack()hot_=pd.concat([hot_.head(10), a])# &#x8272;&#x677F;color=sns.color_palette('hls',11)# &#x753B;&#x56FE;plt.pie(hot_['&#x603B;&#x9500;&#x91CF;&#x5360;&#x6BD4;(%)'], autopct='%3.1f%%', labels=hot_.index, startangle=45,colors=color)plt.title('&#x5404;&#x54C1;&#x7C7B;&#x9500;&#x91CF;&#x60C5;&#x51B5;')plt.show()

天猫订单数据综合分析

天猫订单数据综合分析

销量前10的产品销量已经占到了总销量的55%。在分析这类榜单类或者占比类的图表时,以下信息非常关键:

  • 整体排行:是否有哪些产品排在前列/没有排在前列是出乎意料的事
  • 趋势:销售排名变化,哪些产品增长最快,哪些产品表现平平,哪些产品开始下滑
    [En]

    trend: changes in sales ranking, which products are growing the fastest, which products are mediocre, and which products are beginning to decline*

  • 产品布局:
  • 走量类的产品销量是否多于品牌类产品
  • 同一产品线的高中低端产品的销量分布情况,探究客户的消费需求偏向。

查看各省市的销售额情况

&#x5404;&#x7701;&#x5E02;&#x8BA2;&#x5355;&#x5206;&#x5E03;&#x56FE;#&#x5BF9;&#x7701;&#x5E02;&#x5730;&#x57DF;&#x540D;&#x8FDB;&#x884C;&#x5904;&#x7406;,(&#x5217;&#x5982;&#x5C06;&#x6D59;&#x6C5F;&#x7701;&#x7684;&#x2018;&#x7701;&#x2019;&#x53BB;&#x6389;)df_province=[]for i in df['&#x6536;&#x8D27;&#x5730;&#x5740;']:    df_province.append(i)for i in df_province:    if i[2:3]=='&#x7701;'or i[3:4]=='&#x7701;':        if len(i)==3:            df_province[df_province.index(i)] =i[0:2]        if len(i)==4:            df_province[df_province.index(i)] = i[0:3]    if i=='&#x5185;&#x8499;&#x53E4;&#x81EA;&#x6CBB;&#x533A;':        df_province[df_province.index(i)] = '&#x5185;&#x8499;&#x53E4;'    if i=='&#x5E7F;&#x897F;&#x58EE;&#x65CF;&#x81EA;&#x6CBB;&#x533A;':        df_province[df_province.index(i)] = '&#x5E7F;&#x897F;'    if i=='&#x65B0;&#x7586;&#x7EF4;&#x543E;&#x5C14;&#x81EA;&#x6CBB;&#x533A;':        df_province[df_province.index(i)] = '&#x65B0;&#x7586;'    if i=='&#x5B81;&#x590F;&#x56DE;&#x65CF;&#x81EA;&#x6CBB;&#x533A;':        df_province[df_province.index(i)] = '&#x5B81;&#x590F;'    if i=='&#x897F;&#x85CF;&#x81EA;&#x6CBB;&#x533A;':        df_province[df_province.index(i)] = '&#x897F;&#x85CF;'df['&#x6536;&#x8D27;&#x5730;&#x5740;']=df_provincedf.head(10)df_province_order=df.groupby('&#x6536;&#x8D27;&#x5730;&#x5740;')['&#x8BA2;&#x5355;&#x7F16;&#x53F7;'].count().sort_values(ascending=False)province=[]for i in df_province_order.index:    province.append(i)data=[]for i in df_province_order.values:    n=int(i)    data.append(n)c=[list(z) for z in zip(province,data)]c = (    Map()    .add("",c, "china",is_map_symbol_show=False)    .set_global_opts(        title_opts=opts.TitleOpts(title="&#x5404;&#x7701;&#x5E02;&#x8BA2;&#x5355;&#x5206;&#x5E03;"),         visualmap_opts=opts.VisualMapOpts(max_=4000,                                                                                                                                          )    )    )c.render_notebook()

天猫订单数据综合分析

从图及数据可以得知,销售额前5分别为上海、北京、江苏省、广东省、浙江省

重点城市各项指标变化情况

# &#x627E;&#x5230;&#x6709;&#x5B9E;&#x9645;&#x6210;&#x4EA4;&#x7684;&#x6240;&#x6709;&#x884C;df['&#x6210;&#x4EA4;&#x60C5;&#x51B5;']=0df.loc[df[df['&#x4E70;&#x5BB6;&#x5B9E;&#x9645;&#x652F;&#x4ED8;&#x91D1;&#x989D;']>0].index.to_list(),'&#x6210;&#x4EA4;&#x60C5;&#x51B5;']=1df.loc[df[df['&#x4E70;&#x5BB6;&#x5B9E;&#x9645;&#x652F;&#x4ED8;&#x91D1;&#x989D;']==df['&#x603B;&#x91D1;&#x989D;']].index.to_list(),'&#x5168;&#x4EF7;&#x6210;&#x4EA4;']=1# &#x5206;&#x7EC4;&#x6C42;&#x548C;df_=df.groupby(by=['&#x6536;&#x8D27;&#x5730;&#x5740;',pd.Grouper(key='&#x8BA2;&#x5355;&#x4ED8;&#x6B3E;&#x65F6;&#x95F4;',freq='W')]).agg(    &#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x6570;=('&#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x65F6;&#x95F4;', 'count'),    &#x8BA2;&#x5355;&#x6210;&#x4EA4;&#x6570;=('&#x6210;&#x4EA4;&#x60C5;&#x51B5;', 'sum'))df_time=df.groupby(pd.Grouper(key='&#x8BA2;&#x5355;&#x4ED8;&#x6B3E;&#x65F6;&#x95F4;',freq='W')).agg(    &#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x6570;=('&#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x65F6;&#x95F4;', 'count'),    &#x8BA2;&#x5355;&#x6210;&#x4EA4;&#x6570;=('&#x6210;&#x4EA4;&#x60C5;&#x51B5;', 'sum'))df_time['&#x5B9E;&#x9645;&#x6210;&#x4EA4;&#x8F6C;&#x5316;&#x7387;']=round(df_time['&#x8BA2;&#x5355;&#x6210;&#x4EA4;&#x6570;']/df_time['&#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x6570;'],2)df_head3=df_.loc[['&#x4E0A;&#x6D77;','&#x5E7F;&#x4E1C;','&#x5317;&#x4EAC;','&#x6C5F;&#x82CF;','&#x6D59;&#x6C5F;']]# &#x6C42;&#x8F6C;&#x5316;&#x7387;df_head3['&#x5B9E;&#x9645;&#x6210;&#x4EA4;&#x8F6C;&#x5316;&#x7387;']=round(df_head3['&#x8BA2;&#x5355;&#x6210;&#x4EA4;&#x6570;']/df_head3['&#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x6570;'],2)print(f'{"-" * 15}&#x9500;&#x91CF;&#x524D;5&#x7684;&#x7701;&#x5E02;&#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x91CF;&#x91CF;&#x60C5;&#x51B5;{"-" * 15}
')print(df_head3['&#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x6570;'].unstack()) print(f'{"-" * 15}&#x6574;&#x4F53;&#x8F6C;&#x5316;&#x7387;&#x60C5;&#x51B5;{"-" * 15}
')print(df_time['&#x5B9E;&#x9645;&#x6210;&#x4EA4;&#x8F6C;&#x5316;&#x7387;'])     print(f'
{"-" * 15}&#x9500;&#x91CF;&#x524D;5&#x7684;&#x7701;&#x5E02;&#x7684;&#x8F6C;&#x5316;&#x7387;&#x60C5;&#x51B5;{"-" * 15}
')print(df_head3['&#x5B9E;&#x9645;&#x6210;&#x4EA4;&#x8F6C;&#x5316;&#x7387;'].unstack())

天猫订单数据综合分析

  1. 在春节过后,疫情最为严重的那段时间,每座城市的订单创建数及最终成交的转化率都是非常低,几乎是每创建两个订单,就有一个订单被退回。而在疫情逐渐明朗后,各项指标均有回升,但依然低于标准值97%。
  2. 上海的订单创建数及实际成交数都是最多的,转化率的表现也是最好的,因此作为标杆。
  3. 北京及广东是重点区域。两个区域是除上海之外销量最多的,但转化率基本低于平均值,特别是广东,虽订单创建量排名第二,但销售额却排名第四。
  4. 江苏和浙江为次重要区域。两个区域虽订单创建量相对较低,但转化率接近均值,销售额情况也较为乐观,江苏的销售额甚至高于广东。

结合产品维度交叉分析

df_food=df[(df['&#x6536;&#x8D27;&#x5730;&#x5740;'].isin(['&#x5317;&#x4EAC;','&#x4E0A;&#x6D77;','&#x5E7F;&#x4E1C;']))&(df['&#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x65F6;&#x95F4;']>'2020-02-16')]df_food['&#x6210;&#x4EA4;&#x60C5;&#x51B5;']=0df_food.loc[df_food[df_food['&#x4E70;&#x5BB6;&#x5B9E;&#x9645;&#x652F;&#x4ED8;&#x91D1;&#x989D;']>0].index.to_list(),'&#x6210;&#x4EA4;&#x60C5;&#x51B5;']=1df_food_=df_food.groupby(by=['&#x6536;&#x8D27;&#x5730;&#x5740;','&#x603B;&#x91D1;&#x989D;']).agg(    &#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x6570;=('&#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x65F6;&#x95F4;', 'count'),    &#x8BA2;&#x5355;&#x6210;&#x4EA4;&#x6570;=('&#x6210;&#x4EA4;&#x60C5;&#x51B5;', 'sum'))# &#x7B5B;&#x9009;&#x6BCF;&#x4E2A;&#x7701;&#x5E02;&#x7684;&#x9500;&#x91CF;&#x524D;5df_food1=df_food_.reset_index().groupby('&#x6536;&#x8D27;&#x5730;&#x5740;').apply(lambda x: x.nlargest(5,'&#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x6570;',keep='all')).set_index(['&#x6536;&#x8D27;&#x5730;&#x5740;','&#x603B;&#x91D1;&#x989D;'])# &#x6C42;&#x8F6C;&#x5316;&#x7387;df_food1['&#x5B9E;&#x9645;&#x6210;&#x4EA4;&#x8F6C;&#x5316;&#x7387;']=round(df_food1['&#x8BA2;&#x5355;&#x6210;&#x4EA4;&#x6570;']/df_food1['&#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x6570;'],2)print(f'{"-" * 15}&#x91CD;&#x70B9;&#x7701;&#x5E02;&#x9500;&#x91CF;&#x524D;5&#x4EA7;&#x54C1;&#x7684;&#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x91CF;&#x91CF;&#x60C5;&#x51B5;{"-" * 15}
')print(df_food1['&#x8BA2;&#x5355;&#x521B;&#x5EFA;&#x6570;'].unstack())      print(f'
{"-" * 15}&#x9500;&#x91CF;&#x524D;5&#x7684;&#x7701;&#x5E02;&#x7684;&#x8F6C;&#x5316;&#x7387;&#x60C5;&#x51B5;{"-" * 15}
')print(df_food1['&#x5B9E;&#x9645;&#x6210;&#x4EA4;&#x8F6C;&#x5316;&#x7387;'].unstack())

天猫订单数据综合分析

与我们的基准上海地区相比,我们针对北京和广东的不同产品提出了不同的优化目标,例如:

[En]

Compared with our benchmark Shanghai region, we put forward different optimization objectives for different products in Beijing and Guangdong, such as:

北京

  • 针对37产品:在价格不变的情况下,提升10个订单创建数,成交转化率提升至70%

广东

  • 针对69产品:在价格不变的情况下,提升21个订单创建数,提升成交转化率至75%

结论

这次项目结合python,对数据拆解,初窥数据分析,新人博主,还有做得不对的地方还望指出

Original: https://blog.csdn.net/weixin_52509748/article/details/123098579
Author: 辣梨的分析屋
Title: 天猫订单数据综合分析



相关阅读

Title: RuntimeError: element 0 of tensors does not require grad and does not have a grad_

今天在跑代码的过程中,因为要训练一个模型然后在测试阶段使用PGD来生成相应的adv_image来测试这个模型,结果运行到测试阶段出现下面的问题。

报错如下:
RuntimeError: element 0 of tensors does not require grad and does not have a grad_

我的代码如下:

def validate_roubst(val_loader, model, criterion, epoch, args, log=None, tf_writer=None, flag='roubst_val'):
    batch_time = AverageMeter('Time', ':6.3f')
    losses = AverageMeter('Loss', ':.4e')
    top1 = AverageMeter('Acc@1', ':6.2f')
    top5 = AverageMeter('Acc@5', ':6.2f')

    model.eval()
    all_preds = []
    all_targets = []

    with torch.no_grad():
        end = time.time()
        for i, (input, target) in enumerate(val_loader):
            if args.gpu is not None:

                print('............')

            input = input.cuda(args.gpu, non_blocking=True)
            target = target.cuda(args.gpu, non_blocking=True)

            attack_method = PGD(model, args.device)
            adv_example = attack_method.generate(input, target, epsilon = 8/255, num_steps = 20, step_size = 0.01, clip_max = 1.0, clip_min = 0.0, print_process = False, bound = 'linf')

            output = model(adv_example)
            loss = criterion(output, target)

            acc1, acc5 = accuracy(output, target, topk=(1, 5))
            losses.update(loss.item(), input.size(0))
            top1.update(acc1[0], input.size(0))
            top5.update(acc5[0], input.size(0))

            batch_time.update(time.time() - end)
            end = time.time()

            _, pred = torch.max(output, 1)
            all_preds.extend(pred.cpu().numpy())
            all_targets.extend(target.cpu().numpy())

            if i % args.print_freq == 0:
                output = ('Test: [{0}/{1}]\t'
                            'Time {batch_time.val:.3f} ({batch_time.avg:.3f})\t'
                            'Loss {loss.val:.4f} ({loss.avg:.4f})\t'
                            'Prec@1 {top1.val:.3f} ({top1.avg:.3f})\t'
                            'Prec@5 {top5.val:.3f} ({top5.avg:.3f})'.format(
                    i, len(val_loader), batch_time=batch_time, loss=losses,
                    top1=top1, top5=top5))
                print(output)
        cf = confusion_matrix(all_targets, all_preds).astype(float)
        cls_cnt = cf.sum(axis=1)
        cls_hit = np.diag(cf)
        cls_acc = cls_hit / cls_cnt
        output = ('{flag} Results: Prec@1 {top1.avg:.3f} Prec@5 {top5.avg:.3f} Loss {loss.avg:.5f}'
                .format(flag=flag, top1=top1, top5=top5, loss=losses))
        out_cls_acc = '%s Class Accuracy: %s'%(flag,(np.array2string(cls_acc, separator=',', formatter={'float_kind':lambda x: "%.3f" % x})))
        print(output)
        print(out_cls_acc)
        if log is not None:
            log.write(output + '\n')
            log.write(out_cls_acc + '\n')
            log.flush()

        tf_writer.add_scalar('loss/test_'+ flag, losses.avg, epoch)
        tf_writer.add_scalar('acc/test_' + flag + '_top1', top1.avg, epoch)
        tf_writer.add_scalar('acc/test_' + flag + '_top5', top5.avg, epoch)
        tf_writer.add_scalars('acc/test_' + flag + '_cls_acc', {str(i):x for i, x in enumerate(cls_acc)}, epoch)

     return top1.avg

出了问题当然要找到解决方案:

2.1 方案1

大多数人是说要加这一句:

loss.requires_grad_(True) #加入此句就行了

具体做法就是:

loss = criterion(output, target)
loss.requires_grad_(True) # 加入此句在这个位置
...

loss.backward()

但是经过本人尝试,还是没有什么用,因为我在train阶段不会 出现错误,只有在test阶段就报错。

2.2 方案2

回到本质,或者从错误报告的角度来看,错误提示大致意味着元素不需要渐变。

[En]

To return to the essence, or from the point of view of error reporting, the error hint roughly means that the element does not require a gradient.

然后我仔细瞅了瞅我那段代码,发现了一个可疑之处: with torch.no_grad()
最后仔细查看了这个东西的一些使用规则(参考文献1):

with torch.no_grad()则主要是 用于停止autograd模块的工作,以起到加速和节省显存的作用,具体行为就是停止gradient计算,从而节省了GPU算力和显存,但是并不会影响dropout和batchnorm层的行为。

看到我上面加粗的字体了吧,原来使用with torch.no_grad()就不会自动求梯度了,因为我们使用PGD生成adv_image需要求梯度,所以加上with torch.no_grad()就导致了我们无法求梯度,最终出现了下面的错误。

故解决方案为:

将 with torch.no_grad() 去掉

Original: https://blog.csdn.net/wyf2017/article/details/123156380
Author: 流年若逝
Title: RuntimeError: element 0 of tensors does not require grad and does not have a grad_

相关文章
自动驾驶之轨迹规划1——算法综述 人工智能

自动驾驶之轨迹规划1——算法综述

1. 背景概述 本文立足于智能车领域的轨迹规划,根据自己的整理和理解输出,权当做一篇学习笔记。这篇只是综述,每种算法的详细过程会在别的篇幅整理出来。 首先解释一下一些基本概念: 规划(planning...
tensorflow 2.6 人工智能

tensorflow 2.6

参考代码: 如果是1.0版本的遇到以上问题 可以参考以下方案 AttributeError: 'Sequential' object has no attribute 'predict_classes...
received ((None, 2) vs (None, 5)) 人工智能

received ((None, 2) vs (None, 5))

关于用keras跑深度学习模型,分类问题的小汇总。 拿到手的是2分类的模型,要改成5分类。本来是没有头绪的,查了一圈解决了问题,汇总一下,便于以后查看。 python - Tensorflow Val...
如何评估聚类模型的性能 人工智能

如何评估聚类模型的性能

你好,这篇文章咱们讨论一下关于「如何评估聚类模型的性能」的事情... 如何评估聚类模型的性能 综述 聚类的定义和应用 聚类的评估方法 内部评估指标 外部评估指标 聚类模型的优化 综述 在现代生产和科学...