专栏导读

🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html

  • 优点订阅限时9.9付费专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会)
  • 专栏福利简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等
    在这里插入图片描述
    在这里插入图片描述

一、漏斗图介绍

1. 说明

漏斗图(Funnel plot)是一种用于可视化数据偏倚或选择性报告的图表。它通常用于汇总研究结果或元分析中的小样本研究或临床试验。漏斗图可以帮助研究人员或读者判断研究结果是否存在偏倚或选择性报告的情况。

漏斗图的基本结构是一个倒置的漏斗形状,其中包含了每个研究或试验的效应估计值(通常是效应量)和其置信区间。效应估计值通常在横轴上,而研究或试验的数量在纵轴上。漏斗图的宽度代表了每个研究或试验的精确度或权重,通常是以标准误差或置信区间的宽度表示。

2. 应用场景

漏斗图的主要应用场景包括:

  • 研究结果的可视化:漏斗图可以将多个研究或试验的结果汇总在一起,直观地展示每个研究的效应估计值和置信区间。这有助于读者或决策者了解整体研究结果的分布情况。

  • 发现选择性报告:漏斗图可以帮助检测研究结果的选择性报告。如果存在选择性报告,即小样本研究或试验的结果倾向于报告正向结果,那么漏斗图将会显示一个不对称的形状,即底部较宽,顶部较窄。

  • 评估偏倚风险:漏斗图可以用于评估研究结果的偏倚风险。如果存在偏倚,即小样本研究或试验的结果倾向于偏离总体效应,那么漏斗图将会显示一个不对称的形状,即整个漏斗向左或向右倾斜。

  • 检测出离群值:漏斗图可以帮助检测研究结果中的离群值。离群值可能是由于研究方法、样本特征或其他因素引起的异常结果。通过观察漏斗图,我们可以发现那些与其他研究结果相比明显偏离的研究或试验。

综上所述,漏斗图是一种用于可视化数据偏倚或选择性报告的图表工具。它可以帮助研究人员或读者判断研究结果是否存在偏倚或选择性报告,并在汇总研究结果或元分析中起到重要的辅助作用。

二、漏斗图类说明

1. 导包

from pyecharts.charts import Funnel

2. add函数

向图表中添加一个数据系列,包括系列名称、数据序列、颜色、排序方式、间隔、标签配置、提示框配置和样式配置等参数

add(
    self,
    series_name: str,  # 系列名称,用于标识不同的数据系列
    data_pair: types.Sequence,  # 数据序列,包含一组数据对,每个数据对包括数据的名称和值
    *,
    color: types.Optional[str] = None,  # 数据系列的颜色,可选参数,默认为None
    sort_: str = "descending",  # 数据排序方式,默认为降序排序
    gap: types.Numeric = 0,  # 数据之间的间隔,默认为0
    label_opts: types.Label = opts.LabelOpts(),  # 数据标签的配置选项,默认为空
    tooltip_opts: types.Tooltip = None,  # 数据提示框的配置选项,默认为None
    itemstyle_opts: types.ItemStyle = None,  # 数据项的样式配置选项,默认为None
) 

三、漏斗图实战

1. 基础漏斗图

下面代码创建了一个基本的漏斗图,展示了商品的销售情况。Funnel()创建了一个漏斗图实例,.add()方法用于添加数据,[list(z) for z in zip(goods, sales)]将商品和销售数据进行组合。通过c.render()方法可以将图表保存为HTML文件,c.render_notebook()可以在Jupyter Notebook中直接显示漏斗图。

# 导入Funnel模块
from pyecharts.charts import Funnel

# 定义商品和销售数据
goods = ['钢笔', '本子', '桌子', '椅子', '橡皮擦', '铅笔']
sales = [10, 50, 20, 20, 20, 30]

# 创建漏斗图实例
c = (
    Funnel()
    .add("销售图", [list(z) for z in zip(goods, sales)])  # 添加数据
)

# 保存为HTML文件
c.render("basic_funnel.html")

# 在Jupyter Notebook中显示漏斗图
c.render_notebook()

运行结果:
在这里插入图片描述

2. 标签内漏斗图

通过设置label_opts参数的position属性,你可以控制标签的位置。

position参数可以设置为以下值之一:

  • “inside”:标签显示在漏斗图的内部,默认位置。
  • “outside”:标签显示在漏斗图的外部。

例如,使用position="inside"可以将标签显示在漏斗图的内部。

# 导入Funnel模块
from pyecharts.charts import Funnel
from pyecharts import options as opts

