DataWhale数据分析打卡营!最后一天!
开源内容
1. 研究目的
如题,研究arXiv数据集中论文作者的关联,用无向图表示
(这里“关联”主要指共同完成论文,一作二作之类,不包括引用上的关系
在本系列第一篇博客中已经详细介绍过arXiv数据集↓
- Kaggle上的一个数据集,可以理解为计算机领域论文信息库。
- 是一个有很多行的表,每一行代表一篇论文,记录每一篇论文的作者、标签、发表年份等信息。
2. 主要内容
(1)读取数据
只需读取和作者姓名相关的列,由于数据较大可选取前200000条记录
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 = {col : d[col] for col in columns}
data.append(d)
data = pd.DataFrame(data)
return data
data = readArxivFile('arxiv-metadata-oai-snapshot.json', ['id', 'authors_parsed'], 200000)
(2)构建无向图
import networkx as nx
# 创建无向图
G = nx.Graph()
# 只用500篇论文进行构建
for row in data.iloc[:500].itertuples():
authors = row[2]
authors = [' '.join(x[:-1]) for x in authors]
# 第一个作者 与 其他作者链接
for author in authors[1:]:
G.add_edge(authors[0],author) # 添加节点2,3并链接23节点
最后可以得到500簇
(3)构建最大联通子图
(其实这块没太懂,感觉是数了一下重复的边,记为度,但到底是怎么从分散的图变成一张的呢。。。
dmax = max(degree_sequence)
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])
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()