用Python完成一件小事:展示存储资源去向(阅读需5分钟)


写在分享之前

Python是如此高效又可爱的一门编程语言,相信使用过的人都知道。其用户之多,用途之广,这里不再赘述。虽然我不是一名专业的程序员,但我一直热衷于用编程来提高我的工作和学习效率,甚至把一些“灵光乍现”的想法变成了现实,看着结果出现的一刻,我成就感满满。

现在,我决定将学习使用Python过程中完成的一些小片段分享出来,让需要的人有收获,也鼓励自己持续学习。这是我的第一篇文章,后续还会有很多篇,希望自己能越写越好,内容越来越丰富,能够帮助到更多的人。

正文

最近,需要对公司现有存储资源的使用情况进行分析,比如:存储资源被分配到了哪些系统?分配了多大空间?数据备份到了什么地方?。。。这一系列的内容,如何简单、直观的进行展现呢?下面就是我今天要分享的用Python绘制存储资源去向桑葚图,全是干货,内容一目了然。


存储资源去向展现效果图

整个实现过程包括:“数据统计”、“构建图节点”,“构建连接”和“渲染可视化”四个步骤。

首先,对我使用的工具进行简单介绍。

(1)代码编辑器:visual studio code;

(2)Python版本:Anaconda安装的3.7.3;

(3)用到的库:pandas(用于读取excel数据)、pyecharts(用于绘制数据可视化图)。

说明:本文从实际需求出发,仅对运用python解决问题的思路和过程进行实例分享。因此,未对python语法和上诉工具进行详细介绍。

第一步:数据统计


存储资源信息统计数据

我仅用了4个字段(系统名称、存储设备、分配容量、备份方式)将公司存储资源的使用情况进行了统计。其中,分配容量的单位是GB。先将数据加载进内存中。

<code>import pandas as pd

data = pd.read_excel('storage.xlsx',index=None)[['系统名称','存储设备','备份方式','分配容量']]/<code>

第二步:构建图节点

大家可以从效果图中轻易看出,图中有多个方框(节点)。这些都是数据中的实体(系统、存储设备、备份设备)。下面我们通过代码来构建出所有节点。

<code>from pyecharts import options as opts
from pyecharts.charts import Sankey

#构建nodes
nodes = []
for i in data['系统名称'].unique():
dic = {}
if str(i) != 'nan':
dic['name'] = i
nodes.append(dic)
for i in data['存储设备'].unique():
dic = {}
if str(i) != 'nan':
dic['name'] = i
nodes.append(dic)
for i in data['备份方式'].unique():
dic = {}


if str(i) != 'nan':
dic['name'] = i
nodes.append(dic)/<code>

第三步:构建连接

有了节点,再需要将有关联的节点连接起来。

<code>#构建links
links = []
for i in data.values:
storage = {}
backup = {}
if str(i[1]) == 'nan' and str(i[2]) != 'nan':#未使用存储设备
#备份
storage['source'] = i[0]
storage['target'] = i[2]
storage['value'] = round(i[3]/1024,3)
elif str(i[2]) == 'nan' and str(i[1]) != 'nan':#未备份
#存储
storage['source'] = i[0]
storage['target'] = i[1]
storage['value'] = round(i[3]/1024,3)
else:#既有存储又有备份
#存储
storage['source'] = i[0]
storage['target'] = i[1]
storage['value'] = round(i[3]/1024,3)
#备份
backup['source'] = i[1]
backup['target'] = i[2]
backup['value'] = round(i[3]/1024,3)
flag = 0
for link in links:
if link['source'] == i[1] and link['target'] == i[2]:
link['value'] += round(i[3]/1024,3)#将GB转换为TB
flag = 1
break
if flag == 0:
links.append(backup)
links.append(storage)/<code>

第四步:渲染可视化

到此,用于渲染的数据结构已经构建完成,接下来就是使用pyecharts可视化库进行渲染了。pyecharts可生成带有交互功能的数据可视化网页,实用性非常高。

<code>c = (
Sankey()
.add(
"存储使用量/TB",
nodes,
links,
linestyle_opt=opts.LineStyleOpts(opacity=0.2,curve=0.5,color="source",type_="dotted"),
label_opts=opts.LabelOpts(position="right"),
node_gap=16,
pos_top = '10%',
focus_node_adjacency=True
)
.set_global_opts(
title_opts=opts.TitleOpts(title='主要存储和备份使用情况')
)
)
c.render('storage.html')#生成的可交互式网页/<code>


生成的数据可视化网页,带有交互功能。将鼠标移至节点或连接,会显示详情

结束语

用Python展示数据资源流向的示例(桑葚图)分享就到此结束,谢谢阅读,希望读者能有所收获。作者水平有限,不妥之处请在评论中告知,我一定改进。另外,有需要想了解的内容,也请在评论中告诉我,我会酌情安排后续的分享内容。您的鼓励,就是我持续创作的动力!