【python plotly库介绍】从视觉到洞见:桑基图在业务分析中的应用【保姆级教程过于详细珍藏版】

news2024/11/28 10:37:11

👤作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。
本文结构:工具介绍python实现库 - 案例 - 分析思路与过程

实战专栏:https://blog.csdn.net/cciehl/category_12615648.html

备注说明:

  • 企业案例的数据均为模拟后的,重点看分析思路
  • 全文8000字,阅读10分钟,练习2小时
  • 每天一篇数据分析实战案例,一起打怪升级

桑基图(Sankey Diagram)是一种特殊类型的流图,以流的宽度来表示数据量的大小,广泛应用于展示能量、材料、成本或其他信息的流动和转化。它能直观地显示多个过程或阶段之间的关系,以及在这些过程中量的分配或转换情况。介绍桑基图之前我们先介绍一下这次主要用到的库plotly

plotly库介绍

plotly是一个非常强大的Python图形库,它支持创建丰富的交互式图表和数据可视化。作为一个开源库,plotly允许用户以简单的Python代码生成复杂的图形,如线图、散点图、柱状图、饼图、热力图、3D图和桑基图等。由于其交互性强,plotly生成的图表可以让用户通过鼠标操作(如点击、拖拽、缩放等)来探索数据,这使得plotly在数据分析和科学研究中尤为受欢迎。

核心特点

  1. 交互性plotly图表具有高度的交互性,用户可以直接在图表上进行操作,如悬停显示详细信息、缩放、更新数据等。

  2. 多平台支持plotly可以在Jupyter Notebook中直接使用,同时支持将图表导出为HTML文件,便于在网页中嵌入和分享。

  3. 丰富的图表类型plotly支持广泛的图表类型,能够覆盖绝大多数的数据可视化需求。

  4. 高度可定制:几乎图表中的每个元素都是可定制的,包括颜色、大小、布局等,满足个性化的展示需求。

  5. 与Dash结合plotly是构建Dash应用的核心库之一,Dash是一个用于构建数据驱动的Web应用的框架,利用plotly进行数据可视化。

基本用法

安装plotly

pip install plotly

创建一个简单的散点图:

import plotly.graph_objects as go

# 创建散点图
fig = go.Figure(data=go.Scatter(x=[1, 2, 3, 4], y=[10, 11, 12, 13], mode='markers'))

# 显示图表
fig.show()

创建桑基图:

import plotly.graph_objects as go

fig = go.Figure(go.Sankey(
    node=dict(
        pad=15,
        thickness=20,
        line=dict(color="black", width=0.5),
        label=["Node 1", "Node 2", "Node 3"],
    ),
    link=dict(
        source=[0, 1],  # 定义源节点
        target=[2, 2],  # 定义目标节点
        value=[8, 4],  # 定义流量值
    )))

fig.update_layout(title_text="简单桑基图示例")
fig.show()

高级用法

动画

plotly支持为图表添加动画效果,这对于展示随时间变化的数据特别有用。例如,可以创建一个动画来展示股票价格的变化或者气候变化的模拟。

import plotly.graph_objects as go
from plotly.subplots import make_subplots

# 创建带有动画的散点图
fig = make_subplots(rows=1, cols=1)

# 添加初始数据
fig.add_trace(go.Scatter(x=[1, 2, 3, 4], y=[10, 11, 12, 13], mode="markers"), row=1, col=1)

# 添加动画帧
fig.add_trace(go.Scatter(x=[1, 2, 3, 4], y=[13, 11, 12, 10], mode="markers"), row=1, col=1)

fig.update_layout(updatemenus=[dict(type="buttons",
                                     buttons=[dict(label="Play",
                                                   method="animate",
                                                   args=[None])])])

# 定义动画
fig.update(frames=[go.Frame(data=[go.Scatter(x=[1, 2, 3, 4], y=[11, 12, 13, 14])]),
                    go.Frame(data=[go.Scatter(x=[1, 2, 3, 4], y=[14, 13, 12, 11])])])

fig.show()

展示-点击前

展示-点击后

子图布局

plotly允许在一个图表中创建多个子图(subplot),这在需要同时展示多个相关数据集时非常有用。

from plotly.subplots import make_subplots
import plotly.graph_objects as go

