冰箱日订单数据分析(京东)python代码

2023-11-13

具体分析报告地址
PowerBi网页版

数据

2020年5月25日京东大家电-家用电器-冰箱订单数据,按10%抽样,约22MB(70k+条数据)
包含信息:

user_log_acct --用户账号
parent_sale_ord_id --父订单号
sale_ord_id --订单号
sale_ord_tm --订单时间
sale_ord_dt --订单日期
item_sku_id --商品sku
item_name --商品名称
brandname --品牌名称
sale_qtty --商品数量
item_first_cate_name --一级品类名称
item_second_cate_name --二级品类名称
item_third_cate_name --一级品类名称
before_prefr_unit_price --优惠前单价
after_prefr_unit_price --优惠后单价
user_actual_pay_amount --实际支付价格
sale_ord_valid_flag --订单有效标志
cancel_flag --订单取消标志
check_account_tm --支付时间
total_offer_amount --总优惠金额
self_ord_flag --自营标志
user_site_city_id --用户所在城市编号
user_site_province_id–用户所在省份编号
user_lv_cd --用户会员等级

数据预处理

缺失值处理
用户城市和省份信息有部分缺失,猜测原因是部分用户隐藏了IP地址,不影响分析,可以用‘缺失值’代替
部分订单的订单时间是空值,原因是订单尚未支付,不影响分析,可以将其赋特殊值比如-1或者不处理

数据逻辑错误
有用户的城市ID为-1只有1个,影响不大可以删除
优惠前冰箱的最低价格为288,数据中存在大量的低价订单,其中绝大部分是保修、返现等无价值订单,一小部分是异常订单,可以忽略,只筛选出优惠前价格大于500的数据
在这里插入图片描述

import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt 
import seaborn as sns 
from scipy import stats 
from matplotlib.ticker import FuncFormatter 
plt.rcParams['font.sans-serif'] = ['KaiTi', 'SimHei', 'FangSong']
df=pd.read_csv('course_order_d.csv',sep='\t')
df.head()
#查看列名
df.columns

在这里插入图片描述

df.info()

在这里插入图片描述

#数据清洗
#数据类型转换
#缺失值和异常值处理
#优惠前冰箱的最低价格为288元,低于此价格的订单认为是异常订单  (df['before_prefr_unit_price']<288).sum() 为14252个
#用户的城市ID为-1删除,只有1个
df=df[(df['before_prefr_unit_price']>=288) & (df['user_site_city_id']!=-1)]
df.shape  #(62378, 23)
#查看重复订单数量
print(df["sale_ord_id"].duplicated().sum()) #843

#去掉订单号重复的数据(这里京东的建议保留第一个)
df.drop_duplicates(subset=['sale_ord_id'],keep='first',inplace=True)
df.info()

城市、省份信息缺失,订单时间缺失部分订单的订单时间是空值,原因是订单尚未支付,可以将其赋特殊值比如Not Given

df.user_site_city_id.fillna('Not Given',inplace = True)
df.user_site_province_id.fillna('Not Given',inplace = True)
df.check_account_tm.fillna('Not Given',inplace = True)

# 添加总价格列  等于 商品数量*优惠后单价
df['total_actual_pay']=df['sale_qtty']* df['after_prefr_unit_price']
df.head()

宏观分析

#取消订单数  17782
order_cancel=df[df.cancel_flag==1]['sale_ord_id'].count()
#总订单数  61535
order_num=df['sale_ord_id'].count()

#df2只包含有效订单(sale_ord_valid_flag订单有效标志为1 且 cancel_flag订单取消标志为0 )
df2=df.copy() 
df2=df2[(df2['sale_ord_valid_flag']==1)&(df2['cancel_flag']==0)] 

#有效订单数量  33845
order_vaild=df2['sale_ord_id'].count()

#支付订单数量 28768
order_payed=df2['sale_ord_id'][df2['user_actual_pay_amount']!=0].count()

#未支付订单数量  5077
order_unpay=df2['sale_ord_id'][df2['user_actual_pay_amount']==0].count()

#总销售额
total_sales = df2['user_actual_pay_amount'].sum()
# GMV:本实例中指所有有效订单的总交易额
GMV = df2['total_actual_pay'].sum()
 
