

{"id":11946,"date":"2019-02-20T00:08:49","date_gmt":"2019-02-20T05:08:49","guid":{"rendered":"https:\/\/rud.is\/b\/?p=11946"},"modified":"2019-02-20T07:19:00","modified_gmt":"2019-02-20T12:19:00","slug":"i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/","title":{"rendered":"I Just Wanted The Data : Turning Tableau &#038; Tidyverse Tears Into Smiles with Base R (An Encoding Detective Story)"},"content":{"rendered":"<p>Those outside the Colonies may not know that Payless&mdash;a national chain that made footwear affordable for millions of &#8216;Muricans who can&#8217;t spare $100.00 USD for a pair of shoes their 7 year old will outgrow in a year&mdash; <a href=\"https:\/\/www.vox.com\/the-goods\/2019\/2\/18\/18229378\/payless-shoesource-liqudation-stores-closing\">is closing<\/a>. CNBC also had <a href=\"https:\/\/www.cnbc.com\/2019\/02\/19\/heres-a-map-of-where-payless-shoesource-is-closing-2500-stores.html\">a story<\/a> that featured a choropleth with a tiny button at the bottom that indicated one could get the data:<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/payless-get-data.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"11948\" data-permalink=\"https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/payless-get-data\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/payless-get-data.png?fit=2074%2C1232&amp;ssl=1\" data-orig-size=\"2074,1232\" 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=\"payless-get-data\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/payless-get-data.png?fit=510%2C303&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/payless-get-data.png?resize=510%2C303&#038;ssl=1\" alt=\"\" width=\"510\" height=\"303\" class=\"aligncenter size-full wp-image-11948\" \/><\/a><\/p>\n<p>I should have known this would turn out to be a chore since they used Tableau&mdash;the platform of choice when you want to take advantage of all the free software libraries they use to power their premier platform which, in turn, locks up all the data for you so others can&#8217;t adopt, adapt and improve. Go. Egregious. Predatory. Capitalism.<\/p>\n<p><em>Anyway.<\/em><\/p>\n<p>I wanted the data to do some real analysis vs produce a fairly unhelpful visualization (TLDR: layer in Census data for areas impacted, estimate job losses, compute nearest similar Payless stores to see impact on transportation-challenged homes, etc. Y&#8217;now, citizen data journalism-y things) so I pressed the button and watched for the URL in Chrome (aye, for those that remember I moved to Firefox et al in 2018, I switched back; more on that in March) and copied it to try to make this post actually reproducible (a novel concept for Tableau fanbois):<\/p>\n<pre><code class=\"language-r\">library(tibble)\nlibrary(readr)\n\n# https:\/\/www.cnbc.com\/2019\/02\/19\/heres-a-map-of-where-payless-shoesource-is-closing-2500-stores.html\n\ntfil &lt;- \"~\/Data\/Sheet_3_data.csv\"\n\ndownload.file(\n  \"https:\/\/public.tableau.com\/vizql\/w\/PAYLESSSTORECLOSINGS\/v\/Dashboard2\/vud\/sessions\/6A678928620645FF99C7EF6353426CE8-0:0\/views\/10625182665948828489_7202546092381496425?csv=true&amp;showall=true\",\n  tfil\n)\n## trying URL 'https:\/\/public.tableau.com\/vizql\/w\/PAYLESSSTORECLOSINGS\/v\/Dashboard2\/vud\/sessions\/6A678928620645FF99C7EF6353426CE8-0:0\/views\/10625182665948828489_7202546092381496425?csv=true&amp;showall=true'\n## Error in download.file(\"https:\/\/public.tableau.com\/vizql\/w\/PAYLESSSTORECLOSINGS\/v\/Dashboard2\/vud\/sessions\/6A678928620645FF99C7EF6353426CE8-0:0\/views\/10625182665948828489_7202546092381496425?csv=true&amp;showall=true\",  : \n##   cannot open URL 'https:\/\/public.tableau.com\/vizql\/w\/PAYLESSSTORECLOSINGS\/v\/Dashboard2\/vud\/sessions\/6A678928620645FF99C7EF6353426CE8-0:0\/views\/10625182665948828489_7202546092381496425?csv=true&amp;showall=true'\n## In addition: Warning message:\n## In download.file(\"https:\/\/public.tableau.com\/vizql\/w\/PAYLESSSTORECLOSINGS\/v\/Dashboard2\/vud\/sessions\/6A678928620645FF99C7EF6353426CE8-0:0\/views\/10625182665948828489_7202546092381496425?csv=true&amp;showall=true\",  :\n##   cannot open URL 'https:\/\/public.tableau.com\/vizql\/w\/PAYLESSSTORECLOSINGS\/v\/Dashboard2\/vud\/sessions\/6A678928620645FF99C7EF6353426CE8-0:0\/views\/10625182665948828489_7202546092381496425?csv=true&amp;showall=true': HTTP status was '410 Gone'\n<\/code><\/pre>\n<p>WAT<\/p>\n<p>Truth be told I expected a time-boxed URL of some sort (prior experience FTW). Selenium or Splash were potential alternatives but I didn&#8217;t want to research the legality of more forceful scraping (I just wanted the data) so I <em>manually<\/em> downloaded the file (&#42;the horror&#42;) and proceeded to read it in. Well, <em>try<\/em> to read it in:<\/p>\n<pre><code class=\"language-r\">read_csv(tfil)\n## Parsed with column specification:\n## cols(\n##   A = col_logical()\n## )\n## Warning: 2092 parsing failures.\n## row col           expected actual                      file\n##   1   A 1\/0\/T\/F\/TRUE\/FALSE        '~\/Data\/Sheet_3_data.csv'\n##   2   A 1\/0\/T\/F\/TRUE\/FALSE        '~\/Data\/Sheet_3_data.csv'\n##   3   A 1\/0\/T\/F\/TRUE\/FALSE        '~\/Data\/Sheet_3_data.csv'\n##   4   A 1\/0\/T\/F\/TRUE\/FALSE        '~\/Data\/Sheet_3_data.csv'\n##   5   A 1\/0\/T\/F\/TRUE\/FALSE        '~\/Data\/Sheet_3_data.csv'\n## ... ... .................. ...... .........................\n## See problems(...) for more details.\n## \n## # A tibble: 2,090 x 1\n##    A    \n##    &lt;lgl&gt;\n##  1 NA   \n##  2 NA   \n##  3 NA   \n##  4 NA   \n##  5 NA   \n##  6 NA   \n##  7 NA   \n##  8 NA   \n##  9 NA   \n## 10 NA   \n## # \u2026 with 2,080 more rows\n<\/code><\/pre>\n<p>WAT<\/p>\n<p>Getting a single column back from <code>readr::read_[ct]sv()<\/code> is (generally) a tell-tale sign that the file format is amiss. Before donning a <a href=\"https:\/\/shop.bbc.com\/deerstalker-hat-18746.html\">deerstalker<\/a> (I just wanted the data!) I tried to just use good ol&#8217; <code>read.csv()<\/code>:<\/p>\n<pre><code class=\"language-r\">read.csv(tfil, stringsAsFactors=FALSE)\n## Error in make.names(col.names, unique = TRUE) : \n##   invalid multibyte string at '&lt;ff&gt;&lt;fe&gt;A'\n## In addition: Warning messages:\n## 1: In read.table(file = file, header = header, sep = sep, quote = quote,  :\n##   line 1 appears to contain embedded nulls\n## 2: In read.table(file = file, header = header, sep = sep, quote = quote,  :\n##   line 2 appears to contain embedded nulls\n## 3: In read.table(file = file, header = header, sep = sep, quote = quote,  :\n##   line 3 appears to contain embedded nulls\n## 4: In read.table(file = file, header = header, sep = sep, quote = quote,  :\n##   line 4 appears to contain embedded nulls\n## 5: In read.table(file = file, header = header, sep = sep, quote = quote,  :\n##   line 5 appears to contain embedded nulls\n<\/code><\/pre>\n<p>WAT<\/p>\n<p>Actually the &#8220;WAT&#8221; isn&#8217;t <em>really<\/em> warranted since <code>read.csv()<\/code> gave us some super-valuable info via <code>invalid multibyte string at '&lt;ff&gt;&lt;fe&gt;A'<\/code>. <code>FF FE<\/code> is a <em>big<\/em> signal<sup><a href=\"https:\/\/en.wikipedia.org\/wiki\/UTF-16\">1<\/a> <a href=\"http:\/\/unicode.org\/faq\/utf_bom.html\">2<\/a><\/sup> we&#8217;re working with a file in another encoding as that&#8217;s a common &#8220;magic&#8221; sequence at the start of such files.<\/p>\n<p>But, I didn&#8217;t want to delve into my Columbo persona\u2026 <em>I. Just. Wanted. The. Data<\/em>. So, I tried the mind-bendingly fast and flexible helper from <code>data.table<\/code>:<\/p>\n<pre><code class=\"language-r\">data.table::fread(tfil)\n## Error in data.table::fread(tfil) : \n##   File is encoded in UTF-16, this encoding is not supported by fread(). Please recode the file to UTF-8.\n<\/code><\/pre>\n<p><em>AHA<\/em>. UTF-16 (<em>maybe<\/em>). Let&#8217;s poke at the raw file:<\/p>\n<pre><code class=\"language-r\">x &lt;- readBin(tfil, \"raw\", file.size(tfil)) ## also: read_file_raw(tfil)\n\nx[1:100]\n##   [1] ff fe 41 00 64 00 64 00 72 00 65 00 73 00 73 00 09 00 43 00\n##  [21] 69 00 74 00 79 00 09 00 43 00 6f 00 75 00 6e 00 74 00 72 00\n##  [41] 79 00 09 00 49 00 6e 00 64 00 65 00 78 00 09 00 4c 00 61 00\n##  [61] 62 00 65 00 6c 00 09 00 4c 00 61 00 74 00 69 00 74 00 75 00\n##  [81] 64 00 65 00 09 00 4c 00 6f 00 6e 00 67 00 69 00 74 00 75 00\n<\/code><\/pre>\n<p>There&#8217;s our <code>ff fe<\/code> (which is the beginning of the possibility it&#8217;s UTF-16) but that <code>41 00<\/code> harkens back to UTF-16&#8217;s older sibling UCS-2. The <code>0x00<\/code>&#8216;s are embedded <code>nul<\/code>s (likely to get bytes aligned). And, there are <em>alot<\/em> of <code>09<\/code>s. Y&#8217;know what <em>they<\/em> are? They&#8217;re <code>&lt;tab&gt;<\/code>s. That&#8217;s right. Tableau named file full of TSV records in an unnecessary elaborate encoding as <code>CSV<\/code>. Perhaps they broke the &#8220;T&#8221; on all their keyboards typing their product name so much.<\/p>\n<h3>Living A Boy&#8217;s [Data] Adventure Tale<\/h3>\n<p>At this point we have:<\/p>\n<ul>\n<li>no way to support an automated, reproducible workflow<\/li>\n<li>an ill-named file for what it contains<\/li>\n<li>an overly-encoded file for what it contains<\/li>\n<li>many wasted minutes (which is likely by design to have us give up and just use Tableau. <em>No. Way.<\/em>)<\/li>\n<\/ul>\n<p>At this point I&#8217;m in full-on Rockford Files (pun intended) mode and delved down to the command line to use a old, trusted sidekick <a href=\"https:\/\/github.com\/nijel\/enca\/\"><code>enca<\/code>?<\/a>:<\/p>\n<pre><code class=\"language-plain\">$ enca -L none Sheet_3_data.csv\n## Universal character set 2 bytes; UCS-2; BMP\n##   LF line terminators\n##   Byte order reversed in pairs (1,2 -&gt; 2,1)\n<\/code><\/pre>\n<p>Now, all we have to do is specify the encoding!<\/p>\n<pre><code class=\"language-r\">read_tsv(tfil, locale = locale(encoding = \"UCS-2LE\"))\n## Error in guess_header_(datasource, tokenizer, locale) : \n##   Incomplete multibyte sequence\n<\/code><\/pre>\n<p>WAT<\/p>\n<p>Unlike the other 99% of the time (mebbe 99.9%) you use it, the tidyverse doesn&#8217;t have your back in this situation (but it <em>does<\/em> have your <a href=\"https:\/\/github.com\/tidyverse\/readr\/milestone\/5\">backlog<\/a> in that it&#8217;s on the TODO).<\/p>\n<p>Y&#8217;know who <em>does<\/em> have your back? Base R!:<\/p>\n<pre><code class=\"language-r\">read.csv(tfil, sep=\"\\t\", fileEncoding = \"UCS-2LE\", stringsAsFactors=FALSE) %&gt;% \n  as_tibble()\n## # A tibble: 2,089 x 14\n##    Address City  Country Index Label Latitude Longitude\n##    &lt;chr&gt;   &lt;chr&gt; &lt;chr&gt;   &lt;int&gt; &lt;chr&gt;    &lt;dbl&gt;     &lt;dbl&gt;\n##  1 1627 O\u2026 Aubu\u2026 United\u2026     1 Payl\u2026     32.6     -85.4\n##  2 900 Co\u2026 Doth\u2026 United\u2026     2 Payl\u2026     31.3     -85.4\n##  3 301 Co\u2026 Flor\u2026 United\u2026     3 Payl\u2026     34.8     -87.6\n##  4 304 Ox\u2026 Home\u2026 United\u2026     4 Payl\u2026     33.5     -86.8\n##  5 2000 R\u2026 Hoov\u2026 United\u2026     5 Payl\u2026     33.4     -86.8\n##  6 6140 U\u2026 Hunt\u2026 United\u2026     6 Payl\u2026     34.7     -86.7\n##  7 312 Sc\u2026 Mobi\u2026 United\u2026     7 Payl\u2026     30.7     -88.2\n##  8 3402 B\u2026 Mobi\u2026 United\u2026     8 Payl\u2026     30.7     -88.1\n##  9 5300 H\u2026 Mobi\u2026 United\u2026     9 Payl\u2026     30.6     -88.2\n## 10 6641 A\u2026 Mont\u2026 United\u2026    10 Payl\u2026     32.4     -86.2\n## # \u2026 with 2,079 more rows, and 7 more variables:\n## #   Number.of.Records &lt;int&gt;, State &lt;chr&gt;, Store.Number &lt;int&gt;,\n## #   Store.count &lt;int&gt;, Zip.code &lt;chr&gt;, State.Usps &lt;chr&gt;,\n## #   statename &lt;chr&gt;\n<\/code><\/pre>\n<p><strike>WAT<\/strike> WOOT!<\/p>\n<p>Note that <code>read.csv(tfil, sep=\"\\t\", fileEncoding = \"UTF-16LE\", stringsAsFactors=FALSE)<\/code> would have worked equally as well.<\/p>\n<h3>The Road Not [Originally] Taken<\/h3>\n<p>Since this activity decimated productivity, for giggles I turned to another trusted R sidekick, the <code>stringi<\/code> package, to see what it said:<\/p>\n<pre><code class=\"language-r\">library(stringi)\n\nstri_enc_detect(x)\n## [[1]]\n##      Encoding Language Confidence\n## 1    UTF-16LE                1.00\n## 2  ISO-8859-1       pt       0.61\n## 3  ISO-8859-2       cs       0.39\n## 4    UTF-16BE                0.10\n## 5   Shift_JIS       ja       0.10\n## 6     GB18030       zh       0.10\n## 7      EUC-JP       ja       0.10\n## 8      EUC-KR       ko       0.10\n## 9        Big5       zh       0.10\n## 10 ISO-8859-9       tr       0.01\n<\/code><\/pre>\n<p>And, just so it&#8217;s primed in the Google caches for future searchers, another way to get this data (and other data that&#8217;s even gnarlier but similar in form) into R would have been:<\/p>\n<pre><code class=\"language-r\">stri_read_lines(tfil) %&gt;% \n  paste0(collapse=\"\\n\") %&gt;% \n  read.csv(text=., sep=\"\\t\", stringsAsFactors=FALSE) %&gt;% \n  as_tibble()\n## # A tibble: 2,089 x 14\n##    Address City  Country Index Label Latitude Longitude\n##    &lt;chr&gt;   &lt;chr&gt; &lt;chr&gt;   &lt;dbl&gt; &lt;chr&gt;    &lt;dbl&gt;     &lt;dbl&gt;\n##  1 1627 O\u2026 Aubu\u2026 United\u2026     1 Payl\u2026     32.6     -85.4\n##  2 900 Co\u2026 Doth\u2026 United\u2026     2 Payl\u2026     31.3     -85.4\n##  3 301 Co\u2026 Flor\u2026 United\u2026     3 Payl\u2026     34.8     -87.6\n##  4 304 Ox\u2026 Home\u2026 United\u2026     4 Payl\u2026     33.5     -86.8\n##  5 2000 R\u2026 Hoov\u2026 United\u2026     5 Payl\u2026     33.4     -86.8\n##  6 6140 U\u2026 Hunt\u2026 United\u2026     6 Payl\u2026     34.7     -86.7\n##  7 312 Sc\u2026 Mobi\u2026 United\u2026     7 Payl\u2026     30.7     -88.2\n##  8 3402 B\u2026 Mobi\u2026 United\u2026     8 Payl\u2026     30.7     -88.1\n##  9 5300 H\u2026 Mobi\u2026 United\u2026     9 Payl\u2026     30.6     -88.2\n## 10 6641 A\u2026 Mont\u2026 United\u2026    10 Payl\u2026     32.4     -86.2\n## # \u2026 with 2,079 more rows, and 7 more variables: `Number of\n## #   Records` &lt;dbl&gt;, State &lt;chr&gt;, `Store Number` &lt;dbl&gt;, `Store\n## #   count` &lt;dbl&gt;, `Zip code` &lt;chr&gt;, `State Usps` &lt;chr&gt;,\n## #   statename &lt;chr&gt;\n<\/code><\/pre>\n<p>(with similar dances to use <code>read_csv()<\/code> or <code>fread()<\/code>).<\/p>\n<h3>FIN<\/h3>\n<p>The night&#8217;s quest to do some real work with the data was DoS&#8217;d by what I&#8217;ll brazenly call a deliberate attempt to dissuade doing exactly that in anything but a commercial program. But, understanding the impact of yet-another massive retail store closing is super-important and it looks like it may be up to us (since the media is\u00a0too distracted by incompetent leaders and inexperienced junior NY representatives) to do the work so it is left for another eve.<\/p>\n<p>Folks who&#8217;d like to do the same can grab the UTF-8 encoded actual CSV from <a href=\"http:\/\/rud.is\/dl\/2019-payless-store-closings.csv\">this site<\/a> which has also been run through <code>janitor::clean_names()<\/code> so there&#8217;s proper column types and names to work with.<\/p>\n<p>Speaking of which, here&#8217;s the <code>cols<\/code> spec for that CSV:<\/p>\n<pre><code class=\"language-r\">cols(\n  address = col_character(),\n  city = col_character(),\n  country = col_character(),\n  index = col_double(),\n  label = col_character(),\n  latitude = col_double(),\n  longitude = col_double(),\n  number_of_records = col_double(),\n  state = col_character(),\n  store_number = col_double(),\n  store_count = col_double(),\n  zip_code = col_character(),\n  state_usps = col_character(),\n  statename = col_character()\n)\n<\/code><\/pre>\n<p>If you do anything with the data blog about it and post a link in the comments so I and others can learn from  what you&#8217;ve discovered! It&#8217;s already kinda scary that one doesn&#8217;t even need a basemap to see just how much a part of &#8216;Murica Payless was:<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/payless-map-01.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"11970\" data-permalink=\"https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/payless-map-01\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/payless-map-01.png?fit=1587%2C1061&amp;ssl=1\" data-orig-size=\"1587,1061\" 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=\"payless-map-01\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/payless-map-01.png?fit=510%2C341&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/payless-map-01.png?resize=510%2C341&#038;ssl=1\" alt=\"\" width=\"510\" height=\"341\" class=\"aligncenter size-full wp-image-11970\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Those outside the Colonies may not know that Payless&mdash;a national chain that made footwear affordable for millions of &#8216;Muricans who can&#8217;t spare $100.00 USD for a pair of shoes their 7 year old will outgrow in a year&mdash; is closing. CNBC also had a story that featured a choropleth with a tiny button at the [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_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":""},"categories":[764,91],"tags":[],"class_list":["post-11946","post","type-post","status-publish","format-standard","hentry","category-data-wrangling","category-r"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>I Just Wanted The Data : Turning Tableau &amp; Tidyverse Tears Into Smiles with Base R (An Encoding Detective Story) - 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\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"I Just Wanted The Data : Turning Tableau &amp; Tidyverse Tears Into Smiles with Base R (An Encoding Detective Story) - rud.is\" \/>\n<meta property=\"og:description\" content=\"Those outside the Colonies may not know that Payless&mdash;a national chain that made footwear affordable for millions of &#8216;Muricans who can&#8217;t spare $100.00 USD for a pair of shoes their 7 year old will outgrow in a year&mdash; is closing. CNBC also had a story that featured a choropleth with a tiny button at the [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2019-02-20T05:08:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-02-20T12:19:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/rud.is\/b\/wp-content\/uploads\/2019\/02\/payless-get-data.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=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/20\\\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/20\\\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\\\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"I Just Wanted The Data : Turning Tableau &#038; Tidyverse Tears Into Smiles with Base R (An Encoding Detective Story)\",\"datePublished\":\"2019-02-20T05:08:49+00:00\",\"dateModified\":\"2019-02-20T12:19:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/20\\\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\\\/\"},\"wordCount\":875,\"commentCount\":5,\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/20\\\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/payless-get-data.png\",\"articleSection\":[\"data wrangling\",\"R\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/20\\\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/20\\\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\\\/\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/20\\\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\\\/\",\"name\":\"I Just Wanted The Data : Turning Tableau & Tidyverse Tears Into Smiles with Base R (An Encoding Detective Story) - rud.is\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/20\\\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/20\\\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/payless-get-data.png\",\"datePublished\":\"2019-02-20T05:08:49+00:00\",\"dateModified\":\"2019-02-20T12:19:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/20\\\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/20\\\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/20\\\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/payless-get-data.png?fit=2074%2C1232&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/payless-get-data.png?fit=2074%2C1232&ssl=1\",\"width\":2074,\"height\":1232},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/20\\\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rud.is\\\/b\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"I Just Wanted The Data : Turning Tableau &#038; Tidyverse Tears Into Smiles with Base R (An Encoding Detective Story)\"}]},{\"@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":"I Just Wanted The Data : Turning Tableau & Tidyverse Tears Into Smiles with Base R (An Encoding Detective Story) - 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\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/","og_locale":"en_US","og_type":"article","og_title":"I Just Wanted The Data : Turning Tableau & Tidyverse Tears Into Smiles with Base R (An Encoding Detective Story) - rud.is","og_description":"Those outside the Colonies may not know that Payless&mdash;a national chain that made footwear affordable for millions of &#8216;Muricans who can&#8217;t spare $100.00 USD for a pair of shoes their 7 year old will outgrow in a year&mdash; is closing. CNBC also had a story that featured a choropleth with a tiny button at the [&hellip;]","og_url":"https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/","og_site_name":"rud.is","article_published_time":"2019-02-20T05:08:49+00:00","article_modified_time":"2019-02-20T12:19:00+00:00","og_image":[{"url":"https:\/\/rud.is\/b\/wp-content\/uploads\/2019\/02\/payless-get-data.png","type":"","width":"","height":""}],"author":"hrbrmstr","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hrbrmstr","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"I Just Wanted The Data : Turning Tableau &#038; Tidyverse Tears Into Smiles with Base R (An Encoding Detective Story)","datePublished":"2019-02-20T05:08:49+00:00","dateModified":"2019-02-20T12:19:00+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/"},"wordCount":875,"commentCount":5,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"image":{"@id":"https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/#primaryimage"},"thumbnailUrl":"https:\/\/rud.is\/b\/wp-content\/uploads\/2019\/02\/payless-get-data.png","articleSection":["data wrangling","R"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/","url":"https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/","name":"I Just Wanted The Data : Turning Tableau & Tidyverse Tears Into Smiles with Base R (An Encoding Detective Story) - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/#primaryimage"},"image":{"@id":"https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/#primaryimage"},"thumbnailUrl":"https:\/\/rud.is\/b\/wp-content\/uploads\/2019\/02\/payless-get-data.png","datePublished":"2019-02-20T05:08:49+00:00","dateModified":"2019-02-20T12:19:00+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/#primaryimage","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/payless-get-data.png?fit=2074%2C1232&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/payless-get-data.png?fit=2074%2C1232&ssl=1","width":2074,"height":1232},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2019\/02\/20\/i-just-wanted-the-data-turning-tableau-tidyverse-tears-into-smiles-with-base-r-an-encoding-detective-story\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"I Just Wanted The Data : Turning Tableau &#038; Tidyverse Tears Into Smiles with Base R (An Encoding Detective Story)"}]},{"@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-36G","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":4225,"url":"https:\/\/rud.is\/b\/2016\/03\/30\/introducing-a-weekly-r-python-js-etc-vis-challenge\/","url_meta":{"origin":11946,"position":0},"title":"Introducing a Weekly R \/ Python \/ JS \/ etc Vis Challenge!","author":"hrbrmstr","date":"2016-03-30","format":false,"excerpt":">UPDATE: Deadline is now 2016-04-05 23:59 EDT; next vis challenge is 2016-04-06! Per a suggestion, I'm going to try to find a neat data set (prbly one from @jsvine) to feature each week and toss up some sample code (99% of the time prbly in R) and offer up a\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":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz024.png?fit=1200%2C605&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz024.png?fit=1200%2C605&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz024.png?fit=1200%2C605&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz024.png?fit=1200%2C605&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz024.png?fit=1200%2C605&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":1507,"url":"https:\/\/rud.is\/b\/2012\/07\/12\/ssh-password-time-series-heatmap-in-d3\/","url_meta":{"origin":11946,"position":1},"title":"SSH Password Time-series Heatmap In D3","author":"hrbrmstr","date":"2012-07-12","format":false,"excerpt":"In @jayjacobs' latest post on SSH honeypot passsword analysis he shows some spiffy visualizations from crunching the data with Tableau. While I've joked with him and called them \"robocharts\", the reality is that Tableau does let you work on visualizing the answers to questions quickly without having to go 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":3832,"url":"https:\/\/rud.is\/b\/2015\/12\/28\/world-map-panel-plots-with-ggplot2-2-0-ggalt\/","url_meta":{"origin":11946,"position":2},"title":"World Map Panel Plots with ggplot2 2.0 &#038; ggalt","author":"hrbrmstr","date":"2015-12-28","format":false,"excerpt":"James Austin (@awhstin) made some #spiffy 4-panel maps with base R graphics but also posited he didn't use ggplot2 because: \u2026ggplot2 and maps currently do not support world maps at this point, which does not give us a great overall view. That is certainly a box I would not put\u2026","rel":"","context":"In &quot;cartography&quot;","block_context":{"text":"cartography","link":"https:\/\/rud.is\/b\/category\/cartography\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2015\/12\/facetmaps.png?fit=1154%2C722&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2015\/12\/facetmaps.png?fit=1154%2C722&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2015\/12\/facetmaps.png?fit=1154%2C722&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2015\/12\/facetmaps.png?fit=1154%2C722&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2015\/12\/facetmaps.png?fit=1154%2C722&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":4501,"url":"https:\/\/rud.is\/b\/2016\/07\/07\/bridging-the-political-polygons-gap-with-ggplot2\/","url_meta":{"origin":11946,"position":3},"title":"Bridging The Political [Polygons] Gap with ggplot2","author":"hrbrmstr","date":"2016-07-07","format":false,"excerpt":"The @pewresearch folks have been collecting political survey data for quite a while, and I noticed the [visualization below](http:\/\/www.people-press.org\/2014\/06\/12\/section-1-growing-ideological-consistency\/#interactive) referenced in a [Tableau vis contest entry](https:\/\/www.interworks.com\/blog\/rrouse\/2016\/06\/24\/politics-viz-contest-plotting-political-polarization): Those are filled [frequency polygons](http:\/\/onlinestatbook.com\/2\/graphing_distributions\/freq_poly.html), which are super-easy to replicate in ggplot2, especially since Pew even _kind of_ made the data available via their\u2026","rel":"","context":"In &quot;Data Visualization&quot;","block_context":{"text":"Data Visualization","link":"https:\/\/rud.is\/b\/category\/data-visualization\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/07\/engfull.png?fit=1200%2C1098&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/07\/engfull.png?fit=1200%2C1098&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/07\/engfull.png?fit=1200%2C1098&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/07\/engfull.png?fit=1200%2C1098&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/07\/engfull.png?fit=1200%2C1098&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":2462,"url":"https:\/\/rud.is\/b\/2013\/04\/14\/framing-a-one-data-vis-a-day-challenge\/","url_meta":{"origin":11946,"position":4},"title":"Framing A One Data Vis A Day Challenge","author":"hrbrmstr","date":"2013-04-14","format":false,"excerpt":"Earlier this evening, I somewhat half-heartedly challenged @jayjacobs that he & I should be generating one data visualization per day. I didn't specify anything else (well, at least that I can disclose publicly, for now) but I think I'm going to try to formalize a bit of the 'rules' before\u2026","rel":"","context":"In &quot;Data Analysis&quot;","block_context":{"text":"Data Analysis","link":"https:\/\/rud.is\/b\/category\/data-analysis-2\/"},"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":11946,"position":5},"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":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/11946","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=11946"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/11946\/revisions"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=11946"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=11946"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=11946"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}