做网站平台多少钱,网络运营商有几家,免手机微网站,什么叫品牌vi设计#x1f464;作者介绍#xff1a;10年大厂数据\经营分析经验#xff0c;现任大厂数据部门负责人。 本文结构#xff1a;工具介绍python实现库 - 案例 - 分析思路与过程 实战专栏#xff1a;https://blog.csdn.net/cciehl/category_12615648.html 备注说明#xff1a; 企业… 作者介绍10年大厂数据\经营分析经验现任大厂数据部门负责人。 本文结构工具介绍python实现库 - 案例 - 分析思路与过程 实战专栏https://blog.csdn.net/cciehl/category_12615648.html 备注说明 企业案例的数据均为模拟后的重点看分析思路全文8000字阅读10分钟练习2小时每天一篇数据分析实战案例一起打怪升级 桑基图Sankey Diagram是一种特殊类型的流图以流的宽度来表示数据量的大小广泛应用于展示能量、材料、成本或其他信息的流动和转化。它能直观地显示多个过程或阶段之间的关系以及在这些过程中量的分配或转换情况。介绍桑基图之前我们先介绍一下这次主要用到的库plotly
plotly库介绍
plotly是一个非常强大的Python图形库它支持创建丰富的交互式图表和数据可视化。作为一个开源库plotly允许用户以简单的Python代码生成复杂的图形如线图、散点图、柱状图、饼图、热力图、3D图和桑基图等。由于其交互性强plotly生成的图表可以让用户通过鼠标操作如点击、拖拽、缩放等来探索数据这使得plotly在数据分析和科学研究中尤为受欢迎。
核心特点 交互性plotly图表具有高度的交互性用户可以直接在图表上进行操作如悬停显示详细信息、缩放、更新数据等。 多平台支持plotly可以在Jupyter Notebook中直接使用同时支持将图表导出为HTML文件便于在网页中嵌入和分享。 丰富的图表类型plotly支持广泛的图表类型能够覆盖绝大多数的数据可视化需求。 高度可定制几乎图表中的每个元素都是可定制的包括颜色、大小、布局等满足个性化的展示需求。 与Dash结合plotly是构建Dash应用的核心库之一Dash是一个用于构建数据驱动的Web应用的框架利用plotly进行数据可视化。
基本用法
安装plotly
pip install plotly创建一个简单的散点图
import plotly.graph_objects as go# 创建散点图
fig go.Figure(datago.Scatter(x[1, 2, 3, 4], y[10, 11, 12, 13], modemarkers))# 显示图表
fig.show()创建桑基图
import plotly.graph_objects as gofig go.Figure(go.Sankey(nodedict(pad15,thickness20,linedict(colorblack, width0.5),label[Node 1, Node 2, Node 3],),linkdict(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(rows1, cols1)# 添加初始数据
fig.add_trace(go.Scatter(x[1, 2, 3, 4], y[10, 11, 12, 13], modemarkers), row1, col1)# 添加动画帧
fig.add_trace(go.Scatter(x[1, 2, 3, 4], y[13, 11, 12, 10], modemarkers), row1, col1)fig.update_layout(updatemenus[dict(typebuttons,buttons[dict(labelPlay,methodanimate,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(rows2, cols1)# 添加第一个子图折线图
fig.add_trace(go.Scatter(x[1, 2, 3], y[4, 5, 6]), row1, col1)# 添加第二个子图柱状图
fig.add_trace(go.Bar(x[1, 2, 3], y[3, 2, 1]), row2, col1)fig.show()样式定制
plotly提供了广泛的样式定制选项包括颜色、字体、图例、布局等使得图表完全符合你的品牌或个人偏好。
import plotly.graph_objects as gofig go.Figure(datago.Bar(x[A, B, C], y[20, 14, 23]))
fig.update_layout(title_text自定义样式示例,title_font_size20,xaxisdict(titleX轴标题),yaxisdict(titleY轴标题),paper_bgcolorlightgray,plot_bgcolorlightblue)
fig.show()与Dash集成创建交互式Web应用
plotly是Dash框架的核心Dash允许开发者用纯Python构建丰富的交互式Web应用。这使得plotly不仅限于静态的数据可视化还可以用于开发复杂的分析工具和仪表盘。
# 需要安装dash库
from dash import Dash, dcc, html
import plotly.graph_objects as goapp Dash(__name__)fig go.Figure(datago.Bar(y[1, 3, 2]))
graph dcc.Graph(figurefig)app.layout html.Div(children[html.H1(childrenHello Dash),html.Div(childrenDash: Web Dashboards with Python.),graph])if __name__ __main__:app.run_server(debugTrue)企业场景 能源流动展示能源从来源到最终用途的转化和分布如电力或热能的生产、传输和消耗过程。 成本流分析在生产和服务过程中通过桑基图可以直观地显示不同成本因素原材料、人工、运输等如何组成总成本。 物料与资源流用于展示在生产系统中物料的流动路径和损耗情况帮助优化资源利用效率。 网站用户行为分析用户在网站或应用中的行为路径如页面访问流程、购物车添加到购买的转化流程等。 供应链与物流显示产品从原材料采购、生产加工到最终销售的全过程中的物流和信息流。
使用方法
桑基图的制作涉及以下几个关键步骤 确定节点定义图中的所有节点每个节点代表流程中的一个状态或阶段。 定义流确定节点之间的流动关系包括流的来源和去向。 量化数据为每条流分配一个量值量值的大小将决定图中流的宽度。 选择工具根据需求选择合适的工具绘制桑基图。常用的工具包括Python的matplotlib、plotly库以及在线制图工具如SankeyMATIC或Google Charts等。 自定义样式根据展示需求调整桑基图的颜色、标签、布局等使图表更加直观易懂。
案例分析-城市在一年内的能源消耗流动
背景
假设我们需要分析一个城市在一年内的能源消耗流动情况。这个城市主要的能源来源包括太阳能、风能、煤炭和天然气。这些能源被用于发电、供暖和汽车燃料。目标是直观展示各种能源来源到最终用途的流动路径及其量值从而评估城市能源利用的效率和可持续性
数据
展示了能源流动的来源、目标和量值 数据可视化 通过桑基图我们可以直观地看到城市能源消耗的全貌包括各种能源来源对发电、供暖和汽车燃料的贡献比例。从图中可以发现煤炭是主要的能源来源尤其在发电和供暖方面的贡献最大但这也可能意味着较高的碳排放。太阳能和风能虽然对发电有所贡献但总量相对较小表明可再生能源的利用率有待提高
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(nodedict(pad15, # 节点间距thickness20, # 节点厚度linedict(colorblack, width0.5),labellabels,),linkdict(sourcesource, # 源节点索引列表targettarget, # 目标节点索引列表valuevalue, # 流量值列表))])
fig.update_layout(title_text城市能源消耗流动分析, font_size10)
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(nodedict(pad15,thickness20,linedict(colorblack, width0.5),labellabels,),linkdict(sourcesource, # 源节点索引列表targettarget, # 目标节点索引列表valuevalue, # 流的数值customdatacustomdata, # 流的自定义数据hovertemplate%{customdata}extra/extra # 设置鼠标悬停时显示的文本模板))])
fig.update_layout(title_text年度企业成本分析桑基图, font_size10)
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 网站用户行为路径分析brsup转化率: 首页访问到浏览产品: {}, 浏览产品到添加到购物车: {}, \添加到购物车到进行结算: {}, 进行结算到完成购买: {}/sup.format(*conversion_rates)
fig go.Figure(data[go.Sankey(nodedict(pad15,thickness20,linedict(colorblack, width0.5),labellabels,),linkdict(sourcesource, targettarget, valuevalue, ))])
fig.update_layout(title_texttitle_text, font_size10)
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(nodedict(pad15,thickness20,linedict(colorblack, width0.5),labellabels,),linkdict(sourcesource,targettarget,valuevalue,))])
# 更新图表的布局和标题包括主要数据
title_text
全球智能手机供应链与物流分析br
sup原材料和组件: 澳大利亚(500万台), 刚果(500万台), 台湾(1000万台), 韩国(1000万台)br
组装地点: 中国; 主要销售市场: 美国(500万台), 欧洲(400万台), 印度(300万台), 其他地区(300万台)/sup
fig.update_layout(title_texttitle_text, font_size10)
fig.show()