#总用户数
total_users = df['user_log_acct'].nunique()
 
print('订单总数:',order_num)
print('取消订单数:',order_cancel)
print('有效订单总数:',order_vaild)
print('已支付订单:',order_payed)
print('总销售额:',total_sales)
print('GMV:',GMV)
print('总用户数:',total_users)

在这里插入图片描述

fig,axes = plt.subplots(1,2,figsize =(10,5),dpi=100)

labels1=['取消','未取消']
X=[order_cancel,order_num-order_cancel]
axes[0].pie(X,labels=labels1,autopct='%1.2f%%',colors = ['#1a445d','#6490a9'],pctdistance = 1.3,startangle = 90) 
axes[0].set_title("订单总数取消情况", fontsize=25)

labels2=['支付','未支付']
Y=[order_payed,order_unpay]
axes[1].pie(Y,labels=labels2,autopct='%1.2f%%',colors = ['#1a445d','#6490a9'],pctdistance = 1.2,startangle = 90) 
axes[1].set_title("有效订单数支付情况", fontsize=25) 

在这里插入图片描述
优惠后单价累积分布图
通过整体的价格分布我们可以发现,约80%的订单在3000元以下。

price_series=df2['after_prefr_unit_price']
price_series.describe([0.25,0.5,0.7,0.75,0.8,0.85,0.9])

在这里插入图片描述

order_price = pd.DataFrame(df2.groupby('after_prefr_unit_price')['after_prefr_unit_price'].count())
order_price.columns = ['ord_price_qua']
order_price['price_rate_cum'] = (order_price['ord_price_qua']/(order_price['ord_price_qua'].sum())).cumsum()

fig = plt.figure(figsize=(20,8),dpi=120)
ax = fig.add_subplot(111,fc='w')
ax.tick_params(labelsize=12,colors='k') #刻度字体大小12
plt.xlabel('优惠后单价',fontdict={'color':'k', 'size':18})

def to_percent(temp,position):
    return '%1.1f'%(100*temp)+'%'

plt.gca().yaxis.set_major_formatter(FuncFormatter(to_percent))

ax.plot(order_price.index,order_price['price_rate_cum'],color='#1a445d',linewidth=1.8)
ax.set_title("优惠后单价累积分布图", fontsize=25) 
# 设置有边框和头部边框颜色为空right、top、left
[ax.spines[loc_axis].set_visible(False) for loc_axis in ['top','right','left']]
plt.grid(color = "k", alpha=0.5,linewidth=0.5)

在这里插入图片描述

微观分析

时间维度

df3=df2.copy()
#提取小时
df3['order_time_hms']=df3['sale_ord_tm'].apply(lambda x:int(str(x).split(' ')[1][0:2]))
#每个小时订单数
pay_time_df=df3.groupby('order_time_hms')['sale_ord_id'].count()

x=pay_time_df.index 
y=pay_time_df.values 

fig = plt.figure(figsize=(20,8),dpi=120)
ax = fig.add_subplot(111,fc='w')
ax.tick_params(labelsize=12,colors='k') #刻度字体大小12
plt.xlabel('小时',fontdict={'color':'k', 'size':18})
plt.ylabel('有效订单量',fontdict={'color':'k', 'size':18})
plt.xticks(range(len(x)),x)
rect =ax.bar(x,y,width=0.5,color=['#6490a9'])
# 设置有边框和头部边框颜色为空right、top、left
[ax.spines[loc_axis].set_visible(False) for loc_axis in ['top','right','left']]

plt.grid(axis='y')

在这里插入图片描述

#小时订单数
order_time_df=df3.groupby('order_time_hms')['sale_ord_id'].agg([('order_num','count')])
#或order_time_df=df3.groupby('order_time_hms')['sale_ord_id'].agg(order_num='count')  

#小时独立用户数
user_time_df=df3.groupby('order_time_hms')['user_log_acct'].agg(user_num='nunique')

#独立用户人均下单数
order_num_per_user=order_time_df['order_num']/user_time_df['user_num']

