21、网络分析:k_core、k_corona与自我中心网络分析

网络分析:k_core、k_corona与自我中心网络分析

1. k_core与k_corona理解网络层次

在网络分析中,k_core和k_corona是两个非常有用的工具,它们可以帮助我们更好地理解网络的结构和层次。

1.1 k_core的作用

k_core可以帮助我们提取网络的核心部分。以前,去除网络噪声的方法比较繁琐,需要识别度数少于2的节点,将它们添加到列表中,然后从网络中移除。而现在,使用k_core函数可以大大节省时间。以下是绘制带有节点标签的G_core网络的方法:

# 假设已经有了G网络
# 这里代码省略了G的创建过程
# 绘制G_core网络
# 代码示例,实际使用时需要根据具体情况调整
# draw_graph(G_core, show_names=True)
1.2 k_corona的作用

k_corona则用于研究网络的每一层。它不是为了找到核心,而是探究网络每一层中发生的情况。例如,如果我们只想查看具有零条或一条边的节点,可以这样做:

import networkx as nx
# 假设已经有了G网络
G_corona = nx.k_corona(G, 1)

接下来,我们对k_corona的结果进行可视化:

# 假设已经定义了draw_graph函数
draw_graph(G_corona, show_names=False, node_size=2)

这个可视化结果会显示所有具有一条或更少边的节点。没有任何边的节点被称为孤立节点,它们会显示为点。

然而,在这个可视化中,很难识别出那些具有一条边的节点。这时,我们可以使用k_core进行清理:

G_corona = nx.k_corona(G, 1)
G_corona = nx.k_core(G_corona, 1)

再次可视化这个结果,我们可以看到有五个连通组件,每个组件包含两个节点,并且每个节点与该连通组件中的另一个节点有一条边。

draw_graph(G_corona, show_names=True, node_size=5, font_size=12)

如果我们想提取这些节点用于进一步分析,可以这样做:

corona_nodes = list(G_corona.nodes)
print(corona_nodes)

结果可能如下:

['@day6official',
 '@9muses_',
 '@bol4_official',
 '@8_ohmygirl',
 '@withdrama',
 '@elris_official',
 '@hunus_elris',
 '@miiiiiner_misog',
 '@into__universe',
 '@shofarmusic']

我们还可以查看网络的第二层,即每个节点具有两个度数的层:

G_corona = nx.k_corona(G, 2)
draw_graph(G_corona, show_names=True, node_size=3)

这个可视化结果与第一层的k_corona结果非常相似,但我们可以更容易地看到一些节点与其他节点相连,并且这一层的孤立节点明显减少。

下面是一个简单的mermaid流程图,展示了使用k_corona和k_core进行网络分析的步骤:

graph TD;
    A[开始] --> B[创建网络G];
    B --> C[k_corona(G, 1)];
    C --> D[可视化k_corona结果];
    D --> E[k_core(k_corona结果, 1)];
    E --> F[可视化清理后的结果];
    F --> G[提取节点用于进一步分析];
    B --> H[k_corona(G, 2)];
    H --> I[可视化第二层结果];

在实际应用中,虽然个人不常使用k_corona,但它为分析提供了一些有趣的可能性。而k_core在处理网络时几乎每次都会用到,用于去除网络噪声和研究社交网络核心的核。建议大家同时学习这两个工具,但可能k_core的用途会更多一些。

1.3 挑战自我

现在,你已经掌握了使用文本创建网络、构建边列表、创建网络和清理网络的方法,并且对整体网络分析有了初步了解。接下来,你可以思考自己的数据,比如你工作中使用的数据、你参与的社交网络、你合作的工作网络等。考虑如何将这些实际网络用边列表描述(只需要源和目标列),进行网络可视化,并对网络进行分析。你可以使用自己感兴趣的数据进行学习,而不必在网上寻找数据集,你可以自己创建数据集,或者像之前探索的那样抓取社交媒体数据。不妨停下来,花一些时间进行实践,重新阅读之前的内容,尽情探索,享受学习的乐趣。

2. 自我中心网络分析

自我中心网络分析是一种用于研究社交网络中特定人物周围关系的网络分析形式。与查看整个社交网络不同,我们将聚焦于一个个体以及与该个体互动的其他人。

2.1 自我中心网络的概念

自我中心网络分析使用一种更简单的网络形式,称为自我中心网络(ego network)。在自我中心网络中,有两种类型的节点:自我节点(ego)和他者节点(alters)。自我节点是你正在研究的个体的节点,而他者节点是自我中心网络中存在的所有其他节点。例如,如果我基于自己的生活创建一个自我中心网络,我就是自我节点,而我认识的人就是他者节点。如果我想研究在K - pop社交网络中提及或被@spotifykr Twitter账户提及的人,我会为spotifykr创建一个自我中心网络,spotifykr就是自我节点,所有其他节点就是他者节点。

