已实现直接引用网络,求Python构建共引与文献耦合网络代码示例
共引(Co-citation)与文献耦合(Bibliographic Coupling)网络构建代码示例
基于你提供的DataFrame结构,以下是两类网络的实现代码:
1. 共引网络(Co-citation Network)
共引网络的节点为被引文献,边代表两篇文献被同一施引文献引用,边权重为共同被引用的次数(无向)。
import pandas as pd import networkx as nx from itertools import combinations from collections import defaultdict # 你的原始数据 data = { 'cited_articles': ['A', 'B', 'C', 'D'], 'citing_articles': [['B', 'C'], ['C'], ['A', 'B', 'D'], ['B']] } df = pd.DataFrame(data) # 构建施引文献 -> 被引文献列表的映射 citing_to_cited = defaultdict(list) for idx, row in df.iterrows(): cited = row['cited_articles'] for citing in row['citing_articles']: citing_to_cited[citing].append(cited) # 统计共引对的出现次数 co_citation_counts = defaultdict(int) for citing, cited_list in citing_to_cited.items(): for pair in combinations(cited_list, 2): sorted_pair = tuple(sorted(pair)) co_citation_counts[sorted_pair] += 1 # 构建共引网络(无向图) co_citation_G = nx.Graph() co_citation_G.add_nodes_from(df['cited_articles']) for (node1, node2), weight in co_citation_counts.items(): co_citation_G.add_edge(node1, node2, weight=weight) # 验证输出 print("共引网络边信息:") for u, v, attrs in co_citation_G.edges(data=True): print(f"{u} <-> {v}, 共引次数: {attrs['weight']}")
2. 文献耦合网络(Bibliographic Coupling Network)
文献耦合网络的节点为施引文献,边代表两篇施引文献引用了相同的被引文献,边权重为共同引用的被引文献数量(无向)。
# 提取所有施引文献节点 all_citing_articles = set() for citing_list in df['citing_articles']: all_citing_articles.update(citing_list) all_citing_articles = list(all_citing_articles) # 构建被引文献 -> 施引文献集合的映射 cited_to_citing = {row['cited_articles']: set(row['citing_articles']) for idx, row in df.iterrows()} # 统计施引文献对的耦合强度 coupling_counts = defaultdict(int) for pair in combinations(all_citing_articles, 2): citing1, citing2 = pair common_cited = 0 for cited, citing_set in cited_to_cited.items(): if citing1 in citing_set and citing2 in citing_set: common_cited += 1 if common_cited > 0: sorted_pair = tuple(sorted(pair)) coupling_counts[sorted_pair] = common_cited # 构建文献耦合网络(无向图) bibliographic_coupling_G = nx.Graph() bibliographic_coupling_G.add_nodes_from(all_citing_articles) for (node1, node2), weight in coupling_counts.items(): bibliographic_coupling_G.add_edge(node1, node2, weight=weight) # 验证输出 print("\n文献耦合网络边信息:") for u, v, attrs in bibliographic_coupling_G.edges(data=True): print(f"{u} <-> {v}, 耦合强度: {attrs['weight']}")
代码说明
- 共引网络:通过反转原始数据的映射关系,统计同一施引文献引用的被引文献对,最终生成带权重的无向图。
- 文献耦合网络:遍历所有施引文献对,计算它们共同引用的被引文献数量,仅保留耦合强度大于0的边。
内容的提问来源于stack exchange,提问作者stackword_0
相关产品推荐
相关产品推荐