x=order_num_per_user.index 
y=order_num_per_user.values 
fig = plt.figure(figsize=(20,8),dpi=100)
ax = fig.add_subplot(1,1,1)
plt.tick_params(labelsize=14,colors='k')
plt.xlabel('小时',fontdict={'color':'k', 'size':18})
plt.ylabel('人均有效订单数',fontdict={'color':'k', 'size':18})
# 设置有边框和头部边框颜色为空right、top、left
[ax.spines[loc_axis].set_visible(False) for loc_axis in ['top','right','left']]

plt.xticks(range(len(x)),x)
plt.plot(x,y)
plt.grid(axis='y')

在这里插入图片描述

total_pay_time_df=df3.groupby('order_time_hms')['total_actual_pay'].agg(total_pay='sum')
#容单价:销售额/独立用户数
pay_per_user=total_pay_time_df['total_pay']/user_time_df['user_num']
#平均订单价:销售额/订单数
pay_per_order=total_pay_time_df['total_pay']/order_time_df['order_num']

x=pay_per_user.index
y=pay_per_user.values 
y2=pay_per_order.values 

fig = plt.figure(figsize=(20,8),dpi=100)
ax = fig.add_subplot(111)
plt.tick_params(labelsize=14,colors='k')
plt.xlabel('小时',fontdict={'color':'k', 'size':18})
plt.ylabel("价格",fontdict={'color':'k', 'size':18})
plt.xticks(range(len(x)),x)

plt.plot(x,y,color='#1a445d',linewidth=2.0,linestyle='-')
plt.plot(x,y2,color='#6490a9',linewidth=3.0,linestyle='-.')
plt.legend(['客单价','平均订单价'])
# 设置有边框和头部边框颜色为空right、top、left
[ax.spines[loc_axis].set_visible(False) for loc_axis in ['top','right','left']]
plt.grid(axis='y')

在这里插入图片描述

#每时间段优惠价格及优惠比例
offer_amount = df3.groupby('order_time_hms')['total_offer_amount'].sum() #计算优惠金额
offer_amount_rate=offer_amount.values/(df3.groupby('order_time_hms')['total_actual_pay'].sum())


#每时间段优惠价格及优惠比例
 
#绘图
x0 = offer_amount.index
y0 = offer_amount.values/pay_time_df.values #计算平均订单优惠价格

x1 = offer_amount_rate.index
y1 = offer_amount_rate.values
 
fig,axes = plt.subplots(1,2,figsize =(20,5),dpi=120)


axes[0].plot(x0,y0,color='#1a445d') 
axes[0].set_title("每单平均优惠价格", fontsize=25)
axes[0].grid()

axes[1].plot(x1,y1,color='#1a445d') 
axes[1].set_title("每单价格折扣比例", fontsize=25)
axes[1].grid()

[axes[0].spines[loc_axis].set_visible(False) for loc_axis in ['top','right','left']]
[axes[1].spines[loc_axis].set_visible(False) for loc_axis in ['top','right','left']]
#将数值转化为百分比显示
def to_percent(temp,position):
        return'%1.2f'%(100*temp)+'%'
plt.gca().yaxis.set_major_formatter(FuncFormatter(to_percent))

在这里插入图片描述

offer_order1=df3.groupby('order_time_hms')['sale_ord_id'].agg([('order_num','count')])
offer_order2=df3[df3['total_offer_amount']>0].groupby('order_time_hms')['sale_ord_id'].agg([('offer_num','count')])
offer_order=pd.merge(offer_order1,offer_order2,left_index=True,right_index=True)
offer_order['offer_rate']=offer_order['offer_num']/offer_order['order_num']

fig = plt.figure(figsize=(20,8),dpi=100)
ax = fig.add_subplot(1,1,1)
plt.tick_params(labelsize=14,colors='k')
plt.xlabel('小时',fontdict={'color':'k', 'size':18})
plt.ylabel('优惠订单数占比',fontdict={'color':'k', 'size':18})
# 设置有边框和头部边框颜色为空right、top、left
[ax.spines[loc_axis].set_visible(False) for loc_axis in ['top','right','left']]