分析和可视化自我中心网络可以让我们深入了解那些在日常生活中可能无法看到或注意到的关系。而且,与整个网络相比,自我中心网络通常更小、更简单,这使得一些原本计算成本较高的算法更容易处理。不过,自我中心网络的复杂度显然会根据个体的受欢迎程度而有所不同,名人影响者的自我中心网络会比普通人的复杂得多。

2.2 自我中心网络分析的用途

自我中心网络分析的用途非常广泛,不仅限于分析社交网络中的人际关系。以下是一些具体的应用场景:
|应用场景|说明|
| ---- | ---- |
|社交网络分析|理解个人周围的关系和社区|
|数据中心分析|绘制生产数据在数据中心的流动|
|软件和数据库分析|研究围绕软件或数据库表的数据流动和过程|
|恶意软件分析|分析恶意软件家族|
|社交媒体分析|理解社交媒体上的信息放大机制|
|供应链分析|检查供应链中的组件|

2.3 分析方法说明

我们将使用一个预构建的NetworkX网络,该网络包含小说《悲惨世界》中的人物关系。这个网络足够大且复杂,同时在各个自我中心网络中可以看到清晰的社区,非常适合用于社交网络分析的实践。

这个NetworkX网络带有权重,权重可以让我们在节点之间绘制更粗的边,表示它们之间的交互更多。但在本次分析中,我们选择去除权重,以便更专注于自我节点周围的他者节点和社区。不过,建议你挑战自己,在实践过程中保留权重,看看这会如何影响网络可视化。

以下是进行自我中心网络分析的步骤:
1. 整体网络检查
python import networkx as nx G = nx.les_miserables_graph() df = nx.to_pandas_edgelist(G)[['source', 'target']] G = nx.from_pandas_edgelist(df) print(nx.info(G)) # 假设已经定义了draw_graph函数 draw_graph(G, font_size=12, show_names=True, node_size=4, edge_width=1)
我们还可以使用k_core去除可视化中度数少于2的节点:
python draw_graph(nx.k_core(G, 2), font_size=12, show_names=True, node_size=4, edge_width=1)
2. 计算PageRank分数
python import pandas as pd pagerank = nx.pagerank(G) pagerank_df = pd.DataFrame(pagerank, index=[0]).T pagerank_df.columns = ['pagerank'] pagerank_df.sort_values('pagerank', inplace=True, ascending=False) print(pagerank_df.head(20)) pagerank_df.head(20).plot.barh(figsize=(12, 8)).invert_yaxis()

接下来,我们将查看四个不同的自我中心网络。首先,我们会对小说中的自我角色有一个简单的了解,但不会深入探讨。然后,我们将分别可视化包含和不包含中心(即去除自我节点)的自我中心网络。去除自我节点后,自我中心网络会变得更简单,甚至可能会分裂成多个部分,这有助于我们识别不同的社区。我们还将识别自我中心网络中存在的他者节点,找出最重要的他者节点,比较四个自我中心网络的密度,并寻找社区以及社区之间的桥梁。

以下是一个mermaid流程图,展示了自我中心网络分析的步骤:

graph TD;
    A[加载预构建网络] --> B[去除权重] --> C[整体网络可视化] --> D[使用k_core清理] --> E[计算PageRank分数] --> F[选择自我节点] --> G[创建自我中心网络] --> H[可视化包含中心的网络] --> I[可视化去除中心的网络] --> J[分析他者节点和社区]

通过以上步骤,我们可以逐步深入了解自我中心网络分析的方法和应用。希望你能在实践中不断探索,发现更多有趣的结果。

网络分析:k_core、k_corona与自我中心网络分析

2.4 查看四个不同的自我中心网络

在完成整体网络检查和PageRank分数计算后,我们接下来将查看四个不同的自我中心网络。下面以具体的操作步骤和代码来展示。

首先,我们需要选择四个不同的自我节点,这里假设我们已经从PageRank分数较高的节点中挑选出了四个节点,分别命名为 ego_node_1 ego_node_2 ego_node_3 ego_node_4

# 假设已经有了网络G和PageRank分数pagerank_df
# 这里简单假设我们手动选择了四个节点
ego_node_1 = pagerank_df.index[0]
ego_node_2 = pagerank_df.index[1]
ego_node_3 = pagerank_df.index[2]
ego_node_4 = pagerank_df.index[3]

ego_nodes = [ego_node_1, ego_node_2, ego_node_3, ego_node_4]

然后,我们对每个自我节点创建自我中心网络,并进行可视化。

for ego_node in ego_nodes:
    # 创建自我中心网络
    ego_network = nx.ego_graph(G, ego_node)

    # 可视化包含中心的自我中心网络
    draw_graph(ego_network, show_names=True, node_size=5, font_size=12)

    # 去除中心(自我节点)
    ego_network_without_center = ego_network.copy()
    ego_network_without_center.remove_node(ego_node)

    # 可视化去除中心的自我中心网络
    draw_graph(ego_network_without_center, show_names=True, node_size=5, font_size=12)

