資料分析學習(五)

2021-10-17 14:25:02 字數 2806 閱讀 7393

學習主題:作者關聯(資料建模任務),對**作者關係進行建模,統計最常出現的作者關係;

學習內容:構建作者關係圖,挖掘作者關係

學習成果:**作者知識圖譜、圖關係挖掘

將作者列表進行處理,並完成統計。具體步驟如下:

將**第一作者與其他作者(**非第一作者)構建圖;

使用圖演算法統計圖中作者與其他作者的聯絡;

圖是複雜網路研究中的乙個重要概念。graph是用點和線來刻畫離散事物集合中的每對事物間以某種方式相聯絡的數學模型。graph在現實世界中隨處可見,如交通運輸圖、旅遊圖、流程圖等。利用圖可以描述現實生活中的許多事物,如用點可以表示交叉口,點之間的連線表示路徑,這樣就可以輕而易舉的描繪出乙個交通運輸網路。

無向圖,忽略了兩節點間邊的方向。

指有向圖,考慮了邊的有向性。

多重無向圖,即兩個結點之間的邊數多於一條,又允許頂點通過同一條邊和自己關聯。

度:是指和該節點相關聯的邊的條數,又稱關聯度。對於有向圖,節點的入度 是指進入該節點的邊的條數;節點的出度是指從該節點出發的邊的條數;

迪傑斯特拉路徑:.從乙個源點到其它各點的最短路徑,可使用迪傑斯特拉演算法來求最短路徑;

連通圖:在乙個無向圖 g 中,若從頂點i到頂點j有路徑相連,則稱i和j是連通的。如果 g 是有向圖,那麼連線i和j的路徑中所有的邊都必須同向。如果圖中任意兩點都是連通的,那麼圖被稱作連通圖。如果此圖是有向圖,則稱為強連通圖。

import json 

import pandas as pd

import matplotlib.pyplot as plt

import networkx as nx

def readarxivfile(path, columns=['id', 'submitter', 'authors', 'title', 'comments', 'journal-ref', 'doi',

'report-no', 'categories', 'license', 'abstract', 'versions',

'update_date', 'authors_parsed'], count=none):

'''定義讀取檔案的函式

path: 檔案路徑

columns: 需要選擇的列

count: 讀取行數

'''data =

with open(path, 'r') as f:

for idx, line in enumerate(f):

if idx == count:

break

d = json.loads(line)

d =

data = pd.dataframe(data)

return data

data = readarxivfile('arxiv-metadata-oai-snapshot.json',

['id', 'authors_parsed'],

200000)

# 建立無向圖

g = nx.graph()

# 只用五篇**進行構建

for row in data.iloc[:5].itertuples():

authors = row[2]

authors = [' '.join(x[:-1]) for x in authors]

# print(authors)

# 第乙個作者 與 其他作者鏈結

for author in authors[1:]:

g.add_edge(authors[0],author)

# 將作者關係圖進行繪製:

nx.draw(g, with_labels=true)

plt.show()

try:

print(nx.dijkstra_path(g, 'dugmore b.', 'ntumba pp.'))

print(nx.dijkstra_path(g, 'zhang l. m.', 'klaassen p. d'))

except:

print('no path')

#### result ####

['dugmore b.', 'ntumba pp.']

no path

# g.degree() 獲得節點的邊數

degree_sequence = sorted([d for n, d in g.degree()], reverse=true)

dmax = max(degree_sequence)

# 雙對數座標圖logy-logx

plt.loglog(degree_sequence, "b-", marker="o")

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])

# nx.connected_components() 找到所有的連通子圖

gcc = g.subgraph(sorted(nx.connected_components(g), key=len, reverse=true)[0])

pos = nx.spring_layout(gcc)

plt.axis("off")

nx.draw_networkx_nodes(gcc, pos, node_size=20)

nx.draw_networkx_edges(gcc, pos, alpha=0.4)

plt.show()

資料分析(五)

週末,終於閒了下來。突然想起資料分析的知識還沒整理完。好吧,廢話就不多說了,我們繼續總結相關的知識點。前面學了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...