Skip to content

Instantly share code, notes, and snippets.

@lucasverra
Last active July 14, 2017 16:29
Show Gist options
  • Save lucasverra/399c4e710501df1a10ffcec0e5a6664f to your computer and use it in GitHub Desktop.
Save lucasverra/399c4e710501df1a10ffcec0e5a6664f to your computer and use it in GitHub Desktop.
Project: Airlines departure delays (day average) by year [2006-2008]

Make Effective Data Visualization Project

Data Story

Due to a new entrepreneurial adventure related to airlines passengers experiences, I wanted to have an insight on traffic departure delays.

In that regard, I took the data from the US “Research and Innovative Technology Administration ” (RITA) data base From a customer point of view, I did not care about the different types of delays (CarrierDelay, WeatherDelay, NASDelay, SecurityDelay, LateAircraftDelay) so I aggregated (by sum) all of them into one variable : TotalDalay.

The questions I wanted to find an answer to where:

  • What is considered normal regarding departure delays ?
  • Is there a clear best/worst in class when comparing airlines regarding the specifics of departure delays ?

The main finding according to the vizualisation: During 2006-2008 period, for the 8 airlines arbitrarely chosen, I can not deferentiate a "better/worst airline" regarding average daily departures delays.

The 'Average daily departures delays' distribution was introduced (instead of 'just' departure delays distribution) because of a technical constraint : rendering that much data using the browser would certainly crash it.

The main question that arise is : is the distribution of average daily departures delays a suitable veriable to evaluate passenger experience ?

  • Summary :

    • Originally I wanted to represent the evolution through time of flights departures delays by airlines, representing all departures from a specific airline by boxplots. My main drive was to compare airlines, looking for a worst "customer experience" airline, assuming all passengers do not like departure delays.

      - Airlines chosen for this visualization : AA American Airlines; CO Continental; DL Delta Airlines; NW Northwest Airlines; OH Comair; OO Skywest Airlines; UA United Airlines; US US Airways      
      
    • The visualization centers on the distribution of average day delays by airline and by year.

    • Information on United State flight delays and performance comes from RITA.

    • First approach was to make a visualization of all the actual distrubution of delays (every flight would be a data point)

    • However, after mutiple interactions with Udacity's tutor (TY @Myle : thread), I realized that the representating the distribution of all the flights (delayed or not) would NOT be a suitable application for an in browser renderization. There was simply too much data and the heavy lifting should be done server side.

  • Design : box-and-whisker plot because of it's quick visual reprensentation of an entire data set. I kinda reaally like box-and-whisker now :)

  • Resources :

  • Feedback :

    • Udacity's tutor : You need to add some commentary to the visualization (similar to the one that you have in your README file). It should >describe the source of the data and introduce the variables, describing them to the viewer. Your commentary should also summarize the >story that you are telling with your visualization.
    • Friend : I do not understand why you used average daily departure delays and not just departure dalays. Seems easier to me. If it's not possible for whatever reason, please do provide the reason
    • Dand Friend : I do get the viz but please change that awfull blue in the boxplots, I've seen it everywhere !!!
