採用知識點:圖論
所用python庫:networkx
networkx的一些操作
• 學習主題:作者關聯(資料建模任務),對**作者關係進行建模,統計最常出現的作者關係;
• 學習內容:構建作者關係圖,挖掘作者關係
• 學習成果:**作者知識圖譜、圖關係挖掘
將作者列表進行處理,並完成統計。具體步驟如下:
• 將**第一作者與其他作者(**非第一作者)構建圖;
• 使用圖演算法統計圖中作者與其他作者的聯絡;
圖是複雜網路研究中的乙個重要概念。graph是用點和線來刻畫離散事物集合中的每對事物間以某種方式相聯絡的數學模型。graph在現實世界中隨處可見,如交通運輸圖、旅遊圖、流程圖等。利用圖可以描述現實生活中的許多事物,如用點可以表示交叉口,點之間的連線表示路徑,這樣就可以輕而易舉的描繪出乙個交通運輸網路。
• 無向圖,忽略了兩節點間邊的方向。
• 指有向圖,考慮了邊的有向性。
• 迪傑斯特拉路徑:.從乙個源點到其它各點的最短路徑,可使用迪傑斯特拉演算法來求最短路徑;
• 連通圖:在乙個無向圖 g 中,若從頂點i到頂點j有路徑相連,則稱i和j是連通的。如果 g 是有向圖,那麼連線i和j的路徑中所有的邊都必須同向。如果圖中任意兩點都是連通的,那麼圖被稱作連通圖。如果此圖是有向圖,則稱為強連通圖。
對於其他圖演算法,可以在networkx和igraph兩個庫中找到。
匯入所用包
# 匯入所需的package
import json #讀取資料,我們的資料為json格式的
import pandas as pd #資料處理,資料分析
import matplotlib.pyplot as plt #畫圖工具
#python複雜網路分析庫networkx
import networkx as nx
匯入資料
data =
with
open
("e:/datawhale資料分析/arxiv-metadata-oai-2019.json"
,'r'
)as f:
for idx, line in
enumerate
(f):
d = json.loads(line)
d =data = pd.dataframe(data)
#將list變為dataframe格式,方便用pandas進行分析
data.shape
簡單觀察一下圖的結構
# 建立無向圖
g = nx.graph(
)# 只用五篇**進行構建
for row in data.iloc[:5
].itertuples():
#itertuple遍歷為元組
#authors = row[1]
authors =
[' '
.join(x[:-
1])for x in authors]
# 第乙個作者 與 其他作者鏈結
for author in authors[1:
]:g.add_edge(authors[0]
,author)
# 新增節點2,3並鏈結23節點
#繪製作者關係圖:
nx.draw(g, with_labels=
true
)
iterrows(): 將dataframe迭代為(in***, series)對。得到作者之間的最短路徑itertuples(): 將dataframe迭代為元祖。
iteritems(): 將dataframe迭代為(列名, series)對
.itertuples()函式介紹
try
:print
(nx.dijkstra_path(g,
'balázs c.'
,'ziambaras eleni'))
except
:print
('no path'
)
nx.dijkstra_path(g, source, target, weight=『weight』)會返回乙個從源節點到目標節點之間最短路徑的節點序列列表
# 建立無向圖
g = nx.graph(
)# 只用五篇**進行構建
for row in data.iloc[
:500
].itertuples():
#itertuple遍歷為元組
#authors = row[1]
authors =
[' '
.join(x[:-
1])for x in authors]
# 第乙個作者 與 其他作者鏈結
for author in authors[1:
]:g.add_edge(authors[0]
,author)
# 新增節點2,3並鏈結23節點
# 計算**關係中有多少個聯通子圖
print
(len
(nx.communicability(g)))
degree_sequence =
sorted
([d for n,d in g.degree()]
,reverse=
true
)#g.degree返回的是乙個以節點為鍵的字典
plt.loglog(degree_sequence,
"b-"
, marker=
"o")
# loglog 函式畫出logy和logx的曲線,對數座標可以清楚地看到較小值時的變化。
plt.title(
"degree rank plot"
)plt.ylabel(
"degree"
)plt.xlabel(
"rank"
)# draw graph in inset
plt.axes(
[0.45
,0.45
,0.45
,0.45])
#建立乙個子畫布,前兩個值為新畫布原點的位置,後兩個引數為新畫布各軸的長度
gcc = g.subgraph(
sorted
(nx.connected_components(g)
, key=
len, reverse=
true)[
0])# nx.connected_components(g)返回列表形式的g的全連通分量,也就是聯通子圖
# sorted再根據長度len對所有聯通子圖的列表進行排序,再取出最長的列表
# graph.subgraph(nodes)根據所給節點,返回原圖上的子圖
pos = nx.spring_layout(gcc)
# 用fruchterman-reingold演算法排列節點(樣子類似多中心放射狀)
plt.axis(
"off"
)#只顯示圖不顯示畫布
資料分析(五)
週末,終於閒了下來。突然想起資料分析的知識還沒整理完。好吧,廢話就不多說了,我們繼續總結相關的知識點。前面學了series和dataframe,今天我們先說說他們的運算 重要 使用python操作符 以行為單位操作,對所有行都有效。類似於numpy中二維陣列與一維陣列的運算,但可能出現nan 使用p...
資料分析(五)
對比分析,分組分析,矩陣關聯分析,邏輯樹分析,漏斗分析法 使用場景是用來判斷某個資料是好還是壞,以及判斷某幾個資料時間的差異性。對比分析案例 時間,空間 不同時間分組 日 周 月 年 不同產品型別分組 產品屬性,產品區域 不同使用者型別分組 人口屬性 性別 年齡 客戶價值,消費頻次 不同渠道分組 線...
資料分析處理(五)
id點菜次數最多 import numpy as np import pandas as pd 匯入pandas用於 操作 import xlrd 匯入xlrd用於獲取乙個 裡多個sheet from matplotlib import pyplot as plt 匯入pyplot用於繪圖 from...