plt.xticks(range(len(offer_order.index)),offer_order.index)
plt.plot(offer_order.index,offer_order.offer_rate,color='#1a445d')
plt.grid(axis='y')
#将数值转化为百分比显示
def to_percent(temp,position):
        return'%1.2f'%(100*temp)+'%'
plt.gca().yaxis.set_major_formatter(FuncFormatter(to_percent))

在这里插入图片描述

地区维度

area=pd.read_csv('city_level.csv',sep=',',encoding='gbk')
area.drop_duplicates(inplace=True)
area = area[["dim_province_name", "province_id"]].drop_duplicates("province_id")  # 只保留省份信息

df4=df3.copy()
area['province_id']=area['province_id'].astype('object')
df4=pd.merge(df4, area, left_on='user_site_province_id', right_on='province_id',how='left')
df4['brandname']=df4['brandname'].str.split('(').str[0]
df4=df4[['user_log_acct','sale_ord_id','sale_qtty',
         'total_actual_pay','dim_province_name','brandname','self_ord_flag', 'total_offer_amount']]
#有效订单量,排除省份名未知的,只有8917条有效数据
fig = plt.figure(figsize=(14,8),dpi=120)
ax = fig.add_subplot(111)

pro_count=df4[df4.dim_province_name!='Not Given']['dim_province_name'].value_counts()
width=0.6
plt.ylabel('有效订单量',fontdict={'color':'k', 'size':18})


# 设置有边框和头部边框颜色为空right、top、left
[ax.spines[loc_axis].set_visible(False) for loc_axis in ['top','right','left']]

plt.bar(pro_count.index,pro_count.values,width,color='#6490a9')
plt.grid(axis='y')

在这里插入图片描述

# 各省有效订单量占比
data=np.insert(pro_count.values[:19],0,pro_count.values[19:].sum())
label=np.insert(pro_count.index[:19],0,'其他')
plt.figure(figsize = (6,6),dpi=100)

plt.pie(data,labels=label,autopct='%1.2f%%',pctdistance = 1.4)
plt.title("各省有效订单量占比", fontsize=20)

在这里插入图片描述

#订单量排前15省份客单价比较

order_pro_df=df4[df4.dim_province_name.isin(pro_count.index[:15])]\
                .groupby('dim_province_name')\
                .agg({'sale_ord_id':'count','user_log_acct':'nunique','total_actual_pay':'sum'})

order_pro_df.columns = ([('order_num'),('unique_acc'), ('total_pay')])
order_pro_df['price_per']=order_pro_df['total_pay']/order_pro_df['unique_acc']
order_pro_df.sort_values(['price_per'], ascending =True,inplace=True)


fig = plt.figure(figsize=(10,5),dpi=100)
ax = fig.add_subplot(111)


plt.xlabel('客单价',fontdict={'color':'k', 'size':18})
plt.ylabel('省份',fontdict={'color':'k', 'size':18})
plt.title('', fontsize=22)

[ax.spines[loc_axis].set_visible(False) for loc_axis in ['top','right','bottom']]

plt.barh(order_pro_df.index,order_pro_df['price_per'],color='#6490a9')
plt.grid(axis='x')

在这里插入图片描述

# 各省份的客单价和订单数量对比
x=order_pro_df.price_per
y=order_pro_df.order_num

fig = plt.figure(figsize=(6,4),dpi=100)
ax = fig.add_subplot(111)

plt.xlabel('客单价',fontdict={'color':'k', 'size':18})
plt.ylabel('订单数量',fontdict={'color':'k', 'size':18})

[ax.spines[loc_axis].set_visible(False) for loc_axis in ['top','right','left']]

plt.scatter(x,y,c='#6490a9',s=800,alpha=0.6)
plt.grid()


#添加散点图标签
for x0,y0,pro in zip(x,y,order_pro_df.index):
    plt.text(x0-30,y0-20,pro,fontsize=10)

在这里插入图片描述

地区+品牌维度

# 各品牌有效订单量
#各品牌有效订单量
df5= df4.groupby('brandname',as_index = False)['sale_ord_id'].count().sort_values('sale_ord_id',ascending = False)
 
df5['rate'] = df5['sale_ord_id'] / (df5['sale_ord_id'].sum())
df5['rate_cum'] = df5['rate'].cumsum()
 