# 创建包含2行1列子图的图表
fig = make_subplots(rows=2, cols=1)

# 添加第一个子图:折线图
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[4, 5, 6]), row=1, col=1)

# 添加第二个子图:柱状图
fig.add_trace(go.Bar(x=[1, 2, 3], y=[3, 2, 1]), row=2, col=1)

fig.show()

样式定制

plotly提供了广泛的样式定制选项,包括颜色、字体、图例、布局等,使得图表完全符合你的品牌或个人偏好。

import plotly.graph_objects as go

fig = go.Figure(data=go.Bar(x=['A', 'B', 'C'], y=[20, 14, 23]))
fig.update_layout(title_text='自定义样式示例',
                  title_font_size=20,
                  xaxis=dict(title='X轴标题'),
                  yaxis=dict(title='Y轴标题'),
                  paper_bgcolor='lightgray',
                  plot_bgcolor='lightblue')
fig.show()

与Dash集成创建交互式Web应用

plotly是Dash框架的核心,Dash允许开发者用纯Python构建丰富的交互式Web应用。这使得plotly不仅限于静态的数据可视化,还可以用于开发复杂的分析工具和仪表盘。

# 需要安装dash库
from dash import Dash, dcc, html
import plotly.graph_objects as go

app = Dash(__name__)

fig = go.Figure(data=go.Bar(y=[1, 3, 2]))
graph = dcc.Graph(figure=fig)

app.layout = html.Div(children=[html.H1(children='Hello Dash'),
                                html.Div(children='Dash: Web Dashboards with Python.'),
                                graph])

if __name__ == '__main__':
    app.run_server(debug=True)

企业场景

  1. 能源流动:展示能源从来源到最终用途的转化和分布,如电力或热能的生产、传输和消耗过程。

  2. 成本流分析:在生产和服务过程中,通过桑基图可以直观地显示不同成本因素(原材料、人工、运输等)如何组成总成本。

  3. 物料与资源流:用于展示在生产系统中物料的流动路径和损耗情况,帮助优化资源利用效率。

  4. 网站用户行为:分析用户在网站或应用中的行为路径,如页面访问流程、购物车添加到购买的转化流程等。

  5. 供应链与物流:显示产品从原材料采购、生产加工到最终销售的全过程中的物流和信息流。

使用方法

桑基图的制作涉及以下几个关键步骤:

  1. 确定节点:定义图中的所有节点,每个节点代表流程中的一个状态或阶段。

  2. 定义流:确定节点之间的流动关系,包括流的来源和去向。

  3. 量化数据:为每条流分配一个量值,量值的大小将决定图中流的宽度。

  4. 选择工具:根据需求选择合适的工具绘制桑基图。常用的工具包括Python的matplotlibplotly库,以及在线制图工具如SankeyMATIC或Google Charts等。

  5. 自定义样式:根据展示需求调整桑基图的颜色、标签、布局等,使图表更加直观易懂。

案例分析-城市在一年内的能源消耗流动

背景

假设我们需要分析一个城市在一年内的能源消耗流动情况。这个城市主要的能源来源包括:太阳能、风能、煤炭和天然气。这些能源被用于发电、供暖和汽车燃料。目标是直观展示各种能源来源到最终用途的流动路径及其量值,从而评估城市能源利用的效率和可持续性

数据

展示了能源流动的来源、目标和量值:

数据可视化

通过桑基图,我们可以直观地看到城市能源消耗的全貌,包括各种能源来源对发电、供暖和汽车燃料的贡献比例。从图中可以发现,煤炭是主要的能源来源,尤其在发电和供暖方面的贡献最大,但这也可能意味着较高的碳排放。太阳能和风能虽然对发电有所贡献,但总量相对较小,表明可再生能源的利用率有待提高

python代码

