用Python完成一件小事:展示存儲資源去向(閱讀需5分鐘)


用Python完成一件小事:展示存儲資源去向(閱讀需5分鐘)

寫在分享之前

Python是如此高效又可愛的一門編程語言,相信使用過的人都知道。其用戶之多,用途之廣,這裡不再贅述。雖然我不是一名專業的程序員,但我一直熱衷於用編程來提高我的工作和學習效率,甚至把一些“靈光乍現”的想法變成了現實,看著結果出現的一刻,我成就感滿滿。

現在,我決定將學習使用Python過程中完成的一些小片段分享出來,讓需要的人有收穫,也鼓勵自己持續學習。這是我的第一篇文章,後續還會有很多篇,希望自己能越寫越好,內容越來越豐富,能夠幫助到更多的人。

正文

最近,需要對公司現有存儲資源的使用情況進行分析,比如:存儲資源被分配到了哪些系統?分配了多大空間?數據備份到了什麼地方?。。。這一系列的內容,如何簡單、直觀的進行展現呢?下面就是我今天要分享的用Python繪製存儲資源去向桑葚圖,全是乾貨,內容一目瞭然。


用Python完成一件小事:展示存儲資源去向(閱讀需5分鐘)

存儲資源去向展現效果圖

整個實現過程包括:“數據統計”、“構建圖節點”,“構建連接”和“渲染可視化”四個步驟。

首先,對我使用的工具進行簡單介紹。

(1)代碼編輯器:visual studio code;

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

(3)用到的庫:pandas(用於讀取excel數據)、pyecharts(用於繪製數據可視化圖)。

說明:本文從實際需求出發,僅對運用python解決問題的思路和過程進行實例分享。因此,未對python語法和上訴工具進行詳細介紹。

第一步:數據統計


用Python完成一件小事:展示存儲資源去向(閱讀需5分鐘)

存儲資源信息統計數據

我僅用了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完成一件小事:展示存儲資源去向(閱讀需5分鐘)

生成的數據可視化網頁,帶有交互功能。將鼠標移至節點或連接,會顯示詳情

結束語

用Python展示數據資源流向的示例(桑葚圖)分享就到此結束,謝謝閱讀,希望讀者能有所收穫。作者水平有限,不妥之處請在評論中告知,我一定改進。另外,有需要想了解的內容,也請在評論中告訴我,我會酌情安排後續的分享內容。您的鼓勵,就是我持續創作的動力!


分享到:


相關文章: