チーム研究ノートタスク5:論文著者協会

「お腹を空かせて若くして」

@Datewhale

タスク5:著者情報の関連付け

タスクの説明

  • 学習トピック:著者の関連付け(データモデリングタスク)、論文の著者関係のモデリング、および最も頻繁に発生する著者関係のカウント。
  • 学習内容:著者関係グラフを作成し、著者関係を調査する
  • 学習成果:紙の著者の知識グラフとグラフ関係マイニング

1.データを読み取ります

以前に作成された読み取り専用関数は引き続き使用されます。

import json #读取数据,我们的数据为json格式的
import pandas as pd #数据处理,数据分析
def readFile(path,columns=['id','submitter','authors','title','comments','journal-ref','doi','reeport-no','categories','license','abstract','versions','update_date','author_parsed'],count=None):
    """
    定义本函数用于读取文件,在后续工作中也使用这个函数,比较简便
    参数分别为:
    文件路径、
    读取的列名称(固定值为全部读取)
    读取的行数
    """
    data=[]
    with open(path,'r')as f:
        #enumerate函数将可读取的数据对象转化成有序的各个元组,储存在一个列表中
        for i,line in enumerate(f):
            if i==count:
                break
            d=json.loads(line)
            d={
    
    col:d[col]for col in columns}
            data.append(d)
    data=pd.DataFrame(data)#转化为dataframe模式
    return data
path="D:\\arxiv-metadata-oai-snapshot.json"
data=DateFrame(path,['authors_parsed'],100000)

2.ソーシャルネットワーク分析

まず、このタスクはグラフを使用して作成者間の関係を構築することです。最初にグラフを紹介します(データ構造を学習しました)。
グラフは主に有向グラフと無向グラフに分けられ、各ノードの接続は有向グラフ矢印には方向があります。ここでは、無向グラフ
を使用して統計を実装しています。ここでは、networkxパッケージを使用してグラフを描画します。投稿されたチュートリアルは次のとおりです:
https ://blog.csdn.net/qq_32284189/article/details / 80134768
もちろん、公式文書を読むことも良い選択です。まず、ノードレスの無向グラフを作成します。

import networkx as nx
#创建无向图
G=nx.Graph()
#为这个无向图添加节点,以元祖的形式遍历这个series,并返回前五百行,也就是对前五百个作者进行分析
for row in data.iloc[:500].itertuples():
    #去除index
    authors=row[1]
      #将不同作者分割
    authors=[''.join(x[:-1])for x in authors]
    print(authors)
    #第一个作者与其他作者连接1:
    for author in authors[1:]:
        G.add_edge(authors[0],author)

次に、以下を使用します。

nx.draw(G,with_labels=True)

しかし、この絵を描いてください。ノードが多すぎるため、ここでは表示しませんでした。そこで、最大のUnicomサブグラフを描画する方法を使用して、グラフを描画しました。GreatUnicomサブグラフの概念の説明は次のとおりです。

最大ユニコムサブグラフ:グラフの場合、ノードを追加するそのサブグラフは接続されないことを意味します。これが最大ユニコムサブグラフです。

ここでの最大の接続されたサブグラフは、複数の非常に大きな接続されたサブグラフの中で最も接続されたノードを持つものを指します。

# 绘制节点度值折线图,求出了度最大的节点
degree_sequence = sorted([d for n, d in G.degree()], reverse=True)
dmax = max(degree_sequence)
##用loglog双对数坐标来显示
plt.loglog(degree_sequence, "b-", marker="o")
plt.title("Degree rank plot")
plt.ylabel("degree")
plt.xlabel("rank")

# 画出子图
""" 四个参数分别为相距坐标轴的距离以及子图坐标轴的长度"""
plt.axes([0.45, 0.45, 0.45, 0.45])
#这个操作用于生成G的最大连通子图,这里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()

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_45717055/article/details/113147086