# 定义商品和销售数据
goods = ['钢笔', '本子', '桌子', '椅子', '橡皮擦', '铅笔']
sales = [10, 50, 20, 20, 20, 30]

# 创建漏斗图实例
c = (
    Funnel()
    .add("销售图",
         [list(z) for z in zip(goods, sales)],# 添加数据
         label_opts=opts.LabelOpts(position="inside") # 标签设置在漏斗图内
         )

)

# 保存为HTML文件
c.render("basic_funnel.html")

# 在Jupyter Notebook中显示漏斗图
c.render_notebook()

运行结果:
在这里插入图片描述

3. 百分比漏斗图

要在漏斗图中显示每个阶段的百分比,可以使用label_opts参数和formatter属性进行设置。以下是修改后的代码:

from pyecharts.charts import Funnel
from pyecharts import options as opts

# 定义商品和销售数据
goods = ['钢笔', '本子', '桌子', '椅子', '橡皮擦', '铅笔']
sales = [10, 50, 20, 20, 20, 30]

# 创建漏斗图实例
c = (
    Funnel()
    .add(
        "销售图",
        [list(z) for z in zip(goods, sales)],
        label_opts=opts.LabelOpts(formatter="{b}: {d}%"),  # 设置标签格式为 "商品名称: 百分比"
    )
)

# 保存为HTML文件
c.render("百分比漏斗图.html")

# 在Jupyter Notebook中显示漏斗图
c.render_notebook()

label_opts参数中,通过formatter属性设置标签的显示格式为"{b}: {d}%",其中{b}表示商品名称,{d}表示百分比。这样每个阶段的标签就会显示为"商品名称: 百分比"的形式。修改后的代码会生成一个带有百分比的漏斗图,并保存为HTML文件或在Jupyter Notebook中显示。

运行结果:
在这里插入图片描述

4. 向上排序漏斗图

通过在add函数添加sort_="ascending"参数修改排序方式:

from pyecharts.charts import Funnel
from pyecharts import options as opts

# 定义商品和销售数据
goods = ['钢笔', '本子', '桌子', '椅子', '橡皮擦', '铅笔']
sales = [10, 50, 20, 20, 20, 30]

# 创建漏斗图实例
c = (
    Funnel()
    .add(
        "销售图",
        [list(z) for z in zip(goods, sales)],
        sort_="ascending", # 排序方法
        label_opts=opts.LabelOpts(formatter="{b}: {d}%"),  # 设置标签格式为 "商品名称: 百分比"
    )
)

# 保存为HTML文件
c.render("百分比漏斗图.html")

# 在Jupyter Notebook中显示漏斗图
c.render_notebook()

在这里插入图片描述

5. 标准漏斗图

from pyecharts import options as opts
from pyecharts.charts import Funnel

c = (
    Funnel()
    .add(
        series_name="漏斗图系列名称",
        data_pair=[("步骤1", 100), ("步骤2", 80), ("步骤3", 60), ("步骤4", 40), ("步骤5", 20)],
        # 数据序列,每个数据对包括步骤名称和对应的值
        gap=2,  # 数据之间的间隔
        sort_="descending",  # 数据排序方式,这里使用降序排序
        label_opts=opts.LabelOpts(position="inside"),  # 数据标签的配置选项,这里设置标签在内部显示
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="标准漏斗图"),  # 设置图表标题
        tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b} : {c}%"),  # 设置提示框的格式
    )
)

# 保存为HTML文件
c.render("标准漏斗图.html")

# 在Jupyter Notebook中显示漏斗图
c.render_notebook()

运行结果:
在这里插入图片描述

书籍推荐

在这里插入图片描述

清华社【秋日阅读企划】领券立享优惠

IT好书 5折叠加10元 无门槛优惠券:https://u.jd.com/Yqsd9wj

活动时间:9月4日-9月17日,先到先得,快快来抢

在这里插入图片描述
内容介绍:

《Vue.js从入门到精通》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Vue.js进行程序开发需要掌握的各方面技术。全书分为4篇,共19章,内容包括初识Vue.js、ECMAScript 6语法介绍、Vue实例与数据绑定、条件判断指令、v-for指令、计算属性和监听属性、元素样式绑定、事件处理、表单元素绑定、自定义指令、组件、组合API、过渡和动画效果、渲染函数、使用Vue Router实现路由、使用axios实现Ajax请求、Vue CLI、状态管理,以及51购商城项目实战。书中的大多数知识点都结合具体实例进行介绍,涉及的程序代码给出了详细的注释,使读者可轻松领会Vue.js程序开发的精髓,快速提高开发技能。