import plotly.graph_objects as go
# 定义节点:能源来源 + 使用目的
labels = ["太阳能", "风能", "煤炭", "天然气", "发电", "供暖", "汽车燃料"]
# 定义流:源节点、目标节点、流量值
source = [0, 1, 2, 3, 3, 2, 2, 3]  # 能源来源节点索引
target = [4, 4, 4, 4, 5, 5, 6, 6]  # 使用目的节点索引
value = [120, 180, 500, 200, 150, 350, 50, 30]  # 流量值(千兆瓦时)
# 创建桑基图
fig = go.Figure(data=[go.Sankey(
    node=dict(
      pad=15,  # 节点间距
      thickness=20,  # 节点厚度
      line=dict(color="black", width=0.5),
      label=labels,
    ),
    link=dict(
      source=source,  # 源节点索引列表
      target=target,  # 目标节点索引列表
      value=value,  # 流量值列表
    ))])
fig.update_layout(title_text="城市能源消耗流动分析", font_size=10)
fig.show()

案例分析-企业成本分析

场景

一家大型企业希望通过深入分析其一年内的成本构成来识别成本节约的机会。该企业的成本主要包括原材料成本、劳动力成本、制造成本、销售与市场推广成本以及其他运营成本。通过构建一个桑基图,企业能够直观地理解不同成本部分如何贡献到总成本中,并识别可能的成本优化领域。

数据

以下是该企业一年内不同成本部分的数据(单位:百万美元):

cost_data = {
    '总成本': 1000,
    '原材料成本': 300,
    '劳动力成本': 200,
    '制造成本': 250,
    '销售与市场推广成本': 150,
    '其他运营成本': 100
}

数据可视化

原材料成本和劳动力成本是主要的直接成本:这两项成本直接流向制造成本,表明它们是生产过程中最重要的成本组成部分。这反映了在制造行业中,原材料采购和人力资源管理对于成本控制的重要性。

制造成本占总成本的一大块:制造成本不仅包括原材料和劳动力,还可能包含其他间接成本,如设备折旧、能源消耗等。这提示管理层需要关注生产效率和生产过程中的成本优化

import plotly.graph_objects as go
​
# 定义桑基图的节点标签
labels = ["总成本", "原材料成本", "劳动力成本", "制造成本", "销售与市场推广成本", "其他运营成本"]
​
# 定义桑基图的流
source = [1, 2, 3, 3, 3, 3]  # 流的源节点索引
target = [3, 3, 0, 4, 5, 0]  # 流的目标节点索引
value = [300, 200, 250, 150, 100, 500]  # 流的数值
customdata = ["300百万美元", "200百万美元", "250百万美元", "150百万美元", "100百万美元", "500百万美元"] # 自定义数据
​
# 创建桑基图
fig = go.Figure(data=[go.Sankey(
    node=dict(
      pad=15,
      thickness=20,
      line=dict(color="black", width=0.5),
      label=labels,
    ),
    link=dict(
      source=source,  # 源节点索引列表
      target=target,  # 目标节点索引列表
      value=value,  # 流的数值
      customdata=customdata,  # 流的自定义数据
      hovertemplate='%{customdata}<extra></extra>'  # 设置鼠标悬停时显示的文本模板
    ))])
​
fig.update_layout(title_text="年度企业成本分析桑基图", font_size=10)
fig.show()

案例分析-电子商务网站用户行为

场景

一个电子商务网站希望分析其用户的行为路径,从访问首页开始,到浏览产品、添加到购物车、进行结算,最后到完成购买的整个流程。目的是为了了解在哪些步骤中用户最可能流失,以便采取措施优化用户体验和提高转化率。

数据

以下是一个简化的示例数据,描述了用户在不同步骤中的数量:

  • 首页访问: 10000 用户

  • 浏览产品: 5000 用户

  • 添加到购物车: 2500 用户

  • 进行结算: 1250 用户

  • 完成购买: 600 用户

数据可视化

直接在桑基图流上或节点旁静态显示转化率在plotly中并不直接支持,因此以下示例采用了一种间接的方式,即在图表的标题中包含转化率信息会更直观一些

基于网站用户行为路径的桑基图分析,其中展示了从“首页访问”到“完成购买”的整个过程,以及各个步骤的转化率,我们可以得出以下结论:

显著的转化漏斗:数据明显展示了一个典型的转化漏斗模型,用户数量从首页访问到最终购买逐步减少。这种模式在电子商务网站中很常见,但关键在于识别和优化转化路径中的关键节点,以最大化转化率。

