复杂网络分层核心-外围模型分析

        核心-外围结构(Core-Periphery Structure)是用于分析复杂网络的一种重要方法,它将网络中的节点划分为 核心(Core)外围(Periphery),甚至进一步细分为 半核心(Semi-Core)半外围(Semi-Periphery)。以下是基于 Rombach et al. (2014) 提出的分层核心-外围模型(Hierarchical Core-Periphery Model, HCPM)的构造步骤。

结合 E-I Index中心性分析 来探测核心-外围结构,并最终赋值类别(核心=4,半核心=3,半外围=2,外围=1)。

步骤
  1. 计算 E-I Index(外部-内部指数):用于衡量节点的外部连接程度。

  2. 计算中心性指标(如度中心性、介数中心性、PageRank等):用于衡量节点的重要性。

  3. 层次聚类或K-Means:根据 E-I Index 和中心性划分核心-外围类别。

  4. 赋值类别(核心=4,半核心=3,半外围=2,外围=1)

import pandas as pd
import networkx as nx
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

# 读取CSV文件
df = pd.read_csv("C:/Users/15203/Desktop/研究方向/论文相关/老年食谱带用户   zhuyong/food_recipes.csv", engine='python')

# 处理NaN值,去掉包含NaN的行
df = df.dropna(subset=['头实体', '关系', '尾实体'])

# 创建无向图
G = nx.Graph()

# 添加节点和边
for index, row in df.iterrows():
    head = row['头实体']
    relation = row['关系']
    tail = row['尾实体']
    G.add_node(head)
    G.add_node(tail)
    G.add_edge(head, tail, relation=relation)

# 计算 E-I Index(外部-内部指数)
def calculate_ei_index(G):
    ei_index = {}
    for node in G.nodes():
        internal_edges = sum(1 for neighbor in G.neighbors(node) if neighbor in G.nodes())
        external_edges = sum(1 for neighbor in G.neighbors(node) if neighbor not in G.nodes())
        total_edges = internal_edges + external_edges
        ei_index[node] = (external_edges - internal_edges) / total_edges if total_edges > 0 else 0
    return ei_index

ei_index = calculate_ei_index(G)

# 计算中心性指标
degree_centrality = nx.degree_centrality(G)  # 度中心性
betweenness_centrality = nx.betweenness_centrality(G)  # 介数中心性
pagerank = nx.pagerank(G)  # PageRank

# 组合特征
df_features = pd.DataFrame({
    'node': list(G.nodes()),
    'EI_Index': [ei_index[node] for node in G.nodes()],
    'Degree_Centrality': [degree_centrality[node] for node in G.nodes()],
    'Betweenness_Centrality': [betweenness_centrality[node] for node in G.nodes()],
    'PageRank': [pagerank[node] for node in G.nodes()]
})

# 标准化数据
scaler = StandardScaler()
df_features_scaled = scaler.fit_transform(df_features[['EI_Index', 'Degree_Centrality', 'Betweenness_Centrality', 'PageRank']])

# 使用K-Means聚类(分为4类)
kmeans = KMeans(n_clusters=4, random_state=42, n_init=10)
df_features['Cluster'] = kmeans.fit_predict(df_features_scaled)

# 赋值类别(核心=4,半核心=3,半外围=2,外围=1)
cluster_mapping = {0: 4, 1: 3, 2: 2, 3: 1}  # 可根据聚类结果调整
df_features['Core_Periphery'] = df_features['Cluster'].map(cluster_mapping)

# 显示部分结果
print(df_features[['node', 'EI_Index', 'Degree_Centrality', 'Betweenness_Centrality', 'PageRank', 'Core_Periphery']].head(20))

# 保存结果
df_features.to_csv("core_periphery_results.csv", index=False)

赋值规则

分类E-I 指数度中心性赋值
核心4
半核心3
半外围2
外围1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值