x = df5['brandname']
y1 = df5['sale_ord_id']
y2 = df5['rate_cum']
 
fig,ax1 = plt.subplots(figsize=(10,5))
 
p1=ax1.bar(x,y1,color = '#6490a9',label='订单数量')
ax1.set_ylabel('有效订单数量')
ax1.set_xticklabels(x, rotation=90)
ax2 = ax1.twinx()
p2=ax2.plot(x,y2,color = '#1a445d',label='累计占比')


ax2.set_ylabel('累计占比')
 
plt.title('各品牌有效订单数量和累计占比',fontsize=20)
plt.grid(alpha =0.5)

ax1.legend(loc='center right')
ax2.legend(bbox_to_anchor=[1,0.45])

在这里插入图片描述

df6=df4.groupby('brandname').agg({'sale_qtty':'sum','total_actual_pay':'sum'})
df6['per_price']=df6['total_actual_pay']/df6['sale_qtty']
df6.sort_values('per_price',ascending = False,inplace=True)

fig = plt.figure(figsize=(18,8),dpi=120)
ax = fig.add_subplot(111)
width=0.5
plt.ylabel('不同品牌的产品单价',fontdict={'color':'k', 'size':12})

# 设置有边框和头部边框颜色为空right、top、left
[ax.spines[loc_axis].set_visible(False) for loc_axis in ['top','right','left']]

ax.bar(df6.index,df6.per_price,width,color='#6490a9')
plt.grid(axis='y',alpha=0.5)

在这里插入图片描述

#各品牌的订单数量和平均优惠价格
bra_ord_price=pd.merge(df6,df5,on='brandname')

x=bra_ord_price.rate
y=bra_ord_price.per_price

fig = plt.figure(figsize=(10,8),dpi=100)
ax = fig.add_subplot(111)

plt.xlabel('市场占有率',fontdict={'color':'k', 'size':12})
plt.ylabel('市场平均价格',fontdict={'color':'k', 'size':12})

[ax.spines[loc_axis].set_visible(False) for loc_axis in ['top','right','left']]

plt.scatter(x,y,c='#6490a9',s=500,alpha=0.6)
plt.grid()


#添加散点图标签
for x0,y0,bra in zip(x,y,bra_ord_price.brandname):
    plt.text(x0-0.004,y0-20,bra,fontsize=10)

在这里插入图片描述

bra_offer=df4[df4['total_offer_amount']>0]\
          .groupby('brandname',as_index = False).agg({'total_offer_amount':'sum','sale_qtty':'sum','sale_ord_id':'count'})
#           .rename(columns=({'sale_ord_id':'offer_num'}))
bra_offer['per_offer']=bra_offer['total_offer_amount']/bra_offer['sale_ord_id']
bra_offer.head()
x=bra_offer.sale_ord_id
y=bra_offer.per_offer

fig = plt.figure(figsize=(10,8),dpi=100)
ax = fig.add_subplot(111)

plt.xlabel('订单数量',fontdict={'color':'k', 'size':10})
plt.ylabel('平均优惠价格',fontdict={'color':'k', 'size':10})

[ax.spines[loc_axis].set_visible(False) for loc_axis in ['top','right','left']]

plt.scatter(x,y,c='#6490a9',s=500,alpha=0.6)
plt.grid()


#添加散点图标签
for x0,y0,bra in zip(x,y,bra_offer.brandname):
    plt.text(x0-100,y0-10,bra,fontsize=10)

在这里插入图片描述

#头部省份:有效订单数量排前15名的身份
#品牌市场占有率:该省份品牌的订单数/该省份总订单数
pro=pro_count.index[:15]
pro_df = df4[df4['dim_province_name'].isin(pro)]\
         .groupby(['dim_province_name','brandname'],as_index=False)['sale_ord_id'].count()

pro_df=pro_df.sort_values(['dim_province_name','sale_ord_id'],axis=0,ascending=[True,False])
pro_df1=pd.DataFrame(columns=pro_df.columns.to_list())
for i in pro_count.index[0:15]:
    pro_df1=pd.concat((pro_df1,pro_df[pro_df.dim_province_name==i][0:4]),axis=0)   