关键流失点:在从“添加到购物车”到“进行结算”的过程中,转化率出现了明显下降。这提示我们这一环节可能是用户流失的关键点,需要进一步分析原因(如是否购物车页面的用户体验存在问题,结算流程是否过于复杂等),并采取相应的优化措施。

简化购买流程:由于在结算环节存在较大的流失,简化购买和结算流程可能有助于提高转化率。这可能包括减少结算步骤、优化移动端体验、提供更多支付选项等。增强用户参与度:在浏览产品阶段增加用户的参与和互动(如通过推荐系统、限时优惠等),可能有助于提高用户从浏览到添加购物车的转化率。

python代码

import plotly.graph_objects as go
​
# 桑基图的数据
labels = ["首页访问", "浏览产品", "添加到购物车", "进行结算", "完成购买"]
source = [0, 1, 2, 3]
target = [1, 2, 3, 4]
value = [5000, 2500, 1250, 600]
​
# 计算转化率
conversion_rates = [f"{value[i]/value[i-1]*100:.2f}%" for i in range(1, len(value))]
conversion_rates.insert(0, "100%")  # 假设第一个转化率为100%
​
# 构建标题,包含转化率信息
title_text = "网站用户行为路径分析<br><sup>转化率: 首页访问到浏览产品: {}, 浏览产品到添加到购物车: {}, " \
             "添加到购物车到进行结算: {}, 进行结算到完成购买: {}</sup>".format(*conversion_rates)
​
fig = go.Figure(data=[go.Sankey(
    node=dict(
        pad=15,
        thickness=20,
        line=dict(color="black", width=0.5),
        label=labels,
    ),
    link=dict(
        source=source, 
        target=target, 
        value=value, 
    ))])
​
fig.update_layout(title_text=title_text, font_size=10)
fig.show()

案例分析-全球智能手机供应链与物流分析

场景

一个全球智能手机品牌想要分析其供应链和物流网络,以便更好地理解从原材料采购、组件制造、组装,到最终产品分销的整个流程。该品牌的供应链涉及多个国家,包括原材料的采购(如稀有金属来自澳大利亚和刚果),组件的制造(如处理器来自台湾,屏幕来自韩国),在中国组装,最后产品销售遍及全球。通过构建一个桑基图,公司希望能够直观地展示这一复杂网络中的主要流动路径和量级。

数据

以下是简化的示例数据:

  • 原材料:澳大利亚(稀有金属)、刚果(钴)

  • 组件制造:台湾(处理器)、韩国(屏幕)

  • 组装:中国

  • 销售:美国、欧洲、印度、其他地区

假设的产品流量(单位:万台):

  • 澳大利亚到中国:500

  • 刚果到中国:500

  • 台湾到中国:1000

  • 韩国到中国:1000

  • 中国到美国:500

  • 中国到欧洲:400

  • 中国到印度:300

  • 中国到其他地区:300

数据可视化

分析结论

供应链全球化:智能手机供应链的全球化特征非常明显,原材料和关键组件的供应跨越多个国家和地区,显示了对全球资源的依赖和利用。

中国的制造中心角色:中国作为智能手机的主要组装地,再次凸显了其在全球制造业中的中心地位,利用其成熟的供应链和物流体系。

主要市场分布:智能手机的主要销售市场集中在美国、欧洲和印度,这些地区的销售量占据了大部分,但也有相当一部分分布在其他地区,表明智能手机市场的广泛性和多样性。

优化建议

多元化供应链:鉴于供应链的全球化和对特定地区的依赖,企业应考虑多元化其供应链,以减少地缘政治风险、自然灾害或贸易政策变化带来的影响。

提高供应链的透明度和可追溯性:增加供应链的透明度,确保原材料的可持续采购和道德生产,这不仅能提高品牌形象,还能减少潜在的供应风险。

优化物流和库存管理:利用先进的数据分析和预测模型,优化库存水平和物流效率,减少运输成本,提高响应市场变化的能力。

增强本地市场的销售策略:针对主要销售市场以外的“其他地区”,探索更多本地化的销售和营销策略,以挖掘新的增长点。

提升供应链的灵活性和韧性:构建一个更加灵活和韧性的供应链体系,能够快速适应市场需求的变化,应对突发事件,保证供应链的连续性和效率。

python代码

