

{"id":11722,"date":"2019-01-03T10:26:02","date_gmt":"2019-01-03T15:26:02","guid":{"rendered":"https:\/\/rud.is\/b\/?p=11722"},"modified":"2023-04-15T17:14:14","modified_gmt":"2023-04-15T22:14:14","slug":"chart-reproduction-arrows-of-environmental","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/","title":{"rendered":"&#8216;data:&#8217; Scraping &#038; Chart Reproduction : Arrows of Environmental Destruction"},"content":{"rendered":"<p>Today&#8217;s RSS feeds picked up <a href=\"https:\/\/theconversation.com\/the-epa-has-backed-off-enforcement-under-trump-here-are-the-numbers-108640\">this article<\/a> by Marianne Sullivan, Chris Sellers, Leif Fredrickson, and Sarah Lamdanon on the woeful state of enforcement actions by the U.S. Environmental Protection Agency (EPA). While there has definitely been overreach by the EPA in the past the vast majority of its regulatory corpus is quite sane and has made Americans safer and healthier as a result. What&#8217;s happened to an EPA left in the hands of evil (yep, &#8220;evil&#8221;) in the past two years is beyond lamentable and we likely have two more years of lamenting ahead of us (unless you actually like your water with a coal ash chaser).<\/p>\n<p>The authors of the article made this chart to show the stark contrast between 2017 and 2018 when it comes to regulatory actions for eight acts:<\/p>\n<ul>\n<li>Clean Air Act (CAA)\n<li>Clean Water Act (CWA)\n<li>Emergency Planning and Community Right to Know Act (EPCRA)\n<li>Federal Insecticide, Fungicide, and Rodenticide Act (FIFRA)\n<li>Resource Conservation and Recovery Act (RCRA)\n<li>Safe Drinking Water Act (SDWA)\n<li>Toxic Substances Control Act (TSCA)<br \/>\n&#8211; Comprehensive Environmental Response, Compensation, and Liability Act (CERCLA)\n<\/ul>\n<p>They made this arrow chart (via <a href=\"https:\/\/www.datawrapper.de\/\">Datawrapper<\/a>):<\/p>\n<p><iframe loading=\"lazy\" id=\"psm7n\" class=\"tc-infographic-datawrapper\" src=\"https:\/\/datawrapper.dwcdn.net\/psm7n\/2\/\" height=\"400px\" width=\"100%\" style=\"border: none; height: 381px;\" frameborder=\"0\"><\/iframe><\/p>\n<p>For some reason, that chart sparked a <em>&#8220;I really need to make that in R&#8221;<\/em> moment, and thus begat this post.<\/p>\n<p>I&#8217;ve got a geom for <a href=\"https:\/\/gitlab.com\/hrbrmstr\/ggalt\/blob\/master\/R\/geom_dumbbell.R\">dumbbell charts<\/a> but that&#8217;s not going to work for this arrow chart since I really wanted to (mostly) reproduce it the way it was. Here&#8217;s my go at it.<\/p>\n<h3>Data First<\/h3>\n<p>Datawrapper embeds have a handy &#8220;Get the data&#8221; link in them but it&#8217;s not a link to a file. It&#8217;s a javascript-generated <code>data:<\/code> <code>href<\/code> so you either need to click on the link and download it <em>or<\/em> be hard-headed like I am go the way of pain and scrape it (reproducibility FTW). Let&#8217;s get packages and data gathering code out of the way. I&#8217;ll exposit a bit more about said data gathering after the code block:<\/p>\n<pre><code class=\"language-r\">library(stringi)\nlibrary(rvest)\nlibrary(hrbrthemes) # git[la|hu]b \/ hrbrmstr \/ hrbrthemes\nlibrary(tidyverse)\n\narticle &lt;- read_html(\"https:\/\/theconversation.com\/the-epa-has-backed-off-enforcement-under-trump-here-are-the-numbers-108640\")\n\nhtml_node(article, \"iframe#psm7n\") %&gt;% # find the iframe\n  html_attr(\"src\") %&gt;% # get iframe URL\n  read_html() %&gt;%  # read it in\n  html_node(xpath=\".\/\/script[contains(., 'data: ')]\") %&gt;% # find the javascript section with the data\n  html_text() %&gt;% # get that section\n  stri_split_lines() %&gt;% # split into lines so we can target the actual data element\n  unlist() %&gt;% \n  keep(stri_detect_fixed, 'data: \"Fiscal') %&gt;% # just get the data line\n  stri_trim_both() %&gt;% # prep it for extraction\n  stri_replace_first_fixed('data: \"', \"\") %&gt;% \n  stri_replace_last_fixed('\"', \"\") %&gt;% \n  stri_replace_all_fixed(\"\\\\n\", \"\\n\") %&gt;% # make lines lines\n  stri_split_lines() %&gt;% \n  unlist() %&gt;%\n  stri_split_fixed(\"\\\\t\") %&gt;% # we now have a list of vectors\n  map_dfc(~set_names(list(.x[2:length(.x)]), .x[1])) %&gt;%  # first element of each vector is colname\n  type_convert(col_types = \"cddn\") %&gt;% # get real types\n  set_names(c(\"act\", \"y2018\", \"y2017\", \"pct\")) -&gt; psm\n\npsm\n## # A tibble: 8 x 4\n##   act    y2018 y2017   pct\n##   &lt;chr&gt;  &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt;\n## 1 CAA      199   405   -51\n## 2 CERCLA   147   194   -24\n## 3 CWA      320   565   -43\n## 4 EPCRA     56   107   -48\n## 5 FIFRA    363   910   -60\n## 6 RCRA     149   275   -46\n## 7 SDWA     121   178   -32\n## 8 TSCA      80   152   -47\n<\/code><\/pre>\n<p>Inside the main article URL content there&#8217;s an <code>iframe<\/code> load:<\/p>\n<pre><code class=\"language-plain\">&lt;p&gt;&lt;iframe id=\"psm7n\" class=\"tc-infographic-datawrapper\" src=\"https:\/\/datawrapper.dwcdn.net\/psm7n\/2\/\" height=\"400px\" width=\"100%\" style=\"border: none\" frameborder=\"0\"&gt;&lt;\/iframe&gt;&lt;\/p&gt;\n<\/code><\/pre>\n<p>We grab the contents of that iframe link (<code>https:\/\/datawrapper.dwcdn.net\/psm7n\/2\/<\/code>) which has a <code>data:<\/code> line way down towards the bottom of one of the last javascript blocks:<\/p>\n<p><a href=\"https:\/\/rud.is\/b\/2019\/01\/03\/data-scraping-chart-reproduction-arrows-of-environmental-destruction\/data-line\/\" rel=\"attachment wp-att-11724\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"11724\" data-permalink=\"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/data-line\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/data-line.png?fit=2874%2C480&amp;ssl=1\" data-orig-size=\"2874,480\" 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=\"data-line\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/data-line.png?fit=510%2C85&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/data-line.png?resize=510%2C85&#038;ssl=1\" alt=\"\" width=\"510\" height=\"85\" class=\"aligncenter size-full wp-image-11724\" \/><\/a><\/p>\n<p>That ugly line gets transformed into a link that will download as a normal CSV file, but we have to do the above wrangling on it before we can get it into a format we can work with.<\/p>\n<p>Now, we can make the chart.<\/p>\n<h3>Chart Time!<\/h3>\n<p>Let&#8217;s get the Y axis in the right order:<\/p>\n<pre><code>psm %&gt;%\n  arrange(desc(y2017)) %&gt;%\n  mutate(act = factor(act, levels = rev(act))) -&gt; psm\n<\/code><\/pre>\n<p>Next, we setup X axis breaks and also get the max value for some positioning calculations (so we don&#8217;t hardcode values):<\/p>\n<pre><code class=\"language-r\"># setup x axis breaks and max value for label position computation\nx_breaks &lt;- pretty(c(psm$y2018, psm$y2017))\nmax_val &lt;- max(x_breaks)\n<\/code><\/pre>\n<p>I have two minor nitpicks about the original chart (and changes to them as a result). First, I really don&#8217;t like the Y axis gridlines but I do believe we need something to help the eye move horizontally and associate each label to its respective geom. Instead of gridlines I opt for a diminutive dotted line from 0 to the first (min) value.<\/p>\n<p>The second nitpick is that &mdash; while the chart has the act information in the caption area &mdash; the caption is in alpha order vs the order the act acronyms appear in the data. If it was an alpha bullet list I might not complain, but I chose to modify the order to fit the chart, which we build dynamically with the help of this vector:<\/p>\n<pre><code class=\"language-r\"># act info for caption\nc(\n  \"CAA\" = \"Clean Air Act (CAA)\",\n  \"CWA\" = \"Clean Water Act (CWA)\",\n  \"EPCRA\" = \"Emergency Planning and Community Right to Know Act (EPCRA)\",\n  \"FIFRA\" = \"Federal Insecticide, Fungicide, and Rodenticide Act (FIFRA)\",\n  \"RCRA\" = \"Resource Conservation and Recovery Act (RCRA)\",\n  \"SDWA\" = \"Safe Drinking Water Act (SDWA)\",\n  \"TSCA\" = \"Toxic Substances Control Act (TSCA)\",\n  \"CERCLA\" = \"Comprehensive Environmental Response, Compensation, and Liability Act (CERCLA)\"\n) -&gt; acts\n\nw125 &lt;- scales::wrap_format(125) # help us word wrap at ~125 chars\n\n# order the vector and turn it into wrapped lines\nact_info &lt;- w125(paste0(unname(acts[as.character(psm$act)]), collapse = \"; \"))\n<\/code><\/pre>\n<p>Now, we can generate the geoms. It looks like alot of code, but I like to use newlines to help structure ggplot2 calls. I still miss my old <code>gg &lt;- gg +<\/code> idiom but RStudio makes it way too easy to execute the whole expression with just the use of <code>+<\/code> so I&#8217;ve succumbed to their behaviour modification. To break it down w\/o code, we essentially need:<\/p>\n<ul>\n<li>the arrows for each act<\/li>\n<\/li>\n<li>the 2017 and 2018 direct label values for each act<\/li>\n<\/li>\n<li>the 2017 and 2018 top &#8220;titles&#8221; <\/li>\n<\/li>\n<li>segments for ^^<\/li>\n<li>title, subtitle and caption(s)<\/li>\n<\/ul>\n<p>We use percent-maths to position labels and other objects so the code can be re-used for other arrow plots (hardcoding to the data values is likely fine, but you&#8217;ll end up tweaking the numbers more and wasting ~2-5m per new chart).<\/p>\n<pre><code class=\"language-r\">  # dots from 0 to minval\n  geom_segment(\n    aes(0, act, xend = y2018, yend = act),\n    linetype = \"dotted\", color = \"#b2b2b2\", size = 0.33\n  ) +\n\n  # minval label\n  geom_label(\n    aes(y2018, act, label = y2018),\n    label.size = 0, hjust = 1, size = 3.5, family = font_rc\n  ) +\n\n  # maxval label\n  geom_label(\n    aes(y2017 + (0.0015 * y2017), act, label = y2017),\n    label.size = 0, hjust = 0, size = 3.5, family = font_rc\n  ) +\n\n  # the measure line+arrow\n  geom_segment(\n    aes(y2018, act, xend = y2017, yend = act),\n    color = \"#4a90e2\", size = 0.75, # I pulled the color value from the original chart\n    arrow = arrow(ends = \"first\", length = unit(5, \"pt\"))\n  ) +\n\n  # top of chart year (min)\n  geom_label(\n    data = head(psm, 1),\n    aes(y2018, 9, label = \"2018\"),\n    hjust = 0, vjust = 1, label.size = 0, size = 3.75, family = font_rc, color = ft_cols$slate\n  ) +\n\n  # top of chart year (max)\n  geom_label(\n    data = head(psm, 1),\n    aes(y2017, 9, label = \"2017\"),\n    hjust = 1, vjust = 1, label.size = 0, size = 3.75, family = font_rc, color = ft_cols$slate\n  ) +\n\n  # bar from top of chart year label to first minval measure\n  geom_segment(\n    data = head(psm, 1),\n    aes(\n      y2018 + (0.005 * max_val), 8.5, \n      xend = y2018 + (0.005 * max_val), yend = 8.25\n    ), \n    size = 0.25\n  ) +\n\n  # bar from top of chart year label to first maxval measure\n  geom_segment(\n    data = head(psm, 1),\n    aes(\n      y2017 - (0.005 * max_val), 8.5, \n      xend = y2017 - (0.005 * max_val), yend = 8.25\n    ), \n    size = 0.25\n  ) +\n\n  # fix x axis scale and place breaks\n  scale_x_comma(limits = c(0, max_val), breaks = seq(0, max_val, 200)) +\n\n  # make room for top \"titles\"\n  scale_y_discrete(expand = c(0, 1)) +\n\n  labs(\n    y = NULL,\n    title = \"Decline by statute\",\n    subtitle = \"The number of civil cases the EPA brought to conclusion has dropped across a number of federal statutes,\\nincluding the Clean Air Act (CAA) and others.\",\n    x = act_info,\n    caption = \"Original Chart\/Data: The Conversation, CC-BY-ND;&lt;https:\/\/bit.ly\/2VuJrOT&gt;; Source: Environmental Data &amp; Government Initiative &lt;https:\/\/bit.ly\/2VpcFyl&gt;\"\n  ) +\n  theme_ipsum_rc(grid = \"X\") +\n  theme(axis.text.x = element_text(color = ft_cols$slate)) +\n  theme(axis.title.x = element_text(\n    hjust = 0, size = 10, face = \"italic\", color = ft_cols$gray, margin = margin(t = 10)\n  )) +\n  theme(plot.caption = element_text(hjust = 0))\n<\/code><\/pre>\n<p>Here&#8217;s the result:<\/p>\n<p><a href=\"https:\/\/rud.is\/b\/2019\/01\/03\/data-scraping-chart-reproduction-arrows-of-environmental-destruction\/chart-makeover\/\" rel=\"attachment wp-att-11725\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"11725\" data-permalink=\"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/chart-makeover\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/chart-makeover.png?fit=1674%2C1138&amp;ssl=1\" data-orig-size=\"1674,1138\" 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=\"chart-makeover\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/chart-makeover.png?fit=510%2C347&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/chart-makeover.png?resize=510%2C347&#038;ssl=1\" alt=\"\" width=\"510\" height=\"347\" class=\"aligncenter size-full wp-image-11725\" \/><\/a><\/p>\n<p>(it even looks ok in &#8220;batman&#8221; mode):<\/p>\n<p><a href=\"https:\/\/rud.is\/b\/2019\/01\/03\/data-scraping-chart-reproduction-arrows-of-environmental-destruction\/plot_zoom_png-13\/\" rel=\"attachment wp-att-11730\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"11730\" data-permalink=\"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/plot_zoom_png-13\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/plot_zoom_png.png?fit=1674%2C1138&amp;ssl=1\" data-orig-size=\"1674,1138\" 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=\"batman-mode-chart\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/plot_zoom_png.png?fit=510%2C347&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/plot_zoom_png.png?resize=510%2C347&#038;ssl=1\" alt=\"\" width=\"510\" height=\"347\" class=\"aligncenter size-full wp-image-11730\" \/><\/a><\/p>\n<h3>FIN<\/h3>\n<p>With Microsoft owning GitHub I&#8217;m not using gists anymore and the GitLab &#8220;snippets&#8221; equivalent is just too dog-slow to use, so starting in 2019 I&#8217;m self-hosing contiguous R example code used in the blog posts. For the moment, that means  links to plain R files but I may just setup gitea for them sometime before the end of Q1. You can find a contiguous, commented version of the above code in <a href=\"https:\/\/rud.is\/r-code\/2018-01-03-convo-epa-chart.R\">here<\/a>.<\/p>\n<p>If you do your own makeover don&#8217;t forget to drop a link to your creation(s) in the comments!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today&#8217;s RSS feeds picked up this article by Marianne Sullivan, Chris Sellers, Leif Fredrickson, and Sarah Lamdanon on the woeful state of enforcement actions by the U.S. Environmental Protection Agency (EPA). While there has definitely been overreach by the EPA in the past the vast majority of its regulatory corpus is quite sane and has [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":11725,"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,673,674,753,91,725],"tags":[],"class_list":["post-11722","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-wrangling","category-datavis-2","category-dataviz","category-ggplot","category-r","category-web-scraping"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>&#039;data:&#039; Scraping &amp; Chart Reproduction : Arrows of Environmental Destruction - 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\/01\/03\/chart-reproduction-arrows-of-environmental\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"&#039;data:&#039; Scraping &amp; Chart Reproduction : Arrows of Environmental Destruction - rud.is\" \/>\n<meta property=\"og:description\" content=\"Today&#8217;s RSS feeds picked up this article by Marianne Sullivan, Chris Sellers, Leif Fredrickson, and Sarah Lamdanon on the woeful state of enforcement actions by the U.S. Environmental Protection Agency (EPA). While there has definitely been overreach by the EPA in the past the vast majority of its regulatory corpus is quite sane and has [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2019-01-03T15:26:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-04-15T22:14:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/chart-makeover.png?fit=1674%2C1138&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1674\" \/>\n\t<meta property=\"og:image:height\" content=\"1138\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/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=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/03\\\/chart-reproduction-arrows-of-environmental\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/03\\\/chart-reproduction-arrows-of-environmental\\\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"&#8216;data:&#8217; Scraping &#038; Chart Reproduction : Arrows of Environmental Destruction\",\"datePublished\":\"2019-01-03T15:26:02+00:00\",\"dateModified\":\"2023-04-15T22:14:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/03\\\/chart-reproduction-arrows-of-environmental\\\/\"},\"wordCount\":813,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/03\\\/chart-reproduction-arrows-of-environmental\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/chart-makeover.png?fit=1674%2C1138&ssl=1\",\"articleSection\":[\"data wrangling\",\"DataVis\",\"DataViz\",\"ggplot\",\"R\",\"web scraping\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/03\\\/chart-reproduction-arrows-of-environmental\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/03\\\/chart-reproduction-arrows-of-environmental\\\/\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/03\\\/chart-reproduction-arrows-of-environmental\\\/\",\"name\":\"'data:' Scraping & Chart Reproduction : Arrows of Environmental Destruction - rud.is\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/03\\\/chart-reproduction-arrows-of-environmental\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/03\\\/chart-reproduction-arrows-of-environmental\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/chart-makeover.png?fit=1674%2C1138&ssl=1\",\"datePublished\":\"2019-01-03T15:26:02+00:00\",\"dateModified\":\"2023-04-15T22:14:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/03\\\/chart-reproduction-arrows-of-environmental\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/03\\\/chart-reproduction-arrows-of-environmental\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/03\\\/chart-reproduction-arrows-of-environmental\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/chart-makeover.png?fit=1674%2C1138&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/chart-makeover.png?fit=1674%2C1138&ssl=1\",\"width\":1674,\"height\":1138},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/03\\\/chart-reproduction-arrows-of-environmental\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rud.is\\\/b\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"&#8216;data:&#8217; Scraping &#038; Chart Reproduction : Arrows of Environmental Destruction\"}]},{\"@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":"'data:' Scraping & Chart Reproduction : Arrows of Environmental Destruction - 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\/01\/03\/chart-reproduction-arrows-of-environmental\/","og_locale":"en_US","og_type":"article","og_title":"'data:' Scraping & Chart Reproduction : Arrows of Environmental Destruction - rud.is","og_description":"Today&#8217;s RSS feeds picked up this article by Marianne Sullivan, Chris Sellers, Leif Fredrickson, and Sarah Lamdanon on the woeful state of enforcement actions by the U.S. Environmental Protection Agency (EPA). While there has definitely been overreach by the EPA in the past the vast majority of its regulatory corpus is quite sane and has [&hellip;]","og_url":"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/","og_site_name":"rud.is","article_published_time":"2019-01-03T15:26:02+00:00","article_modified_time":"2023-04-15T22:14:14+00:00","og_image":[{"width":1674,"height":1138,"url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/chart-makeover.png?fit=1674%2C1138&ssl=1","type":"image\/png"}],"author":"hrbrmstr","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hrbrmstr","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"&#8216;data:&#8217; Scraping &#038; Chart Reproduction : Arrows of Environmental Destruction","datePublished":"2019-01-03T15:26:02+00:00","dateModified":"2023-04-15T22:14:14+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/"},"wordCount":813,"commentCount":3,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"image":{"@id":"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/chart-makeover.png?fit=1674%2C1138&ssl=1","articleSection":["data wrangling","DataVis","DataViz","ggplot","R","web scraping"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/","url":"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/","name":"'data:' Scraping & Chart Reproduction : Arrows of Environmental Destruction - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/#primaryimage"},"image":{"@id":"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/chart-makeover.png?fit=1674%2C1138&ssl=1","datePublished":"2019-01-03T15:26:02+00:00","dateModified":"2023-04-15T22:14:14+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/#primaryimage","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/chart-makeover.png?fit=1674%2C1138&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/chart-makeover.png?fit=1674%2C1138&ssl=1","width":1674,"height":1138},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2019\/01\/03\/chart-reproduction-arrows-of-environmental\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"&#8216;data:&#8217; Scraping &#038; Chart Reproduction : Arrows of Environmental Destruction"}]},{"@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":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/chart-makeover.png?fit=1674%2C1138&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/p23idr-334","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":6930,"url":"https:\/\/rud.is\/b\/2017\/11\/02\/yet-another-power-outages-post-full-tidyverse-edition\/","url_meta":{"origin":11722,"position":0},"title":"Yet-Another-Power Outages Post : Full Tidyverse Edition","author":"hrbrmstr","date":"2017-11-02","format":false,"excerpt":"This past weekend, violent windstorms raged through New England. We \u2014 along with over 500,000 other Mainers \u2014 went \"dark\" in the wee hours of Monday morning and (this post was published on Thursday AM) we still have no utility-provided power nor high-speed internet access. The children have turned iFeral,\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/11\/plot_zoom_png.png?fit=1200%2C628&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/11\/plot_zoom_png.png?fit=1200%2C628&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/11\/plot_zoom_png.png?fit=1200%2C628&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/11\/plot_zoom_png.png?fit=1200%2C628&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/11\/plot_zoom_png.png?fit=1200%2C628&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":6115,"url":"https:\/\/rud.is\/b\/2017\/07\/25\/r%e2%81%b6-general-attys-distributions\/","url_meta":{"origin":11722,"position":1},"title":"R\u2076 \u2014 General (Attys) Distributions","author":"hrbrmstr","date":"2017-07-25","format":false,"excerpt":"Matt @stiles is a spiffy data journalist at the @latimes and he posted an interesting chart on U.S. Attorneys General longevity (given that the current US AG is on thin ice): Only Watergate and the Civil War have prompted shorter tenures as AG (if Sessions were to leave now). A\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\/2017\/07\/plot_zoom_png-2.png?fit=1200%2C1076&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/07\/plot_zoom_png-2.png?fit=1200%2C1076&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/07\/plot_zoom_png-2.png?fit=1200%2C1076&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/07\/plot_zoom_png-2.png?fit=1200%2C1076&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/07\/plot_zoom_png-2.png?fit=1200%2C1076&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":6134,"url":"https:\/\/rud.is\/b\/2017\/07\/28\/analyzing-wait-delay-settings-in-common-crawl-robots-txt-data-with-r\/","url_meta":{"origin":11722,"position":2},"title":"Analyzing &#8220;Crawl-Delay&#8221; Settings in Common Crawl robots.txt Data with R","author":"hrbrmstr","date":"2017-07-28","format":false,"excerpt":"One of my tweets that referenced an excellent post about the ethics of web scraping garnered some interest: Apologies for a Medium link but if you do ANY web scraping, you need to read this #rstats \/\/ Ethics in Web Scraping https:\/\/t.co\/y5YxvzB8Fd\u2014 boB Rudis (@hrbrmstr) July 26, 2017 If you\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/07\/Cursor_and_RStudio.png?fit=1200%2C620&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/07\/Cursor_and_RStudio.png?fit=1200%2C620&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/07\/Cursor_and_RStudio.png?fit=1200%2C620&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/07\/Cursor_and_RStudio.png?fit=1200%2C620&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/07\/Cursor_and_RStudio.png?fit=1200%2C620&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":13175,"url":"https:\/\/rud.is\/b\/2021\/08\/13\/some-covid-donuts-to-end-the-week\/","url_meta":{"origin":11722,"position":3},"title":"Some Covid Donuts To End The Week","author":"hrbrmstr","date":"2021-08-13","format":false,"excerpt":"Vox grabbed some data from the Kaiser Family Foundation and did a story a few days ago on it, then posted a different visualization of it that attracted some attention: I'm a pretty ardent donut detractor, but I have to also admit that they work pretty well for this use\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2021\/08\/covid-donuts-01.png?fit=1200%2C921&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2021\/08\/covid-donuts-01.png?fit=1200%2C921&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2021\/08\/covid-donuts-01.png?fit=1200%2C921&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2021\/08\/covid-donuts-01.png?fit=1200%2C921&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2021\/08\/covid-donuts-01.png?fit=1200%2C921&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":5907,"url":"https:\/\/rud.is\/b\/2017\/05\/05\/scrapeover-friday-a-k-a-another-r-scraping-makeover\/","url_meta":{"origin":11722,"position":4},"title":"Scrapeover Friday \u2014 a.k.a. Another R Scraping Makeover","author":"hrbrmstr","date":"2017-05-05","format":false,"excerpt":"I caught a glimpse of a tweet by @dataandme on Friday: Using R & rvest to explore Malaysian property mkt: \"Web Scraping: The Sequel, Propwall.my\" https:\/\/t.co\/daZOOJJfPN #rstats #rvest pic.twitter.com\/u6QMhm4M3e\u2014 Mara Averick (@dataandme) May 5, 2017 Mara is \u2014 without a doubt \u2014 the best data science promoter in the Twitterverse.\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":6067,"url":"https:\/\/rud.is\/b\/2017\/06\/05\/r%e2%81%b6-scraping-images-to-pdfs\/","url_meta":{"origin":11722,"position":5},"title":"R\u2076 \u2014 Scraping Images To PDFs","author":"hrbrmstr","date":"2017-06-05","format":false,"excerpt":"I've been doing intermittent prep work for a follow-up to an earlier post on store closings and came across this CNN Money \"article\" on it. Said \"article\" is a deliberately obfuscated or lazily crafted series of GIF images that contain all the Radio Shack impending store closings. It's the most\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"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\/11722","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=11722"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/11722\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media\/11725"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=11722"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=11722"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=11722"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}