十九.案例演示---天猫订单分析

目录

 1.数据预处理

2.对订单状况进行分析

3.不同省份订单数详情

4.省份地图绘制

5.不同星期,订单分布

6.订单金额与订单数量


本次案例演示数据条数为:28010

 

import pandas as pd
from pyecharts import options as opts

df_data = pd.read_excel('../data/天猫订单.xlsx')


#对数据进行整体的查看和分析
df_data.head(3)
df_data.info()

#df_data


 1.数据预处理

#将收货地址都改为三个字:
df_data["收货地址"] = df_data["收货地址"].str.replace("北京","北京市")
df_data["收货地址"] = df_data["收货地址"].str.replace("天津","天津市")
df_data["收货地址"] = df_data["收货地址"].str.replace("上海","上海市")
df_data["收货地址"] = df_data["收货地址"].str.replace("重庆","重庆市")


#设置新的列标签:
df_data["星期"] = df_data["订单付款时间"].dt.dayofweek + 1
df_data["hour"] = df_data["订单付款时间"].dt.hour

2.对订单状况进行分析

# 有效订单,退款订单,未付款订单
# 1、有效订单 有付款时间,退款金额为0
valid_count = df_data[(df_data["订单付款时间"].notnull()) & (df_data["退款金额"]==0)]
valid_count

# 退款订单 退款金额大于0
refund_count = df_data[df_data["退款金额"]>0]
refund_count

# 未付款订单
unpaid_count = df_data[df_data["订单付款时间"].isnull()]
unpaid_count


#------------------------------
# 计算每种订单的占比
total_count = len(valid_count) + len(refund_count) + len(unpaid_count)

# 有效订单占比
valid_rate = round(len(valid_count) / total_count *100, 2)
# 退款订单占比
refun_rate = round(len(refund_count) / total_count * 100, 2)
# 未付款订单占比
unpaid_rate = round(len(unpaid_count) / total_count * 100, 2)
print(f"有效订单占比:{valid_rate}%\n退款订单占比:{refun_rate}%\n未付款订单占比:{unpaid_rate}%")


#绘图更直观的查看:
from pyecharts.charts import Pie
pie_data = [("有效订单",len(valid_count)),("退款订单",len(refund_count)),("未付款订单",len(unpaid_count))]
pie_img = (
    Pie()
    .add("订单状况",pie_data)
)
pie_img.render_notebook()

3.不同省份订单数详情

df_new = df_data[df_data["订单付款时间"].notnull()]
province_order_count = df_new.groupby("收货地址")["订单金额"].count().reset_index(name="订单量")
# 将结果转化为字典(绘制地图)
data_pair = dict(zip(province_order_count["收货地址"].tolist(),province_order_count["订单量"].tolist()))
# 计算每个省份的实付金额和退款金额
province_payment = df_new.groupby("收货地址")[["订单金额","实付金额","退款金额"]].sum().reset_index()

province_payment["订单金额"] = province_payment["订单金额"] / 10000
province_payment["实付金额"] = province_payment["实付金额"] / 10000
province_payment["退款金额"] = province_payment["退款金额"] / 10000


#绘图
from pyecharts.charts import Bar
from pyecharts.charts import EffectScatter
from pyecharts.charts import Grid

bar_img = (
    Bar()
    .add_xaxis(province_payment["收货地址"].tolist())
    .add_yaxis("实付金额",round(province_payment["实付金额"],2).tolist(),category_gap="50%",stack=True)
    .add_yaxis("退款金额",round(province_payment["退款金额"],2).tolist(),category_gap="50%",stack=True)
    .set_global_opts(
        title_opts=opts.TitleOpts("实付金额与退款金额"),
        xaxis_opts=opts.AxisOpts(name="省份",axislabel_opts={"rotate":-90}),
        yaxis_opts=opts.AxisOpts(name="金额(万)")
    )
    .set_series_opts(
        label_opts=opts.LabelOpts(is_show=False)
    )
)

effect = (
    EffectScatter()
    .add_xaxis(province_payment["收货地址"].tolist())
    .add_yaxis("订单金额",round(province_payment["订单金额"],2).tolist())
    .set_series_opts(label_opts=opts.LabelOpts(position="top"))
)

overlap = bar_img.overlap(effect)
grid = Grid()
grid.add(overlap,grid_opts=opts.GridOpts(pos_top="35%"))
grid.render_notebook()