pro_df1=pd.merge(pro_df1,pro_count,how='left',left_on='dim_province_name',right_index=True)
pro_df1['bra_rate']=pro_df1['sale_ord_id']/pro_df1['dim_province_name_y']
pro_df1=pro_df1.pivot(values ='bra_rate' ,columns ='brandname',index ='dim_province_name_x' )
pro_df1.plot(kind="bar",
             figsize=(16,8),
             title = '头部省份前四名的品牌在该省的市场占有率',
             width=0.8,
             stacked=True,
             grid=True) #计算累计占比并绘图'Blues_r'


def to_percent(temp,position):
        return'%1.2f'%(100*temp)+'%'
plt.gca().yaxis.set_major_formatter(FuncFormatter(to_percent))

plt.legend(bbox_to_anchor=(1,0.5), loc='center left', borderaxespad=2) 
plt.xlabel('')

在这里插入图片描述

#头部品牌顶单数占比前4的省份
#头部品牌:有效订单数量排前6名的品牌
#品牌市场占有率:该省份品牌的订单数/该品牌总订单数(总数排除省份未填的订单数)
brand=['海尔','容声','美的','康佳','志高','海信']
df4.dim_province_name.fillna('Not Given',inplace=True)

df7=df4[(df4.dim_province_name!='Not Given')&(df4.brandname.isin(brand))]
bra_df = df7.groupby(['dim_province_name','brandname'],as_index=False)['sale_ord_id'].count()
bra_num=df7.groupby('brandname')['sale_ord_id'].count()
bra_df=pd.merge(bra_df,bra_num,left_on='brandname',right_index=True,how='left')
bra_df['bra_rate']=bra_df['sale_ord_id_x']/bra_df['sale_ord_id_y']
bra_df.sort_values(['brandname','bra_rate'],ascending=[True,False],inplace=True)

bra_df1=pd.DataFrame(columns=bra_df.columns.to_list())
for i in bra_df.brandname.unique():  #pro_count.index[1:15]
    bra_df1=pd.concat((bra_df1,bra_df[bra_df.brandname==i][0:4]),axis=0)  
bra_df1

bra_df1=bra_df1.pivot(values ='bra_rate' ,columns ='dim_province_name',index ='brandname' )
bra_df1.plot(kind="bar",
             figsize=(16,8),
             title = '头部品牌市场占有率排前四名的省份',
             stacked=True,
             grid=True) #计算累计占比并绘图'Blues_r'


def to_percent(temp,position):
        return'%1.2f'%(100*temp)+'%'
plt.gca().yaxis.set_major_formatter(FuncFormatter(to_percent))

plt.legend(bbox_to_anchor=(1,0.5), loc='center left', borderaxespad=2) 
plt.xlabel('')

在这里插入图片描述

自营/非自营+品牌

#自营和非自营的有效订单占比
self_df=df4.groupby('self_ord_flag',as_index=False)\
        .agg({'user_log_acct':'nunique','sale_ord_id':'count','total_actual_pay':'sum','total_offer_amount':'sum'})

#客单价
self_df['acc_price']=self_df['total_actual_pay']/self_df['user_log_acct']
#平均优惠价格
self_df['offer_price']=self_df['total_offer_amount']/self_df['sale_ord_id']
self_df['self_ord_flag']=self_df['self_ord_flag'].map({0:'非自营',1:'自营'})
fig,axes = plt.subplots(1,3,figsize =(21,7),dpi=120)

labels1=self_df.self_ord_flag
X=self_df.sale_ord_id
axes[0].pie(X,labels=labels1,autopct='%1.2f%%',colors = ['#6490a9','#1a445d'],pctdistance = 1.3,startangle = 90) 
axes[0].set_title('自营和非自营的有效订单占比', fontsize=20)

axes[1].bar(self_df.self_ord_flag,self_df.acc_price,color=['#6490a9','#1a445d'])
axes[1].grid(axis='y')
axes[1].set_title('自营和非自营订单的客单价对比', fontsize=20)
[axes[1].spines[loc_axis].set_visible(False) for loc_axis in ['top','right','left']]

