

{"id":5801,"date":"2017-04-13T06:56:25","date_gmt":"2017-04-13T11:56:25","guid":{"rendered":"https:\/\/rud.is\/b\/?p=5801"},"modified":"2018-03-07T17:19:53","modified_gmt":"2018-03-07T22:19:53","slug":"come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/","title":{"rendered":"Come Fly With Me (well, not really) \u2014 Comparing Involuntary Disembarking Rates Across U.S. Airlines in R"},"content":{"rendered":"<p>By now, word of the forcible deplanement of a medical professional by United has reached even the remotest of outposts in the <a rel=\"tag\" class=\"hashtag u-tag u-category\" href=\"https:\/\/rud.is\/b\/tag\/rstats\/\">#rstats<\/a> universe. Since the news brought this practice to global attention, I found <a href=\"https:\/\/www.rita.dot.gov\/bts\/sites\/rita.dot.gov.bts\/files\/publications\/national_transportation_statistics\/html\/table_01_64.html\">some aggregate U.S. Gov data<\/a> made a quick, annual, aggregate look at this soon after the incident:<\/p>\n<blockquote class=\"twitter-tweet\" data-lang=\"en\">\n<p lang=\"en\" dir=\"ltr\">Overall annual boarding denial % is small but there were more involuntary denials than I expected ?\u2708\ufe0f<\/p>\n<p>Data: <a href=\"https:\/\/t.co\/PCtK3Ythgp\">https:\/\/t.co\/PCtK3Ythgp<\/a> <a href=\"https:\/\/t.co\/vnl7Sk5qpI\">pic.twitter.com\/vnl7Sk5qpI<\/a><\/p>\n<p>&mdash; \u0411\u043e\u0431 \u0420\u0443\u0434\u0456\u0441 (@hrbrmstr) <a href=\"https:\/\/mobile.twitter.com\/hrbrmstr\/status\/851645587611160576\">April 11, 2017<\/a><\/p><\/blockquote>\n<p><script async src=\"\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/p>\n<p>While informative, that visualization left me wanting for more granular data. Alas, a super-quick search turned up empty.<\/p>\n<p>However, within 24 hours I had a quick glance at a tweet (a link to it in the comments wld be ++gd if anyone fav&#8217;d it) that had a screen capture from a PDF from the <a href=\"https:\/\/www.transportation.gov\/airconsumer\/air-travel-consumer-reports\">U.S. DoT Air Travel Consumer Reports<\/a> site.<\/p>\n<p>There are individual pages for each monthly report which can be derived from the annual index pages. I crafted the URL scraping code below before inspecting an individual PDF. It turns out grabbing <strong>all<\/strong> the PDFs was not necessary since they don&#8217;t provide monthly figures for the involuntary disembarking. But, I wrote the code and it&#8217;ll likely be useful to someone out there so here it is:<\/p>\n<pre id=\"disembark-1\"><code class=\"language-r\">library(rvest)\r\nlibrary(stringi)\r\nlibrary(pdftools)\r\nlibrary(hrbrthemes)\r\nlibrary(tidyverse)\r\n\r\n# some URLs generate infinite redirection loops so be safe out there\r\nsafe_read_html &lt;- safely(read_html)\r\n\r\n# grab the individual page URLs for each month available in each year\r\nc(&quot;https:\/\/www.transportation.gov\/airconsumer\/air-travel-consumer-reports-2017&quot;,\r\n  &quot;https:\/\/www.transportation.gov\/airconsumer\/air-travel-consumer-reports-2016&quot;,\r\n  &quot;https:\/\/www.transportation.gov\/airconsumer\/air-travel-consumer-reports-2015&quot;) %&gt;%\r\n  map(function(x) {\r\n    read_html(x) %&gt;%\r\n      html_nodes(&quot;a[href*=&#039;air-travel-consumer-report&#039;]&quot;) %&gt;%\r\n      html_attr(&#039;href&#039;)\r\n  }) %&gt;%\r\n  flatten_chr() %&gt;%\r\n  discard(stri_detect_regex, &quot;feedback|\/air-travel-consumer-reports&quot;) %&gt;% # filter out URLs we don&#039;t need\r\n  sprintf(&quot;https:\/\/www.transportation.gov%s&quot;, .) -&gt; main_urls # make them useful\r\n\r\n# now, read in all the individual pages. \r\n# do this separate from URL grabbing above and the PDF URL extraction\r\n# below just to be even safer. \r\nmap(main_urls, safe_read_html) -&gt; pages\r\n\r\n# URLs that generate said redirection loops will not have a valid\r\n# result so ignor ethem and find the URLs for the monthly reports\r\ndiscard(pages, ~is.null(.$result)) %&gt;%\r\n  map(&quot;result&quot;) %&gt;%\r\n  map(~html_nodes(., &quot;a[href*=&#039;pdf&#039;]&quot;) %&gt;%\r\n        html_attr(&#039;href&#039;) %&gt;%\r\n        keep(stri_detect_fixed, &quot;ATCR&quot;)) %&gt;%\r\n  flatten_chr() -&gt; pdf_urls\r\n\r\n# download them, being kind to the DoT server and not re-downloading\r\n# anything we&#039;ve successfully downloaded already. I really wish this\r\n# was built-in functionality to download.file()\r\ndir.create(&quot;atcr_pdfs&quot;)\r\nwalk(pdf_urls, ~if (!file.exists(file.path(&quot;atcr_pdfs&quot;, basename(.))))\r\n  download.file(., file.path(&quot;atcr_pdfs&quot;, basename(.))))<\/code><\/pre>\n<p>It also wasn&#8217;t a complete waste for me since the PDF reports have monthly data in other categories and it did provide me with 3 years of data to compare visually.<\/p>\n<p>The table with annual data looks like this in the PDF:<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"5802\" data-permalink=\"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/2015marchatcr_1_pdf__page_34_of_44_\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/04\/2015MarchATCR_1_pdf__page_34_of_44_.png?fit=2372%2C1424&amp;ssl=1\" data-orig-size=\"2372,1424\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"2015MarchATCR_1_pdf__page_34_of_44_\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/04\/2015MarchATCR_1_pdf__page_34_of_44_.png?fit=510%2C306&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/04\/2015MarchATCR_1_pdf__page_34_of_44_.png?resize=510%2C306&#038;ssl=1\" alt=\"\" width=\"510\" height=\"306\" class=\"aligncenter size-full wp-image-5802\" \/><\/p>\n<p>and, that page looks like this after it gets processed by <code>pdftools::pdf_text()<\/code>:<img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"5803\" data-permalink=\"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/untitled-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/04\/untitled.png?fit=2222%2C1356&amp;ssl=1\" data-orig-size=\"2222,1356\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"untitled\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/04\/untitled.png?fit=510%2C311&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/04\/untitled.png?resize=510%2C311&#038;ssl=1\" alt=\"\" width=\"510\" height=\"311\" class=\"aligncenter size-full wp-image-5803\" \/><\/p>\n<p>The format is <em>mostly<\/em> consistent across the three files, but there are enough differences to require edge-case handling. Still, it&#8217;s not too much code to get three, separate tables:<\/p>\n<pre id=\"disembark-2\"><code class=\"language-r\"># read in each PDF; find the pages with the tables we need to scrape;\r\n# enable the text table to be read with read.table() and save the\r\n# results\r\nc(&quot;2017MarchATCR.pdf&quot;, &quot;2016MarchATCR_2.pdf&quot;, &quot;2015MarchATCR_1.pdf&quot;) %&gt;%\r\n  file.path(&quot;atcr_pdfs&quot;, .) %&gt;%\r\n  map(pdf_text) %&gt;%\r\n  map(~keep(.x, stri_detect_fixed, &quot;PASSENGERS DENIED BOARDING&quot;)[[2]]) %&gt;%\r\n  map(stri_split_lines) %&gt;%\r\n  map(flatten_chr) %&gt;%\r\n  map(function(x) {\r\n    y &lt;- which(stri_detect_regex(x, &quot;Rank|RANK|TOTAL&quot;))\r\n    grep(&quot;^\\ +[[:digit:]]&quot;, x[y[1]:y[2]], value=TRUE) %&gt;%\r\n      stri_trim() %&gt;%\r\n      stri_replace_all_regex(&quot;([[:alpha:]])\\\\*+&quot;, &quot;$1&quot;) %&gt;%\r\n      stri_replace_all_regex(&quot; ([[:alpha:]])&quot;, &quot;_$1&quot;) %&gt;%\r\n      paste0(collapse=&quot;\\n&quot;) %&gt;%\r\n      read.table(text=., header=FALSE, stringsAsFactors=FALSE)\r\n  }) -&gt; denied\r\n\r\ndenied\r\n\r\n## [[1]]\r\n##    V1                   V2      V3     V4          V5   V6      V7     V8          V9  V10\r\n## 1   1   _HAWAIIAN_AIRLINES     326     49  10,824,495 0.05     358     29  10,462,344 0.03\r\n## 2   2     _DELTA_AIR_LINES 129,825  1,238 129,281,098 0.10 145,406  1,938 125,044,855 0.15\r\n## 3   3      _VIRGIN_AMERICA   2,375     94   7,945,329 0.12   1,722     80   6,928,805 0.12\r\n## 4   4     _ALASKA_AIRLINES   6,806    931  23,390,900 0.40   5,412    740  22,095,126 0.33\r\n## 5   5     _UNITED_AIRLINES  62,895  3,765  86,836,527 0.43  81,390  6,317  82,081,914 0.77\r\n## 6   6     _SPIRIT_AIRLINES  10,444  1,117  19,418,650 0.58   6,589    496  16,010,164 0.31\r\n## 7   7   _FRONTIER_AIRLINES   2,096    851  14,666,332 0.58   2,744  1,232  12,343,540 1.00\r\n## 8   8   _AMERICAN_AIRLINES  54,259  8,312 130,894,653 0.64  50,317  7,504  97,091,951 0.77\r\n## 9   9     _JETBLUE_AIRWAYS   1,705  3,176  34,710,003 0.92   1,841     73  31,949,251 0.02\r\n## 10 10    _SKYWEST_AIRLINES  41,476  2,935  29,986,918 0.98  51,829  5,079  28,562,760 1.78\r\n## 11 11  _SOUTHWEST_AIRLINES  88,628 14,979 150,655,354 0.99  96,513 15,608 143,932,752 1.08\r\n## 12 12 _EXPRESSJET_AIRLINES  33,590  3,182  21,139,038 1.51  42,933  4,608  24,736,601 1.86\r\n##\r\n## [[2]]\r\n##    V1                   V2      V3     V4          V5   V6      V7     V8          V9  V10\r\n## 1   1     _JETBLUE_AIRWAYS   1,841     73  31,949,251 0.02   2,006    650  29,264,332 0.22\r\n## 2   2   _HAWAIIAN_AIRLINES     358     29  10,462,344 0.03     366    116  10,084,811 0.12\r\n## 3   3      _VIRGIN_AMERICA   1,722     80   6,928,805 0.12     910     57   6,438,023 0.09\r\n## 4   4     _DELTA_AIR_LINES 145,406  1,938 125,044,855 0.16 107,706  4,052 115,737,180 0.35\r\n## 5   5     _SPIRIT_AIRLINES   6,589    496  16,010,164 0.31    ****   ****        **** ****\r\n## 6   6     _ALASKA_AIRLINES   5,412    740  22,095,126 0.33   4,176    864  19,838,878 0.44\r\n## 7   7     _UNITED_AIRLINES  81,390  6,317  82,081,914 0.77  64,968  9,078  77,317,281 1.17\r\n## 8   8   _AMERICAN_AIRLINES  50,317  7,504  97,091,951 0.77  35,152  3,188  77,065,600 0.41\r\n## 9   9   _FRONTIER_AIRLINES   2,744  1,232  12,343,540 1.00   3,864  1,616  11,787,602 1.37\r\n## 10 10  _SOUTHWEST_AIRLINES  96,513 15,608 143,932,752 1.08  82,039 12,041 116,809,601 1.03\r\n## 11 11    _SKYWEST_AIRLINES  51,829  5,079  28,562,760 1.78  42,446  7,170  26,420,593 2.71\r\n## 12 12 _EXPRESSJET_AIRLINES  42,933  4,608  24,736,601 1.86  55,525  7,961  29,344,974 2.71\r\n## 13 13           _ENVOY_AIR  18,125  2,792  11,901,028 2.35  18,615  2,501  15,441,723 1.62\r\n##\r\n## [[3]]\r\n##    V1                   V2      V3     V4          V5   V6     V7    V8          V9  V10\r\n## 1   1      _VIRGIN_AMERICA     910     57   6,438,023 0.09    351    26   6,244,574 0.04\r\n## 2   2   _HAWAIIAN_AIRLINES     366    116  10,084,811 0.12  1,147   172   9,928,830 0.17\r\n## 3   3     _JETBLUE_AIRWAYS   2,006    650  29,264,332 0.22    502    19  28,166,771 0.01\r\n## 4   4     _DELTA_AIR_LINES 107,706  4,052 115,737,180 0.35 81,025 6,070 106,783,155 0.57\r\n## 5   5   _AMERICAN_AIRLINES  60,924  7,471 135,748,581 0.55     **    **          **   **\r\n## 6   6     _ALASKA_AIRLINES   4,176    864  19,838,878 0.44  3,834   714  18,517,953 0.39\r\n## 7   7  _SOUTHWEST_AIRLINES  88,921 13,899 125,381,374 1.11    ***   ***         ***  ***\r\n## 8   8     _UNITED_AIRLINES  64,968  9,078  77,317,281 1.17 57,716 9,015  77,212,471 1.17\r\n## 9   9   _FRONTIER_AIRLINES   3,864  1,616  11,787,602 1.37  3,493 1,272  10,361,896 1.23\r\n## 10 10           _ENVOY_AIR  18,615  2,501  15,441,723 1.62 19,659 1,923  16,939,092 1.14\r\n## 11 11 _EXPRESSJET_AIRLINES  55,525  7,961  29,344,974 2.71 47,844 6,422  31,356,714 2.05\r\n## 12 12    _SKYWEST_AIRLINES  42,446  7,170  26,420,593 2.71 35,942 6,768  26,518,312 2.55<\/code><\/pre>\n<p>And, it&#8217;s not too much more work to get that into a usable, single data frame:<\/p>\n<pre id=\"disembark-3\"><code class=\"language-r\">map2_df(2016:2014, denied, ~{\r\n  .y$year &lt;- .x\r\n  set_names(.y[,c(1:6,11)],\r\n            c(&quot;rank&quot;, &quot;airline&quot;, &quot;voluntary_denied&quot;, &quot;involuntary_denied&quot;,\r\n              &quot;enplaned_ct&quot;, &quot;involuntary_db_per_10k&quot;, &quot;year&quot;)) %&gt;%\r\n    mutate(airline = stri_trans_totitle(stri_trim(stri_replace_all_fixed(airline, &quot;_&quot;, &quot; &quot;)))) %&gt;%\r\n    readr::type_convert() %&gt;%\r\n    tbl_df()\r\n}) %&gt;%\r\n  select(-rank) -&gt; denied\r\n\r\nglimpse(denied)\r\n\r\n## Observations: 37\r\n## Variables: 6\r\n## $ airline                &lt;chr&gt; &quot;Hawaiian Airlines&quot;, &quot;Delta Air Lines&quot;, &quot;Virgin Americ...\r\n## $ voluntary_denied       &lt;dbl&gt; 326, 129825, 2375, 6806, 62895, 10444, 2096, 54259, 17...\r\n## $ involuntary_denied     &lt;dbl&gt; 49, 1238, 94, 931, 3765, 1117, 851, 8312, 3176, 2935, ...\r\n## $ enplaned_ct            &lt;dbl&gt; 10824495, 129281098, 7945329, 23390900, 86836527, 1941...\r\n## $ involuntary_db_per_10k &lt;dbl&gt; 0.05, 0.10, 0.12, 0.40, 0.43, 0.58, 0.58, 0.64, 0.92, ...\r\n## $ year                   &lt;int&gt; 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, ...\r\n\r\ndenied\r\n\r\n## # A tibble: 37 \u00d7 6\r\n##              airline voluntary_denied involuntary_denied enplaned_ct\r\n##                &lt;chr&gt;            &lt;dbl&gt;              &lt;dbl&gt;       &lt;dbl&gt;\r\n## 1  Hawaiian Airlines              326                 49    10824495\r\n## 2    Delta Air Lines           129825               1238   129281098\r\n## 3     Virgin America             2375                 94     7945329\r\n## 4    Alaska Airlines             6806                931    23390900\r\n## 5    United Airlines            62895               3765    86836527\r\n## 6    Spirit Airlines            10444               1117    19418650\r\n## 7  Frontier Airlines             2096                851    14666332\r\n## 8  American Airlines            54259               8312   130894653\r\n## 9    Jetblue Airways             1705               3176    34710003\r\n## 10  Skywest Airlines            41476               2935    29986918\r\n## # ... with 27 more rows, and 2 more variables: involuntary_db_per_10k &lt;dbl&gt;, year &lt;int&gt;<\/code><\/pre>\n<p>Airlines merge and the PDF does account for that (to some degree) but I&#8217;m not writing a news story and only care about the airlines with three years of data since I &#8212; for the most part &#8212; have only ever flown on ones in that list, so the last step is to filter the list to those with three years of data and make a multi-column slopegraph\/bumps chart based on the involuntary disembarking rate by 10k passengers (normalized rates FTW!):<\/p>\n<pre id=\"disembark-4\"><code class=\"language-r\">select(denied, airline, year, involuntary_db_per_10k) %&gt;%\r\n  group_by(airline) %&gt;%\r\n  mutate(yr_ct = n()) %&gt;%\r\n  ungroup() %&gt;%\r\n  filter(yr_ct == 3) %&gt;%\r\n  select(-yr_ct) %&gt;%\r\n  mutate(year = factor(year, rev(c(max(year)+1, unique(year))))) -&gt; plot_df\r\n\r\nupdate_geom_font_defaults(font_rc, size = 3)\r\n\r\nggplot() +\r\n  geom_line(data = plot_df, aes(year, involuntary_db_per_10k, group=airline, colour=airline)) +\r\n  geom_text(data = filter(plot_df, year==&#039;2016&#039;) %&gt;% mutate(lbl = sprintf(&quot;%s (%s)&quot;, airline, involuntary_db_per_10k)),\r\n            aes(x=year, y=involuntary_db_per_10k, label=lbl, colour=airline), hjust=0,\r\n            nudge_y=c(0,0,0,0,0,0,0,0,-0.0005,0.03,0), nudge_x=0.015) +\r\n  scale_x_discrete(expand=c(0,0), labels=c(2014:2016, &quot;&quot;), drop=FALSE) +\r\n  scale_y_continuous(trans=&quot;log1p&quot;) +\r\n  ggthemes::scale_color_tableau() +\r\n  labs(x=NULL, y=NULL,\r\n       title=&quot;Involuntary Disembark Rate Per 10K Passengers&quot;,\r\n       subtitle=&quot;Y-axis log scale; Only included airlines with 3-year span data&quot;,\r\n       caption=&quot;Source: U.S. DoT Air Travel Consumer Reports &lt;https:\/\/www.transportation.gov\/airconsumer\/air-travel-consumer-reports&gt;&quot;) +\r\n  theme_ipsum_rc(grid=&quot;X&quot;) +\r\n  theme(plot.caption=element_text(hjust=0)) +\r\n  theme(legend.position=&quot;none&quot;)\r\n<\/code><\/pre>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"5809\" data-permalink=\"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/plot_zoom-8\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/04\/Plot_Zoom.png?fit=1408%2C1648&amp;ssl=1\" data-orig-size=\"1408,1648\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Plot_Zoom\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/04\/Plot_Zoom.png?fit=510%2C597&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/04\/Plot_Zoom.png?resize=510%2C597&#038;ssl=1\" alt=\"\" width=\"510\" height=\"597\" class=\"aligncenter size-full wp-image-5809\" \/><\/p>\n<p>I&#8217;m <em>really<\/em> glad I don&#8217;t fly on JetBlue much anymore.<\/p>\n<h3>FIN<\/h3>\n<p>The code and a CSV of the cleaned data is in <a href=\"https:\/\/gist.github.com\/hrbrmstr\/e73c4130902e22bbbf863c692bc2461b\">this gist<\/a> and the code is also in <a href=\"http:\/\/rpubs.com\/hrbrmstr\/disembaRking\">this RPub<\/a>.<\/p>\n<p>I&#8217;m also glad to now know about a previously hidden, helpful resource for consumers who have to fly on U.S. carriers.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By now, word of the forcible deplanement of a medical professional by United has reached even the remotest of outposts in the #rstats universe. Since the news brought this practice to global attention, I found some aggregate U.S. Gov data made a quick, annual, aggregate look at this soon after the incident: Overall annual boarding [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_post_was_ever_published":false},"categories":[764,753,91,725],"tags":[810],"class_list":["post-5801","post","type-post","status-publish","format-standard","hentry","category-data-wrangling","category-ggplot","category-r","category-web-scraping","tag-post"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Come Fly With Me (well, not really) \u2014 Comparing Involuntary Disembarking Rates Across U.S. Airlines in R - rud.is<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Come Fly With Me (well, not really) \u2014 Comparing Involuntary Disembarking Rates Across U.S. Airlines in R - rud.is\" \/>\n<meta property=\"og:description\" content=\"By now, word of the forcible deplanement of a medical professional by United has reached even the remotest of outposts in the #rstats universe. Since the news brought this practice to global attention, I found some aggregate U.S. Gov data made a quick, annual, aggregate look at this soon after the incident: Overall annual boarding [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-13T11:56:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-03-07T22:19:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/rud.is\/b\/wp-content\/uploads\/2017\/04\/2015MarchATCR_1_pdf__page_34_of_44_.png\" \/>\n<meta name=\"author\" content=\"hrbrmstr\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"hrbrmstr\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2017\\\/04\\\/13\\\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2017\\\/04\\\/13\\\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\\\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"Come Fly With Me (well, not really) \u2014 Comparing Involuntary Disembarking Rates Across U.S. Airlines in R\",\"datePublished\":\"2017-04-13T11:56:25+00:00\",\"dateModified\":\"2018-03-07T22:19:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2017\\\/04\\\/13\\\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\\\/\"},\"wordCount\":495,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2017\\\/04\\\/13\\\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2017\\\/04\\\/2015MarchATCR_1_pdf__page_34_of_44_.png\",\"keywords\":[\"post\"],\"articleSection\":[\"data wrangling\",\"ggplot\",\"R\",\"web scraping\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2017\\\/04\\\/13\\\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2017\\\/04\\\/13\\\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\\\/\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/2017\\\/04\\\/13\\\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\\\/\",\"name\":\"Come Fly With Me (well, not really) \u2014 Comparing Involuntary Disembarking Rates Across U.S. Airlines in R - rud.is\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2017\\\/04\\\/13\\\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2017\\\/04\\\/13\\\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2017\\\/04\\\/2015MarchATCR_1_pdf__page_34_of_44_.png\",\"datePublished\":\"2017-04-13T11:56:25+00:00\",\"dateModified\":\"2018-03-07T22:19:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2017\\\/04\\\/13\\\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2017\\\/04\\\/13\\\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2017\\\/04\\\/13\\\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2017\\\/04\\\/2015MarchATCR_1_pdf__page_34_of_44_.png?fit=2372%2C1424&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2017\\\/04\\\/2015MarchATCR_1_pdf__page_34_of_44_.png?fit=2372%2C1424&ssl=1\",\"width\":2372,\"height\":1424},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2017\\\/04\\\/13\\\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rud.is\\\/b\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Come Fly With Me (well, not really) \u2014 Comparing Involuntary Disembarking Rates Across U.S. Airlines in R\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/\",\"name\":\"rud.is\",\"description\":\"&quot;In God we trust. All others must bring data&quot;\",\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rud.is\\\/b\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\",\"name\":\"hrbrmstr\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"width\":460,\"height\":460,\"caption\":\"hrbrmstr\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\"},\"description\":\"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7\",\"sameAs\":[\"http:\\\/\\\/rud.is\"],\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/author\\\/hrbrmstr\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Come Fly With Me (well, not really) \u2014 Comparing Involuntary Disembarking Rates Across U.S. Airlines in R - rud.is","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/","og_locale":"en_US","og_type":"article","og_title":"Come Fly With Me (well, not really) \u2014 Comparing Involuntary Disembarking Rates Across U.S. Airlines in R - rud.is","og_description":"By now, word of the forcible deplanement of a medical professional by United has reached even the remotest of outposts in the #rstats universe. Since the news brought this practice to global attention, I found some aggregate U.S. Gov data made a quick, annual, aggregate look at this soon after the incident: Overall annual boarding [&hellip;]","og_url":"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/","og_site_name":"rud.is","article_published_time":"2017-04-13T11:56:25+00:00","article_modified_time":"2018-03-07T22:19:53+00:00","og_image":[{"url":"https:\/\/rud.is\/b\/wp-content\/uploads\/2017\/04\/2015MarchATCR_1_pdf__page_34_of_44_.png","type":"","width":"","height":""}],"author":"hrbrmstr","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hrbrmstr","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"Come Fly With Me (well, not really) \u2014 Comparing Involuntary Disembarking Rates Across U.S. Airlines in R","datePublished":"2017-04-13T11:56:25+00:00","dateModified":"2018-03-07T22:19:53+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/"},"wordCount":495,"commentCount":0,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"image":{"@id":"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/#primaryimage"},"thumbnailUrl":"https:\/\/rud.is\/b\/wp-content\/uploads\/2017\/04\/2015MarchATCR_1_pdf__page_34_of_44_.png","keywords":["post"],"articleSection":["data wrangling","ggplot","R","web scraping"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/","url":"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/","name":"Come Fly With Me (well, not really) \u2014 Comparing Involuntary Disembarking Rates Across U.S. Airlines in R - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/#primaryimage"},"image":{"@id":"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/#primaryimage"},"thumbnailUrl":"https:\/\/rud.is\/b\/wp-content\/uploads\/2017\/04\/2015MarchATCR_1_pdf__page_34_of_44_.png","datePublished":"2017-04-13T11:56:25+00:00","dateModified":"2018-03-07T22:19:53+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/#primaryimage","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/04\/2015MarchATCR_1_pdf__page_34_of_44_.png?fit=2372%2C1424&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/04\/2015MarchATCR_1_pdf__page_34_of_44_.png?fit=2372%2C1424&ssl=1","width":2372,"height":1424},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2017\/04\/13\/come-fly-with-me-well-not-really-comparing-involuntary-disembarking-rates-across-u-s-airlines-in-r\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"Come Fly With Me (well, not really) \u2014 Comparing Involuntary Disembarking Rates Across U.S. Airlines in R"}]},{"@type":"WebSite","@id":"https:\/\/rud.is\/b\/#website","url":"https:\/\/rud.is\/b\/","name":"rud.is","description":"&quot;In God we trust. All others must bring data&quot;","publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rud.is\/b\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886","name":"hrbrmstr","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","width":460,"height":460,"caption":"hrbrmstr"},"logo":{"@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1"},"description":"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7","sameAs":["http:\/\/rud.is"],"url":"https:\/\/rud.is\/b\/author\/hrbrmstr\/"}]}},"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p23idr-1vz","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":3977,"url":"https:\/\/rud.is\/b\/2016\/02\/27\/create-vega-lite-specs-widgets-with-the-vegalite-package\/","url_meta":{"origin":5801,"position":0},"title":"Create Vega-Lite specs &#038; widgets with the vegalite package","author":"hrbrmstr","date":"2016-02-27","format":false,"excerpt":"[Vega-Lite](http:\/\/vega.github.io\/vega-lite\/) 1.0 was [released this past week](https:\/\/medium.com\/@uwdata\/introducing-vega-lite-438f9215f09e#.yfkl0tp1c). I had been meaning to play with it for a while but I've been burned before by working with unstable APIs and was waiting for this to bake to a stable release. Thankfully, there were no new shows in the Fire TV, Apple\u2026","rel":"","context":"In &quot;d3&quot;","block_context":{"text":"d3","link":"https:\/\/rud.is\/b\/category\/d3\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/02\/gallery.png?fit=1200%2C595&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/02\/gallery.png?fit=1200%2C595&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/02\/gallery.png?fit=1200%2C595&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/02\/gallery.png?fit=1200%2C595&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/02\/gallery.png?fit=1200%2C595&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":4049,"url":"https:\/\/rud.is\/b\/2016\/03\/07\/primary-plotting\/","url_meta":{"origin":5801,"position":1},"title":"Primary Plotting","author":"hrbrmstr","date":"2016-03-07","format":false,"excerpt":"My wife tricked me into a partial-weekend project to try to get all the primary\/caucus results to-date on a map (the whole us). This is challenging since not all states use counties as boundaries for aggregate results. I'm still piecing together some shapefiles for the primary\/caucus summation boundaries for a\u2026","rel":"","context":"In &quot;DataVis&quot;","block_context":{"text":"DataVis","link":"https:\/\/rud.is\/b\/category\/datavis-2\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4027,"url":"https:\/\/rud.is\/b\/2016\/02\/28\/a-tale-of-two-charting-paradigms-vega-lite-vs-rggplot2\/","url_meta":{"origin":5801,"position":2},"title":"A Tale of Two Charting Paradigms: Vega-Lite vs R+ggplot2","author":"hrbrmstr","date":"2016-02-28","format":false,"excerpt":"This post comes hot off the heels of the [nigh-feature-complete release of `vegalite`](http:\/\/rud.is\/b\/2016\/02\/27\/create-vega-lite-specs-widgets-with-the-vegalite-package\/) (virtually all the components of Vega-Lite are now implemented and just need real-world user testing). I've had a few and seen a few questions about \"why Vega-Lite\"? I _think_ my previous post gave some good answers to\u2026","rel":"","context":"In &quot;d3&quot;","block_context":{"text":"d3","link":"https:\/\/rud.is\/b\/category\/d3\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2190,"url":"https:\/\/rud.is\/b\/2013\/02\/27\/follow-upresources-grc-t18-data-analysis-and-visualization-for-security-professionals-rsac\/","url_meta":{"origin":5801,"position":3},"title":"Follow up\/Resources :: GRC-T18 \u2013 Data Analysis and Visualization for Security Professionals #RSAC","author":"hrbrmstr","date":"2013-02-27","format":false,"excerpt":"Many thanks to all who attended the talk @jayjacobs & I gave at RSA on Tuesday, February 26, 2013. It was really great to be able to talk to so many of you afterwards as well. We've enumerated quite a bit of non-slide-but-in-presentation information that we wanted to aggregate into\u2026","rel":"","context":"In &quot;Charts &amp; Graphs&quot;","block_context":{"text":"Charts &amp; Graphs","link":"https:\/\/rud.is\/b\/category\/charts-graphs\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2465,"url":"https:\/\/rud.is\/b\/2013\/04\/18\/sourceboston2013\/","url_meta":{"origin":5801,"position":4},"title":"SOURCE Boston (@SOURCEConf) Data Analysis &#038; Visualization Talk Resources #srcbos13","author":"hrbrmstr","date":"2013-04-18","format":false,"excerpt":"Many thanks to all who attended the talk @jayjacobs & I gave at @SOURCEconf on Thursday, April 18, 2013. As promised, here are the [slides](https:\/\/dl.dropboxusercontent.com\/u\/43553\/SOURCE-Boston-2013.pdf) which should be much less washed out than the projector version :-) We've enumerated quite a bit of non-slide-but-in-presentation information that we wanted to aggregate\u2026","rel":"","context":"In &quot;Big Data&quot;","block_context":{"text":"Big Data","link":"https:\/\/rud.is\/b\/category\/big-data\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":6046,"url":"https:\/\/rud.is\/b\/2017\/05\/31\/drilling-into-csvs-teaser-trailer\/","url_meta":{"origin":5801,"position":5},"title":"Drilling Into CSVs \u2014 Teaser Trailer","author":"hrbrmstr","date":"2017-05-31","format":false,"excerpt":"I used reading a directory of CSVs as the foundational example in my recent post on idioms. During my exchange with Matt, Hadley and a few others -- in the crazy Twitter thread that spawned said post -- I mentioned that I'd personally \"just use Drill\u201d. I'll use this post\u2026","rel":"","context":"In &quot;Apache Drill&quot;","block_context":{"text":"Apache Drill","link":"https:\/\/rud.is\/b\/category\/apache-drill\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/5801","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/comments?post=5801"}],"version-history":[{"count":16,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/5801\/revisions"}],"predecessor-version":[{"id":8638,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/5801\/revisions\/8638"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=5801"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=5801"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=5801"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}