日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 桑基图 地理坐标_【转载】Python数据可视化-实现Sankey桑基图

發布時間:2023/11/27 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 桑基图 地理坐标_【转载】Python数据可视化-实现Sankey桑基图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

根據不完整統計,90%想用sankey圖的朋友都是因為被它炫酷的外表所吸引,舉個例子:

在這里插入圖片描述

關于sankey圖的定義是這樣描述的:

即桑基能量分流圖,也叫桑基能量平衡圖。它是一種特定類型的流程圖,圖中延伸的分支的寬度對應數據流量的大小,通常應用于能源、材料成分、金融等數據的可視化分析。

流程圖的一種

由若干個三元素組成(節點,邊,流量)

遵循守恒定律,無論怎么流動,開端和末端數據始終一致

下面我們來簡單實現一個Sankey圖

第一步,我們先收集數據。

這里我在2020意大利新冠肺炎案例統計收集了意大利的患者年齡分布。

我們用pandas庫來繪制統計表。當然也可以用excel保存為xlsx文件。

db1 = pd.DataFrame({

'country':['Italy','Italy','Italy','Italy'],

'ages':['18歲以下','19-50歲','50-70歲','70歲以上'],

'confirm':['1677','31394','43617','43139'],

'Deceased':['167','408','4492','34813'],

'Active/Recovered': ['1510','30986','39125','8326']

})

print(db1)

那么打印下統計表得到:

country ages confirm Deceased Active/Recovered

0 Italy 18歲以下 1677 167 1510

1 Italy 19-50歲 31394 408 30986

2 Italy 50-70歲 43617 4492 39125

3 Italy 70歲以上 43139 34813 8326

如果是要讀入excel保存的表格那么只要簡單的一行命令:

db1 = pd.read_excel('statistik.xlsx)

第二步,我們開始處理數據

畫圖按照Sankey圖的規則,需要定義節點,邊,流量。

可以理解為兩個數據結構:nodes和links。

在這個案例,所有節點就是:Italy,18歲以下,19-50歲,50-70歲,50-70歲,confirm,Deceased,Active/Recovered

我們用一個字典嵌套的鏈表來儲存:

nodes=[]

for i in range(2):

values = db1.iloc[:,i].unique()

for value in values:

dic={}

dic['name'] = value

nodes.append(dic)

nodes.append({'name':'Deceased'})

nodes.append({'name':'Active/Recovered'})

[{'name': 'Italy'}, {'name': '18歲以下'}, {'name': '19-50歲'},

{'name': '50-70歲'}, {'name': '70歲以上'}, {'name': 'Deceased'},

{'name': 'Active/Recovered'}]

然后定義邊和流量,數據從哪里流向哪里,流量為多少,按照source-target-value的格式保存。我們用循環加字典可以輕松搞定

links = []

for i in db1.values:

dic={}

dic['source']=i[0]

dic['target']=i[1]

dic['value']=i[2]

links.append({'source':i[0],'target':i[1],'value':i[2]})

links.append({'source':i[1],'target':db1.keys()[3],'value':i[3]})

links.append({'source':i[1],'target':db1.keys()[4],'value':i[4]})

print(links)

[{'source': 'Italy', 'target': '18歲以下', 'value': '1677'},

{'source': '18歲以下', 'target': 'Deceased', 'value': '167'},

{'source': '18歲以下', 'target': 'Active/Recovered', 'value': '1510'},

{'source': 'Italy', 'target': '19-50歲', 'value': '31394'},

{'source': '19-50歲', 'target': 'Deceased', 'value': '408'},

{'source': '19-50歲', 'target': 'Active/Recovered', 'value': '30986'},

{'source': 'Italy', 'target': '50-70歲', 'value': '43617'},

{'source': '50-70歲', 'target': 'Deceased', 'value': '4492'},

{'source': '50-70歲', 'target': 'Active/Recovered', 'value': '39125'},

{'source': 'Italy', 'target': '70歲以上', 'value': '43139'},

{'source': '70歲以上', 'target': 'Deceased', 'value': '34813'},

{'source': '70歲以上', 'target': 'Active/Recovered', 'value': '8326'}]

nodes和links定義好了之后,就已經完成了80%

第三步,繪圖

我們可以使用pyecharts的庫來實現,這一段代碼幾乎是固定的格式

from pyecharts.charts import Sankey

from pyecharts import options as opts

pic = (

Sankey().add('',

nodes,

links,

linestyle_opt=opts.LineStyleOpts(opacity = 0.3, curve = 0.5, color = 'source'),

label_opts=opts.LabelOpts(position = 'top'),

node_gap = 30,

)

.set_global_opts(title_opts=opts.TitleOpts(title = '意大利新冠肺炎病患年齡分布'))

)

pic.render('test.html')

好了,到這來大功告成,運行python文件,最后會生成一個test.html。

用瀏覽器打開就可以欣賞做出來的的sankey圖:

在這里插入圖片描述

總結

以上是生活随笔為你收集整理的python 桑基图 地理坐标_【转载】Python数据可视化-实现Sankey桑基图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:python 桑基图 地理坐标_【转载】Python数据可视