京东地址https://item.jd.com/14055952.html

相关文章

使用Go Validator在Go应用中有效验证数据

Go Validator是一个开源的包,为Go结构体提供强大且易于使用的数据验证功能。该库允许开发者为其数据结构定义自定义验证规则,并确保传入的数据满足指定的条件。Go Validator支持内置验证器、自定义验证器,甚至允许您链式多个验证规则以满足更复杂的数据验证需求。如果内置验证器无法满足您的需求,您可以通过定义自己的验证函数来创建自定义验证器。这个功能允许您实现特定于应用程序需求的验证逻辑。

C# this关键字的作用

关键字在C#中主要用于引用当前对象,区分字段与局部变量,调用其他构造函数以及传递当前对象给其他方法或构造函数。

C语言中关于#include的一些小知识

如果是你自己编写的头文件,那么如果没加唯一包含标识的话,那么编译器会编译报错的。如果是系统自带的头文件,由于其每个头文件都加了特殊标识,所以即使你包含两遍,也不会有问题。上面的代码片段会首先判断HEADER_FILE_NAME_H是否被定义,若未定义则进行后续操作;#ifndef HEADER_FILE_NAME_H // 定义了一个名为HEADER_FILE_NAME_H的标记符号。#define HEADER_FILE_NAME_H // 当第一次包含该头文件时,将此标记设置为已定义状态。

Go 是否有三元运算符?Rust 和 Python 是怎么做的?

本文主要就 Go 中三元运算符展开讨论,从简单if-else语句、到基于匿名函数的单行表达式、及泛型抽象 If 函数等方式来实现类似的功能。当然,我没有建议使用这些方式,在没有内置支持的情况下,if-else的写法就挺好的。Go 中如何实现三元运算符?Rust 和 Python 是怎么做的?

C语言中的作用域与生命周期

但是全局变量被 static 修饰之后,外部链接属性就变成了内部链接属性,只能在自己所在的源文件内部使用了,其他源文件,即使声明了,也是无法正常使用的。结论:static修饰局部变量改变了变量的生命周期,生命周期改变的本质是改变了变量的存储类型,本来一个局部变量是存储在内存的栈区的,但是被 static 修饰后存储到了静态区。extern 是用来声明外部符号的,如果一个全局的符号在A文件中定义的,在B文件中想使用,就可以使用extern进行声明,然后使用。全局变量的生命周期是:整个程序的生命周期。

Python和Java的区别(不断更新)

运行效率:一般来说,Java的运行效率要高于Python,这主要是因为Java是编译型语言,其代码在执行前会进行预编译,而Python是解释型语言,边解释边执行。而Python没有类似的强大虚拟机,但它的核心是可以很方便地使用C语言函数或C++库,这使得Python可以轻松地与底层硬件进行交互。**类型系统:**Java是一种静态类型语言,所有变量需要先声明(类型)才能使用,且类型在编译时就已经确定。总的来说,Python和Java各有其优势和特点,选择哪种语言取决于具体的项目需求、开发环境以及个人偏好。

C#中的浅度和深度复制(C#如何复制一个对象)

接着,我们修改了复制得到的对象及其引用类型字段的属性值,最后输出原始对象和复制对象的属性值。这意味着如果一个类包含引用类型成员,在执行深度复制时,不仅复制这些引用,还会递归地复制引用所指向的对象,直到所有的引用都指向全新的对象实例。当进行浅复制时,系统会创建一个新的对象实例,但这个新对象的字段将与原始对象中的值类型字段具有相同的值,而对于引用类型字段,则仅仅是复制了。也就是说,如果一个类中有引用类型的成员变量(比如数组、其他自定义类的对象等),那么浅复制后,新对象和原对象的这些引用类型成员仍然指向。

C++ STL精通之旅:向量、集合与映射等容器详解

STL 作为一个封装良好,性能合格的 C++ 标准库,在算法竞赛中运用极其常见。灵活且正确使用 STL 可以节省非常多解题时间,这一点不仅是由于可以直接调用,还是因为它封装良好,可以让代码的可读性变高,解题思路更清晰,调试过程往往更顺利。