4.省份地图绘制

from pyecharts.charts import Map
map_img = (
    Map(init_opts=opts.InitOpts(width="1000px",height="800px"))
    .add(
        "",
        [list(x) for x in data_pair.items()],
        maptype="china",
        is_map_symbol_show=False,
        label_opts=opts.LabelOpts(is_show=True,color="black"),
        itemstyle_opts={
            "normal":{
                "shadowColor":"rgba(0,0,0.5)",
                "shadowBlur":10
            }
        } 
    )
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(
            is_show=True,
            min_=0,
            max_=3100,
            range_color=["red","green","blue","pink","orange","yellow","purple"]
            
        )
    )
)
map_img.render_notebook()

5.不同星期,订单分布

week_count = df_data.groupby("星期")["订单创建时间"].count().reset_index(name="订单数量")
week_img = (
    Bar()
    .add_xaxis(week_count["星期"].tolist())
    .add_yaxis("订单数量",week_count["订单数量"].tolist())
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(name="星期"),
        yaxis_opts=opts.AxisOpts(name="订单数"),
    )
)
week_img.render_notebook()

6.订单金额与订单数量

from pyecharts.charts import Line
hour_count = df_data.groupby("hour")["订单创建时间"].count()
hour_amount = round(df_data.groupby("hour")["订单金额"].mean(), 2)

line1 = Line()
line1.add_xaxis(hour_count.index.to_list())
line1.add_yaxis(series_name="订单数量",y_axis=hour_count.values.tolist(),yaxis_index=0)
# 添加另外一条y轴
line1.extend_axis(yaxis=opts.AxisOpts(
    axislabel_opts=opts.LabelOpts(formatter="{value}元"),
    axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color="green"))
))

line1.set_global_opts(
    title_opts=opts.TitleOpts("订单数量与订单金额"),
    yaxis_opts=opts.AxisOpts(
        axislabel_opts=opts.LabelOpts(formatter="{value}单"),
        axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color="orange"))
    ),
    xaxis_opts=opts.AxisOpts(name="时间"),
    tooltip_opts=opts.TooltipOpts(is_show=True,trigger="axis")
)

line1.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

line2 = Line().add_xaxis(hour_count.index.to_list()).add_yaxis("平均订单金额",hour_amount.values.tolist(),yaxis_index=1)
line2.set_series_opts(label_opts=opts.LabelOpts(is_show=False))


line1.overlap(line2)
line1.set_colors(["green","orange"])
line1.render_notebook()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/540833.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【笔记】探索生成范式:大型语言模型在信息提取中的作用

探索生成范式:大型语言模型在信息提取中的作用 摘要介绍 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长&am…

五、书架开发--3.弹出框功能开发、离线缓存功能开发

实现弹出框真实业务逻辑 私密阅读tab业务逻辑 1、根据点击的tab不同,从而展示出不同的popup弹窗 每个tab中都有自己的index,点击的时候获取这个index,就可以知道当前点击的是哪个tab,然后用switch-case来根据不同的index展示不…

【GD32】MQ-6丙烷检测传感器

