如何用Python基于航班数据构建N×N机场邻接矩阵?
基于航班数据构建邻接矩阵的Python实现
问题描述
我有一组包含出发机场、到达机场及航班数量的年度数据,示例如下:
ORIGIN_AIRPORT DESTINATION_AIRPORT Counts 0 ABE ATL 170 1 ABE DTW 154 2 ABE ORD 69 3 ABI DFW 530 4 ABQ ATL 123 ... ... ... ... 4293 XNA MSP 63 4294 XNA ORD 490 4295 YAK CDV 67 4296 YAK JNU 67 4297 YUM PHX 377
需要用Python基于这些数据构建N×N的邻接矩阵,要求两个机场间无航班时对应位置为0,有航班时为1,矩阵样式参考:
邻接矩阵: ABE ABI ABQ ATL DTW ORD DFW ABE 0 0 0 1 1 1 0 ABI 0 0 0 0 0 0 1 ABQ 0 0 0 1 0 0 0 ATL 1 0 1 0 0 0 0 DTW 1 0 0 0 0 0 0 ORD 1 0 0 0 0 0 0 DFW 0 1 0 0 0 0 0 ...
解决方案
完全可以实现,用Python的pandas和numpy库就能快速完成,具体代码如下:
import pandas as pd import numpy as np # 加载数据:如果是本地CSV文件,替换为df = pd.read_csv('你的数据文件路径.csv') # 这里用示例数据模拟 sample_data = { 'ORIGIN_AIRPORT': ['ABE', 'ABE', 'ABE', 'ABI', 'ABQ', 'XNA', 'XNA', 'YAK', 'YAK', 'YUM'], 'DESTINATION_AIRPORT': ['ATL', 'DTW', 'ORD', 'DFW', 'ATL', 'MSP', 'ORD', 'CDV', 'JNU', 'PHX'], 'Counts': [170, 154, 69, 530, 123, 63, 490, 67, 67, 377] } df = pd.DataFrame(sample_data) # 获取所有唯一机场并排序,保证矩阵行/列顺序一致 all_airports = sorted(pd.concat([df['ORIGIN_AIRPORT'], df['DESTINATION_AIRPORT']]).unique()) n = len(all_airports) # 创建机场代码到矩阵索引的映射字典 airport_index = {airport: idx for idx, airport in enumerate(all_airports)} # 初始化全0的N×N邻接矩阵 adjacency_matrix = np.zeros((n, n), dtype=int) # 填充矩阵:存在航班连接则设为1 for _, flight in df.iterrows(): origin_idx = airport_index[flight['ORIGIN_AIRPORT']] dest_idx = airport_index[flight['DESTINATION_AIRPORT']] adjacency_matrix[origin_idx][dest_idx] = 1 # 若需构建无向图(即A→B有航班则B→A也标记为1),取消下方注释 # adjacency_matrix[dest_idx][origin_idx] = 1 # 转换为DataFrame以友好格式输出 adj_df = pd.DataFrame(adjacency_matrix, index=all_airports, columns=all_airports) print("邻接矩阵:") print(adj_df)
代码说明
- 数据处理:用
pandas加载和处理航班数据,兼容CSV文件或已有的DataFrame格式 - 机场索引映射:通过字典将每个机场代码对应到矩阵的索引位置,实现快速定位
- 矩阵初始化与填充:用
numpy创建全0矩阵,遍历航班数据将有连接的位置设为1;如果需要无向图(双向航班均视为连接),只需取消对应行的注释 - 格式输出:转换为DataFrame后,输出格式与需求示例完全匹配,行和列均为机场代码,值为0或1
内容的提问来源于stack exchange,提问作者Tisi
相关产品推荐
相关产品推荐