axes[2].bar(self_df.self_ord_flag,self_df.offer_price,color=['#6490a9','#1a445d'])
axes[2].grid(axis='y')
axes[2].set_title('自营和非自营订单的平均优惠价格对比', fontsize=20)
[axes[2].spines[loc_axis].set_visible(False) for loc_axis in ['top','right','left']]

在这里插入图片描述

# 从品牌的角度来看,非自营商铺的订单主要集中于价格较低的品牌
#自营和非自营的有效订单占比
self_bra=df4.groupby(['self_ord_flag','brandname'],as_index=False)['sale_ord_id'].count()\
         .sort_values(['self_ord_flag','sale_ord_id'],axis=0,ascending=[True,False])
self_bra['self_ord_flag']=self_bra['self_ord_flag'].map({0:'非自营',1:'自营'})
self_bra=pd.merge(self_bra,self_df[['self_ord_flag','sale_ord_id']],on='self_ord_flag')
self=['自营','非自营']


self_bra1=pd.DataFrame(columns=self_bra.columns.to_list())
for i in self:
    self_bra1=pd.concat((self_bra1,self_bra[self_bra.self_ord_flag==i][0:5]),axis=0)
self_bra1['ord_rate']=self_bra1['sale_ord_id_x']/self_bra1['sale_ord_id_y']
    
self_bra2=self_bra1[self_bra1['self_ord_flag']=='自营'].sort_values('ord_rate')
self_bra3=self_bra1[self_bra1['self_ord_flag']=='非自营'].sort_values('ord_rate')

fig,axes = plt.subplots(1,2,figsize =(14,5),dpi=120)

axes[0].set_title('自营订单数量排名前五的品牌', fontsize=22)
[axes[0].spines[loc_axis].set_visible(False) for loc_axis in ['top','right','bottom']]
axes[0].barh(self_bra2.brandname,self_bra2['ord_rate'],color='#6490a9')
axes[0].grid(axis='x')
def to_percent(temp,position):
        return'%1.2f'%(100*temp)+'%'
plt.gca().xaxis.set_major_formatter(FuncFormatter(to_percent))

axes[1].set_title('非自营订单数量排名前五的品牌', fontsize=22)
[axes[1].spines[loc_axis].set_visible(False) for loc_axis in ['top','right','bottom']]
axes[1].barh(self_bra3.brandname,self_bra3['ord_rate'],color='#6490a9')
axes[1].grid(axis='x')

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

冰箱日订单数据分析(京东)python代码 的相关文章

