2017-12-13 5 views
1

私は米国の航空会社便のデータセットであるwww.transtats.govからcsvデータセットを取るプログラムを作成しようとしています。私の目標は、最悪の遅延が全体的に発生した空港から、最悪の飛行であることを意味する飛行を見つけることです。これまでのところ私はこれを持っている:私は、フライト番号のリストと、それらのフライト番号からの総遅延のリストを作成し、両者を比較すると、最も高い遅延の合計を持っていた飛行見ることができたことを考えていたこれらのデータセットをcsvと比較するにはどうすればよいですか? Python 2.7

`import csv 
    with open('826766072_T_ONTIME.csv') as csv_infile: #import and open CSV 
    reader = csv.DictReader(csv_infile) 
    total_delay = 0 
    flight_count = 0 
    flight_numbers = [] 
    delay_totals = [] 
    dest_list = [] #create empty list of destinations 
    for row in reader: 
     if row['ORIGIN'] == 'BOS': #only take flights leaving BOS 
      if row['FL_NUM'] not in flight_numbers: 
       flight_numbers.append(row['FL_NUM']) 
      if row['DEST'] not in dest_list: #if the dest is not already in the list 
       dest_list.append(row['DEST']) #append the dest to dest_list 
    for number in flight_numbers: 
     for row in reader: 
      if row['ORIGIN'] == 'BOS': #for flights leaving BOS 
       if row['FL_NUM'] == number: 
        if float(row['CANCELLED']) < 1: #if the flight is not cancelled 
         if float(row['DEP_DELAY']) >= 0: #and the delay is greater or equal to 0 (some flights had negative delay?) 
          total_delay += float(row['DEP_DELAY']) #add time of delay to total delay 
          flight_count += 1 #add the flight to total flight count 
    for row in reader: 
     for number in flight_numbers: 
       delay_totals.append(sum(row['DEP_DELAY']))` 

。 2つのリストを比較する最良の方法は何ですか?

+0

比較したいリストの例を表示できますか。これはあなたや他の人たちが簡単な解決法を見つけるのに役立ちます。 – Phil

+0

統計的には、1回の飛行遅延が非常に短い場合であっても、より頻繁な飛行では合計遅延が長くなる可能性があるため、合計遅延を計算する問題があります。合計の代わりに平均することができますか? –

+0

それは本当です。私は、各便名のために、より多くのまたはより少ない便を考慮に入れるために平均遅延を計算しなければなりません。平均的には、私はまだ合計が必要で、フライト数を合計し、単純な合計遅延/合計フライトを正確に行いますか? –

答えて

0

非常に簡単な解決策があります。二つの新しい変数を追加:

max_delay = 0 
delay_flight = 0 
# Change: if float(row['DEP_DELAY']) >= 0: FOR: 
if float(row['DEP_DELAY']) > max_delay: 
    max_delay = float(row['DEP_DELAY']) 
    delay_flight = #save the row number or flight number for reference. 
+1

また、max_delay = sum(float(row ['DEP_DELAY'])))を実行できますか?各フライト番号には複数の遅延が関連付けられており、それらの遅延の合計を取得したいと考えています。 –

+0

できます。合計遅延を計算することが推奨されます。これは、max_delayと比較して一時変数に格納します。また、max_delayの値を大きく更新するとします。 –

2

私は私が正しくあなたを理解すればわからないんだけど、私はあなたが鍵を'FL_NUM'であり、値が全体の遅延で、この目的のためにdictを使うべきだと思います。

1

一般に、私はPythonコードでループを取り除きたいと思います。大量ではないファイルの場合、通常はデータファイルを一度読み込み、最後に解析できるdictを構築します。私は元のデータを持っていないが、私が使用する一般的なパターンに従うので、以下のコードはテストされていません。

出発地、目的地、フライト番号で便が識別されるので、私はそれらをtupleとして取得し、それを私のdictのキーとして使用します。

from collections import defaultdict 
flight_delays = defaultdict(list) # look this up if you aren't familiar 
for row in reader: 
    if row['ORIGIN'] == 'BOS': #only take flights leaving BOS 
     if row['CANCELLED'] > 0: 
      flight = (row['ORIGIN'], row['DEST'], row['FL_NUM']) 
      flight_delays[flight].append(float(row['DEP_DELAY'])) 


# Finished reading through data, now I want to calculate average delays 
worst_flight = "" 
worst_delay = 0 
for flight, delays in flight_delays.items(): 
    average_delay = sum(delays)/len(delays) 
    if average_delay > worst_delay: 
     worst_flight = flight[0] + " to " + flight[1] + " on FL#" + flight[2] 
     worst_delay = average_delay 
関連する問題