# -*- coding: utf-8 -*- # #********************************************************************* # Name: FlightdelaySelect.py # Created: 5/18/2016 # Modified: 6/19/2016 # Created By: Peter McCutcheon # #--------------------------------------------------------------------- # Description: # # This Python script reads the flight data database to obtain the # airports with the greatest flight delay minutes. The program uses # SQL to read the database and generates a bar graph of the 12 airports # with the most delay. # #********************************************************************** import csv import sqlite3 from matplotlib import pyplot as plt # # Connect to the FlightData database and create a cursor for SQL operations. # conn = sqlite3.connect('../data/flightdata.db') curs = conn.cursor() # # Set up a couple of lists to be passed to matplotlib for the bar graph. # airport = [] delay = [] ap_code = [] apinfo = [] tmpHold = [] # # Set up the SQL select statement to get the flight data from the database. # We are going group the data by airport then sum on the departure delay for # airport and to a descending sort on that sum. # selStr = """select a.originairport, a.origin, b.airport_desc, sum(a.departdelay) as dd, count( *) from flightdelay as a, airportid as b where a.originairport = b.airportid group by a.originairport order by dd desc limit 12;""" # # Fire off the actual SQL select. # try: curs.execute(selStr) except Exception as er: print("Sqlite Error " + er.message) # # Read through the rows that were returned from the DB and set up # the lists to pass to matplotlib. # result = curs.fetchall() for row in result: #record = list(row) airport.append(int(row[0])) ap_code.append(row[1]) delay.append(int(row[3])) tmpHold = [row[1], row[2]] apinfo.append(tmpHold) print(airport,delay,ap_code) # # Open a file to write Airport information (three letter code and description) # print(apinfo) with open('../data/apinfofile.txt','wt') as APinfofile: csvout = csv.writer(APinfofile) csvout.writerows(apinfo) # # Set up the objects for the bar graph. On the bar method the arguments are: # 1st: Left side of bar must a list of scalars (numbers) Here we are # counting the number of airports we return. # 2nd: The height of the bars agian a scalar list (numbers). Here we are # using the sum of the airport delay. # 3rd: Width of the individual bars. # 4th: Where to put the bar label. # 5th: The color of the bars. # plt.bar([i for i, _ in enumerate(ap_code)], delay, width=0.4, align='center', color='blue') plt.title("Airport Delay Totals for 01/2016") # # These are the labels for the bars. Called ticks in matplotlib. Here we count # them and pass the list of labels generated by our DB SQL select. # plt.xticks([i for i, _ in enumerate(ap_code)], ap_code) plt.ylabel('Minutes') # # Time to show the actual bar graph. # Then clean everything up. # plt.savefig('../img/delays.png') plt.show() curs.close() conn.close()