import plotly.graph_objects as go
​
# 定义桑基图节点
labels = [
    "澳大利亚", "刚果", "台湾", "韩国", 
    "中国", "美国", "欧洲", "印度", "其他地区"
]
​
# 定义流的源和目的
source = [0, 1, 2, 3, 4, 4, 4, 4]
target = [4, 4, 4, 4, 5, 6, 7, 8]
value = [500, 500, 1000, 1000, 500, 400, 300, 300]
​
# 创建桑基图
fig = go.Figure(data=[go.Sankey(
    node=dict(
      pad=15,
      thickness=20,
      line=dict(color="black", width=0.5),
      label=labels,
    ),
    link=dict(
      source=source,
      target=target,
      value=value,
    ))])
​
# 更新图表的布局和标题,包括主要数据
title_text = """
全球智能手机供应链与物流分析<br>
<sup>原材料和组件: 澳大利亚(500万台), 刚果(500万台), 台湾(1000万台), 韩国(1000万台)<br>
组装地点: 中国; 主要销售市场: 美国(500万台), 欧洲(400万台), 印度(300万台), 其他地区(300万台)</sup>
"""
​
fig.update_layout(title_text=title_text, font_size=10)
fig.show()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试题】RocketMQ如何处理消息重复的问题呢?

对分布式消息队列来说&#xff0c;同时做到确保一定投递和不重复投递是很难的&#xff0c;就是所谓的“有且仅有一次” 。RocketMQ择了确保一定投递&#xff0c;保证消息不丢失&#xff0c;但有可能造成消息重复。 处理消息重复问题&#xff0c;主要有业务端自己保证&#xff…

自动驾驶杂谈

在2024年的今天&#xff0c;自动驾驶技术已经迈向了一个崭新的阶段&#xff0c;日趋成熟与先进。昨日&#xff0c;我有幸亲眼目睹了自动驾驶车辆在道路上自如行驶的场景。然而&#xff0c;在市区拥堵的路段中&#xff0c;自动驾驶车辆显得有些力不从心&#xff0c;它们时而疾驰…

机器学习 -- 随机森林DEMO

场景 之前看一些歌手或者演员选取节目的时候&#xff0c;上面不是一个评委&#xff0c;少则三五个&#xff0c;多则几十个&#xff0c;当做重要决定时&#xff0c;大家可能都会考虑吸取多个专家而不只是一个人的意见。机器学习也是一样的&#xff0c;机器学习中分为两种&#…

“IT小百科 ”之“那些看不懂的HTTP状态码详解”

“IT小百科 ”之“那些看不懂的HTTP状态码详解” 小伙伴们应该遇到过在浏览器中打开某个网页&#xff0c;半天没打开&#xff0c;然后网页给出一个“ 提示码”&#xff0c;如下图所示 &#xff1a; 我相信看到这个提示的小伙伴普遍有点懵&#xff0c;这个提示码到底是什么意思…

【Frida】【Android】 07_爬虫之网络通信库HttpURLConnection

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

结构体与位段的定义以及在内存中的存储

目录 结构体的声明 完全声明 不完全声明 结构体变量的定义和初始化 结构体的嵌套 结构体成员的直接访问和间接访问 结构体的自引用 typedef对结构体类型重命名 结构体内存对齐 对齐规则 练习 为什么存在内存对齐 修改默认对齐数 结构体传参 结构体实现位段 位段…

代码膨胀会破坏开发操作吗,它将如何影响编译时间?

Incredibuild 正潜心研究公司以及客户的未来发展趋势。 过去的一年举步维艰&#xff0c;但聪明的企业总是能够抓住机遇&#xff0c;将大部分业务自动化&#xff0c;保持敏捷度和竞争力&#xff0c;最佳的案例就是游戏工作室。这一年来&#xff0c;用户对新游戏或新版本的期待达…

Python 基础:标准库 -- math (数学函数)

1. 官方文档 math --- 数学函数 — Python 3.12.2 文档 cmath --- 关于复数的数学函数 — Python 3.12.2 文档 Python 中&#xff0c;可以使用内置的数学运算符&#xff0c;例如加法 ()、减法 (-)、除法 (/) 和乘法 (*) 进行简单的数学运算。不过&#xff0c;更高级的运算&a…

