You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:35:20