随机推荐

  • express的使用

    Express 是一个简洁而灵活的 node js Web应用框架 提供了一系列强大特性帮助你创建各种 Web 应用 和丰富的 HTTP 工具 使用 Express 可以快速地搭建一个完整功能的网站 Express 框架核心特性 可以设置中
  • 解决Linux新安装的虚拟机没有网

    按照步骤来 每一步之后都可以检查一下 第一步 检查Vmware的网络服务是否开启 windows按win R 输入services msc 启动以下两个服务 VMware DHCP Service VMware NAT Service 第二
  • 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用, 各种加密算法比较

    加密算法 DES AES RSA MD5 SHA1 Base64 比较和项目应用 sochishun 博客园 https www cnblogs com sochishun p 7028056 html 加密算法 DES AES RSA M
  • 必须了解的Linux网络配置

    目录 一 查看及测试网络 1 1查看网络配置 1 2测试网络连接 二 设置网络地址参数 1 临时配置 使用命令调整网络参数 2 固定设置 通过配置文件修改网络参数 2 1 1 ifconfig命令 设置网络接口参数 2 1 2route命令
  • axios技术总结(包括跨域的处理)

    1 axios与vue axios 概念 axios是一个基于 promise 的 HTTP 库 可以用在浏览器和 node js 中 理解成库 vue axios用于将axios集成到Vuejs的小型包装器 理解成插件 安装 axios
  • Flink高手之路3-Flink的入门案例

    文章目录 Flink高手之路3 Flink的入门案例 一 Flink的API 二 Flink的编程模型 三 Flink的编程步骤 四 Flink的入门案例之一 批处理DataSet的处理 1 创建一个maven项目 2 改pom文件 引入F
  • Arduino ESP32 v2 使用记录:开发环境搭建

    文章目录 目的 开发环境搭建 程序下载测试 使用VS Code进行开发 批量烧录固件到模块中 总结 目的 在之前的文章 使用Arduino开发ESP32 01 开发环境搭建 中介绍了使用Arduino开发ESP32的开发环境搭建内容 只不过
  • hashmap和hashset的区别

    HashMap 和 HashSet 都是 Java 中的数据结构 它们都使用哈希表来实现 但是 它们之间有一些重要的区别 HashMap 是一种映射 它存储键值对 key value pairs 每个键都是唯一的 而值可以重复 HashSe
  • C++ 函数

    函数是一组一起执行一个任务的语句 每个 C 程序都至少有一个函数 即主函数 main 所有简单的程序都可以定义其他额外的函数 您可以把代码划分到不同的函数中 如何划分代码到不同的函数中是由您来决定的 但在逻辑上 划分通常是根据每个函数执行一
  • Linux查看日志

    很多初级测试人员 在进行执行测试用例这个步骤时 发现bug 不能更加的准确去定位bug 在这样的情况下就可以打开Linux服务器 敲命令查看操作进行中的实时日志 当系统报错时 可以截图日志在缺陷管理系统中 开发人员就知道什么地方错了 操作步
  • Unity物体碰撞出现穿插问题/穿过问题/物体穿过场景模型

    由于问题不好描述 所以标题就比较长了 之前在做游戏时 发生角色与其他模型始终不能正常碰撞 总是会穿插 即角色穿过其他模型 其中角色有刚体和碰撞器组件 其他模型 有 碰撞器 事后发现错误在于 其他模型的碰撞器组件被加到 组 上 而非组内每个物
  • Spring框架基础知识总结

    Spring框架 1 什么是Spring Spring是分层的Java SE EE应用 full stack轻量级开源框架 以IOC Inverse Of Control 反转控制 和AOP Aspect Oriented Programm
  • 1.3.3 手写数字识别之损失函数

    文章目录 概述 分类任务的损失函数 Softmax函数 交叉熵 交叉熵的代码实现 概述 上一节我们尝试通过更复杂的模型 经典的全连接神经网络和卷积神经网络 提升手写数字识别模型训练的准确性 本节我们继续将 横纵式 教学法从横向展开 如 图1
  • Ubuntu 20.04 下安装配置 VScode 的 C/C++ 开发环境

    前言 之前安装了Ubuntu 18 04 结果在安装Codeblocks VScode还是安装gcc c c 的时候出现了一堆错误 缺失依赖树等等问题 换源也无法成功 整了一个下午没有任何进展 网上找不到任何解决方法 于是只能重装了Ubun
  • 红队

    1 MS14 068 kerberos认证 no PAC 用户在向 Kerberos 密钥分发中心 KDC 申请TGT 由票据授权服务产生的身份凭证 时 可以伪造自己的 Kerberos 票据 漏洞效果 将任意域用户提升到域管权限 利用条件
  • promise的三种状态

    三种状态 es6 pending fufiled rejected 在promise种状态不可逆 时间不可倒流 promise时间有一个pending等待状态 如果实现fufiled状态 没实现rejected状态 解决了赘述问题 new
  • Redux使用教程【入门篇】

    Redux是一个用于JavaScript应用程序状态管理的可预测状态容器 以下是Redux的使用教程 安装Redux 在项目中使用npm或yarn安装Redux包 npm install redux 创建Redux Store 创建一个Re
  • vite、vue3警告:Component inside <Transition> renders non-element root node that cannot be animated.

    一 问题代码
  • 关于编程中的一些颜色代码

    颜色代码 1 浅粉色 255 182 193 2 粉红色 255 192 203 3 猩红色 220 20 60 4 脸红的淡紫色 255 240 245 5 苍白的紫罗兰红色 219 112 147 6 热情的粉红 255 105 180
  • 冰箱日订单数据分析(京东)python代码

    具体分析报告地址 PowerBi网页版 数据 2020年5月25日京东大家电 家用电器 冰箱订单数据 按10 抽样 约22MB 70k 条数据 包含信息 user log acct 用户账号 parent sale ord id 父订单号