<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前言:
我們平常會使用很多社交媒體,如微信、微博、抖音等等,在這些平臺上面,我們會關注某些KOL,同時自己身邊的親朋好友也會來關注我們,成為我們自己的粉絲。慢慢地,關注和粉絲隨著時間不斷累積,這層關係網路也會不斷地壯大,很多資訊也是通過這樣的關係網路不斷向外傳播。因此,分析這些社群網路對於我們做出各項決策來說也是至關重要的。
今天我們就用一些Python
的第三方庫來進行社群網路的視覺化
本案例用的資料是來自領英(Linkedin)的社交關係資料。由於作者之前在美國讀書,並且在國外找實習、找工作,都是通過領英投遞簡歷、聯絡同事等,久而久之也逐漸地形成了自己的社群網路,將這部分的社交資料下載下來,然後用pandas
模組讀取
由於涉及隱私資訊,資料就不便提供了。如果你有領英賬號,可以通過設定裡的“獲取資料副本”匯出這樣一份CSV關係資料。或者也可以按照這個表頭自己生成一份假資料:
首先匯入需要用到的模組:
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
讀取所需要用到的資料集:
df_ori = pd.read_csv("Connections.csv", skiprows=3) df_ori.head()
接下來我們進行資料的清洗,具體的思路就是將空值去除掉,並且資料集當中的“Connected on”這一列,內容是日期,但是資料型別卻是字串,因此我們也需要將其變成日期格式。
df = ( df_ori .clean_names() # 去除掉字串中的空格以及大寫變成小寫 .drop(columns=['first_name', 'last_name', 'email_address']) # 去除掉這三列 .dropna(subset=['company', 'position']) # 去除掉company和position這兩列當中的空值 .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 獵頭顧問 2021-08-14
3 xxxxxxxxxxxxxxxxxxxxxxxxx Consultant 2021-07-26
4 xxxxxxxxxxxxxxxxxxxxxx Account Manager 2021-07-19
來看一下這些人脈中,分別都是在哪些公司工作的
df['company'].value_counts().head(10).plot(kind="barh").invert_yaxis()
輸出:
再來看一下我的人脈網路中,大多都是什麼職業的
df['position'].value_counts().head(10).plot(kind="barh").invert_yaxis()
輸出:
接下來我們繪製社群網路的視覺化圖表。但是在這之前呢,需要先說明幾個術語,每一個社群網路都包含:
我們先來簡單的繪製一個社群網路,主要用到的是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個節點,也分別給他們命名,其中的引數size
代表著節點的大小,然後我們將這些個節點相連線
g.add_edge(0, 1) g.add_edge(0, 2) g.add_edge(0, 3)
最後出來的樣子如下圖:
我們先從人脈中,他們所屬的公司來進行網路的視覺化,首先我們對所屬的公司做一個統計排序
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
然後我們來繪製社群網路的圖表:
# 範例化網路 g = nx.Graph() g.add_node('myself') # 將自己放置在網路的中心 # 遍歷資料集當中的每一行 for _, row in df_company_reduced.iterrows(): # 將公司名和統計結果賦值給新的變數 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') # 生成網路圖表 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'))
輸出:
同樣,我們再來視覺化一下人脈中各種崗位的分佈。
先做一個統計排序:
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
然後進行網路圖的繪製
g = nx.Graph() g.add_node('myself') # 將自己放置在網路的中心 for _, row in df_position_reduced.iterrows(): # 將崗位名和統計結果賦值給新的變數 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') # 生成網路圖表 nt = net.Network(height='700px', width='700px', bgcolor="black", font_color='white') nt.from_nx(g) nt.hrepulsion() nt.show('position_graph.html')
輸出:
到此這篇關於利用Python將社群網路進行視覺化的文章就介紹到這了,更多相關 Python 視覺化 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45