python京东_Python数据分析-京东订单数据分析实战
本次数据来源于京东,类⽬为⼤家电-家⽤电器-冰箱,抽取2020年5⽉25⽇10%数据,数据量为 70k+,在 jupyer notebook 内进⾏分析。
数据⽂件:
链接:迅雷云盘;提取码:ezQq
对于订单数据,在业务中最常见的是使⽤可视化报表来监测订单关键指标的变化,并在⼀定维度上进⾏下钻。
分析思路
本次主要从以下⼏个⽅⾯对订单数据进⾏分析:
1.订单宏观数据
订单的总体特征:订单总量、GMV、总⽤户数、销售额
订单的价格分布:累计分布折线图
2.订单微观数据
时间维度:有效订单量、⼈均有效订单量、客单价、平均点单价
地区维度:有效订单量、头部市场地区、客单价⽐较数、省份的客单价和点单数量
品牌维度:订单数量与累计百分⽐、平均价格和市场占有、订单数量与平均优惠价格
Python代码展⽰
数据导⼊
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
data = pd.read_csv("data.csv", encoding="utf-8", sep="t")
data.info()
数据展⽰
<class 'frame.DataFrame'>
RangeIndex: 76631 entries, 0 to 76630
Data columns (total 23 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 user_log_acct 76631 non-null object
springboot创建web项目1 parent_sale_ord_id 76631 non-null int64
2 sale_ord_id 76631 non-null int64
3 sale_ord_tm 76631 non-null object
4 sale_ord_dt 76631 non-null object
5 item_sku_id 76631 non-null int64
6 item_name 76631 non-null object
7 brandname 76631 non-null object
组词有哪些二年级8 sale_qtty 76631 non-null int64
9 item_first_cate_name 76631 non-null object
10 item_second_cate_name 76631 non-null object
11 item_third_cate_name 76631 non-null object
12 before_prefr_unit_price 76631 non-null float64
13 after_prefr_unit_price 76631 non-null float64
14 user_actual_pay_amount 76631 non-null float64
15 sale_ord_valid_flag 76631 non-null int64
16 cancel_flag 76631 non-null int64
17 check_account_tm 53360 non-null object
18 total_offer_amount 76631 non-null float64
19 self_ord_flag 76631 non-null int64
20 user_site_city_id 38441 non-null float64
21 user_site_province_id 38598 non-null float64
22 user_lv_cd 76631 non-null int64
dtypes: float64(6), int64(8), object(9)
memory usage: 13.4+ MB
可以看到数据共计76631条,部分数据存在缺失。
数据预处理
1.因列数量较多,为⽅便理解和操作,对列名进⾏重命名为中⽂。
# 列明重命名
col_names = ["⽤户账号","⽗订单号","订单号","订单时间","订单⽇期","商品sku","商品名称","品牌名称","商品数量",
"⼀级品类名称","⼆级品类名称","三级品类名称","优惠前单价","优惠后单价","实际⽀付价格","订单有效标志","订单取消标志",
"⽀付时间","总优惠⾦额", "⾃营标志","⽤户所在城市编号","⽤户所在省份编号","⽤户会员等级"]
2.优惠前冰箱的最低价格为288,数据中存在⼤量的低价订单,其中绝⼤部分是保修、返现等⽆价值订单,⼀⼩部分是异常订单,可以忽略data = data[data["优惠前单价"]>=288]
3.删除重复值
#查看重复订单数量
data["订单号"].duplicated().sum()
4.填充缺失值
# 查看缺失值,降序排列
total = data.isnull().sum().sort_values(ascending=False)
percent_1 = data.isnull().sum()/data.isnull().count()*100
percent_2 = (round(percent_1, 1)).sort_values(ascending=False)
missing_data = pd.concat([total, percent_2], axis=1, keys=["total", "%"])
# concat合并数据集
missing_data.head()
缺失值数量:
total %
⽤户所在城市编号 29951 48.7
⽤户所在省份编号 29797 48.4
⽀付时间 19925 32.4
⽤户会员等级 0 0.0
⼀级品类名称 0 0.0
49% 的城市、省份信息缺失,30.4%的订单时间缺失部分订单的订单时间是空值,原因是订单尚未⽀付,可以将其赋特殊值⽐如-1
data["⽤户所在城市编号"].fillna("-1",inplace = True)
data["⽤户所在省份编号"].fillna("-1",inplace = True)
data["⽀付时间"].fillna("-1",inplace = True)oracle数据库的技术特点
5.添加总价格列
data["总价格"] = data["优惠后单价"] * data["商品数量"]
6.预处理完毕后的数据信息
data.info()
<class 'frame.DataFrame'>
Int64Index: 61536 entries, 0 to 76630
Data columns (total 24 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 ⽤户账号 61536 non-null object
1 ⽗订单号 61536 non-null int64
2 订单号 61536 non-null int64
3 订单时间 61536 non-null object
4 订单⽇期 61536 non-null object
5 商品sku 6153
6 non-null int64
6 商品名称 61536 non-null object
7 品牌名称 61536 non-null object
8 商品数量 61536 non-null int64
9 ⼀级品类名称 61536 non-null object
10 ⼆级品类名称 61536 non-null object
11 三级品类名称 61536 non-null object
12 优惠前单价 61536 non-null float64
13 优惠后单价 61536 non-null float64
14 实际⽀付价格 61536 non-null float64
15 订单有效标志 61536 non-null int64
京东python入门教程16 订单取消标志 61536 non-null int64
17 ⽀付时间 61536 non-null object
18 总优惠⾦额 61536 non-null float64
19 ⾃营标志 61536 non-null int64
20 ⽤户所在城市编号 61536 non-null object
21 ⽤户所在省份编号 61536 non-null object
22 ⽤户会员等级 61536 non-null int64
23 总价格 61536 non-null float64
dtypes: float64(5), int64(8), object(11)
memory usage: 11.7+ MB
1.京东订单数据的宏观分析
#订单总量
order_sum = data["订单号"].count()
#取消订单数
order_cancel = data[data["订单取消标志"]== 1]["订单号"].count()
#有效订单数总数
order_vaild_data = data[(data["订单有效标志"]==1) & (data["订单取消标志"]==0) & (data["优惠前单价"] != 0)] order_vaild = order_vaild_data["订单号"].count()
#已⽀付订单
order_payed = data[data["实际⽀付价格"] != 0]["订单号"].count()php需要学什么东西
#未⽀付订单
#总销售额
total_sales = order_vaild_data["实际⽀付价格"].sum()
# GMV:本实例中指所有有效订单的总交易额
GMV = order_vaild_data["总价格"].sum()结构体嵌套结构体数组
#总⽤户数
total_users = data["⽤户账号"].nunique()
print("订单总数:",order_sum)
print("取消订单数:",order_cancel)
print("有效订单总数:",order_vaild)
print("已⽀付订单:",order_payed)
print("总销售额:",total_sales)
print("GMV:",GMV)
print("总⽤户数:",total_users)
宏观数据指标信息
订单总数: 61536
取消订单数: 17782
有效订单总数: 33846
已⽀付订单: 31711
总销售额: 46224258.08
GMV: 60861858.15
总⽤户数: 39323
有效订单和已⽀付订单的占⽐
# 解决matplotlib中⽂乱码
fig,axes = plt.subplots(1,2,figsize =(10,5))
sizes = [order_cancel, order_sum - order_cancel] axes[0].pie(sizes,labels = ["取消","未取消"],
autopct = "%1.2f%%",startangle = 90) axes[0].set_title("订单总数")
sizes = [order_payed,order_vaild-order_payed] axes[1].pie(sizes,labels = ["已⽀付","未⽀付"],
autopct = "%1.2f%%",startangle = 90) axes[1].set_title("有效订单总数")
结果如下图:
订单的价格分布
通过累计分布折线图查看订单的价格分布
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论