(function() {
// Inspired by http://informationandvisualization.de/blog/box-plot
d3.box = function() {
var width = 1,
height = 1,
duration = 0,
domain = null,
value = Number,
whiskers = boxWhiskers,
quartiles = boxQuartiles,
showLabels = true, // whether or not to show text labels
numBars = 4,
curBar = 1,
tickFormat = null;
// For each small multiple…
function box(g) {
g.each(function(data, i) {
//d = d.map(value).sort(d3.ascending);
//var boxIndex = data[0];
//var boxIndex = 1;
var d = data[1].sort(d3.ascending);
// console.log(boxIndex);
//console.log(d);
var g = d3.select(this),
n = d.length,
min = d[0],
max = d[n - 1];
// Compute quartiles. Must return exactly 3 elements.
var quartileData = d.quartiles = quartiles(d);
// Compute whiskers. Must return exactly 2 elements, or null.
var whiskerIndices = whiskers && whiskers.call(this, d, i),
whiskerData = whiskerIndices && whiskerIndices.map(function(i) { return d[i]; });
// Compute outliers. If no whiskers are specified, all data are "outliers".
// We compute the outliers as indices, so that we can join across transitions!
var outlierIndices = whiskerIndices
? d3.range(0, whiskerIndices[0]).concat(d3.range(whiskerIndices[1] + 1, n))
: d3.range(n);
// Compute the new x-scale.
var x1 = d3.scale.linear()
.domain(domain && domain.call(this, d, i) || [min, max])
.range([height, 0]);
// Retrieve the old x-scale, if this is an update.
var x0 = this.__chart__ || d3.scale.linear()
.domain([0, Infinity])
// .domain([0, max])
.range(x1.range());
// Stash the new scale.
this.__chart__ = x1;
// Note: the box, median, and box tick elements are fixed in number,
// so we only have to handle enter and update. In contrast, the outliers
// and other elements are variable, so we need to exit them! Variable
// elements also fade in and out.
// Update center line: the vertical line spanning the whiskers.
var center = g.selectAll("line.center")
.data(whiskerData ? [whiskerData] : []);
//vertical line
center.enter().insert("line", "rect")
.attr("class", "center")
.attr("x1", width / 2)
.attr("y1", function(d) { return x0(d[0]); })
.attr("x2", width / 2)
.attr("y2", function(d) { return x0(d[1]); })
.style("opacity", 1e-6)
.transition()
.duration(duration)
.style("opacity", 1)
.attr("y1", function(d) { return x1(d[0]); })
.attr("y2", function(d) { return x1(d[1]); });
center.transition()
.duration(duration)
.style("opacity", 1)
.attr("y1", function(d) { return x1(d[0]); })
.attr("y2", function(d) { return x1(d[1]); });
center.exit().transition()
.duration(duration)
.style("opacity", 1e-6)
.attr("y1", function(d) { return x1(d[0]); })
.attr("y2", function(d) { return x1(d[1]); })
.remove();
// Update innerquartile box.
var box = g.selectAll("rect.box")
.data([quartileData]);
box.enter().append("rect")
.attr("class", "box")
.attr("x", 0)
.attr("y", function(d) { return x0(d[2]); })
.attr("width", width)
.attr("height", function(d) { return x0(d[0]) - x0(d[2]); })
.transition()
.duration(duration)
.attr("y", function(d) { return x1(d[2]); })
.attr("height", function(d) { return x1(d[0]) - x1(d[2]); });
box.transition()
.duration(duration)
.attr("y", function(d) { return x1(d[2]); })
.attr("height", function(d) { return x1(d[0]) - x1(d[2]); });
// Update median line.
var medianLine = g.selectAll("line.median")
.data([quartileData[1]]);
medianLine.enter().append("line")
.attr("class", "median")
.attr("x1", 0)
.attr("y1", x0)
.attr("x2", width)
.attr("y2", x0)
.transition()
.duration(duration)
.attr("y1", x1)
.attr("y2", x1);
medianLine.transition()
.duration(duration)
.attr("y1", x1)
.attr("y2", x1);
// Update whiskers.
var whisker = g.selectAll("line.whisker")
.data(whiskerData || []);
whisker.enter().insert("line", "circle, text")
.attr("class", "whisker")
.attr("x1", 0)
.attr("y1", x0)
.attr("x2", 0 + width)
.attr("y2", x0)
.style("opacity", 1e-6)
.transition()
.duration(duration)
.attr("y1", x1)
.attr("y2", x1)
.style("opacity", 1);
whisker.transition()
.duration(duration)
.attr("y1", x1)
.attr("y2", x1)
.style("opacity", 1);
whisker.exit().transition()
.duration(duration)
.attr("y1", x1)
.attr("y2", x1)
.style("opacity", 1e-6)
.remove();
// Update outliers.
var outlier = g.selectAll("circle.outlier")
.data(outlierIndices, Number);
outlier.enter().insert("circle", "text")
.attr("class", "outlier")
.attr("r", 5)
.attr("cx", width / 2)
.attr("cy", function(i) { return x0(d[i]); })
.style("opacity", 1e-6)
.transition()
.duration(duration)
.attr("cy", function(i) { return x1(d[i]); })
.style("opacity", 1);
outlier.transition()
.duration(duration)
.attr("cy", function(i) { return x1(d[i]); })
.style("opacity", 1);
outlier.exit().transition()
.duration(duration)
.attr("cy", function(i) { return x1(d[i]); })
.style("opacity", 1e-6)
.remove();
// Compute the tick format.
var format = tickFormat || x1.tickFormat(8);
// Update box ticks.
var boxTick = g.selectAll("text.box")
.data(quartileData);
if(showLabels == true) {
boxTick.enter().append("text")
.attr("class", "box")
.attr("dy", ".3em")
.attr("dx", function(d, i) { return i & 1 ? 6 : -6 })
.attr("x", function(d, i) { return i & 1 ? + width : 0 })
.attr("y", x0)
.attr("text-anchor", function(d, i) { return i & 1 ? "start" : "end"; })
.text(format)
.transition()
.duration(duration)
.attr("y", x1);
}
boxTick.transition()
.duration(duration)
.text(format)
.attr("y", x1);
// Update whisker ticks. These are handled separately from the box
// ticks because they may or may not exist, and we want don't want
// to join box ticks pre-transition with whisker ticks post-.
var whiskerTick = g.selectAll("text.whisker")
.data(whiskerData || []);
if(showLabels == true) {
whiskerTick.enter().append("text")
.attr("class", "whisker")
.attr("dy", ".3em")
.attr("dx", 6)
.attr("x", width)
.attr("y", x0)
.text(format)
.style("opacity", 1e-6)
.transition()
.duration(duration)
.attr("y", x1)
.style("opacity", 1);
}
whiskerTick.transition()
.duration(duration)
.text(format)
.attr("y", x1)
.style("opacity", 1);
whiskerTick.exit().transition()
.duration(duration)
.attr("y", x1)
.style("opacity", 1e-6)
.remove();
});
d3.timer.flush();
}
box.width = function(x) {
if (!arguments.length) return width;
width = x;
return box;
};
box.height = function(x) {
if (!arguments.length) return height;
height = x;
return box;
};
box.tickFormat = function(x) {
if (!arguments.length) return tickFormat;
tickFormat = x;
return box;
};
box.duration = function(x) {
if (!arguments.length) return duration;
duration = x;
return box;
};
box.domain = function(x) {
if (!arguments.length) return domain;
domain = x == null ? x : d3.functor(x);
return box;
};
box.value = function(x) {
if (!arguments.length) return value;
value = x;
return box;
};
box.whiskers = function(x) {
if (!arguments.length) return whiskers;
whiskers = x;
return box;
};
box.showLabels = function(x) {
if (!arguments.length) return showLabels;
showLabels = x;
return box;
};
box.quartiles = function(x) {
if (!arguments.length) return quartiles;
quartiles = x;
return box;
};
return box;
};
function boxWhiskers(d) {
return [0, d.length - 1];
}
function boxQuartiles(d) {
return [
d3.quantile(d, .25),
d3.quantile(d, .5),
d3.quantile(d, .75)
];
}
})();
AA CO DL NW OH OO UA US
13 8 15 11 11 23 18 8
45 24 64 24 28 40 64 20
29 37 25 25 27 23 48 23
7 7 4 9 6 9 19 7
6 8 5 8 9 4 10 5
6 5 5 6 5 3 8 4
5 5 4 13 5 5 7 3
8 3 4 8 4 6 9 4
6 4 3 4 4 3 6 3
3 3 2 5 4 5 7 3
13 17 8 6 13 10 16 12
6 5 5 5 7 3 6 6
22 29 24 12 20 15 18 20
8 9 9 8 14 10 7 12
17 20 7 5 12 5 8 8
7 21 8 9 6 7 6 5
11 19 16 10 8 9 10 5
12 20 11 16 14 9 15 12
4 4 4 6 6 11 18 5
9 4 3 6 5 9 14 5
6 3 4 7 6 11 9 5
15 16 46 10 12 10 7 5
10 17 44 9 19 6 11 10
5 5 6 7 10 7 7 3
5 6 3 4 4 4 4 5
4 4 4 3 7 4 6 3
4 3 3 4 3 7 3 3
5 4 2 7 5 9 5 4
9 13 6 8 11 6 8 7
7 5 8 6 9 9 8 15
7 14 4 4 7 2 5 6
4 7 2 3 3 9 9 2
5 7 11 8 5 9 6 4
15 27 13 15 9 18 12 15
16 11 9 16 18 10 13 13
7 7 4 12 11 7 7 4
6 11 16 6 8 4 5 4
3 2 5 3 2 2 2 3
7 4 2 5 4 7 7 5
5 6 3 9 4 4 6 5
11 15 5 15 4 7 6 7
9 8 12 12 9 12 7 6
4 5 4 5 8 7 10 14
6 13 6 7 12 1 7 10
5 6 3 6 7 2 6 4
5 4 5 5 2 14 10 5
42 14 9 20 9 32 57 11
27 37 12 26 19 36 50 17
33 21 16 29 26 41 30 10
48 13 21 16 12 17 17 13
19 13 33 9 9 7 11 8
10 16 8 6 6 4 8 6
10 10 21 8 6 4 12 8
12 11 12 8 10 10 12 12
13 30 5 8 7 9 10 8
13 13 10 10 6 5 9 7
10 14 7 13 9 14 14 8
8 13 6 12 5 15 17 7
5 10 5 7 3 13 10 6
6 7 3 5 3 3 7 3
14 20 24 17 15 8 13 12
9 18 6 7 8 7 8 7
4 9 2 6 2 6 6 4
18 15 5 14 5 32 30 8
9 7 7 5 6 16 20 6
8 16 6 7 7 6 13 5
6 6 3 7 4 11 17 4
29 25 15 15 8 24 21 8
12 22 7 10 8 16 14 8
11 9 4 9 14 14 14 16
19 18 15 11 10 39 26 14
33 23 15 54 13 24 41 11
13 22 6 10 12 12 18 6
10 22 8 9 6 20 13 7
12 15 7 27 7 20 26 8
9 10 5 7 3 8 11 6
29 9 8 6 8 7 8 6
44 12 12 6 7 18 13 9
35 30 25 9 7 31 34 7
9 7 17 9 21 11 12 6
8 6 2 5 4 8 8 5
17 10 15 8 7 9 12 6
13 6 9 6 7 25 24 7
5 4 4 6 5 12 12 5
7 6 3 7 4 10 18 5
5 6 3 3 4 8 12 2
24 32 13 5 4 31 31 6
6 15 4 4 2 11 10 3
9 7 4 5 2 9 12 5
23 8 7 13 5 26 26 8
9 7 10 6 5 9 14 5
20 11 11 14 12 26 28 8
23 19 14 13 10 25 33 21
11 13 5 7 9 18 19 10
9 22 4 10 8 9 11 12
28 11 8 24 6 9 12 11
37 26 12 20 26 23 30 18
10 13 12 8 16 4 13 11
9 8 6 8 7 4 6 8
5 5 2 6 2 3 8 4
7 4 2 5 2 11 14 4
5 8 3 9 3 10 8 5
11 31 7 8 8 4 12 12
12 13 5 8 7 12 15 8
3 3 3 5 3 5 5 5
20 6 3 7 5 18 25 5
9 7 11 6 5 15 13 10
7 9 3 6 2 4 7 4
6 11 37 7 7 3 5 5
11 10 17 9 6 3 6 6
10 30 11 10 6 6 7 8
8 13 8 8 6 5 6 17
8 16 6 6 10 6 9 9
14 34 9 8 11 9 13 14
5 12 2 4 4 5 6 5
4 8 5 3 3 3 5 5
4 5 4 3 2 2 4 4
22 12 3 8 4 7 6 7
10 32 3 6 2 5 5 6
22 12 3 7 6 22 31 8
15 8 3 5 5 15 22 5
18 9 3 8 6 8 9 5
7 5 4 7 4 4 8 4
10 16 5 5 4 6 7 3
12 8 13 6 4 13 13 9
6 21 3 3 3 5 9 4
6 5 20 7 8 6 8 6
9 6 10 9 4 4 9 6
9 8 6 8 7 4 10 6
11 15 19 12 15 6 9 6
26 24 13 9 14 16 28 15
20 14 6 8 8 19 24 9
5 5 3 5 2 5 8 5
10 44 8 8 10 6 9 10
15 31 6 9 13 5 10 13
7 9 7 5 9 3 7 9
20 9 5 7 14 12 20 8
11 6 7 6 17 11 19 12
14 21 10 7 14 10 12 17
5 3 2 4 4 6 6 5
10 12 6 6 7 8 10 12
7 11 3 4 5 7 8 6
5 8 3 4 4 8 9 6
25 13 6 11 7 14 35 13
26 12 14 23 16 13 37 12
19 15 12 14 30 8 27 17
8 2 3 7 10 6 9 6
4 3 3 6 4 3 5 3
25 43 4 9 5 13 28 4
19 13 5 15 7 11 33 8
18 25 7 15 7 7 21 7
16 37 17 12 18 4 16 18
16 39 33 12 19 7 17 21
8 18 12 14 14 6 8 8
11 6 11 5 7 9 7 6
6 4 5 6 5 10 11 6
7 4 3 4 4 4 6 6
16 27 11 10 17 4 18 19
8 11 8 10 15 7 11 16
12 17 10 8 18 8 11 17
7 6 6 5 9 10 8 6
6 5 7 9 9 13 16 10
7 7 25 5 10 13 11 6
4 9 7 3 6 5 7 3
6 14 8 6 10 3 10 10
6 9 6 6 5 4 12 5
15 15 7 11 8 7 15 7
14 59 4 16 6 8 10 5
10 30 8 15 9 7 11 7
16 43 16 29 22 9 20 17
10 15 6 8 14 5 12 9
20 24 10 44 19 15 26 12
29 45 20 18 26 18 35 13
21 26 26 10 27 6 21 29
14 20 16 12 25 9 17 20
26 27 45 15 27 15 32 27
25 37 35 20 31 11 34 32
35 45 24 22 32 8 36 36
22 19 12 13 25 14 36 16
14 15 11 7 16 7 21 16
12 16 12 10 19 9 15 15
11 11 5 6 9 11 13 11
14 18 11 9 18 9 14 16
8 6 5 3 7 5 9 5
22 36 14 7 23 4 11 14
36 64 25 11 35 7 19 18
9 13 10 6 13 4 7 12
7 6 7 3 8 3 7 9
6 5 4 6 6 4 4 7
7 14 6 4 7 6 9 7
8 6 7 7 10 4 8 6
17 17 10 12 17 13 16 13
20 37 13 15 23 13 18 18
11 17 13 9 23 5 10 16
10 12 9 10 18 13 12 8
9 7 11 9 10 6 9 13
6 6 10 8 14 4 10 9
7 9 8 8 12 5 9 13
16 21 12 12 14 10 23 19
20 19 12 27 21 13 27 17
40 21 14 11 23 25 84 19
31 38 22 13 31 8 48 36
24 37 20 13 31 8 24 36
8 14 11 7 16 8 16 14
5 15 8 13 11 7 9 10
6 22 7 16 8 7 11 10
9 28 6 15 8 7 9 7
24 43 14 23 15 18 33 25
20 44 20 16 20 12 33 25
12 10 8 11 14 9 10 7
16 12 8 13 10 22 16 7
8 10 8 13 15 9 11 5
8 11 16 12 14 7 10 5
10 11 7 9 12 8 19 6
21 27 13 27 21 17 29 18
10 16 8 10 15 9 8 8
7 6 11 7 11 4 5 11
20 8 11 10 8 13 8 8
20 11 11 12 17 13 15 16
9 12 7 8 10 7 6 6
7 4 14 8 12 6 7 6
40 40 48 27 30 16 36 34
12 16 32 11 26 7 11 10
17 6 9 7 10 6 7 7
10 4 7 9 12 7 9 8
15 8 8 7 14 17 6 9
6 6 9 6 11 6 6 7
6 4 5 4 7 5 3 6
6 5 4 6 7 5 8 5
12 7 4 8 7 13 10 6
8 4 3 9 7 9 12 8
7 8 27 9 12 11 9 6
6 6 9 7 8 7 6 11
10 12 11 9 11 5 5 12
9 14 4 7 8 6 10 6
24 17 12 36 11 18 59 28
19 16 10 14 18 14 27 12
11 10 3 6 11 7 10 7
20 28 6 8 18 7 10 9
26 23 9 11 25 19 24 9
12 22 15 10 16 7 12 20
8 10 12 9 19 5 9 20
7 11 31 9 19 9 11 13
16 15 15 12 25 5 13 19
13 11 6 9 19 6 8 13
5 4 4 8 10 4 4 4
9 4 6 6 8 7 8 8
12 14 13 12 16 5 6 16
9 3 6 5 10 5 5 8
8 6 11 7 11 9 11 10
6 3 19 7 13 9 10 9
6 4 5 10 12 6 7 7
22 12 11 13 19 18 29 12
36 12 31 13 13 35 34 9
14 9 23 15 14 19 25 4
17 9 31 23 13 16 30 9
11 22 20 13 17 10 14 17
17 34 20 16 23 17 16 29
8 5 4 7 10 7 6 8
37 19 10 12 14 14 20 8
11 8 27 13 17 3 8 5
9 10 10 8 13 6 9 11
5 4 6 6 10 6 7 5
6 6 8 8 9 8 7 6
33 10 17 22 20 25 43 13
44 22 16 16 21 17 24 7
14 15 58 9 17 6 10 9
4 3 15 6 17 4 5 8
3 2 4 6 8 3 3 4
7 4 6 10 10 10 10 5
10 12 18 11 17 14 19 20
9 8 7 10 22 13 11 12
7 2 4 8 13 7 6 5
5 7 8 8 15 8 6 6
12 9 6 14 13 15 29 6
5 4 4 10 6 7 12 3
21 22 10 31 15 16 39 11
8 7 9 13 18 10 10 12
12 16 19 11 25 16 16 26
5 3 8 6 12 5 5 9
5 3 9 11 9 4 4 7
4 3 11 8 11 5 4 6
36 38 5 7 8 5 5 5
16 22 11 21 23 12 20 14
28 32 12 25 22 16 32 15
22 12 12 16 17 18 26 18
7 6 7 8 12 44 10 16
14 18 10 11 11 21 15 9
17 87 17 11 16 20 21 9
10 36 28 20 19 12 17 14
13 37 26 13 16 12 14 9
7 16 41 16 22 6 10 13
17 33 32 18 32 5 16 22
5 6 8 8 15 6 6 7
11 7 23 12 16 19 12 10
6 8 20 11 16 8 8 8
5 6 7 9 14 4 6 7
9 10 8 11 14 9 9 10
17 45 10 11 18 20 40 9
29 17 65 18 27 19 25 18
14 15 23 24 37 10 13 14
13 16 11 12 18 5 7 7
6 3 5 7 12 10 8 4
3 4 5 8 10 5 4 2
3 7 9 9 13 4 5 5
13 13 18 14 14 16 12 9
5 6 11 10 15 13 8 7
4 3 5 5 7 7 5 5
10 7 15 11 12 4 4 8
8 24 7 12 15 7 9 6
10 10 26 14 14 15 13 8
13 26 10 14 20 5 12 13
5 5 4 12 13 4 6 8
10 9 6 15 12 6 30 8
6 3 13 11 8 7 7 6
12 26 9 14 18 12 16 17
26 35 10 17 25 26 30 22
6 7 4 12 9 8 7 7
55 40 24 20 21 14 13 12
25 41 21 21 27 12 21 30
12 12 8 11 21 12 8 13
6 2 5 10 8 8 4 6
5 5 5 14 11 11 7 7
8 5 5 11 12 13 8 7
10 8 7 10 19 9 7 16
11 20 8 10 25 5 10 15
6 7 4 11 18 2 6 9
3 1 3 11 7 6 3 2
3 4 3 5 10 3 3 5
8 8 6 8 14 17 11 12
6 6 5 13 16 15 8 10
15 11 8 19 18 20 24 10
36 17 8 14 17 25 41 14
30 23 12 17 17 7 16 12
18 29 17 20 35 14 18 23
16 7 5 7 20 17 13 9
18 5 4 12 12 11 12 7
13 9 4 15 17 11 10 6
5 9 2 6 7 5 4 4
14 11 3 8 7 10 12 9
15 18 7 15 21 10 20 9
12 20 5 11 16 9 11 7
5 5 3 5 5 7 5 4
6 9 3 6 4 14 5 7
14 7 4 9 5 14 16 4
15 7 3 15 6 20 23 6
13 19 5 12 13 11 13 16
18 37 25 18 16 17 15 24
23 25 15 15 15 28 16 25
14 7 6 10 9 21 13 8
7 9 5 8 9 14 9 5
6 9 3 7 9 11 9 6
15 8 4 9 12 10 7 8
39 15 8 11 10 11 11 10
31 20 9 33 14 26 22 16
34 21 28 34 25 50 23 37
25 14 13 20 23 52 35 45
14 8 6 12 17 29 18 11
16 4 9 20 13 13 10 12
19 18 14 23 24 25 16 24
10 10 7 17 16 17 9 13
10 5 6 13 9 18 16 16
16 32 7 15 5 17 12 10
43 23 13 24 17 18 14 19
32 5 8 27 13 28 21 18
AA CO DL NW OH OO UA US
24.0 18.0 8.0 23.0 26.0 16.0 12.0 17.0
19.0 9.0 10.0 12.0 16.0 14.0 8.0 12.0
12.0 17.0 7.0 8.0 10.0 13.0 9.0 9.0
19.0 21.0 9.0 11.0 6.0 47.0 20.0 12.0
14.0 20.0 35.0 11.0 17.0 29.0 30.0 22.0
10.0 13.0 8.0 9.0 11.0 15.0 10.0 12.0
9.0 10.0 20.0 10.0 15.0 17.0 10.0 14.0
7.0 13.0 7.0 7.0 16.0 7.0 5.0 12.0
11.0 10.0 4.0 7.0 7.0 14.0 9.0 8.0
6.0 7.0 4.0 8.0 6.0 8.0 8.0 6.0
16.0 5.0 7.0 7.0 6.0 30.0 15.0 8.0
32.0 9.0 5.0 10.0 8.0 24.0 25.0 9.0
18.0 4.0 4.0 11.0 9.0 8.0 8.0 6.0
31.0 18.0 5.0 18.0 20.0 18.0 21.0 10.0
57.0 29.0 8.0 27.0 25.0 24.0 21.0 19.0
16.0 28.0 5.0 10.0 18.0 12.0 14.0 8.0
40.0 15.0 5.0 8.0 7.0 6.0 8.0 8.0
26.0 21.0 28.0 16.0 15.0 17.0 14.0 20.0
13.0 19.0 9.0 15.0 22.0 28.0 16.0 15.0
7.0 9.0 5.0 6.0 14.0 11.0 9.0 6.0
24.0 8.0 17.0 29.0 43.0 40.0 63.0 27.0
10.0 9.0 10.0 14.0 23.0 15.0 22.0 21.0
6.0 2.0 3.0 8.0 10.0 3.0 7.0 7.0
5.0 5.0 3.0 8.0 10.0 5.0 4.0 6.0
9.0 8.0 8.0 7.0 17.0 9.0 7.0 11.0
9.0 7.0 5.0 17.0 21.0 33.0 11.0 9.0
5.0 4.0 3.0 9.0 10.0 33.0 8.0 6.0
15.0 5.0 6.0 12.0 16.0 26.0 11.0 10.0
14.0 8.0 4.0 9.0 11.0 17.0 11.0 8.0
5.0 7.0 3.0 13.0 9.0 7.0 6.0 5.0
23.0 6.0 4.0 13.0 9.0 17.0 8.0 7.0
23.0 13.0 16.0 14.0 22.0 16.0 11.0 17.0
19.0 16.0 15.0 12.0 27.0 10.0 9.0 19.0
15.0 8.0 8.0 19.0 18.0 16.0 13.0 12.0
10.0 10.0 8.0 22.0 19.0 9.0 8.0 12.0
14.0 15.0 7.0 16.0 23.0 12.0 26.0 18.0
20.0 10.0 5.0 29.0 31.0 21.0 34.0 9.0
12.0 9.0 6.0 14.0 17.0 16.0 24.0 12.0
9.0 11.0 4.0 11.0 10.0 29.0 13.0 10.0
14.0 12.0 6.0 9.0 13.0 21.0 16.0 12.0
9.0 4.0 5.0 12.0 6.0 12.0 9.0 10.0
9.0 7.0 3.0 12.0 10.0 11.0 7.0 11.0
22.0 15.0 3.0 18.0 8.0 24.0 18.0 11.0
18.0 12.0 9.0 15.0 23.0 14.0 28.0 34.0
19.0 36.0 20.0 27.0 21.0 10.0 32.0 46.0
42.0 39.0 26.0 29.0 42.0 20.0 30.0 47.0
28.0 24.0 19.0 17.0 38.0 23.0 28.0 34.0
23.0 8.0 11.0 22.0 52.0 20.0 18.0 22.0
7.0 13.0 10.0 21.0 21.0 6.0 14.0 15.0
11.0 10.0 9.0 11.0 13.0 15.0 12.0 19.0
6.0 5.0 4.0 10.0 14.0 7.0 5.0 12.0
6.0 6.0 13.0 32.0 38.0 10.0 12.0 9.0
20.0 19.0 8.0 15.0 22.0 16.0 11.0 16.0
12.0 14.0 10.0 16.0 23.0 20.0 12.0 13.0
14.0 8.0 9.0 47.0 18.0 16.0 20.0 12.0
39.0 11.0 15.0 51.0 25.0 20.0 30.0 35.0
34.0 13.0 11.0 31.0 25.0 31.0 33.0 23.0
10.0 10.0 7.0 12.0 11.0 25.0 12.0 12.0
11.0 5.0 5.0 15.0 6.0 15.0 14.0 13.0
30.0 17.0 38.0 44.0 17.0 24.0 40.0 19.0
25.0 24.0 20.0 36.0 48.0 23.0 37.0 30.0
13.0 7.0 9.0 20.0 31.0 16.0 15.0 13.0
8.0 9.0 4.0 15.0 15.0 6.0 7.0 27.0
8.0 16.0 6.0 11.0 14.0 3.0 8.0 23.0
6.0 13.0 6.0 15.0 14.0 4.0 10.0 15.0
17.0 24.0 11.0 18.0 27.0 9.0 16.0 38.0
6.0 7.0 6.0 9.0 16.0 4.0 6.0 22.0
10.0 7.0 7.0 8.0 15.0 7.0 7.0 19.0
7.0 10.0 5.0 9.0 10.0 5.0 8.0 19.0
13.0 10.0 8.0 13.0 13.0 4.0 7.0 26.0
7.0 38.0 6.0 8.0 7.0 4.0 6.0 17.0
22.0 16.0 5.0 8.0 5.0 5.0 6.0 10.0
11.0 38.0 5.0 10.0 6.0 5.0 8.0 11.0
10.0 29.0 7.0 12.0 16.0 10.0 10.0 19.0
11.0 9.0 8.0 21.0 12.0 7.0 10.0 19.0
21.0 24.0 15.0 17.0 28.0 6.0 12.0 46.0
13.0 46.0 8.0 11.0 21.0 7.0 9.0 35.0
9.0 15.0 8.0 14.0 22.0 7.0 10.0 23.0
8.0 13.0 3.0 8.0 14.0 12.0 8.0 11.0
18.0 6.0 5.0 14.0 6.0 16.0 34.0 14.0
24.0 23.0 8.0 25.0 18.0 18.0 31.0 34.0
24.0 14.0 8.0 10.0 16.0 12.0 23.0 29.0
20.0 6.0 6.0 21.0 10.0 15.0 20.0 20.0
9.0 4.0 7.0 13.0 11.0 10.0 9.0 14.0
16.0 8.0 4.0 9.0 11.0 9.0 12.0 13.0
11.0 4.0 5.0 15.0 6.0 11.0 10.0 10.0
27.0 11.0 7.0 20.0 12.0 22.0 29.0 17.0
19.0 16.0 8.0 16.0 13.0 14.0 34.0 18.0
37.0 13.0 6.0 16.0 10.0 7.0 17.0 15.0
32.0 32.0 6.0 13.0 12.0 11.0 18.0 15.0
23.0 7.0 13.0 16.0 21.0 16.0 17.0 17.0
10.0 16.0 10.0 13.0 17.0 6.0 10.0 13.0
21.0 9.0 17.0 19.0 21.0 13.0 26.0 13.0
15.0 39.0 12.0 21.0 27.0 11.0 18.0 26.0
18.0 20.0 12.0 13.0 19.0 12.0 16.0 19.0
16.0 16.0 5.0 13.0 13.0 22.0 19.0 14.0
9.0 6.0 5.0 11.0 9.0 15.0 11.0 13.0
9.0 9.0 5.0 11.0 12.0 5.0 8.0 10.0
6.0 8.0 5.0 9.0 11.0 4.0 7.0 12.0
11.0 8.0 4.0 11.0 7.0 5.0 11.0 11.0
20.0 9.0 9.0 25.0 15.0 19.0 51.0 20.0
34.0 33.0 15.0 15.0 26.0 7.0 24.0 38.0
39.0 23.0 8.0 12.0 20.0 6.0 13.0 19.0
24.0 7.0 5.0 10.0 14.0 9.0 10.0 15.0
16.0 31.0 20.0 10.0 19.0 7.0 17.0 28.0
22.0 27.0 11.0 13.0 22.0 5.0 19.0 32.0
22.0 23.0 9.0 8.0 22.0 4.0 14.0 19.0
14.0 15.0 8.0 7.0 14.0 8.0 10.0 17.0
7.0 6.0 5.0 6.0 10.0 5.0 10.0 14.0
8.0 5.0 5.0 8.0 11.0 4.0 6.0 13.0
7.0 14.0 3.0 5.0 5.0 2.0 7.0 10.0
8.0 4.0 5.0 7.0 7.0 6.0 10.0 14.0
7.0 8.0 5.0 6.0 9.0 6.0 8.0 7.0
16.0 11.0 7.0 8.0 8.0 10.0 15.0 8.0
33.0 38.0 5.0 12.0 16.0 22.0 25.0 13.0
22.0 7.0 11.0 12.0 17.0 17.0 23.0 15.0
18.0 22.0 13.0 11.0 31.0 6.0 16.0 22.0
6.0 3.0 5.0 6.0 5.0 4.0 4.0 13.0
6.0 6.0 4.0 7.0 10.0 6.0 8.0 11.0
9.0 19.0 4.0 10.0 15.0 4.0 9.0 9.0
10.0 11.0 4.0 14.0 10.0 7.0 12.0 8.0
16.0 13.0 8.0 8.0 20.0 7.0 10.0 13.0
18.0 28.0 5.0 9.0 7.0 7.0 7.0 11.0
8.0 15.0 7.0 11.0 14.0 11.0 10.0 18.0
5.0 4.0 11.0 8.0 6.0 12.0 22.0 11.0
15.0 16.0 16.0 11.0 12.0 10.0 23.0 24.0
14.0 8.0 5.0 10.0 6.0 7.0 10.0 16.0
7.0 5.0 2.0 6.0 4.0 4.0 7.0 10.0
22.0 6.0 5.0 14.0 11.0 4.0 8.0 12.0
25.0 27.0 11.0 20.0 20.0 11.0 12.0 19.0
15.0 16.0 16.0 11.0 20.0 9.0 11.0 15.0
8.0 2.0 16.0 6.0 6.0 7.0 9.0 13.0
19.0 11.0 5.0 8.0 12.0 3.0 6.0 12.0
17.0 7.0 3.0 8.0 6.0 11.0 14.0 9.0
20.0 24.0 7.0 23.0 20.0 20.0 25.0 14.0
17.0 36.0 14.0 15.0 28.0 9.0 21.0 30.0
9.0 10.0 5.0 9.0 17.0 5.0 7.0 19.0
14.0 14.0 9.0 9.0 27.0 6.0 9.0 20.0
5.0 3.0 3.0 5.0 3.0 10.0 10.0 11.0
9.0 10.0 6.0 9.0 13.0 9.0 11.0 15.0
7.0 5.0 4.0 8.0 8.0 6.0 7.0 11.0
9.0 55.0 4.0 10.0 4.0 11.0 12.0 8.0
12.0 10.0 5.0 21.0 8.0 12.0 15.0 12.0
42.0 18.0 8.0 15.0 12.0 17.0 22.0 13.0
23.0 10.0 4.0 9.0 10.0 9.0 12.0 12.0
14.0 12.0 3.0 11.0 8.0 12.0 16.0 8.0
16.0 16.0 4.0 8.0 5.0 4.0 7.0 8.0
9.0 33.0 4.0 7.0 5.0 5.0 7.0 7.0
10.0 8.0 4.0 9.0 9.0 13.0 28.0 8.0
35.0 18.0 4.0 17.0 5.0 9.0 14.0 9.0
17.0 13.0 7.0 12.0 13.0 11.0 16.0 10.0
18.0 25.0 15.0 16.0 19.0 13.0 21.0 19.0
10.0 8.0 5.0 21.0 14.0 7.0 10.0 11.0
62.0 21.0 9.0 25.0 22.0 15.0 17.0 21.0
38.0 19.0 11.0 19.0 30.0 19.0 23.0 19.0
12.0 18.0 9.0 10.0 12.0 11.0 12.0 13.0
11.0 10.0 7.0 14.0 9.0 13.0 20.0 12.0
15.0 10.0 7.0 26.0 9.0 16.0 24.0 11.0
40.0 38.0 49.0 42.0 31.0 10.0 33.0 33.0
13.0 11.0 14.0 14.0 21.0 4.0 11.0 17.0
9.0 9.0 13.0 13.0 17.0 8.0 9.0 14.0
13.0 17.0 31.0 15.0 20.0 10.0 15.0 26.0
20.0 39.0 28.0 16.0 27.0 9.0 26.0 40.0
19.0 26.0 19.0 15.0 24.0 6.0 21.0 38.0
23.0 22.0 18.0 14.0 21.0 5.0 13.0 31.0
12.0 18.0 14.0 12.0 10.0 8.0 10.0 12.0
44.0 52.0 12.0 11.0 15.0 9.0 13.0 12.0
52.0 44.0 12.0 12.0 15.0 6.0 13.0 10.0
29.0 14.0 14.0 25.0 15.0 16.0 32.0 13.0
23.0 32.0 39.0 29.0 20.0 12.0 30.0 24.0
26.0 17.0 16.0 15.0 24.0 9.0 61.0 18.0
17.0 23.0 16.0 17.0 21.0 6.0 24.0 16.0
23.0 15.0 13.0 14.0 23.0 6.0 11.0 14.0
8.0 4.0 8.0 6.0 10.0 6.0 10.0 9.0
8.0 6.0 9.0 10.0 10.0 7.0 12.0 15.0
44.0 26.0 42.0 11.0 18.0 14.0 22.0 24.0
49.0 19.0 18.0 12.0 13.0 13.0 36.0 19.0
46.0 33.0 24.0 33.0 22.0 16.0 45.0 39.0
48.0 44.0 30.0 17.0 34.0 11.0 33.0 38.0
40.0 22.0 28.0 12.0 28.0 10.0 17.0 20.0
38.0 8.0 17.0 11.0 15.0 7.0 13.0 12.0
50.0 25.0 30.0 9.0 16.0 7.0 8.0 16.0
55.0 10.0 13.0 8.0 11.0 7.0 8.0 11.0
29.0 4.0 4.0 12.0 3.0 4.0 9.0 8.0
15.0 2.0 4.0 8.0 6.0 2.0 6.0 8.0
19.0 14.0 9.0 13.0 18.0 4.0 8.0 14.0
8.0 38.0 10.0 11.0 16.0 4.0 9.0 11.0
8.0 6.0 7.0 8.0 8.0 15.0 11.0 9.0
31.0 10.0 10.0 31.0 11.0 15.0 17.0 11.0
27.0 12.0 17.0 22.0 18.0 17.0 36.0 20.0
29.0 39.0 34.0 21.0 29.0 17.0 40.0 30.0
26.0 29.0 34.0 13.0 27.0 12.0 29.0 23.0
11.0 12.0 11.0 10.0 14.0 7.0 14.0 12.0
19.0 8.0 8.0 6.0 14.0 5.0 7.0 11.0
10.0 8.0 15.0 13.0 12.0 9.0 11.0 10.0
12.0 21.0 20.0 15.0 24.0 10.0 12.0 14.0
12.0 19.0 13.0 9.0 15.0 12.0 15.0 19.0
18.0 23.0 18.0 14.0 16.0 16.0 16.0 17.0
22.0 26.0 27.0 24.0 36.0 13.0 29.0 28.0
29.0 54.0 46.0 34.0 44.0 15.0 38.0 30.0
12.0 20.0 31.0 13.0 23.0 10.0 14.0 10.0
10.0 6.0 10.0 13.0 12.0 12.0 16.0 10.0
15.0 8.0 14.0 13.0 13.0 11.0 13.0 8.0
19.0 26.0 16.0 13.0 26.0 12.0 18.0 22.0
9.0 5.0 8.0 7.0 5.0 7.0 13.0 9.0
11.0 6.0 13.0 9.0 7.0 18.0 22.0 10.0
25.0 31.0 13.0 27.0 15.0 20.0 31.0 13.0
22.0 37.0 28.0 21.0 27.0 14.0 25.0 31.0
17.0 13.0 20.0 12.0 25.0 8.0 16.0 16.0
44.0 40.0 50.0 12.0 37.0 11.0 25.0 40.0
37.0 19.0 24.0 9.0 39.0 11.0 24.0 39.0
40.0 8.0 13.0 9.0 19.0 5.0 12.0 20.0
41.0 16.0 9.0 7.0 10.0 10.0 13.0 16.0
24.0 9.0 8.0 9.0 9.0 11.0 10.0 11.0
16.0 17.0 14.0 10.0 19.0 10.0 25.0 13.0
10.0 6.0 12.0 12.0 15.0 10.0 14.0 9.0
22.0 5.0 16.0 13.0 15.0 30.0 38.0 16.0
24.0 14.0 13.0 15.0 24.0 19.0 32.0 16.0
16.0 17.0 9.0 17.0 19.0 15.0 31.0 13.0
21.0 26.0 19.0 17.0 32.0 9.0 25.0 17.0
23.0 28.0 29.0 18.0 27.0 9.0 33.0 33.0
19.0 23.0 21.0 13.0 30.0 9.0 22.0 24.0
8.0 3.0 6.0 8.0 10.0 8.0 15.0 9.0
9.0 4.0 13.0 6.0 10.0 10.0 8.0 9.0
7.0 4.0 13.0 11.0 9.0 11.0 11.0 11.0
15.0 6.0 10.0 12.0 6.0 14.0 20.0 9.0
11.0 8.0 9.0 14.0 12.0 9.0 15.0 9.0
17.0 56.0 21.0 11.0 29.0 10.0 14.0 14.0
21.0 51.0 29.0 13.0 23.0 10.0 16.0 26.0
14.0 15.0 17.0 23.0 11.0 10.0 13.0 12.0
30.0 12.0 12.0 36.0 12.0 25.0 42.0 15.0
27.0 19.0 11.0 46.0 22.0 19.0 38.0 28.0
17.0 30.0 9.0 37.0 23.0 12.0 20.0 21.0
14.0 16.0 8.0 26.0 14.0 12.0 23.0 15.0
16.0 22.0 21.0 27.0 16.0 17.0 28.0 16.0
23.0 17.0 35.0 19.0 24.0 12.0 26.0 15.0
12.0 11.0 19.0 11.0 23.0 7.0 18.0 16.0
8.0 7.0 26.0 8.0 16.0 10.0 11.0 10.0
7.0 12.0 8.0 14.0 10.0 9.0 14.0 7.0
6.0 3.0 3.0 16.0 4.0 4.0 8.0 7.0
21.0 13.0 31.0 12.0 9.0 6.0 11.0 8.0
26.0 8.0 29.0 12.0 15.0 6.0 12.0 14.0
14.0 11.0 20.0 10.0 17.0 9.0 10.0 11.0
9.0 2.0 6.0 7.0 3.0 3.0 6.0 6.0
5.0 1.0 3.0 4.0 4.0 4.0 4.0 4.0
7.0 21.0 4.0 4.0 5.0 4.0 9.0 7.0
8.0 7.0 5.0 4.0 5.0 13.0 9.0 7.0
13.0 3.0 5.0 10.0 3.0 8.0 11.0 5.0
9.0 3.0 5.0 9.0 4.0 9.0 14.0 6.0
19.0 6.0 5.0 17.0 10.0 19.0 23.0 8.0
7.0 4.0 3.0 6.0 3.0 6.0 7.0 7.0
29.0 4.0 6.0 8.0 7.0 10.0 10.0 6.0
52.0 13.0 10.0 14.0 19.0 9.0 15.0 10.0
17.0 21.0 13.0 9.0 36.0 9.0 10.0 14.0
6.0 5.0 4.0 5.0 7.0 11.0 9.0 6.0
5.0 5.0 28.0 9.0 6.0 5.0 6.0 8.0
15.0 4.0 44.0 10.0 13.0 14.0 12.0 11.0
9.0 3.0 9.0 4.0 5.0 3.0 6.0 7.0
9.0 3.0 7.0 6.0 4.0 16.0 13.0 7.0
8.0 2.0 6.0 10.0 7.0 9.0 12.0 9.0
6.0 3.0 3.0 20.0 8.0 4.0 10.0 8.0
6.0 3.0 3.0 9.0 6.0 5.0 8.0 5.0
6.0 2.0 5.0 19.0 6.0 5.0 12.0 7.0
9.0 4.0 6.0 24.0 10.0 6.0 10.0 9.0
5.0 5.0 5.0 5.0 13.0 9.0 8.0 6.0
9.0 6.0 8.0 5.0 12.0 5.0 10.0 7.0
6.0 2.0 4.0 10.0 10.0 5.0 9.0 4.0
20.0 12.0 9.0 16.0 8.0 12.0 22.0 9.0
11.0 9.0 6.0 11.0 8.0 3.0 8.0 9.0
13.0 14.0 14.0 18.0 22.0 8.0 18.0 20.0
13.0 9.0 6.0 11.0 14.0 6.0 13.0 14.0
6.0 2.0 3.0 10.0 3.0 6.0 7.0 7.0
11.0 5.0 5.0 27.0 8.0 6.0 13.0 11.0
8.0 3.0 4.0 11.0 7.0 6.0 10.0 7.0
11.0 4.0 3.0 23.0 5.0 11.0 12.0 6.0
7.0 8.0 5.0 10.0 11.0 3.0 7.0 7.0
6.0 4.0 13.0 5.0 9.0 7.0 11.0 11.0
10.0 8.0 11.0 18.0 17.0 7.0 17.0 13.0
6.0 4.0 5.0 9.0 12.0 5.0 4.0 8.0
8.0 6.0 9.0 6.0 11.0 8.0 10.0 8.0
18.0 11.0 15.0 18.0 12.0 6.0 11.0 9.0
16.0 25.0 15.0 14.0 21.0 10.0 17.0 20.0
13.0 10.0 4.0 9.0 13.0 10.0 11.0 9.0
17.0 27.0 11.0 12.0 19.0 5.0 14.0 19.0
14.0 13.0 7.0 9.0 11.0 14.0 22.0 11.0
8.0 2.0 2.0 4.0 3.0 6.0 8.0 4.0
8.0 7.0 5.0 9.0 10.0 15.0 15.0 9.0
55.0 35.0 5.0 15.0 9.0 8.0 11.0 7.0
11.0 8.0 5.0 17.0 6.0 11.0 10.0 6.0
12.0 13.0 5.0 16.0 7.0 13.0 14.0 9.0
24.0 12.0 9.0 22.0 16.0 18.0 34.0 15.0
26.0 27.0 14.0 13.0 26.0 17.0 31.0 25.0
8.0 4.0 4.0 9.0 6.0 6.0 9.0 7.0
15.0 5.0 6.0 7.0 11.0 13.0 22.0 11.0
15.0 22.0 21.0 13.0 15.0 7.0 14.0 7.0
7.0 15.0 18.0 12.0 13.0 5.0 13.0 9.0
12.0 19.0 19.0 10.0 22.0 5.0 15.0 21.0
12.0 18.0 8.0 10.0 21.0 4.0 15.0 17.0
13.0 21.0 10.0 15.0 19.0 10.0 16.0 22.0
7.0 12.0 3.0 5.0 15.0 6.0 8.0 6.0
6.0 11.0 4.0 7.0 10.0 8.0 8.0 10.0
7.0 4.0 4.0 5.0 6.0 10.0 10.0 7.0
5.0 1.0 4.0 3.0 9.0 7.0 5.0 4.0
6.0 2.0 3.0 5.0 4.0 9.0 7.0 4.0
8.0 10.0 2.0 4.0 5.0 6.0 4.0 4.0
8.0 5.0 3.0 5.0 9.0 8.0 7.0 9.0
5.0 4.0 2.0 4.0 5.0 4.0 5.0 6.0
7.0 5.0 4.0 7.0 3.0 8.0 9.0 4.0
12.0 6.0 4.0 7.0 8.0 9.0 12.0 5.0
11.0 9.0 2.0 9.0 7.0 11.0 12.0 6.0
7.0 5.0 3.0 5.0 5.0 6.0 9.0 4.0
9.0 5.0 3.0 7.0 6.0 13.0 12.0 6.0
12.0 16.0 6.0 11.0 14.0 3.0 9.0 7.0
6.0 3.0 3.0 4.0 6.0 4.0 8.0 5.0
8.0 5.0 2.0 11.0 7.0 5.0 8.0 5.0
9.0 7.0 3.0 8.0 8.0 3.0 9.0 5.0
6.0 6.0 4.0 8.0 9.0 5.0 8.0 5.0
16.0 20.0 6.0 12.0 17.0 8.0 11.0 9.0
20.0 26.0 7.0 11.0 20.0 8.0 18.0 14.0
16.0 16.0 5.0 9.0 10.0 14.0 15.0 11.0
7.0 5.0 3.0 10.0 3.0 7.0 6.0 8.0
12.0 13.0 5.0 9.0 6.0 16.0 15.0 8.0
48.0 25.0 10.0 13.0 15.0 25.0 26.0 10.0
21.0 19.0 7.0 13.0 16.0 15.0 21.0 11.0
16.0 24.0 5.0 15.0 14.0 11.0 20.0 6.0
7.0 4.0 3.0 9.0 6.0 6.0 5.0 2.0
4.0 2.0 2.0 4.0 5.0 3.0 13.0 4.0
9.0 11.0 4.0 6.0 6.0 5.0 13.0 7.0
15.0 9.0 21.0 13.0 9.0 9.0 21.0 8.0
17.0 30.0 27.0 20.0 35.0 8.0 21.0 26.0
13.0 12.0 5.0 13.0 11.0 7.0 13.0 8.0
7.0 6.0 4.0 7.0 9.0 5.0 12.0 6.0
9.0 15.0 4.0 7.0 11.0 3.0 14.0 6.0
11.0 13.0 7.0 7.0 9.0 9.0 16.0 19.0
11.0 5.0 9.0 30.0 11.0 18.0 28.0 11.0
25.0 20.0 8.0 21.0 28.0 21.0 35.0 14.0
13.0 18.0 7.0 13.0 23.0 12.0 22.0 12.0
14.0 15.0 4.0 23.0 17.0 15.0 19.0 7.0
23.0 16.0 9.0 21.0 28.0 24.0 31.0 17.0
16.0 10.0 7.0 14.0 14.0 17.0 21.0 8.0
16.0 16.0 10.0 14.0 20.0 18.0 23.0 13.0
9.0 3.0 6.0 11.0 7.0 19.0 18.0 5.0
33.0 9.0 5.0 24.0 19.0 20.0 23.0 13.0
27.0 22.0 7.0 17.0 30.0 15.0 27.0 11.0
24.0 15.0 3.0 13.0 13.0 12.0 17.0 10.0
22.0 16.0 6.0 9.0 13.0 5.0 14.0 5.0
15.0 27.0 12.0 18.0 23.0 7.0 16.0 11.0
24.0 27.0 9.0 14.0 24.0 11.0 21.0 12.0
37.0 28.0 18.0 23.0 34.0 22.0 28.0 8.0
24.0 28.0 17.0 37.0 45.0 15.0 17.0 15.0
18.0 19.0 7.0 14.0 24.0 11.0 14.0 7.0
16.0 11.0 5.0 11.0 8.0 21.0 17.0 5.0
13.0 17.0 7.0 13.0 10.0 10.0 16.0 6.0
21.0 29.0 19.0 18.0 20.0 19.0 23.0 16.0
43.0 25.0 24.0 20.0 39.0 38.0 42.0 23.0
48.0 18.0 20.0 25.0 35.0 26.0 41.0 14.0
44.0 42.0 26.0 58.0 48.0 29.0 47.0 25.0
9.0 8.0 6.0 19.0 18.0 18.0 15.0 4.0
9.0 4.0 8.0 23.0 4.0 20.0 34.0 6.0
21.0 25.0 14.0 35.0 14.0 26.0 27.0 12.0
24.0 21.0 18.0 19.0 22.0 28.0 46.0 13.0
34.0 16.0 42.0 30.0 24.0 39.0 47.0 16.0
13.0 9.0 14.0 18.0 25.0 26.0 11.0
17.0 11.0 26.0 17.0 17.0 27.0 10.0
20.0 4.0 12.0 19.0 16.0 18.0 10.0
AA CO DL NW OH OO UA US
23 14 10 26 32 18 25 9
21 20 14 15 39 15 24 12
15 15 9 17 20 16 21 10
18 16 10 9 5 23 37 10
21 12 13 12 4 44 43 12
24 8 11 11 5 38 33 9
29 7 4 11 5 24 32 10
22 9 4 11 4 25 27 9
8 11 4 4 8 11 15 5
11 10 5 12 8 17 22 7
14 17 8 11 25 11 17 10
5 4 2 4 5 3 9 3
11 4 5 8 13 7 11 8
12 3 3 11 18 8 12 6
6 4 3 9 10 14 10 4
7 5 20 9 4 6 6 4
26 12 25 16 25 21 34 16
18 16 8 11 16 11 15 8
11 6 27 13 12 6 18 9
7 7 9 11 8 10 15 5
28 13 13 21 11 60 37 10
30 22 7 20 17 30 33 12
21 15 6 11 8 22 23 8
13 16 8 7 11 20 13 8
18 13 7 11 8 23 26 6
10 6 5 16 6 11 10 6
21 10 9 13 8 22 23 16
21 10 10 9 5 38 22 7
31 13 5 14 8 24 24 4
13 12 4 10 7 7 12 7
35 43 8 12 10 24 39 13
30 23 17 24 21 19 28 23
15 6 4 9 8 17 18 6
23 8 6 14 5 22 29 16
28 13 9 21 11 21 39 17
32 15 6 14 20 12 19 9
18 16 11 18 16 20 27 7
12 7 4 15 10 11 9 6
20 6 3 15 10 22 15 9
12 3 4 17 5 7 10 4
16 22 9 25 26 11 20 8
19 13 5 11 21 14 18 7
32 45 15 25 37 20 36 23
22 25 22 17 33 12 24 22
18 15 7 13 8 18 14 9
21 17 5 9 17 9 11 13
32 24 5 8 8 9 12 9
22 11 40 25 15 17 20 7
27 24 15 22 30 23 27 14
14 9 5 14 14 17 21 9
8 21 6 6 25 8 9 11
19 21 12 12 19 19 15 10
20 31 33 19 33 14 19 23
15 12 14 13 16 17 20 10
14 6 8 11 17 22 22 9
20 7 3 13 9 17 23 8
20 21 20 25 26 17 27 16
10 12 8 10 14 4 7 6
10 9 4 18 8 5 7 6
19 6 6 26 12 21 17 9
8 14 6 10 9 7 7 7
15 7 5 11 5 18 30 6
33 33 5 15 11 14 11 7
14 18 35 19 22 7 14 10
12 20 8 22 19 5 10 7
16 17 8 11 9 5 9 7
33 27 27 22 40 6 16 18
33 36 56 30 50 11 19 21
21 17 13 12 37 12 16 9
11 34 5 9 18 4 9 8
7 6 3 7 6 4 5 6
9 12 5 7 10 4 8 6
9 7 5 4 5 11 11 5
16 12 14 7 13 11 9 9
18 12 48 14 30 11 11 23
13 13 11 12 16 9 12 13
17 12 8 13 14 10 10 6
26 74 7 15 14 15 16 10
33 42 31 19 32 14 22 22
23 29 13 11 29 8 18 9
32 21 8 40 23 13 28 6
18 6 5 22 13 15 11 6
16 6 5 11 8 4 8 6
9 5 5 7 9 6 7 9
18 7 3 9 6 21 21 7
11 14 5 9 4 4 8 4
28 9 16 14 10 13 29 7
20 18 11 15 18 7 22 7
9 10 11 12 9 8 13 6
32 22 16 19 17 17 18 9
38 32 20 38 21 30 43 14
20 28 18 21 26 11 21 15
11 9 7 9 6 3 13 7
16 8 16 11 12 6 12 8
31 50 63 17 26 10 20 19
13 12 27 12 13 7 11 8
17 10 28 11 19 8 17 15
15 11 11 9 12 4 7 8
14 7 6 7 7 10 16 8
11 13 12 11 6 6 15 6
20 22 12 41 18 22 42 9
17 22 19 27 32 16 28 14
11 10 11 12 22 7 14 8
11 12 8 10 12 4 12 6
8 4 6 7 8 6 11 6
6 4 4 7 5 4 7 5
14 4 4 8 5 8 11 7
16 10 5 5 4 4 6 3
11 9 5 8 7 8 11 5
7 2 4 4 11 5 8 3
12 12 12 12 21 4 16 10
10 9 6 8 14 3 13 6
8 4 4 8 4 3 8 6
17 8 4 7 3 8 10 6
13 7 4 13 4 8 12 5
34 9 5 17 7 13 31 8
16 5 5 12 6 8 22 11
11 8 5 10 7 3 7 10
27 30 18 12 26 11 21 20
9 11 6 5 12 4 9 5
7 6 4 7 7 2 7 2
11 10 5 8 6 14 20 6
52 29 11 40 23 18 46 9
12 11 8 11 14 4 9 5
9 6 4 6 11 11 11 5
16 19 4 8 5 3 7 5
20 8 3 10 4 4 7 3
24 11 5 8 6 16 21 5
13 11 5 7 10 5 12 6
20 29 12 9 11 3 16 10
10 6 5 6 9 3 9 4
20 7 10 10 13 17 21 9
15 18 12 11 19 5 14 16
14 7 3 7 3 7 12 5
25 18 3 8 6 5 10 3
13 11 7 7 10 6 10 4
22 24 13 13 21 7 15 17
7 5 3 7 5 3 7 5
13 13 5 9 12 4 9 11
12 14 5 7 9 4 15 6
12 14 16 9 20 6 13 24
9 9 5 6 7 5 9 8
17 19 9 10 9 14 27 9
15 9 12 9 9 8 16 7
11 4 2 4 3 8 11 4
9 2 2 4 3 2 6 2
9 5 3 8 8 7 9 4
46 32 13 15 19 5 14 10
13 15 4 7 7 2 6 5
8 9 4 12 5 6 7 4
23 7 6 9 5 19 29 6
16 25 13 15 33 8 18 14
14 12 7 9 16 5 13 7
11 5 3 10 7 3 9 4
26 14 6 12 25 19 34 12
26 23 22 19 50 18 32 24
28 16 12 37 21 18 32 16
35 15 9 35 20 18 34 9
20 6 5 19 22 12 30 8
28 17 14 32 20 20 45 13
42 11 14 26 17 13 29 10
24 28 13 20 17 4 24 18
15 10 22 24 13 9 18 10
18 9 13 16 13 12 22 6
29 20 14 31 28 12 34 12
16 18 25 15 23 6 24 11
30 18 13 16 24 15 28 10
26 35 19 16 24 14 35 17
28 17 7 8 11 7 11 10
26 23 12 12 20 3 13 16
50 25 9 10 13 5 14 10
28 19 7 9 12 9 20 10
18 16 12 11 12 5 15 8
32 32 22 16 28 11 28 23
23 26 14 21 29 15 35 15
14 18 6 8 14 8 17 8
22 10 6 12 8 18 22 7
22 51 22 20 25 21 30 15
24 28 19 17 23 17 25 20
30 15 12 21 26 14 26 9
31 41 23 12 20 18 31 14
16 20 8 7 19 7 15 8
9 6 4 6 11 9 12 6
24 16 7 19 13 11 20 9
11 14 4 11 8 4 9 6
8 4 2 4 7 6 7 5
7 6 16 7 9 4 11 5
18 15 47 9 30 16 21 18
25 18 18 18 27 19 30 14
24 23 21 11 25 13 28 20
19 18 22 10 17 7 18 20
20 13 46 15 14 14 18 17
14 5 13 11 15 14 11 9
18 7 12 14 15 13 21 6
21 27 66 14 25 13 27 25
16 9 20 7 28 7 13 8
20 6 8 5 13 10 10 5
12 3 4 8 10 9 12 4
12 9 8 12 20 5 11 6
17 9 11 6 22 16 22 6
17 9 7 7 21 12 17 7
18 20 17 12 38 15 24 14
12 7 13 9 26 15 16 7
15 14 35 10 15 8 15 16
20 34 30 15 32 6 31 31
31 49 15 9 40 6 25 16
13 16 8 8 20 8 17 4
10 9 14 4 13 2 14 5
27 35 24 13 28 14 29 25
16 12 11 6 28 9 20 10
11 5 21 6 16 5 14 6
25 8 10 7 19 3 13 7
24 12 50 12 28 13 26 15
16 7 26 7 24 9 21 8
19 36 24 10 43 5 26 15
15 17 12 8 21 6 18 8
27 13 9 9 12 26 56 9
14 21 8 9 21 13 25 6
10 11 7 6 14 11 18 9
20 23 24 16 26 10 20 20
16 18 10 8 22 9 20 10
14 6 8 11 10 7 18 5
22 39 19 9 37 6 22 23
23 48 16 10 48 5 23 16
12 17 7 6 23 2 10 6
8 4 7 6 11 2 11 7
23 26 18 10 24 3 16 23
45 48 16 11 23 6 24 14
15 22 7 8 11 9 24 8
11 6 7 5 10 10 14 5
15 5 9 5 14 10 10 5
10 6 5 3 6 9 11 4
27 32 5 5 9 6 11 7
16 52 8 5 8 9 12 6
18 10 6 5 11 10 11 5
12 7 4 4 11 5 12 5
7 5 13 5 12 4 8 3
9 3 26 7 14 4 10 11
9 11 40 3 15 5 7 9
8 6 6 9 13 2 7 7
11 5 5 5 11 3 8 11
18 4 6 4 19 3 9 8
10 5 2 3 11 2 5 3
6 1 2 2 8 3 4 3
7 3 4 4 6 4 5 3
8 3 4 3 5 2 8 2
5 4 2 5 2 3 6 4
17 6 3 5 7 12 20 6
7 4 3 3 7 3 8 6
8 8 8 5 17 2 10 5
7 2 9 5 8 3 9 3
13 5 24 6 7 12 17 6
14 28 11 6 27 8 20 14
5 3 5 5 4 4 6 7
6 4 5 4 9 8 8 8
18 11 13 9 21 17 23 11
17 1 4 4 8 14 26 6
18 5 9 10 35 22 18 6
6 30 4 3 19 10 10 5
5 2 3 2 8 8 6 5
5 3 3 4 5 8 9 5
4 5 5 3 6 3 6 5
6 2 4 5 10 3 5 6
4 3 2 2 5 2 4 4
10 3 5 6 10 11 11 4
6 2 5 5 11 3 8 7
4 4 4 10 5 1 7 5
10 6 3 4 6 3 9 7
10 12 9 5 16 3 8 9
17 20 9 11 23 4 16 17
7 5 6 3 14 2 5 5
11 11 9 5 19 2 8 12
10 4 4 5 5 11 8 4
6 3 3 3 5 4 7 4
3 3 3 1 7 2 4 4
4 9 4 3 7 6 5 3
7 7 5 5 9 5 7 3
4 2 3 2 4 11 7 4
7 6 6 5 10 8 9 4
7 4 4 4 6 3 4 3
9 10 3 6 2 8 8 3
8 5 29 3 6 4 7 4
8 8 8 5 7 2 7 5
6 8 8 3 7 5 6 3
8 4 10 5 3 6 5 4
6 3 8 4 5 6 6 4
6 3 8 4 4 3 5 5
6 4 3 3 3 2 4 2
16 40 4 6 2 9 11 4
8 27 6 11 9 4 9 4
6 11 10 5 7 4 5 5
5 3 4 2 3 2 3 3
8 4 6 1 12 8 7 5
8 4 4 3 4 6 7 4
6 8 3 4 4 3 4 3
9 33 3 4 4 3 6 5
7 11 4 6 4 3 4 5
8 7 55 7 18 6 6 10
10 15 13 5 13 3 8 10
12 4 7 6 7 10 12 4
12 5 6 3 7 13 15 6
9 20 8 8 17 4 13 14
6 10 3 2 4 7 6 3
7 7 5 4 5 4 6 4
6 3 4 4 2 10 7 4
6 3 4 4 1 17 12 4
8 5 5 5 4 10 9 10
6 6 4 5 6 14 14 7
4 2 4 3 2 3 4 4
7 10 6 4 6 6 7 6
14 27 8 11 15 6 15 14
13 13 8 7 17 7 12 7
8 6 5 4 17 5 6 5
7 7 4 7 5 5 7 9
13 6 3 6 6 6 5 4
9 24 4 7 8 9 8 3
13 9 7 5 8 15 12 6
10 23 20 7 22 5 10 13
12 31 50 9 27 5 10 20
6 17 11 6 33 1 7 8
8 11 7 8 18 3 4 8
5 4 6 3 9 5 4 3
3 6 3 6 7 1 5 6
5 4 4 6 5 11 7 4
6 5 7 5 6 12 9 5
6 8 8 4 10 4 6 14
4 3 7 4 9 7 6 6
4 3 3 3 5 3 4 4
5 4 6 5 6 6 4 5
6 7 6 4 11 2 4 6
3 3 4 3 4 5 4 4
4 2 4 3 6 7 4 5
4 1 3 3 3 4 4 3
6 7 27 6 9 7 5 6
37 43 52 26 45 28 34 27
40 25 24 22 48 44 24 21
7 5 9 5 10 9 4 7
7 8 5 4 5 11 8 5
6 6 10 4 5 17 17 5
6 3 6 9 6 8 5 5
6 2 4 12 19 7 7 5
9 11 8 15 17 14 12 11
7 4 8 19 12 12 9 4
15 25 6 16 14 15 18 8
12 51 35 7 22 5 13 13
12 45 16 11 23 5 11 21
11 14 10 8 19 7 6 10
6 6 9 7 5 16 5 4
12 10 12 14 13 27 20 17
20 64 12 20 21 25 23 17
38 22 17 29 32 27 30 14
21 20 15 24 34 16 19 21
23 19 13 23 12 19 18 17
26 48 31 45 23 47 32 24
30 59 36 56 68 32 36 27
30 58 29 48 50 40 39 29
22 46 24 27 52 27 34 20
27 30 18 41 45 50 50 14
26 54 15 32 60 47 39 15
11 7 7 9 9 19 11 10
22 12 53 23 23 35 29 13
55 24 34 15 44 44 31 19
9 18 14 9 30 15 12 11
6 6 6 7 12 9 8 7
9 22 6 31 15 12 14 7
12 11 9 13 25 14 15 11
<!DOCTYPE html>
<meta charset="utf-8">
<style>
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
#datastory {
/*text-align: center;*/
font-size: 14px;
}
.box {
font: 10px sans-serif;
}
.box line,
.box rect,
.box circle {
fill: #2ecc71;
stroke: #000;
stroke-width: 1.2px;
}
.box .center {
stroke-dasharray: 3,3;
}
.box .outlier {
fill: none;
stroke: #000;
}
.axis {
font: 12px sans-serif;
}
.axis path,
.axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}
.x.axis path {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}
#chart {
margin-left:auto; margin-right:auto; display:block;
}
</style>
<p id="scroller" align="center">
<label for="nRadius"
style="display: inline-block; width: 240px; text-align: right">
YEAR = <span id="nRadius-value"></span>
</label>
<input type="range" min="2006" step="1" max="2008" id="nRadius">
</p>
<p id="chart"></p>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="box.js"></script>
<script>
var labels = true; // show the text labels beside individual boxplots?
var margin = {top: 30, right: 50, bottom: 70, left: 50};
var width = 800 - margin.left - margin.right;
var height = 400 - margin.top - margin.bottom;
var min = Infinity,
max = -Infinity;
// when the input range changes update
d3.select("#nRadius").on("input", function() {
update(+this.value);
});
// Initial starting year
update(2007);
// update the elements
function update(nRadius) {
// clear everything except first child <p></p>
document.getElementById('chart').remove() ;
// adjust the text on the range slider
d3.select("#nRadius-value").text(nRadius);
d3.select("#nRadius").property("value", nRadius);
console.log(nRadius)
year_to_load = nRadius;
doc_to_load = "compilated_"+year_to_load+".csv";
d3.csv(doc_to_load, function (error, csv) {
// using an array of arrays with
// data[n][2]
// where n = number of columns in the csv file
// data[i][0] = name of the ith column
// data[i][1] = array of values of ith column
var data = [];
data[0] = [];
data[1] = [];
data[2] = [];
data[3] = [];
data[4] = [];
data[5] = [];
data[6] = [];
data[7] = [];
// add more rows if your csv file has more columns
// add here the header of the csv file
data[0][0] = "AA";
data[1][0] = "CO";
data[2][0] = "DL";
data[3][0] = "NW";
data[4][0] = "OH";
data[5][0] = "OO";
data[6][0] = "UA";
data[7][0] = "US";
// add more rows if your csv file has more columns
data[0][1] = [];
data[1][1] = [];
data[2][1] = [];
data[3][1] = [];
data[4][1] = [];
data[5][1] = [];
data[6][1] = [];
data[7][1] = [];
csv.forEach(function(x) {
var v1 = Math.floor(x.AA),
v2 = Math.floor(x.CO),
v3 = Math.floor(x.DL),
v4 = Math.floor(x.NW);
v5 = Math.floor(x.OH);
v6 = Math.floor(x.OO);
v7 = Math.floor(x.UA);
v8 = Math.floor(x.US);
// add more variables if your csv file has more columns, aca habla de los titulos de las columnas en el data.csv
var rowMax = Math.max(v1, Math.max(v2, Math.max(v3, Math.max(v4, Math.max(v5, Math.max(v6, Math.max(v7, v8 )))))));
var rowMin = Math.min(v1, Math.min(v2, Math.min(v3, Math.min(v4, Math.min(v5, Math.min(v6, Math.min(v7, v8 )))))));
data[0][1].push(v1);
data[1][1].push(v2);
data[2][1].push(v3);
data[3][1].push(v4);
data[4][1].push(v5);
data[5][1].push(v6);
data[6][1].push(v7);
data[7][1].push(v8);
// add more rows if your csv file has more columns
if (rowMax > max) max = rowMax;
if (rowMin < min) min = rowMin;
});
var chart = d3.box()
.whiskers(iqr(1.5))
.height(height)
.domain([min, max])
.showLabels(labels);
var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.attr("class", "box")
.attr("id","chart")
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// the x-axis
var x = d3.scale.ordinal()
.domain( data.map(function(d) { console.log(d); return d[0] } ) )
.rangeRoundBands([0 , width], 0.7, 0.3);
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");
// the y-axis
var y = d3.scale.linear()
.domain([min, max])
.range([height + margin.top, 0 + margin.top]);
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
// draw the boxplots
svg.selectAll(".box")
.data(data)
.enter().append("g")
.attr("transform", function(d) { return "translate(" + x(d[0]) + "," + margin.top + ")"; } )
.call(chart.width(x.rangeBand()));
// add a title
svg.append("text")
.attr("x", (width / 2))
.attr("y", 0 + (margin.top / 2))
.attr("text-anchor", "middle")
.style("font-size", "18px")
//.style("text-decoration", "underline")
.text("Average daily delays for each airline for year "+year_to_load);
// draw y axis
svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text") // and text1
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", ".71em")
.style("text-anchor", "end")
.style("font-size", "16px")
.text("Average daily delays in min");
// draw x axis
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + (height + margin.top + 10) + ")")
.call(xAxis)
.append("text") // text label for the x axis
.attr("x", (width / 2) )
.attr("y", 10 )
.attr("dy", ".71em")
.style("text-anchor", "middle")
.style("font-size", "16px")
.text("Airlines");
});
// Returns a function to compute the interquartile range.
function iqr(k) {
return function(d, i) {
var q1 = d.quartiles[0],
q3 = d.quartiles[2],
iqr = (q3 - q1) * k,
i = -1,
j = d.length;
while (d[++i] < q1 - iqr);
while (d[--j] > q3 + iqr);
return [i, j];
};
}
}
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment