利用Python將社交網(wǎng)絡(luò)進(jìn)行可視化
前言:
我們平常會(huì)使用很多社交媒體,如微信、微博、抖音等等,在這些平臺(tái)上面,我們會(huì)關(guān)注某些KOL,同時(shí)自己身邊的親朋好友也會(huì)來(lái)關(guān)注我們,成為我們自己的粉絲。慢慢地,關(guān)注和粉絲隨著時(shí)間不斷累積,這層關(guān)系網(wǎng)絡(luò)也會(huì)不斷地壯大,很多信息也是通過(guò)這樣的關(guān)系網(wǎng)絡(luò)不斷向外傳播。因此,分析這些社交網(wǎng)絡(luò)對(duì)于我們做出各項(xiàng)決策來(lái)說(shuō)也是至關(guān)重要的。
今天我們就用一些Python的第三方庫(kù)來(lái)進(jìn)行社交網(wǎng)絡(luò)的可視化

數(shù)據(jù)來(lái)源
本案例用的數(shù)據(jù)是來(lái)自領(lǐng)英(Linkedin)的社交關(guān)系數(shù)據(jù)。由于作者之前在美國(guó)讀書(shū),并且在國(guó)外找實(shí)習(xí)、找工作,都是通過(guò)領(lǐng)英投遞簡(jiǎn)歷、聯(lián)系同事等,久而久之也逐漸地形成了自己的社交網(wǎng)絡(luò),將這部分的社交數(shù)據(jù)下載下來(lái),然后用pandas模塊讀取

由于涉及隱私信息,數(shù)據(jù)就不便提供了。如果你有領(lǐng)英賬號(hào),可以通過(guò)設(shè)置里的“獲取資料副本”導(dǎo)出這樣一份CSV關(guān)系數(shù)據(jù)?;蛘咭部梢园凑者@個(gè)表頭自己生成一份假數(shù)據(jù):

數(shù)據(jù)的讀取和清洗
首先導(dǎo)入需要用到的模塊:
import?pandas?as?pd import?janitor import?datetime from?IPython.core.display?import?display,?HTML from?pyvis?import?network?as?net import?networkx?as?nx
讀取所需要用到的數(shù)據(jù)集:
df_ori?=?pd.read_csv("Connections.csv",?skiprows=3)
df_ori.head()接下來(lái)我們進(jìn)行數(shù)據(jù)的清洗,具體的思路就是將空值去除掉,并且數(shù)據(jù)集當(dāng)中的“Connected on”這一列,內(nèi)容是日期,但是數(shù)據(jù)類型卻是字符串,因此我們也需要將其變成日期格式。
df?=?(
????df_ori
????.clean_names()?#?去除掉字符串中的空格以及大寫變成小寫
????.drop(columns=['first_name',?'last_name',?'email_address'])?#?去除掉這三列
????.dropna(subset=['company',?'position'])?#?去除掉company和position這兩列當(dāng)中的空值
????.to_datetime('connected_on',?format='%d?%b?%Y')
??)輸出:
company position connected_on
0 xxxxxxxxxx Talent Acquisition 2021-08-15
1 xxxxxxxxxxxx Associate Partner 2021-08-14
2 xxxxx 獵頭顧問(wèn) 2021-08-14
3 xxxxxxxxxxxxxxxxxxxxxxxxx Consultant 2021-07-26
4 xxxxxxxxxxxxxxxxxxxxxx Account Manager 2021-07-19
數(shù)據(jù)的分析與可視化
來(lái)看一下這些人脈中,分別都是在哪些公司工作的
df['company'].value_counts().head(10).plot(kind="barh").invert_yaxis()
輸出:

再來(lái)看一下我的人脈網(wǎng)絡(luò)中,大多都是什么職業(yè)的
df['position'].value_counts().head(10).plot(kind="barh").invert_yaxis()
輸出:

接下來(lái)我們繪制社交網(wǎng)絡(luò)的可視化圖表。但是在這之前呢,需要先說(shuō)明幾個(gè)術(shù)語(yǔ),每一個(gè)社交網(wǎng)絡(luò)都包含:
- 節(jié)點(diǎn):社交網(wǎng)絡(luò)當(dāng)中的每個(gè)參與者
- 邊:代表著每一個(gè)參與者的關(guān)系以及關(guān)系的緊密程度
我們先來(lái)簡(jiǎn)單的繪制一個(gè)社交網(wǎng)絡(luò),主要用到的是networkx模塊以及pyvis模塊,
g?=?nx.Graph() g.add_node(0,?label?=?"root")?#?intialize?yourself?as?central?node g.add_node(1,?label?=?"Company?1",?size=10,?title="info1") g.add_node(2,?label?=?"Company?2",?size=40,?title="info2") g.add_node(3,?label?=?"Company?3",?size=60,?title="info3")
我們先是建立了4個(gè)節(jié)點(diǎn),也分別給他們命名,其中的參數(shù)size代表著節(jié)點(diǎn)的大小,然后我們將這些個(gè)節(jié)點(diǎn)相連接
g.add_edge(0,?1) g.add_edge(0,?2) g.add_edge(0,?3)
最后出來(lái)的樣子如下圖:

我們先從人脈中,他們所屬的公司來(lái)進(jìn)行網(wǎng)絡(luò)的可視化,首先我們對(duì)所屬的公司做一個(gè)統(tǒng)計(jì)排序
df_company?=?df['company'].value_counts().reset_index() df_company.columns?=?['company',?'count'] df_company?=?df_company.sort_values(by="count",?ascending=False) df_company.head(10)
輸出:
company count
0 Amazon xx
1 Google xx
2 Facebook xx
3 Stevens Institute of Technology xx
4 Microsoft xx
5 JPMorgan Chase & Co. xx
6 Amazon Web Services (AWS) xx
9 Apple x
10 Goldman Sachs x
8 Oracle x
然后我們來(lái)繪制社交網(wǎng)絡(luò)的圖表:
#?實(shí)例化網(wǎng)絡(luò)
g?=?nx.Graph()
g.add_node('myself')?#?將自己放置在網(wǎng)絡(luò)的中心
#?遍歷數(shù)據(jù)集當(dāng)中的每一行
for?_,?row?in?df_company_reduced.iterrows():
????#?將公司名和統(tǒng)計(jì)結(jié)果賦值給新的變量
????company?=?row['company']
????count?=?row['count']
????title?=?f"<b>{company}</b>?–?{count}"
????positions?=?set([x?for?x?in?df[company?==?df['company']]['position']])
????positions?=?''.join('<li>{}</li>'.format(x)?for?x?in?positions)
????position_list?=?f"<ul>{positions}</ul>"
????hover_info?=?title?+?position_list
????g.add_node(company,?size=count*2,?title=hover_info,?color='#3449eb')
????g.add_edge('root',?company,?color='grey')
#?生成網(wǎng)絡(luò)圖表
nt?=?net.Network(height='700px',?width='700px',?bgcolor="black",?font_color='white')
nt.from_nx(g)
nt.hrepulsion()
nt.show('company_graph.html')
display(HTML('company_graph.html'))輸出:

同樣,我們?cè)賮?lái)可視化一下人脈中各種崗位的分布。
先做一個(gè)統(tǒng)計(jì)排序:
df_position?=?df['position'].value_counts().reset_index() df_position.columns?=?['position',?'count'] df_position?=?df_position.sort_values(by="count",?ascending=False) df_position.head(10)
輸出:
position count
0 Software Engineer xx
1 Data Scientist xx
2 Senior Software Engineer xx
3 Data Analyst xx
4 Senior Data Scientist xx
5 Software Development Engineer xx
6 Software Development Engineer II xx
7 Founder xx
8 Data Engineer xx
9 Business Analyst xx
然后進(jìn)行網(wǎng)絡(luò)圖的繪制
g?=?nx.Graph()
g.add_node('myself')?#?將自己放置在網(wǎng)絡(luò)的中心
for?_,?row?in?df_position_reduced.iterrows():
????#?將崗位名和統(tǒng)計(jì)結(jié)果賦值給新的變量
????position?=?row['position']
????count?=?row['count']
????title?=?f"<b>{position}</b>?–?{count}"
????positions?=?set([x?for?x?in?df[position?==?df['position']]['position']])
????positions?=?''.join('<li>{}</li>'.format(x)?for?x?in?positions)
????position_list?=?f"<ul>{positions}</ul>"
????hover_info?=?title?+?position_list
????g.add_node(position,?size=count*2,?title=hover_info,?color='#3449eb')
????g.add_edge('root',?position,?color='grey')
#?生成網(wǎng)絡(luò)圖表
nt?=?net.Network(height='700px',?width='700px',?bgcolor="black",?font_color='white')
nt.from_nx(g)
nt.hrepulsion()
nt.show('position_graph.html')輸出:

到此這篇關(guān)于利用Python將社交網(wǎng)絡(luò)進(jìn)行可視化的文章就介紹到這了,更多相關(guān) Python 可視化 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用python?AI快速比對(duì)兩張人臉圖像及遇到的坑
這篇文章主要介紹了如何使用python?AI快速比對(duì)兩張人臉圖像?實(shí)現(xiàn)過(guò)程比較簡(jiǎn)單,但是第三方python依賴的安裝過(guò)程較為曲折,下面是通過(guò)實(shí)踐對(duì)比總結(jié)出來(lái)的能夠支持的幾個(gè)版本,避免大家踩坑,需要的朋友可以參考下2023-02-02
在keras中model.fit_generator()和model.fit()的區(qū)別說(shuō)明
這篇文章主要介紹了在keras中model.fit_generator()和model.fit()的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
Python鼠標(biāo)事件及坐標(biāo)獲取窗口和屏幕坐標(biāo)
這篇文章主要介紹了Python編程中如何通過(guò)鼠標(biāo)事件及坐標(biāo)獲取窗口坐標(biāo)和屏幕坐標(biāo)的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
python導(dǎo)入不同目錄下的自定義模塊過(guò)程解析
這篇文章主要介紹了python導(dǎo)入不同目錄下的自定義模塊過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Python 使用 multiprocessing 模塊創(chuàng)建進(jìn)程池的操作方法
在現(xiàn)代計(jì)算任務(wù)中,尤其是處理大量數(shù)據(jù)或計(jì)算密集型任務(wù)時(shí),使用并行處理可以顯著提升程序性能,Python的multiprocessing模塊提供了創(chuàng)建進(jìn)程池的功能,通過(guò)預(yù)先創(chuàng)建的進(jìn)程來(lái)并發(fā)執(zhí)行任務(wù),避免了頻繁的進(jìn)程創(chuàng)建和銷毀,感興趣的朋友一起看看吧2024-10-10
Python實(shí)現(xiàn)線程池工作模式的案例詳解
這篇文章給大家介紹Python實(shí)現(xiàn)線程池工作模式的相關(guān)知識(shí),本文基于Socket通信方法,自定義數(shù)據(jù)交換協(xié)議,圍繞蘋果樹(shù)病蟲(chóng)害識(shí)別需求,迭代構(gòu)建了客戶機(jī)/服務(wù)器模式的智能桌面App,感興趣的朋友跟隨小編一起看看吧2022-06-06
通過(guò)python連接Linux命令行代碼實(shí)例
這篇文章主要介紹了通過(guò)python連接Linux命令行代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02

