import pandas as pd import networkx as nx # 读取数据 data = pd.read_excel('附件1.xlsx') # 构建有向图 G = nx.DiGraph() for _, row in data.iterrows(): source = row['发货城市'] target = row['收货城市'] weight = row['快递数量'] if not G.has_edge(source, target): G.add_edge(source, target, weight=weight) else: G[source][target]['weight'] += weight # 计算节点的入度和出度 in_degree = dict(G.in_degree(weight='weight')) out_degree = dict(G.out_degree(weight='weight')) # 归一化处理 total_in = sum(in_degree.values()) total_out = sum(out_degree.values()) for node in G.nodes(): if total_in > 0: in_degree[node] /= total_in if total_out > 0: out_degree[node] /= total_out # 计算 PageRank 值 pr = nx.pagerank(G, weight='weight') # 排序输出结果 result = sorted(pr.items(), key=lambda x: x[1], reverse=True)[:5] for i, (node, score) in enumerate(result): print(f'{i+1}. {node} ({score:.4f})')
时间: 2024-03-29 19:36:43 浏览: 74
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
这段代码是使用 Python 的 pandas 和 networkx 库读取 Excel 中的数据,构建有向图,并进行 PageRank 计算,最后输出 PageRank 值最高的前五个节点。
具体步骤如下:
1. 读取 Excel 中的数据,存储在一个 pandas 的 DataFrame 中。
2. 构建有向图,使用 DiGraph() 函数创建一个有向图对象 G。
3. 遍历 DataFrame 中的每一行数据,将发货城市和收货城市作为有向图中的节点,将快递数量作为边的权重。
4. 如果有向图中不存在该边,则添加该边并设置权重为当前的快递数量;否则,将该边的权重加上当前的快递数量。
5. 计算每个节点的入度和出度,使用 in_degree() 和 out_degree() 函数分别计算每个节点的入度和出度,并将权重归一化处理。
6. 计算 PageRank 值,使用 pagerank() 函数计算有向图中每个节点的 PageRank 值,并将权重设置为边的权重。
7. 排序输出结果,使用 sorted() 函数对 PageRank 值进行排序,并输出 PageRank 值最高的前五个节点及其对应的值。
总的来说,这段代码可以用于分析快递运输网络中的节点重要性,找出最重要的节点,以便进行优化和改进。
阅读全文