Python3:如何改进以下术语频率算法?

问题描述 投票:0回答:1

我有各种文件,其中有数千行,没有标题。每行的内容具有以下结构:

enter image description here

第一个元素('LGAV')代表始发机场,第二个元素('EGGW')代表目的地机场,这是唯一可使用的相关数据。我的目标是在最繁忙的机场中排名前十。我想将排名存储在具有以下内容的字典中:

'nameAirport':[totalNumberOfMovements,numberTakeOffs,numberLandings]

在numberTakeOffs之后,机场重复作为起点的次数,numberLandings在机场重复重复作为目的地的次数,totalNumberOfMovements之前的计数之和。

例如:

TAKEOFFS:  {'EHAM': 55, 'EGLL': 46, 'LOWW': 44, 'LFPG': 43, 'LTBA': 38, 'EDDF': 37, 'LEMD': 34, 'EKCH': 33, 'EGKK': 31, 'LFPO': 30, ....

LANDINGS:  {'LEMD': 37, 'EDDM': 35, 'LEBL': 34, 'LFPO': 33, 'LFPG': 32, 'EKCH': 29, 'LTBA': 27, 'LSZH': 25, 'ENGM': 25, 'LTFJ': 24, 'LOWW': 23, 'EHAM': 23, ....

FINAL_DICT: {'EHAM': [78,55,23], 'EGLL': [67,46,21], 'LOWW': [67,44, 23], 'LFPG': [75,43, 32], .... 

我对到目前为止的代码不满意,传递最大文件时花费的时间太长。我也不知道如何获得所需的输出数据格式

'nameAirport': [totalNumberOfMovements, numberTakeOffs, numberLandings]

到目前为止的代码:

# Libraries
import pandas as pd
import collections
from itertools import chain
from collections import defaultdict

# START

# Load Data from file
df = pd.read_csv('traffic1day.exp2', header=None, sep=';', usecols=[0,1])

# Dictionary 1 for aircrat takeOffs
# 'LPPD' header for origin airports
takeOffs = df[0].value_counts()
dict_1 = takeOffs.to_dict()
print("TAKEOFFS: ", dict_1)

# Dictionary 2 for aircraft landings
# 'LEMD' header for destination airports
landings  = df[1].value_counts()
dict_2 = landings.to_dict()
print("\nLANDINGS: ", dict_2)

dict_3 = defaultdict(list)

for key, value in chain(dict_1.items(), dict_2.items()):
    dict_3[key].append(value)

# Combine dict_1 and dict_2 keys:values
combined_dict = collections.Counter(dict_3).most_common(10)
print("\n------ Combined dictionary from dict_1 and dict_2 values: 
\n\n",combined_dict)

# Sum values from same key
new_dict = defaultdict(list) 
for key, value in combined_dict:
new_dict[key] = {"Total": sum(value), "T, L": value}  
print("\n------ Sum of values from combined dictionary for each key: 
\n\n", new_dict)
# END
python dictionary count bigdata
1个回答
0
投票

我有点不确定您到底需要什么帮助。您已经添加了标签“ Bigdata”,并且使用了所使用的库,因此您看起来并不像新手。但是,如果我正确理解了您的问题,那么我认为可以这样解决:

def data_loader(filename_as_string):
  try:
     df = pd.read_csv(filename_as_string, sep=';')

  else:
     df = pd.read_csv(filename_as_string, sep=';', header = None)

  return df

由于您只需要前两列,因此您也可以执行以下操作:

df = pd.read_csv('traffic1hour.exp2', sep=';', header = None, usecols=[0,1])

我希望这会有所帮助。如果不是,请让我知道,我将删除我的评论。

© www.soinside.com 2019 - 2024. All rights reserved.