python数据分析小案例:天猫订单数据综合分析
2023-12-14 01:29:02
嗨喽~大家好呀,这里是魔王呐 ? ~!
python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取
本数据集共收集了发生在一个月内的28010条数据,包含以下:
7个字段说明
-
订单编号:订单编号
-
总金额:订单总金额
-
买家实际支付金额:总金额 - 退款金额(在已付款的情况下)。金额为0(在未付款的情况下)
-
收货地址:各个省份
-
订单创建时间:下单时间
-
订单付款时间:付款时间
-
退款金额:付款后申请退款的金额。如无付过款,退款金额为0
分析目的
-
订单每个环节的转化转化率
-
订单成交的时间(按天)趋势(按实际成交)
-
订单数在地图上的分布
订单读取及处理
读取数据
import pandas as pd
df = pd.read_csv('tmall_order_report.csv',encoding='gbk')
df.head()
处理数据
df.columns
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 将字段名称中空格去掉,规范字段名称
df = df.rename( columns = {'收货地址 ':'收货地址','订单付款时间 ':'订单付款时间'} )
df.columns
df.info()
重复值
df.duplicated().sum()
缺失值
df.isnull().sum()
# 订单付款时间 有2923个缺失值,属于正常现象,说明这些单位付过款,无需处理
订单转化率-漏斗图
计算每个环节的数据
-
将得到如下的数据:
[[‘总订单数’, ‘28010’],
[‘付款订单数’, ‘24087’],
[‘到款订单数’, ‘18955’],
[‘全额到款订单数’, ‘18441’]]
买家实际支付金额:总金额 - 退款金额(在已付款的情况下)。金额为0(在未付款的情况下)
退款金额:付款后申请退款的金额。如无付过款,退款金额为0
订单总笔数
dict_convs = dict()
key = '总订单数'
dict_convs[key] = len(df)
len(df)
付过款的订单数
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
key = '付款订单数'
# 付款时间不为空的,表示付过款
df_payed = df[df['订单付款时间'].notnull()]
dict_convs[key] = len(df_payed)
len(df_payed)
到款订单数
key = '到款订单数'
# 买家实际支付金额:总金额 - 退款金额(在已付款的情况下)
# 买家实际支付金额不为0的,说明订单商家收到过款
df_trans = df_payed[df_payed['买家实际支付金额'] != 0]
dict_convs[key] = len(df_trans)
len(df_trans)
全额到款订单数
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
key = '全额到款订单数'
# 在付款的订单中,退款金额为0的,说明没有退款,表示全额收款
df_trans_full = df_payed[df_payed['退款金额'] == 0]
dict_convs[key] = len(df_trans_full)
len(df_trans_full)
# 查看转化数据
dict_convs
转化率-呈现
df_convs = pd.Series(dict_convs,name = '订单数').to_frame()
df_convs
总体转化率
round(df_convs['订单数']/df_convs.loc['总订单数','订单数']*100,0)
# 添加总体转化率,每个环节除以总订单数
name = '总体转化率'
total_convs = round(df_convs['订单数']/df_convs.loc['总订单数','订单数']*100,0)
df_convs[name] = total_convs
df_convs
# 漏斗图 Funnel
from pyecharts.charts import Funnel
from pyecharts import options as opts
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
funnel = (
Funnel()
.add(
"总体转化率",
[list(z) for z in zip(df_convs.index,df_convs["总体转化率"])],
# 让外面的字体出现在图上面
label_opts = opts.LabelOpts(position = 'inside')
)
# 设置系列选项,格式化输出
.set_series_opts(tooltip_opts = opts.TooltipOpts(formatter = '{a}<br/>{b}:{c}%'))
# 设置全局选项,添加标题
.set_global_opts(title_opts = opts.TitleOpts(title = "总体转化率"))
)
funnel.render_notebook()
-
那么这个的话就是我们的一个漏斗图,我们可以看到天猫的一个总体转化率还是非常高的对吧
-
所以说像这个天猫他的一个对于商品的推荐还是做的非常不错的
单一环节转化率
# 添加单一环节转化率,每个环节除以上一环节
name = '单一环节转化率'
# shift(): 让整个列往下移动一个位置
# 那么移完位置之后就不可避免会出现第一个位置是空的
# 所以这里我们把第一个位置填数据
df_convs["单一环节转化率"] = df_convs['订单数'].shift().fillna(28010.0)
df_convs["单一环节转化率"] = round((df_convs['订单数']/df_convs["单一环节转化率"]*100),0)
df_convs
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
name = '单一环节转化率'
funnel = (
Funnel()
.add(
series_name = name,
data_pair = [list(z) for z in zip(df_convs.index,df_convs[name])],
label_opts = opts.LabelOpts(position = 'inside')
)
.set_series_opts(tooltip_opts = opts.TooltipOpts(formatter = '{a}<br/>{b}:{c}%'))
)
funnel.render_notebook()
整体订单数趋势
# 按到款订单统计
# 将订单创建时间这一字段改成时间类型的数据
df_trans['订单创建时间'] = df_trans['订单创建时间'].astype('datetime64')
# 然后让订单创建时间变成行标
df_trans=df_trans.set_index('订单创建时间')
# 最后看一下前5行
df_trans.head()
df_trans.resample('D')['订单编号'].count().index.day.astype('str').tolist()
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 重采样,时间序列的内容
# 统计每天的订单数量
se_trans_month = df_trans.resample('D')['订单编号'].count()
se_trans_month
from pyecharts.charts import Line
x = se_trans_month.index.day.astype('str').tolist()
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
line = (
Line()
# 准备x轴数据,先拿到x轴数据
# se_trans_month.index
# 然后只取天
# se_trans_month.index.day
# 转成字符串类型,因为直接用整数类型画图会有一点问题
.add_xaxis(x)
.add_yaxis(
"订单数",
se_trans_month,
)
# 设置背景有格子
# 选择性讲,可不讲
.set_global_opts(
yaxis_opts = opts.AxisOpts(
splitline_opts = opts.SplitLineOpts(is_show = True)
)
)
)
line.render_notebook()
结论:
2月上半个月,企业多数未复工,快递停运,无法发货
下半个月,随着企业复工逐渐增多,订单数开始上涨
#订单平均价格
df_trans['买家实际支付金额'].mean()
销量区域分布-地理图
se_trans_map = df_trans.groupby('收货地址')['订单编号'].count()
se_trans_map
import pyecharts.options as opts
from pyecharts.charts import Map
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 展示地理分布图
map1 = (
Map()
.add(
"订单数",
[list(i) for i in se_trans_map.items()],
'china'
)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(
max_=max(se_trans_map)*0.6
)
)
)
map1.render_notebook()
尾语
最后感谢你观看我的文章呐~本次航班到这里就结束啦 🛬
希望本篇文章有对你带来帮助 🎉,有学习到一点知识~
躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。
文章来源:https://blog.csdn.net/python56123/article/details/134895643
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!