Python | Leetcode Python题解之第3题无重复字符的最长子串

题目&#xff1a; 题解&#xff1a; class Solution:def lengthOfLongestSubstring(self, s: str) -> int:# 哈希集合&#xff0c;记录每个字符是否出现过occ set()n len(s)# 右指针&#xff0c;初始值为 -1&#xff0c;相当于我们在字符串的左边界的左侧&#xff0c;还没…

Dubbo 原理及使用详解

嗨&#xff0c;亲爱的童鞋们&#xff01;欢迎来到这次关于Dubbo的探险之旅。在编程的世界里&#xff0c;我们时常需要处理分布式系统的问题&#xff0c;而Dubbo作为一款开源的分布式服务框架&#xff0c;正是为了解决这类问题而生。本篇博客将深入浅出&#xff0c;带你领略Dubb…

transformers微调模型后使用pieline调用无法预测列表文本

初学transformers框架 使用trainer简单训练一个文本分类模型三个epoch后 使用piepline调用model 和tokenizer后 发现 传入列表文本后 输出就变得不正常了&#xff0c;为么子哇 如下图

常见的DC电源模块故障及解决方法

BOSHIDA 常见的DC电源模块故障及解决方法 DC电源模块广泛应用于各种电子设备中&#xff0c;为其提供稳定的直流电源。然而&#xff0c;由于长期使用或其他原因&#xff0c;DC电源模块有时会出现故障。本文将介绍一些常见的DC电源模块故障及相应的解决方法。 1. 输出电压异常&a…

如何使用免费的ChatGpt3.5

如何使用免费的ChatGpt 最近免费的gpt3.5很多都不怎么行了实在是太给力了尾声 最近免费的gpt3.5很多都不怎么行了 原因是什么呢&#xff1f;因为openai已经取消了免费的5刀赠送&#xff0c;那么这些人手上的免费的sses-key 用完后&#xff0c;就基本上全军覆没了&#xff0c;再…

探索http-vue-loader的奥秘:原理、使用方法、在Vue开发中的应用

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

SpringSecurity学习总结(三更草堂)

SpringSecurity安全框架的核心功能是认证和授权&#xff1a; 认证&#xff1a;验证当前访问系统的是不是本系统的用户&#xff0c;并且要确认具体是哪个用户。 授权&#xff1a;经过认证后判断当前用户是否具有进行某个操作的权限。 一般来说中大型的项目都是使用SpringSecurit…

无尘卷轴布:保障洁净环境的关键利器

在现代科技高度发达的今天&#xff0c;许多行业对于环境洁净度的要求越来越严格&#xff0c;比如半导体制造、医疗器械生产等。而在这些领域中&#xff0c;无尘卷轴布成为了一项至关重要的辅助工具&#xff0c;其独特的设计和材质特性&#xff0c;为保障洁净环境做出了突出贡献…

如何备份 Outline 导出的 Markdown 文件

前面&#xff0c;我撰写了两篇文章&#xff0c;介绍了&#xff1a; 《如何在本地环境安装 Outline》《使用 Outline 搭建企业、个人知识库面临的问题》 今天&#xff0c;我们继续这个话题。使用 Outline 搭建知识库&#xff0c;如何备份自己知识库内的资料。 Outline 底层使用…

【教学类-09-03】20240401细线迷宫图02(A4横版一页-2份竖版)

作品展示&#xff1a; 背景需求&#xff1a; 【教学类-09-02】20240331细线迷宫图01&#xff08;A4横版一页1份横版&#xff09;-CSDN博客文章浏览阅读779次&#xff0c;点赞28次&#xff0c;收藏6次。【教学类-09-02】20240331细线迷宫图01&#xff08;A4横版一页1份横版&…

Sentinel入门Controller自动定义为资源

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流…

【opencv】教程代码 —ShapeDescriptors

检测和显示图像的轮廓 在图像中搜索并显示轮廓边缘多边形、轮廓矩形和包围圆 获取包含检测到的轮廓的椭圆和旋转的矩形 图像轮廓检测和轮廓凸包 计算图像中的轮廓的矩&#xff08;包括面积、重心等&#xff09;并进行显示 创建和绘制一个多边形图像然后计算并显示图像上每个点到…