2.34 MQ-6丙烷检测传感器 MQ-6气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(Sno2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为该气体浓度相对应的输出信号。M…

Windows下使用PanguVip实现浮动IP

在某些高可用场景下,我们往往需要使用浮动IP来进行实际访问的切换,比如为了保证Web应用的高可用,当主节点宕机后,我们将浮动IP切换到备节点,那么备节点就继续可以提供服务,在linux下我们可以使用keepalived…

scala---基础核心知识

一、什么是scala Scala 是一种多范式的编程语言,其设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。 二、为什么要学习scala 1、优雅 2、速度快 3、能融合到hado…

【SpringBoot】获取参数

获取参数 传递单个参数传递多个参数传递对象后端参数重命名传递数组传递 json 数据获取 URL 中参数上传文件获取 cookie 和 session获取cookie获取session 传递单个参数 RequestMapping("/user") RestController public class UserController {// 传递单个参数Reque…

【Delphi 爬虫库 1】GET和POST方法

文章目录 1.最简单的Get方法实现2.可自定义请求头、自定义Cookie的Get方法实现3.提取响应协议头4.实现Post请求完成单词翻译 爬虫的基本原理是根据需求获取信息并返回。就像当我们感到饥饿时,可以选择自己烹饪食物、外出就餐,或者订外卖一样。在编程中&a…

Linux之bpfjit(2)使用分析和mini-tcpdump实现

Linux之bpfjit(2)使用分析和mini-tcpdump实现 Author: Once Day Date: 2024年4月13日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可以参考专栏:…

纯纯python实现梯度下降、随机梯度下降

最近面试有要求手撕SGD,这里顺便就把梯度下降、随机梯度下降、批次梯度下降给写出来了 有几个注意点: 1.求梯度时注意label[i]和pred[i]不要搞反,否则会导致模型发散 2.如果跑了几千个epoch,还是没有收敛,可能是学习率…

Linux 秋招必知必会(三、线程、线程同步)

六、线程 38. 什么是线程 线程是参与系统调度的最小单位,它被包含在进程之中,是进程中的实际运行单位 一个进程中可以创建多个线程,多个线程实现并发运行,每个线程执行不同的任务 主线程:当一个程序启动时&#xff0…

【Qt 学习笔记】Qt控件概述

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt控件概述 文章编号:Qt 学习笔记 / 14 文章目录 Qt控件概…

排序之快速排序

代码 class Solution {public int[] sortArray(int[] nums) {merge(nums, 0, nums.length - 1);return nums;}private void merge(int[] nums, int l, int r){if(l > r) return;// 随机选取主元int i new Random().nextInt(r - l 1) l;int temp nums[i];nums[i] nums[…

探索ElasticSearch高级特性:从映射到智能搜索

欢迎关注我的公众号“知其然亦知其所以然”,获取更多技术干货! 大家好,我是小米!今天我们来聊聊阿里巴巴面试题中的一个高级话题:ElasticSearch(以下简称ES)的高级特性。ES作为一款强大的搜索引擎,在处理大规模数据和复杂查询时发挥着重要作用。而了解其高级特性,则是…

微服务-6 Gateway网关

一、网关搭建 此时浏览器访问 localhost:10010/user/list 后正常返回数据,说明网关已生效,其原理流程图如下: 二、网关过滤器 作用:处理一切进入网关的请求和微服务响应。 1. 网关过滤器的分类: a. 某个路由的过滤器 …

购物车实现

目录 1.购物车常见的实现方式 2.购物车数据结构介绍 3.实例分析 1.controller层 2.service层 1.购物车常见的实现方式 方式一:存储到数据库 性能存在瓶颈方式二:前端本地存储 localstorage在浏览器中存储 key/value 对,没有过期时间。s…

Linux中使用Alias技术实现虚拟网卡

背景 在《Linux中虚拟网络技术有哪些》一文中,我们介绍了多种创建虚拟网卡的方法。本文介绍使用Alias技术创建虚拟网卡。 分析 Alias技术 在计算机领域中,Alias技术指的是给一个实体(如文件、命令、网络接口等)起一个别名或替代…

【leetcode】 跳跃游戏 IV

跳跃游戏IV 题目思路代码 题目 给你一个整数数组 arr &#xff0c;你一开始在数组的第一个元素处&#xff08;下标为 0&#xff09;。每一步&#xff0c;你可以从下标 i 跳到下标 i 1 、i - 1 或者 j &#xff1a;i 1 需满足&#xff1a;i 1 < arr.length i - 1 需满足&…

C++静态库与动态库

什么是库 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复用的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个人的代码都从零开始&#xff0c;因此库的存在意义非同寻常。 本质上来说库是一种可执行代码的二进制形式&#xff0c;可以被操作系统载…

Linux中磁盘的分区,格式化,挂载和文件系统的修复

一.分区工具 1.分区工具介绍 fdisk 2t及以下分区 推荐 (分完区不保存不生效&#xff0c;有反悔的可能) gdisk 全支持 推荐 parted 全支持 不推荐 ( 即时生效&#xff0c;分完立即生效) 2.fdisk 分区,查看磁盘 格式:fdisk -l [磁盘设备] fdisk -l 查看…

运动听歌哪款耳机靠谱?精选五款热门开放式耳机

随着人们对运动健康的重视&#xff0c;越来越多的运动爱好者开始关注如何在运动中享受音乐。开放式蓝牙耳机凭借其独特的设计&#xff0c;成为了户外运动的理想选择。它不仅让你在运动时能够清晰听到周围环境的声音&#xff0c;保持警觉&#xff0c;还能让你在需要时与他人轻松…