解决Linux环境下gdal报错:ERROR 4: `/xxx.hdf‘ not recognized as a supported file format.

题外话:我发现linux系统和Windows系统下面,库的版本是有差异的。比如我的本机Windows上装的是gdal3.2.3和numpy1.19.1,linux服务器上装的却是gdal3.0.2和numpy1.21.5。这个是很常见的回复,网上许多回答都说低版本的 gdal 不支持 hdf5,让你重装高版本的gdal。我之前用pip安装了whl,暴力装上了,但用的时候就会有问题。安装了不冲突的gdal之后,就成功打开文件啦~一开始我是抱着试试的心态,用conda,不用pip,重新安装了一下我的gdal。

C语言常见面试题:什么是枚举,枚举的作用是什么?

首先,枚举是一种特殊的类,它的主要作用是封装一组常量,例如,一周的七天、月份、季节等。枚举在JDK1.5后被引入,相较于之前的常量定义方式,枚举具有更好的安全性和更好的性能。每个枚举常量都是该枚举类的一个实例,因此可以使用构造函数来初始化每个枚举常量的值。综上所述,枚举的常用用法包括常量定义、switch语句、添加新方法、覆盖枚举的方法、实现接口以及使用接口组织枚举等。枚举是一种特殊的数据类型,它是一组具命名的整型常量的集合。枚举是一种特殊的数据类型,它是一组具命名的整型常量的集合。

为什么Java中的String类被设计为final类?

String类作为Java中不可或缺的类之一,被设计成final类带来了不可变性、安全性、可靠性和性能优势。不可变的特性使得String对象在多线程环境下安全共享,提高了应用程序的并发性和性能。此外,String类的设计还符合Java类库的一致性和规范,确保了整个语言的稳定性和可靠性。因此,String类被设计成final类是出于多方面的考虑,以提供最佳的使用体验和编程效率。

Promise和箭头函数和普通函数的区别

箭头函数与普通函数的区别在于: 1、箭头函数没有this,所以需要通过查找作用域链来确定this的值,这就意味着如果箭头函数被非箭头函数包含,this绑定的就是最近一层非箭头函数的this, 2、箭头函数没有自己的arguments对象,但是可以访问外围函数的arguments对象 3、不能通过new关键字调用,同样也没有new.target值和原型。6、箭头函数没有自己的arguments,可以在箭头函数中使用rest参数代替arguments对象,来访问箭头函数的参数列表。

详解动态网页数据获取以及浏览器数据和网络数据交互流程-Python

动态网页是一种在用户浏览时实时生成或变化的网页。。相比之下,动态网页可以根据用户的互动、请求或其他条件在浏览器端或服务器端生成新的内容。而且现在的网页一般都是采用前后端分离的架构,前端负责展示和用户交互,后端负责数据处理。这种架构使得前端可以更加灵活地实现动态内容的加载和展示。所以说以后想要获取到数据,动态网页数据获取会成为我们主流获取网页数据的技术。所以在动态网页数据获取这方面我们需要下足功夫了解动态网页数据交互形式、数据存储访问模式等方方面面的知识,我们才好更加灵活的获取到数据。

ElasticSearch 集群搭建与状态监控cerebro

在单机上利用docker容器运行多个es实例来模拟es集群。部署es集群可以直接使用docker-compose来完成,但要求Linux虚拟机至少有4GI的内存空间。&quot;number_of_replicas&quot;: 1 // 副本数。&quot;number_of_shards&quot;: 3,// 分片款量。kibana可以监控es集群,不过新版本需要依赖es的x-pack 功能,配置比较复杂。第一种方式:利用kibana的DevTools创建索引库 ,在DevTools中输入指令。第二种方式:利用cerebro创建索引库。

详解静态网页数据获取以及浏览器数据和网络数据交互流程-Python

在网站设计领域,基于纯HTML格式构建的网页通常定义为静态网页,这种类型的网页是早期网站建设的主要形式。对于网络爬虫来说,抓取静态网页中的数据相对较为简单,因为所需的所有信息都直接嵌入在网页的HTML代码里。然而,对于那些利用AJAX技术动态加载数据的网页,其数据并不总是直接出现在HTML代码中,这对爬虫的抓取工作造成了一定的难度。在静态网页的数据抓取过程中,Requests库显示出其卓越的实用性。这个库不仅功能全面,而且操作简洁直观。

【HarmonyOS】ArkTS语言介绍与组件方式运用

自定义组件自定义函数:自定义函数可以将烦长的代码单独抽离出一个函数当中,然后在原位置调用我们设置的函数即可,自定义函数可以定义在全局或组件内,如下:@Styles装饰器@Extend装饰器// 继承模式,只能写在全局。
返回
顶部