在可视化过程中,我们可以观察到去除自我节点后,自我中心网络的变化。有些网络可能会分裂成多个连通组件,这些组件可以被看作是不同的社区。

接下来,我们将识别每个自我中心网络中存在的他者节点,找出最重要的他者节点,比较四个自我中心网络的密度,并寻找社区以及社区之间的桥梁。

for ego_node in ego_nodes:
    ego_network = nx.ego_graph(G, ego_node)

    # 识别他者节点
    alters = list(ego_network.nodes)
    alters.remove(ego_node)

    # 找出最重要的他者节点(基于PageRank分数)
    alters_pagerank = {alter: pagerank[alter] for alter in alters}
    sorted_alters = sorted(alters_pagerank.items(), key=lambda item: item[1], reverse=True)
    most_important_alter = sorted_alters[0][0]

    # 计算自我中心网络的密度
    density = nx.density(ego_network)

    # 寻找社区(这里简单使用连通组件作为社区)
    communities = list(nx.connected_components(ego_network_without_center))

    # 寻找社区之间的桥梁(这里简单假设连接不同连通组件的边为桥梁)
    bridges = []
    for community1 in communities:
        for community2 in communities:
            if community1 != community2:
                for node1 in community1:
                    for node2 in community2:
                        if G.has_edge(node1, node2):
                            bridges.append((node1, node2))

    print(f"自我节点: {ego_node}")
    print(f"最重要的他者节点: {most_important_alter}")
    print(f"网络密度: {density}")
    print(f"社区数量: {len(communities)}")
    print(f"社区之间的桥梁数量: {len(bridges)}")
    print("-" * 50)

通过以上步骤,我们可以对每个自我中心网络进行详细的分析,了解其结构和特征。

下面是一个表格,总结四个自我中心网络的分析结果:
| 自我节点 | 最重要的他者节点 | 网络密度 | 社区数量 | 社区之间的桥梁数量 |
| ---- | ---- | ---- | ---- | ---- |
| ego_node_1 | … | … | … | … |
| ego_node_2 | … | … | … | … |
| ego_node_3 | … | … | … | … |
| ego_node_4 | … | … | … | … |

2.5 自我中心网络分析总结

自我中心网络分析为我们提供了一种聚焦于特定个体及其周边关系的有效方法。通过将注意力从整个复杂的网络转移到个体及其直接关联的节点上,我们能够更深入地理解个体在网络中的角色和影响力,以及其周边社区的结构和互动模式。

在实际应用中,自我中心网络分析可以帮助我们解决许多实际问题。例如,在社交网络中,我们可以通过分析某个用户的自我中心网络,了解其社交圈子的特点,为个性化推荐、社交影响力评估等提供依据。在商业领域,我们可以分析某个企业的合作伙伴网络,识别重要的合作伙伴,优化供应链和合作策略。

然而,自我中心网络分析也存在一定的局限性。由于它只关注了网络中的局部信息,可能会忽略一些全局的结构和趋势。因此,在进行网络分析时,我们可以结合整体网络分析和自我中心网络分析,以获得更全面的认识。

3. 总结与展望

通过前面的介绍,我们学习了使用k_core和k_corona来理解网络层次,以及自我中心网络分析的方法和应用。k_core和k_corona为我们提供了分析网络核心和各层结构的工具,而自我中心网络分析则让我们能够聚焦于特定个体及其周边关系。

在实际应用中,我们可以根据具体的需求选择合适的分析方法。如果我们想要了解整个网络的宏观结构和核心部分,可以使用k_core进行分析;如果我们想要深入研究网络的各层特征,可以使用k_corona;如果我们关注特定个体及其周边关系,可以使用自我中心网络分析。

未来,随着网络数据的不断增长和复杂程度的提高,网络分析的方法和技术也将不断发展。我们可以期待更多高效、准确的分析算法和工具的出现,帮助我们更好地理解和利用网络数据。同时,网络分析也将在更多领域得到应用,为解决实际问题提供有力的支持。

希望大家能够在实践中不断探索和应用这些方法,发现更多有趣的网络现象和规律。以下是一个简单的列表,总结了我们学习的主要内容和建议:
1. 掌握k_core和k_corona的使用方法,用于网络层次分析。
2. 学会创建和分析自我中心网络,了解个体在网络中的角色和周边社区结构。
3. 在实际应用中,结合整体网络分析和自我中心网络分析,获得更全面的认识。
4. 不断实践和探索,发现更多网络分析的应用场景和有趣结果。

通过以上的学习和实践,相信你已经对网络分析有了更深入的理解和掌握。祝你在网络分析的道路上取得更多的成果!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值