<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>Nicola Rennie</title>
<link>https://nrennie.com/projects/</link>
<atom:link href="https://nrennie.com/projects/index.xml" rel="self" type="application/rss+xml"/>
<description>A selection of my visualisation, design, and data science projects.</description>
<image>
<url>https://nrennie.com/assets/img/featured.png</url>
<title>Nicola Rennie</title>
<link>https://nrennie.com/projects/</link>
<height>75</height>
<width>144</width>
</image>
<generator>quarto-1.9.37</generator>
<lastBuildDate>Wed, 06 May 2026 13:13:45 GMT</lastBuildDate>
<item>
  <title>The Art of Data Visualization with ggplot2</title>
  <link>https://nrennie.com/projects/art-of-viz/</link>
  <description><![CDATA[ 





<p>Each chapter of <em>The Art of Data Visualisation with <code>ggplot2</code></em> covers a different data visualization, showing: the data exploration process; the choice of data visualization type; the initial design ideas with hand-drawn sketches; the first build of a plot; and the iterative process of styling plots. For each plot, full R code is provided and explained for each step of the creative process.</p>
<p>None of the visualizations you’ll see were created specifically for the book - each one is an original data visualization created using real <a href="https://github.com/rfordatascience/tidytuesday">TidyTuesday</a> datasets over a series of years. Think of each chapter as a case study starting with a new data set you’ve never seen before, and working through a process to get to an insightful, artistic visualization.</p>
<p>The following charts are examples from <a href="https://nrennie.rbind.io/art-of-viz/cats.html"><em>Chapter 7 - Cats: data-driven annotations with ggtext</em></a>, which begins by highlighting the use of data visualisation as a method of exploring and quality checking the data you have.</p>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<p><a href="images/cats1.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1"><img src="https://nrennie.com/projects/art-of-viz/images/cats1.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-6">
<p><a href="images/cats2.png" class="lightbox" data-gallery="quarto-lightbox-gallery-2"><img src="https://nrennie.com/projects/art-of-viz/images/cats2.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
</div>
<p>The book encourages starting out with no or low-code tools to sketch ideas.</p>
<p><a href="images/cats3.png" class="lightbox" data-gallery="quarto-lightbox-gallery-3"><img src="https://nrennie.com/projects/art-of-viz/images/cats3.png" class="img-fluid" style="width:100.0%"></a></p>
<p>After deciding on how the data will be visualised, the remainder of the chapter explains how to implement it using <code>ggplot2</code> in R. It starts from creating a basic version of the chart using the default setting, before introducing the reader the various extension packages and tricks to elevate the design.</p>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<p><a href="images/cats4.png" class="lightbox" data-gallery="quarto-lightbox-gallery-4"><img src="https://nrennie.com/projects/art-of-viz/images/cats4.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-6">
<p><a href="images/cats5.png" class="lightbox" data-gallery="quarto-lightbox-gallery-5"><img src="https://nrennie.com/projects/art-of-viz/images/cats5.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
</div>
<div class="callout callout-style-default callout-important no-icon callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon no-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Important</span>The Art of Data Visualization with <code>ggplot2</code>
</div>
</div>
<div class="callout-body-container callout-body">
<p><em>The Art of Data Visualization with <code>ggplot2</code></em> will soon be published by CRC Press. You can read the online version at <a href="https://nrennie.rbind.io/art-of-viz/">nrennie.rbind.io/art-of-viz</a>.</p>
</div>
</div>



 ]]></description>
  <category>R</category>
  <category>Data Visualisation</category>
  <guid>https://nrennie.com/projects/art-of-viz/</guid>
  <pubDate>Wed, 06 May 2026 13:13:45 GMT</pubDate>
  <media:content url="https://nrennie.com/projects/art-of-viz/featured.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>Best Practices for Data Visualisation</title>
  <link>https://nrennie.com/projects/rss-best-practices/</link>
  <description><![CDATA[ 





<p>Alongside Andreas Krause (Idorsia Pharmaceuticals) and Brian Tarran (Royal Statistical Society), I co-authored the Royal Statistical Society’s <em>Best Practices for Data Visualisation</em> guidance, published in July 2023. The guide covers both the art and the science of data visualisation. It is written primarily for contributors to Royal Statistical Society publications – chiefly, Significance magazine, the Journal of the Royal Statistical Society Series A, and Real World Data Science – but the information and advice within is of broad relevance and use to any data visualisation task. The guide can be viewed at <a href="https://rss.org.uk/datavisguide/">rss.org.uk/datavisguide</a>.</p>
<p><a href="images/guide-screenshot.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1"><img src="https://nrennie.com/projects/rss-best-practices/images/guide-screenshot.png" class="img-fluid"></a></p>
<section id="developing-an-r-package" class="level3">
<h3 class="anchored" data-anchor-id="developing-an-r-package">Developing an R package</h3>
<p>The guide also contains technical instructions for authors on how to edit the settings of their visualisation software to better style their graphics. The guide covers examples of doing so in R and Python (with examples added by the community for other software), with R being used often (both base R and {ggplot2}). To help authors with styling their charts to fit in with the guidance in this document, we have developed an R package, <a href="https://github.com/nrennie/RSSthemes">{RSSthemes}</a>.</p>
<p>This R package:</p>
<ul>
<li>Stores and load font files</li>
<li>Defines colour palettes with RSS colours</li>
<li>Creates <code>theme_*()</code> and <code>scale_*</code> functions for {ggplot2}</li>
<li>Sets (and unsets) different base R defaults</li>
</ul>
<p>Let’s see an example in action! Let’s say you have simple data set that you want to use to make a bar chart with {ggplot2}</p>
<div class="cell">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(ggplot2)</span>
<span id="cb1-2">plot_df <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">data.frame</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> LETTERS[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>)</span>
<span id="cb1-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> plot_df,</span>
<span id="cb1-4">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">mapping =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> x, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> y, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> x)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb1-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_col</span>()</span></code></pre></div></div>
</div>
<p>You can restyle it, using the {RSSthemes} package and two lines of code:</p>
<div class="cell">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(RSSthemes)</span>
<span id="cb2-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> plot_df,</span>
<span id="cb2-3">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">mapping =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> x, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> y, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> x)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb2-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_col</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb2-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_fill_rss_d</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">palette =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"signif_qual"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb2-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_significance</span>()</span></code></pre></div></div>
</div>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<p><a href="images/rssthemes1.png" class="lightbox" data-gallery="quarto-lightbox-gallery-2"><img src="https://nrennie.com/projects/rss-best-practices/images/rssthemes1.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-6">
<p><a href="images/rssthemes2.png" class="lightbox" data-gallery="quarto-lightbox-gallery-3"><img src="https://nrennie.com/projects/rss-best-practices/images/rssthemes2.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
</div>
<div class="center smaller">
<p>Before and after styling with {RSSthemes}</p>
</div>
<p>As of March 2024, the guide has been viewed by over 14,000 users, in 152 countries.</p>


</section>

 ]]></description>
  <category>R</category>
  <category>Data Visualisation</category>
  <guid>https://nrennie.com/projects/rss-best-practices/</guid>
  <pubDate>Wed, 06 May 2026 13:13:45 GMT</pubDate>
  <media:content url="https://nrennie.com/projects/rss-best-practices/featured.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>Data Visualisation Challenges</title>
  <link>https://nrennie.com/projects/data-viz-challenges/</link>
  <description><![CDATA[ 





<p>My data visualisation work has been highlighted in <a href="https://rweekly.org/2025-W38.html">R-Weekly</a>, the <a href="https://www.datawrapper.de/blog/data-vis-dispatch-september-9-2025">Datawrapper Data Viz Dispatch</a>, the <a href="https://visualisingdata.kit.com/posts/the-visualising-data-newsletter-issue-18-september-2025">Visualising Data Newsletter</a>, <a href="https://buttondown.com/puntofisso/archive/629-quantum-of-sollazzo/">Quantum of Sollazzo</a> and <a href="https://www.theguardian.com/news/2025/sep/26/the-crunch-australias-horrifying-climate-future-finding-clothes-that-fit-and-charting-the-perfect-coffee">The Guardian’s The Crunch Newsletter</a>, amongst others.</p>
<p>I use a combination of R, Python, ObservableJS, D3.js, Tableau, rawgraphs, Inkscape, and Figma for creating data visualisations. A sample of my personal projects can be found below. You can view a full gallery of my public work at <a href="https://nrennie.rbind.io/viz-gallery/">nrennie.rbind.io/viz-gallery</a>.</p>
<section id="tidytuesday" class="level2">
<h2 class="anchored" data-anchor-id="tidytuesday">TidyTuesday</h2>
<p>TidyTuesday is a weekly data challenge aimed at the R community. Every week a new dataset is posted alongside a chart or article related to that dataset, and ask participants explore the data. You can access the data and find out more <a href="https://github.com/rfordatascience/tidytuesday/blob/master/README.md">here</a>.</p>
<p>Below is a selection of my contributions to the TidyTuesday challenge. All contributions and the code used to generate them can be found on <a href="https://github.com/nrennie/tidytuesday">GitHub</a>. You can also browse through all contributions using <a href="https://nrennie.github.io/tidytuesday-shiny-app/">this dashboard</a>.</p>
<p><a href="https://raw.githubusercontent.com/nrennie/tidytuesday/main/2024/2024-08-06/20240806.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1"><img src="https://raw.githubusercontent.com/nrennie/tidytuesday/main/2024/2024-08-06/20240806.png" class="img-fluid"></a></p>
<div class="center smaller">
<p>Inspired by <a href="https://www.nytimes.com/interactive/2016/08/08/sports/olympics/history-olympic-dominance-charts.html">this New York Times</a> visualisation</p>
</div>
<p><a href="https://github.com/nrennie/scrollytelling/blob/main/posts/monarchs/images/monarchs.gif?raw=true" class="lightbox" data-gallery="quarto-lightbox-gallery-2"><img src="https://github.com/nrennie/scrollytelling/blob/main/posts/monarchs/images/monarchs.gif?raw=true" class="img-fluid" style="width:100.0%"></a></p>
<div class="center smaller">
<p>View the <a href="https://nrennie.rbind.io/scrollytelling/posts/monarchs/">scrollytelling</a> version.</p>
</div>
<p><a href="https://raw.githubusercontent.com/nrennie/tidytuesday/main/2023/2023-10-31/20231031.png" class="lightbox" data-gallery="quarto-lightbox-gallery-3"><img src="https://raw.githubusercontent.com/nrennie/tidytuesday/main/2023/2023-10-31/20231031.png" class="img-fluid"></a></p>
<div class="grid">
<div class="g-col-12 g-col-md-4">
<p><a href="https://raw.githubusercontent.com/nrennie/tidytuesday/refs/heads/main/2022/2022-08-16/20220816_files/figure-html/villanelle-1.png" class="lightbox" data-gallery="quarto-lightbox-gallery-4"><img src="https://raw.githubusercontent.com/nrennie/tidytuesday/refs/heads/main/2022/2022-08-16/20220816_files/figure-html/villanelle-1.png" class="img-fluid"></a></p>
</div>
<div class="g-col-12 g-col-md-4">
<p><a href="https://raw.githubusercontent.com/nrennie/tidytuesday/refs/heads/main/2022/2022-08-16/20220816_files/figure-html/eve-1.png" class="lightbox" data-gallery="quarto-lightbox-gallery-5"><img src="https://raw.githubusercontent.com/nrennie/tidytuesday/refs/heads/main/2022/2022-08-16/20220816_files/figure-html/eve-1.png" class="img-fluid"></a></p>
</div>
<div class="g-col-12 g-col-md-4">
<p><a href="https://raw.githubusercontent.com/nrennie/tidytuesday/refs/heads/main/2022/2022-08-16/20220816_files/figure-html/carolyn-1.png" class="lightbox" data-gallery="quarto-lightbox-gallery-6"><img src="https://raw.githubusercontent.com/nrennie/tidytuesday/refs/heads/main/2022/2022-08-16/20220816_files/figure-html/carolyn-1.png" class="img-fluid"></a></p>
</div>
</div>
<p><a href="https://raw.githubusercontent.com/nrennie/tidytuesday/main/2022/2022-05-10/20220510.png" class="lightbox" data-gallery="quarto-lightbox-gallery-7"><img src="https://raw.githubusercontent.com/nrennie/tidytuesday/main/2022/2022-05-10/20220510.png" class="img-fluid"></a></p>
</section>
<section id="plotnine-contest" class="level2">
<h2 class="anchored" data-anchor-id="plotnine-contest">Plotnine contest</h2>
<p><a href="https://plotnine.org/">Plotnine</a> is a visualisation library that brings the Grammar of Graphics to Python, and the <a href="https://posit.co/blog/announcing-the-2024-plotnine-contest/">2024 Plotnine Contest</a> aims to bring the community together to create and share with others great <code>plotnine</code> examples. You can read the <a href="https://nrennie.rbind.io/blog/plotnine-annotated-area-chart/">blog post about how I created this annotated area chart</a> for my entry into the Plotnine contest. This visualisation was <a href="https://posit.co/blog/winner-of-the-2024-plotnine-plotting-contest/">a runner up in the Plotnine contest</a>.</p>
<p><a href="https://raw.githubusercontent.com/nrennie/2024-plotnine-contest/main/plot.png" class="lightbox" data-gallery="quarto-lightbox-gallery-8"><img src="https://raw.githubusercontent.com/nrennie/2024-plotnine-contest/main/plot.png" class="img-fluid"></a></p>
</section>
<section id="daychartchallenge" class="level2">
<h2 class="anchored" data-anchor-id="daychartchallenge">#30DayChartChallenge</h2>
<p>The #30DayChartChallenge is a data visualisation challenge organised by <a href="https://twitter.com/CedScherer">Cédric Scherer</a> and <a href="https://twitter.com/dr_xeo">Dominic Royé</a>. Participants make one chart each day of the challenge, inspired by the daily prompt. The prompts are also split across 5 different categories. Check out the challenge at <a href="https://twitter.com/30DayChartChall">twitter.com/30DayChartChall</a>. I used a range of tools to create my charts, including R, Python, Tableau, rawgraphs, Inkscape, and Figma.</p>
<p><a href="https://github.com/nrennie/30DayChartChallenge/blob/main/2022/viz/day_20.png?raw=true" class="lightbox" data-gallery="quarto-lightbox-gallery-9"><img src="https://github.com/nrennie/30DayChartChallenge/blob/main/2022/viz/day_20.png?raw=true" class="img-fluid"></a></p>
<p><a href="https://github.com/nrennie/30DayChartChallenge/blob/main/2022/viz/day_29_final.png?raw=true" class="lightbox" data-gallery="quarto-lightbox-gallery-10"><img src="https://github.com/nrennie/30DayChartChallenge/blob/main/2022/viz/day_29_final.png?raw=true" class="img-fluid"></a></p>
<p><a href="https://github.com/nrennie/30DayChartChallenge/blob/main/2023/viz/day_04.png?raw=true" class="lightbox" data-gallery="quarto-lightbox-gallery-11"><img src="https://github.com/nrennie/30DayChartChallenge/blob/main/2023/viz/day_04.png?raw=true" class="img-fluid"></a></p>
</section>
<section id="daymapchallenge" class="level2">
<h2 class="anchored" data-anchor-id="daymapchallenge">#30DayMapChallenge</h2>
<p>The #30DayMapChallenge is a data visualisation challenge organised by <a href="https://twitter.com/tjukanov">Topi Tjukanov</a>. Participants make one map each day of the challenge, inspired by the daily prompt. Check out the challenge on <a href="https://github.com/tjukanovt/30DayMapChallenge">GitHub</a>, or see contributions on the <a href="https://30daymapchallenge.com/">official website</a>.</p>
<p><a href="https://raw.githubusercontent.com/nrennie/30DayMapChallenge/refs/heads/main/2021/maps/day_09.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-12"><img src="https://raw.githubusercontent.com/nrennie/30DayMapChallenge/refs/heads/main/2021/maps/day_09.jpg" class="img-fluid"></a></p>
<div class="grid">
<div class="g-col-12 g-col-md-4">
<p><a href="https://raw.githubusercontent.com/nrennie/30DayMapChallenge/refs/heads/main/2022/maps/day_22.png" class="lightbox" data-gallery="quarto-lightbox-gallery-13"><img src="https://raw.githubusercontent.com/nrennie/30DayMapChallenge/refs/heads/main/2022/maps/day_22.png" class="img-fluid"></a></p>
</div>
<div class="g-col-12 g-col-md-4">
<p><a href="https://raw.githubusercontent.com/nrennie/30DayMapChallenge/refs/heads/main/2022/maps/day_28.png" class="lightbox" data-gallery="quarto-lightbox-gallery-14"><img src="https://raw.githubusercontent.com/nrennie/30DayMapChallenge/refs/heads/main/2022/maps/day_28.png" class="img-fluid"></a></p>
</div>
<div class="g-col-12 g-col-md-4">
<p><a href="https://raw.githubusercontent.com/nrennie/30DayMapChallenge/refs/heads/main/2022/maps/day_14.png" class="lightbox" data-gallery="quarto-lightbox-gallery-15"><img src="https://raw.githubusercontent.com/nrennie/30DayMapChallenge/refs/heads/main/2022/maps/day_14.png" class="img-fluid"></a></p>
</div>
</div>
<div class="grid">
<div class="g-col-12 g-col-md-4">
<p><a href="https://raw.githubusercontent.com/nrennie/30DayMapChallenge/refs/heads/main/2022/maps/day_30.png" class="lightbox" data-gallery="quarto-lightbox-gallery-16"><img src="https://raw.githubusercontent.com/nrennie/30DayMapChallenge/refs/heads/main/2022/maps/day_30.png" class="img-fluid"></a></p>
</div>
<div class="g-col-12 g-col-md-4">
<p><a href="https://raw.githubusercontent.com/nrennie/30DayMapChallenge/refs/heads/main/2022/maps/day_06.png" class="lightbox" data-gallery="quarto-lightbox-gallery-17"><img src="https://raw.githubusercontent.com/nrennie/30DayMapChallenge/refs/heads/main/2022/maps/day_06.png" class="img-fluid"></a></p>
</div>
<div class="g-col-12 g-col-md-4">
<p><a href="https://raw.githubusercontent.com/nrennie/30DayMapChallenge/refs/heads/main/2022/maps/day_15.png" class="lightbox" data-gallery="quarto-lightbox-gallery-18"><img src="https://raw.githubusercontent.com/nrennie/30DayMapChallenge/refs/heads/main/2022/maps/day_15.png" class="img-fluid"></a></p>
</div>
</div>
</section>
<section id="tableau-public" class="level2">
<h2 class="anchored" data-anchor-id="tableau-public">Tableau Public</h2>
<p>You can find examples of my visualisations created using Tableau on my <a href="https://public.tableau.com/app/profile/nicola.rennie/">Tableau Public profile</a>.</p>
<p><a href="images/Droughts.png" class="lightbox" data-gallery="quarto-lightbox-gallery-19"><img src="https://nrennie.com/projects/data-viz-challenges/images/Droughts.png" class="img-fluid"></a></p>
</section>
<section id="other-challenges" class="level2">
<h2 class="anchored" data-anchor-id="other-challenges">Other challenges</h2>
<p>Viz For Social Good (VFSG) volunteers create <a href="https://github.com/nrennie/Viz_For_Social_Good">informative and impactful data visualizations</a> for mission-driven organizations across the globe. Check out the organisation <a href="https://www.vizforsocialgood.com/" target="_blank">here</a>.</p>
<p><a href="images/Sunny_Street.png" class="lightbox" data-gallery="quarto-lightbox-gallery-20"><img src="https://nrennie.com/projects/data-viz-challenges/images/Sunny_Street.png" class="img-fluid"></a></p>


</section>

 ]]></description>
  <category>R</category>
  <category>Python</category>
  <category>Data Visualisation</category>
  <guid>https://nrennie.com/projects/data-viz-challenges/</guid>
  <pubDate>Wed, 06 May 2026 13:13:45 GMT</pubDate>
  <media:content url="https://nrennie.com/projects/data-viz-challenges/featured.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>Publications</title>
  <link>https://nrennie.com/projects/publications/</link>
  <description><![CDATA[ 





<section id="books" class="level2">
<h2 class="anchored" data-anchor-id="books">Books</h2>
<p><strong>The Art of Data Visualization with ggplot2: The TidyTuesday Cookbook</strong>.<br><strong>N. Rennie</strong>. <em>CRC Press</em>. Upcoming. Link: <a href="https://nrennie.rbind.io/art-of-viz/">nrennie.rbind.io/art-of-viz/</a>.<br>
<span class="tag">Book</span> <br><br></p>
</section>
<section id="papers-and-articles" class="level2">
<h2 class="anchored" data-anchor-id="papers-and-articles">Papers and articles</h2>
<section id="published-journal-articles" class="level3">
<h3 class="anchored" data-anchor-id="published-journal-articles">Published journal articles</h3>
<p><strong>Book review of ‘Speak Data: Artists, Scientists, Thinkers, and Dreamers on How We Live Our Lives in Numbers’</strong>.<br><strong>N. Rennie</strong>. <em>Significance</em>. Volume 23, Issue 1, January 2026, Page 45. doi: <a href="https://doi.org/10.1093/jrssig/qmaf101">doi.org/10.1093/jrssig/qmaf101</a>.<br>
<span class="tag">Journal article</span> <br><br> <strong>Prevalence of white matter hyperintensities and radiological cerebral small vessel disease: an insight from routinely collected data</strong>.<br>M.P. Maskery, <strong>N. Rennie</strong>, S. Mathur, J. Knight, H.C.A. Emsley. <em>BMC Neurology</em>. 2025. doi: <a href="https://doi.org/10.1186/s12883-025-04557-y">doi.org/10.1186/s12883-025-04557-y</a>.<br>
<span class="tag">Peer reviewed</span> <span class="tag">Journal article</span> <br><br> <strong>Medical training pathways and underdoctored areas: a qualitative study of doctors working in areas that struggle to recruit and retain</strong>.<br>L. Brewster, C.K. Chekar, M. Lambert, C. Mumford, T. Patel, <strong>N. Rennie</strong>, C. Shelton. <em>Health &amp; Place</em>. Volume 96. November 2025. doi: <a href="https://doi.org/10.1016/j.healthplace.2025.103560">doi.org/10.1016/j.healthplace.2025.103560</a>.<br>
<span class="tag">Peer reviewed</span> <span class="tag">Journal article</span> <br><br> <strong>Preference for face-to-face contraceptive service delivery post-COVID-19 pandemic: a cross-sectional study</strong>.<br>S. Patterson, <strong>N. Rennie</strong>, S. Mann, O. McCarthy, M. Palmer, R. S. French. <em>BJOG: An International Journal of Obstetrics &amp; Gynaecology</em>. 2025. Pages 1-12. doi: <a href="https://doi.org/10.1111/1471-0528.18323">doi.org/10.1111/1471-0528.18323</a>.<br>
<span class="tag">Peer reviewed</span> <span class="tag">Journal article</span> <br><br> <strong>Presenting data the Significance way - Part 4</strong>.<br>A. Krause, <strong>N. Rennie</strong>. <em>Significance</em>. Volume 22, Issue 1, January 2025, Pages 24-29. doi: <a href="https://doi.org/10.1093/jrssig/qmae092">doi.org/10.1093/jrssig/qmae092</a>.<br>
<span class="tag">Journal article</span> <br><br> <strong>Presenting data the Significance way - Part 3</strong>.<br>A. Krause, <strong>N. Rennie</strong>. <em>Significance</em>. Volume 21, Issue 5, November 2024, Pages 26-30. doi: <a href="https://doi.org/10.1093/jrssig/qmae076">doi.org/10.1093/jrssig/qmae076</a>.<br>
<span class="tag">Journal article</span> <br><br> <strong>Presenting data the Significance way - Part 2</strong>.<br>A. Krause, <strong>N. Rennie</strong>. <em>Significance</em>. Volume 21, Issue 4, September 2024, Pages 32-36. doi: <a href="https://doi.org/10.1093/jrssig/qmae061">doi.org/10.1093/jrssig/qmae061</a>.<br>
<span class="tag">Journal article</span> <br><br> <strong>Presenting data the Significance way - Part 1</strong>.<br><strong>N. Rennie</strong>, A. Krause. <em>Significance</em>. Volume 21, Issue 3, July 2024, Pages 36-39. doi: <a href="https://doi.org/10.1093/jrssig/qmae045">doi.org/10.1093/jrssig/qmae045</a>.<br>
<span class="tag">Journal article</span> <br><br> <strong>Outlier detection in network revenue management</strong>.<br><strong>N. Rennie</strong>, C. Cleophas, A. M. Sykulski, F. Dost. <em>OR Spectrum</em>. Volume 46, Pages 445-511. 2024. doi: <a href="https://doi.org/10.1007/s00291-023-00714-2">doi.org/10.1007/s00291-023-00714-2</a>.<br>
<span class="tag">Peer reviewed</span> <span class="tag">Journal article</span> <br><br> <strong>Analysing and visualising bike sharing demand with outliers</strong>.<br><strong>N. Rennie</strong>, C. Cleophas, A. M. Sykulski, F. Dost. <em>Discover Data</em>. Volume 1, Issue 1. March 2023. doi: <a href="https://doi.org/10.1007/s44248-023-00001-z">doi.org/10.1007/s44248-023-00001-z</a>.<br>
<span class="tag">Peer reviewed</span> <span class="tag">Journal article</span> <br><br> <strong>Identifying and responding to outlier demand in revenue management</strong>.<br><strong>N. Rennie</strong>, C. Cleophas, A. M. Sykulski, F. Dost. <em>European Journal of Operational Research</em>. Volume 293, Issue 3, 16 September 2021, 1015-1030. doi: <a href="https://doi.org/10.1016/j.ejor.2021.01.002">doi.org/10.1016/j.ejor.2021.01.002</a>.<br>
<span class="tag">Peer reviewed</span> <span class="tag">Journal article</span> <br><br></p>
</section>
<section id="other-published-articles" class="level3">
<h3 class="anchored" data-anchor-id="other-published-articles">Other published articles</h3>
<p><strong>Data science in the medical curriculum: Equipping medical students for the digital age</strong>.<br>A. Sam, C. Yau, C. Owen, D. Doudesis, E. Hothersall-Davies, J. Knight, K. Petty-Saphon, A. Banerjee, <strong>N. Rennie</strong>, S. Langan, T. Levett, V. Thiagarajan, J. Car, C. Fassnidge. <em>Medical Schools Council (MSC) and Health Data Research UK (HDR UK)</em>. 2025. Link: <a href="https://www.medschools.ac.uk/media/3238/data-science-in-the-medical-curriculum.pdf">www.medschools.ac.uk/media/3238/data-science-in-the-medical-curriculum.pdf</a>.<br>
<span class="tag">Online</span> <span class="tag">Guidelines</span> <span class="tag">Report</span> <br><br> <strong>Creating Christmas cards with R</strong>.<br><strong>N. Rennie</strong>. <em>Real World Data Science (online)</em>. 2023. doi: <a href="https://doi.org/10.5281/zenodo.10530635">doi.org/10.5281/zenodo.10530635</a>.<br>
<span class="tag">Online</span> <span class="tag">Blog</span> <br><br> <strong>Best practices for data visualisation</strong>.<br>A. Krause, <strong>N. Rennie</strong>, B. Tarran. <em>Royal Statistical Society (online)</em>. 2023. Link: <a href="https://royal-statistical-society.github.io/datavisguide">royal-statistical-society.github.io/datavisguide</a>.<br>
<span class="tag">Online</span> <span class="tag">Guidelines</span> <br><br> <strong>We’re not getting any younger! Or should that be older?</strong>.<br><strong>N. Rennie</strong>. <em>Significance (online)</em>. 2022. Link: <a href="https://significancemagazine.com/we-re-not-getting-any-younger-or-should-that-be-older/">significancemagazine.com/we-re-not-getting-any-younger-or-should-that-be-older/</a>.<br>
<span class="tag">Online</span> <span class="tag">Blog</span> <br><br></p>
</section>
<section id="pre-print-articles" class="level3">
<h3 class="anchored" data-anchor-id="pre-print-articles">Pre-print articles</h3>
<p><strong>Making ‘messy’ data: an R package for teaching data wrangling with realistic data</strong>.<br><strong>N. Rennie</strong>, J. Davison. <em>Submitted</em>. 2025. doi: <a href="https://doi.org/10.5281/zenodo.16995759">doi.org/10.5281/zenodo.16995759</a>.<br>
<span class="tag">Preprint</span> <br><br></p>
</section>
</section>
<section id="phd-thesis" class="level2">
<h2 class="anchored" data-anchor-id="phd-thesis">PhD Thesis</h2>
<p><strong>Detecting demand outliers in transport systems</strong>.<br><strong>N. Rennie</strong>. <em>PhD Thesis</em>. Lancaster University. 2021. doi: <a href="https://doi.org/10.17635/lancaster/thesis/1448">doi.org/10.17635/lancaster/thesis/1448</a>.<br>
<span class="tag">PhD Thesis</span> <br><br></p>
</section>
<section id="blog-posts" class="level2">
<h2 class="anchored" data-anchor-id="blog-posts">Blog posts</h2>
<p>Besides the <a href="https://nrennie.rbind.io/blog/">blog posts you’ll find on this website</a>, I’ve also contributed blog posts to a variety of other organisations:</p>
<section id="real-world-data-science" class="level3">
<h3 class="anchored" data-anchor-id="real-world-data-science">Real World Data Science</h3>
<p><a href="https://realworlddatascience.net/">Real World Data Science</a> is a project from the Royal Statistical Society, in partnership with the American Statistical Association. It’s developed by data science practitioners and leaders with a single goal in mind: to help deliver high quality, ethical, and impactful data science projects.</p>
<div class="callout callout-style-simple callout-none no-icon callout-titled">
<div class="callout-header d-flex align-content-center collapsed" data-bs-toggle="collapse" data-bs-target=".callout-1-contents" aria-controls="callout-1" aria-expanded="false" aria-label="Toggle callout">
<div class="callout-icon-container">
<i class="callout-icon no-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">None</span>View contributed blogs
</div>
<div class="callout-btn-toggle d-inline-block border-0 py-1 ps-1 pe-0 float-end"><i class="callout-toggle"></i></div>
</div>
<div id="callout-1" class="callout-1-contents callout-collapse collapse">
<div class="callout-body-container callout-body">
<ul>
<li><a href="https://realworlddatascience.net/ideas/tutorials/posts/2023/12/12/xmas-cards.html">Creating Christmas cards with R</a></li>
</ul>
</div>
</div>
</div>
</section>
<section id="jumping-rivers" class="level3">
<h3 class="anchored" data-anchor-id="jumping-rivers">Jumping Rivers</h3>
<p><a href="https://www.jumpingrivers.com/blog/">Jumping Rivers</a> write blog posts on topics related to R, Python, and all things data science. You can find the blog posts I contributed when I worked as a Data Scientist at Jumping Rivers listed below.</p>
<div class="callout callout-style-simple callout-none no-icon callout-titled">
<div class="callout-header d-flex align-content-center collapsed" data-bs-toggle="collapse" data-bs-target=".callout-2-contents" aria-controls="callout-2" aria-expanded="false" aria-label="Toggle callout">
<div class="callout-icon-container">
<i class="callout-icon no-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">None</span>View contributed blogs
</div>
<div class="callout-btn-toggle d-inline-block border-0 py-1 ps-1 pe-0 float-end"><i class="callout-toggle"></i></div>
</div>
<div id="callout-2" class="callout-2-contents callout-collapse collapse">
<div class="callout-body-container callout-body">
<ul>
<li><a href="https://www.jumpingrivers.com/blog/accessibility-alt-text-in-r/">Alt Text in R: Plots, Reports, and Shiny</a></li>
<li><a href="https://www.jumpingrivers.com/blog/r7-oop-object-oriented-programming-r/">What is R7? A New OOP System for R</a></li>
<li><a href="https://www.jumpingrivers.com/blog/quarto-rmarkdown-comparison/">I’m an R user: Quarto or R Markdown?</a></li>
<li><a href="https://www.jumpingrivers.com/blog/highlights-rstudioconf2022/">Highlights from rstudio::conf(2022)</a></li>
<li><a href="https://www.jumpingrivers.com/blog/custom-colour-palettes-for-ggplot2/">Custom colour palettes for {ggplot2}</a></li>
<li><a href="https://www.jumpingrivers.com/blog/2021-thinking-about-maps-and-ice-cream/">Thinking about maps and ice cream</a></li>
</ul>
</div>
</div>
</div>
</section>
<section id="posit" class="level3">
<h3 class="anchored" data-anchor-id="posit">Posit</h3>
<p>The <a href="https://posit.co/blog/">Posit</a> (formerly RStudio) blog covers topics including industry, open source, products and technology, training and education, and data science leadership. You can find my contributed blogs listed below.</p>
<div class="callout callout-style-simple callout-none no-icon callout-titled">
<div class="callout-header d-flex align-content-center collapsed" data-bs-toggle="collapse" data-bs-target=".callout-3-contents" aria-controls="callout-3" aria-expanded="false" aria-label="Toggle callout">
<div class="callout-icon-container">
<i class="callout-icon no-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">None</span>View contributed blogs
</div>
<div class="callout-btn-toggle d-inline-block border-0 py-1 ps-1 pe-0 float-end"><i class="callout-toggle"></i></div>
</div>
<div id="callout-3" class="callout-3-contents callout-collapse collapse">
<div class="callout-body-container callout-body">
<ul>
<li><a href="https://posit.co/blog/translating-shiny-apps-for-international-audiences/">Translating Shiny Apps for International Audiences</a></li>
</ul>
</div>
</div>
</div>
</section>
</section>
<section id="software" class="level2">
<h2 class="anchored" data-anchor-id="software">Software</h2>
<p><strong>ggauto: Automatically Create and Style ‘ggplot2’ Charts</strong>.<br><strong>N. Rennie</strong>. <em>CRAN</em>. (First released 25 March 2026). doi: <a href="https://doi.org/10.32614/CRAN.package.ggauto">doi.org/10.32614/CRAN.package.ggauto</a>.<br>
<span class="tag">Software</span> <br><br> <strong>messy: Create Messy Data from Clean Data Frames</strong>.<br><strong>N. Rennie</strong>. <em>CRAN</em>. (First released 3 December 2024). doi: <a href="https://doi.org/10.32614/CRAN.package.messy">doi.org/10.32614/CRAN.package.messy</a>.<br>
<span class="tag">Software</span> <br><br> <strong>RSSthemes: Royal Statistical Society Palettes and Themes</strong>.<br><strong>N. Rennie</strong>. <em>CRAN</em>. (First released 29 August 2023). doi: <a href="https://doi.org/10.32614/CRAN.package.RSSthemes">doi.org/10.32614/CRAN.package.RSSthemes</a>.<br>
<span class="tag">Software</span> <br><br> <strong>ggflowchart: Flowcharts with ‘ggplot2’</strong>.<br><strong>N. Rennie</strong>. <em>CRAN</em>. (First released 11 May 2023). doi: <a href="https://doi.org/10.32614/CRAN.package.ggflowchart">doi.org/10.32614/CRAN.package.ggflowchart</a>.<br>
<span class="tag">Software</span> <br><br> <strong>PrettyCols: Pretty Colour Palettes</strong>.<br><strong>N. Rennie</strong>. <em>CRAN</em>. (First released 2 September 2022). doi: <a href="https://doi.org/10.32614/CRAN.package.PrettyCols">doi.org/10.32614/CRAN.package.PrettyCols</a>.<br>
<span class="tag">Software</span> <br><br></p>
<p>See also <a href="https://nrennie.rbind.io/projects/#category=Software%20Development">nrennie.rbind.io/projects</a> for a list of software packages I have developed and published.</p>


</section>

 ]]></description>
  <category>Research</category>
  <guid>https://nrennie.com/projects/publications/</guid>
  <pubDate>Wed, 06 May 2026 13:13:45 GMT</pubDate>
  <media:content url="https://nrennie.com/projects/publications/featured.jpg" medium="image" type="image/jpeg"/>
</item>
<item>
  <title>Training and Workshops</title>
  <link>https://nrennie.com/projects/training-workshops/</link>
  <description><![CDATA[ 





<p>These interactive workshops have been delivered in-person and remotely to individuals and small groups of up to 14 people. Some have also been be delivered online for groups of up to 500 people.</p>
<div class="grid">
<div class="g-col-12 g-col-md-4">
<div class="viz-card">
<h3 class="anchored">
Introduction to data analysis with R
</h3>
<p>
An introductory level course for beginners to R, covering data import, summary statistics, and visualisation.
</p>
<p>
<span class="alt-tag">R</span> <span class="alt-tag">Statistics</span>
</p>
<p>Details</p>
</div>
<div id="modal-1-1" class="modal-overlay" onclick="if(event.target===this)this.style.display='none'">
<div class="modal-content">
<button class="modal-close" onclick="document.getElementById('modal-1-1').style.display='none'">
×
</button>
<h2 class="anchored">
Introduction to data analysis with R
</h2>
<p>
An introductory level course for beginners to R, covering data import, summary statistics, and visualisation.
</p>
<p>
<strong>Learning outcomes:</strong>
</p><ul>
<li>
Understand the difference between R and RStudio, and how RStudio works
</li>
<li>
Be able to complete simple operations in R such as saving objects, performing calculations, and reading in data
</li>
<li>
Calculate summary statistics, and make simple plots of data
</li>
</ul>
<p></p>
<p>
<strong>Prerequisites:</strong> There are no prerequisites.
</p>
<p>
<strong>Time:</strong> 6 hours
</p>
<p>
<strong>Course website:</strong> <a href="https://nrennie.rbind.io/training-intro-to-r/" target="_blank">https://nrennie.rbind.io/training-intro-to-r/</a>
</p>
</div>
</div>
<div class="viz-card">
<h3 class="anchored">
Build an R package
</h3>
<p>
An intermediate R course for people who want to build their first R package. There are many benefits to turning your R scripts or functions into a package, like making your code easier to re-use, easier to share with others, easier to document, and easier to test. But the process of writing a package can feel intimidating, especially if you haven’t done it before. But it doesn’t need to!
</p>
<p>
<span class="alt-tag">R</span>
</p>
<p>Details</p>
</div>
<div id="modal-1-2" class="modal-overlay" onclick="if(event.target===this)this.style.display='none'">
<div class="modal-content">
<button class="modal-close" onclick="document.getElementById('modal-1-2').style.display='none'">
×
</button>
<h2 class="anchored">
Build an R package
</h2>
<p>
An intermediate R course for people who want to build their first R package. There are many benefits to turning your R scripts or functions into a package, like making your code easier to re-use, easier to share with others, easier to document, and easier to test. But the process of writing a package can feel intimidating, especially if you haven’t done it before. But it doesn’t need to!
</p>
<p>
<strong>Learning outcomes:</strong>
</p><ul>
<li>
Know what things you need to make a package and how to create them
</li>
<li>
How to write functions (in a package-friendly way) and add them to a package
</li>
<li>
How to write documentation and examples for functions
</li>
<li>
Best practices for package development
</li>
<li>
How to share your package with other people
</li>
</ul>
<p></p>
<p>
<strong>Prerequisites:</strong> The session aims to be introductory, so you don’t need any previous experience of building R packages (or even writing functions!) but some basic knowledge of R will be useful.
</p>
<p>
<strong>Time:</strong> 2 hours
</p>
<p>
<strong>Course website:</strong> <a href="https://nrennie.rbind.io/training-r-packages/" target="_blank">https://nrennie.rbind.io/training-r-packages/</a>
</p>
</div>
</div>
<div class="viz-card">
<h3 class="anchored">
Parameterised reports with (R/Python) and Quarto
</h3>
<p>
Coming soon!
</p>
<p>
<span class="alt-tag">R</span> <span class="alt-tag">Python</span> <span class="alt-tag">Quarto</span>
</p>
<p>Details</p>
</div>
<div id="modal-1-3" class="modal-overlay" onclick="if(event.target===this)this.style.display='none'">
<div class="modal-content">
<button class="modal-close" onclick="document.getElementById('modal-1-3').style.display='none'">
×
</button>
<h2 class="anchored">
Parameterised reports with (R/Python) and Quarto
</h2>
<p>
Coming soon!
</p>
<p>
<strong>Prerequisites:</strong> (Ideally) able to create simple Quarto documents. Basic knowledge of R or Python.
</p>
<p>
<strong>Time:</strong> 2 hours
</p>
</div>
</div>
<div class="viz-card">
<h3 class="anchored">
Data visualisation in R with <code>ggplot2</code>
</h3>
<p>
Coming soon!
</p>
<p>
<span class="alt-tag">Data visualisation</span> <span class="alt-tag">R</span>
</p>
<p>Details</p>
</div>
<div id="modal-1-4" class="modal-overlay" onclick="if(event.target===this)this.style.display='none'">
<div class="modal-content">
<button class="modal-close" onclick="document.getElementById('modal-1-4').style.display='none'">
×
</button>
<h2 class="anchored">
Data visualisation in R with <code>ggplot2</code>
</h2>
<p>
Coming soon!
</p>
<p>
<strong>Prerequisites:</strong> Basic knowledge of R.
</p>
<p>
<strong>Time:</strong> 2 hours
</p>
</div>
</div>
</div>
<div class="g-col-12 g-col-md-4">
<div class="viz-card">
<h3 class="anchored">
Writing better R code
</h3>
<p>
A course for intermediate R users who want to improve the quality of the code they are writing
</p>
<p>
<span class="alt-tag">R</span>
</p>
<p>Details</p>
</div>
<div id="modal-2-1" class="modal-overlay" onclick="if(event.target===this)this.style.display='none'">
<div class="modal-content">
<button class="modal-close" onclick="document.getElementById('modal-2-1').style.display='none'">
×
</button>
<h2 class="anchored">
Writing better R code
</h2>
<p>
A course for intermediate R users who want to improve the quality of the code they are writing
</p>
<p>
<strong>Learning outcomes:</strong>
</p><ul>
<li>
Understand how write to better code that is well-structured and easier to read
</li>
<li>
Be able to organise multiple R scripts in a project
</li>
<li>
Know how to manage dependencies on different R packages
</li>
</ul>
<p></p>
<p>
<strong>Prerequisites:</strong> Basic knowledge of R.
</p>
<p>
<strong>Time:</strong> 2 hours
</p>
<p>
<strong>Course website:</strong> <a href="https://nrennie.rbind.io/training-better-r-code/" target="_blank">https://nrennie.rbind.io/training-better-r-code/</a>
</p>
</div>
</div>
<div class="viz-card">
<h3 class="anchored">
Introduction to machine learning with <code>tidymodels</code>
</h3>
<p>
A course covering random forests, support vector machines, and LASSO regression and how to implement them in {tidymodels}. Suitable for those with some experience of R and statistics.
</p>
<p>
<span class="alt-tag">R</span> <span class="alt-tag">Statistics</span> <span class="alt-tag">Machine learning</span>
</p>
<p>Details</p>
</div>
<div id="modal-2-2" class="modal-overlay" onclick="if(event.target===this)this.style.display='none'">
<div class="modal-content">
<button class="modal-close" onclick="document.getElementById('modal-2-2').style.display='none'">
×
</button>
<h2 class="anchored">
Introduction to machine learning with <code>tidymodels</code>
</h2>
<p>
A course covering random forests, support vector machines, and LASSO regression and how to implement them in {tidymodels}. Suitable for those with some experience of R and statistics.
</p>
<p>
<strong>Learning outcomes:</strong>
</p><ul>
<li>
Be able to use some common machine learning techniques such as Lasso regression, random forests and support vector machines
</li>
<li>
Fit these models in R using {tidymodels}
</li>
<li>
Understand common concepts of machine learning such as cross-validation, hyperparameter tuning and model evaluation
</li>
</ul>
<p></p>
<p>
<strong>Prerequisites:</strong> Familiarity with some statistical concepts such as correlation, variability, and simple linear regression. Being reasonably comfortable with data wrangling using {dplyr} and {tidyr}.
</p>
<p>
<strong>Time:</strong> 2 hours
</p>
<p>
<strong>Course website:</strong> <a href="https://nrennie.rbind.io/training-intro-to-tidymodels/" target="_blank">https://nrennie.rbind.io/training-intro-to-tidymodels/</a>
</p>
</div>
</div>
<div class="viz-card">
<h3 class="anchored">
Styling documents using Quarto extensions
</h3>
<p>
An intermediate-level course covering styling HTML and PDF documents, for those with some experience of Quarto.
</p>
<p>
<span class="alt-tag">Quarto</span>
</p>
<p>Details</p>
</div>
<div id="modal-2-3" class="modal-overlay" onclick="if(event.target===this)this.style.display='none'">
<div class="modal-content">
<button class="modal-close" onclick="document.getElementById('modal-2-3').style.display='none'">
×
</button>
<h2 class="anchored">
Styling documents using Quarto extensions
</h2>
<p>
An intermediate-level course covering styling HTML and PDF documents, for those with some experience of Quarto.
</p>
<p>
<strong>Learning outcomes:</strong>
</p><ul>
<li>
Know how to customise Quarto HTML outputs (including documents and revealjs
</li>
<li>
Understand what Quarto extensions are, how to install them, and use them for styling documents
</li>
<li>
slides) using CSS and PDF documents using LaTeX
</li>
<li>
Know what the components of Quarto extensions are and be able to create a simple style extension to make your documents look more professional and recognisable
</li>
</ul>
<p></p>
<p>
<strong>Prerequisites:</strong> (Ideally) able to create simple Quarto documents. No prior knowledge of CSS or LaTeX required.
</p>
<p>
<strong>Time:</strong> 2 hours
</p>
<p>
<strong>Course website:</strong> <a href="https://nrennie.rbind.io/training-quarto-extensions/" target="_blank">https://nrennie.rbind.io/training-quarto-extensions/</a>
</p>
</div>
</div>
<div class="viz-card">
<h3 class="anchored">
Data visualisation in Python with <code>Plotnine</code>
</h3>
<p>
Coming soon!
</p>
<p>
<span class="alt-tag">Data visualisation</span> <span class="alt-tag">Python</span>
</p>
<p>Details</p>
</div>
<div id="modal-2-4" class="modal-overlay" onclick="if(event.target===this)this.style.display='none'">
<div class="modal-content">
<button class="modal-close" onclick="document.getElementById('modal-2-4').style.display='none'">
×
</button>
<h2 class="anchored">
Data visualisation in Python with <code>Plotnine</code>
</h2>
<p>
Coming soon!
</p>
<p>
<strong>Prerequisites:</strong> Basic knowledge of Python.
</p>
<p>
<strong>Time:</strong> 2 hours
</p>
</div>
</div>
</div>
<div class="g-col-12 g-col-md-4">
<div class="viz-card">
<h3 class="anchored">
Introduction to Shiny
</h3>
<p>
A short introductory course to creating web applications using Shiny in R, suitable for those with some existing experience of R.
</p>
<p>
<span class="alt-tag">R</span> <span class="alt-tag">Shiny</span>
</p>
<p>Details</p>
</div>
<div id="modal-3-1" class="modal-overlay" onclick="if(event.target===this)this.style.display='none'">
<div class="modal-content">
<button class="modal-close" onclick="document.getElementById('modal-3-1').style.display='none'">
×
</button>
<h2 class="anchored">
Introduction to Shiny
</h2>
<p>
A short introductory course to creating web applications using Shiny in R, suitable for those with some existing experience of R.
</p>
<p>
<strong>Learning outcomes:</strong>
</p><ul>
<li>
Understand the different components of a Shiny app - UI and server
</li>
<li>
Be able to build a simple Shiny app with user inputs and dynamic outputs
</li>
<li>
Understand options for deployment - to get your Shiny app out into the world!
</li>
</ul>
<p></p>
<p>
<strong>Prerequisites:</strong> Basic knowledge of R.
</p>
<p>
<strong>Time:</strong> 1 hour
</p>
<p>
<strong>Course website:</strong> <a href="https://nrennie.rbind.io/training-intro-to-shiny/" target="_blank">https://nrennie.rbind.io/training-intro-to-shiny/</a>
</p>
</div>
</div>
<div class="viz-card">
<h3 class="anchored">
Introduction to Quarto
</h3>
<p>
An introductory-level course on Quarto (an open-source scientific and technical publishing system that allows you to combine text, images, code, plots, and tables in a fully-reproducible document).
</p>
<p>
<span class="alt-tag">Quarto</span>
</p>
<p>Details</p>
</div>
<div id="modal-3-2" class="modal-overlay" onclick="if(event.target===this)this.style.display='none'">
<div class="modal-content">
<button class="modal-close" onclick="document.getElementById('modal-3-2').style.display='none'">
×
</button>
<h2 class="anchored">
Introduction to Quarto
</h2>
<p>
An introductory-level course on Quarto (an open-source scientific and technical publishing system that allows you to combine text, images, code, plots, and tables in a fully-reproducible document).
</p>
<p>
<strong>Learning outcomes:</strong>
</p><ul>
<li>
Understand what Quarto is and why it is useful for reproducible reporting
</li>
<li>
Be able to create simple HTML documents, PDFs, and revealjs presentations, with embedded code
</li>
<li>
Be able to set different options for: code execution, figure options, animation, and more!
</li>
</ul>
<p></p>
<p>
<strong>Prerequisites:</strong> Basic knowledge of R, Python, Julia, or ObservableJS.
</p>
<p>
<strong>Time:</strong> 2 hours
</p>
<p>
<strong>Course website:</strong> <a href="https://nrennie.rbind.io/training-intro-to-quarto/" target="_blank">https://nrennie.rbind.io/training-intro-to-quarto/</a>
</p>
</div>
</div>
<div class="viz-card">
<h3 class="anchored">
Best practices for data visualisation
</h3>
<p>
An introductory-level course to data visualisation, including best practices and how to apply them.
</p>
<p>
<span class="alt-tag">Data visualisation</span>
</p>
<p>Details</p>
</div>
<div id="modal-3-3" class="modal-overlay" onclick="if(event.target===this)this.style.display='none'">
<div class="modal-content">
<button class="modal-close" onclick="document.getElementById('modal-3-3').style.display='none'">
×
</button>
<h2 class="anchored">
Best practices for data visualisation
</h2>
<p>
An introductory-level course to data visualisation, including best practices and how to apply them.
</p>
<p>
<strong>Learning outcomes:</strong>
</p><ul>
<li>
Understand why data visualisation is necessary, and what it can be used for
</li>
<li>
Explore common types of visualisation and how they can be leveraged to uncover relationships in data
</li>
<li>
Describe and apply principles of good data visualisation, and discuss the limitations of principles
</li>
<li>
Be able to adjust default settings of charts to get a more truthful representation of your data
</li>
</ul>
<p></p>
<p>
<strong>Prerequisites:</strong> There are no prerequisites.
</p>
<p>
<strong>Time:</strong> 1 hour
</p>
<p>
<strong>Course website:</strong> <a href="https://nrennie.rbind.io/training-data-visualisation/" target="_blank">https://nrennie.rbind.io/training-data-visualisation/</a>
</p>
</div>
</div>
<div class="viz-card">
<h3 class="anchored">
Git and GitHub for R users
</h3>
<p>
An introductory-level course for R users getting started with Git and GitHub for version control, using RStudio as an IDE.
</p>
<p>
<span class="alt-tag">Git</span> <span class="alt-tag">R</span>
</p>
<p>Details</p>
</div>
<div id="modal-3-4" class="modal-overlay" onclick="if(event.target===this)this.style.display='none'">
<div class="modal-content">
<button class="modal-close" onclick="document.getElementById('modal-3-4').style.display='none'">
×
</button>
<h2 class="anchored">
Git and GitHub for R users
</h2>
<p>
An introductory-level course for R users getting started with Git and GitHub for version control, using RStudio as an IDE.
</p>
<p>
<strong>Learning outcomes:</strong>
</p><ul>
<li>
Understand why version control is necessary and useful
</li>
<li>
Be able to collaborate on code using Git and GitHub from Rstudio
</li>
<li>
Edit code, track changes, and review code using GitHub
</li>
</ul>
<p></p>
<p>
<strong>Prerequisites:</strong> Basic knowledge of R.
</p>
<p>
<strong>Time:</strong> 2 hours
</p>
<p>
<strong>Course website:</strong> <a href="https://nrennie.rbind.io/training-git-r/" target="_blank">https://nrennie.rbind.io/training-git-r/</a>
</p>
</div>
</div>
</div>
</div>



 ]]></description>
  <category>R</category>
  <category>Quarto</category>
  <category>Data Visualisation</category>
  <category>Teaching</category>
  <guid>https://nrennie.com/projects/training-workshops/</guid>
  <pubDate>Wed, 06 May 2026 13:13:45 GMT</pubDate>
  <media:content url="https://nrennie.com/projects/training-workshops/featured.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>R Packages</title>
  <link>https://nrennie.com/projects/r-packages/</link>
  <description><![CDATA[ 





<section id="ggauto" class="level2">
<h2 class="anchored" data-anchor-id="ggauto">ggauto</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/ggauto/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1"><img src="https://raw.githubusercontent.com/nrennie/ggauto/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>ggauto</code> is an opinionated <code>ggplot2</code> extension package to automatically choose the best chart type and styling, based on the types and values in the data. The default styling is chosen to be more accessible and more readable than the default <code>ggplot2</code> options.</p>
<p>doi: <a href="https://doi.org/10.32614/CRAN.package.ggauto">10.32614/CRAN.package.ggauto</a></p>
<p>CRAN: <a href="https://cran.r-project.org/web/packages/ggauto/index.html">cran.r-project.org/web/packages/ggauto</a></p>
<p>GitHub: <a href="https://github.com/nrennie/ggauto">github.com/nrennie/ggauto</a></p>
<p>Documentation: <a href="https://nrennie.rbind.io/ggauto/">nrennie.rbind.io/ggauto</a></p>
</div>
</div>
</section>
<section id="ggflowchart" class="level2">
<h2 class="anchored" data-anchor-id="ggflowchart">ggflowchart</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/ggflowchart/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-2"><img src="https://raw.githubusercontent.com/nrennie/ggflowchart/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>ggflowchart</code> is an R package for creating flowchart diagrams using <code>ggplot2</code>.</p>
<p>doi: <a href="https://doi.org/10.32614/CRAN.package.ggflowchart">10.32614/CRAN.package.ggflowchart</a></p>
<p>CRAN: <a href="https://cran.r-project.org/web/packages/ggflowchart/index.html">cran.r-project.org/web/packages/ggflowchart</a></p>
<p>GitHub: <a href="https://github.com/nrennie/ggflowchart">github.com/nrennie/ggflowchart</a></p>
<p>Documentation: <a href="https://nrennie.rbind.io/ggflowchart/">nrennie.rbind.io/ggflowchart</a></p>
</div>
</div>
</section>
<section id="messy" class="level2">
<h2 class="anchored" data-anchor-id="messy">messy</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/messy/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-3"><img src="https://raw.githubusercontent.com/nrennie/messy/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p>For the purposes of teaching, it is often desirable to show examples of working with messy data and how to clean it. The <code>messy</code> R package creates messy data from clean, tidy data frames so that students have a clean example to work towards.</p>
<p>doi: <a href="https://doi.org/10.32614/CRAN.package.messy">doi.org/10.32614/CRAN.package.messy</a></p>
<p>CRAN: <a href="https://cran.r-project.org/web/packages/messy/index.html">cran.r-project.org/web/packages/messy</a></p>
<p>GitHub: <a href="https://github.com/nrennie/messy">github.com/nrennie/messy</a></p>
<p>Documentation: <a href="https://nrennie.rbind.io/messy/">nrennie.rbind.io/messy</a></p>
</div>
</div>
</section>
<section id="prettycols" class="level2">
<h2 class="anchored" data-anchor-id="prettycols">PrettyCols</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/PrettyCols/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-4"><img src="https://raw.githubusercontent.com/nrennie/PrettyCols/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>PrettyCols</code> is an R package containing aesthetically pleasing colour palettes. The structure of the package is based on code from the <a href="https://github.com/jakelawlor/PNWColors"><code>PNWColors</code></a>, <a href="https://github.com/karthik/wesanderson"><code>wesanderson</code></a>, and <a href="https://github.com/BlakeRMills/MetBrewer"><code>MetBrewer</code></a> packages.</p>
<p>doi: <a href="https://doi.org/10.32614/CRAN.package.PrettyCols">10.32614/CRAN.package.PrettyCols</a></p>
<p>CRAN: <a href="https://cran.r-project.org/web/packages/PrettyCols/index.html">cran.r-project.org/web/packages/PrettyCols</a></p>
<p>GitHub: <a href="https://github.com/nrennie/PrettyCols">github.com/nrennie/PrettyCols</a></p>
<p>Documentation: <a href="https://nrennie.rbind.io/PrettyCols/">nrennie.rbind.io/PrettyCols</a></p>
</div>
</div>
</section>
<section id="rssthemes" class="level2">
<h2 class="anchored" data-anchor-id="rssthemes">RSSthemes</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/RSSthemes/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-5"><img src="https://raw.githubusercontent.com/nrennie/RSSthemes/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>RSSthemes</code> is an R package for styling graphics for RSS publications. This package accompanies the Best Practices for Data Visualisation guidance, published by the Royal Statistical Society, which can be found at <a href="https://royal-statistical-society.github.io/datavisguide/">rss.org.uk/datavisguide</a>.</p>
<p>doi: <a href="https://doi.org/10.32614/CRAN.package.RSSthemes">10.32614/CRAN.package.RSSthemes</a></p>
<p>CRAN: <a href="https://cran.r-project.org/web/packages/RSSthemes/index.html">cran.r-project.org/web/packages/RSSthemes</a></p>
<p>GitHub: <a href="https://github.com/nrennie/RSSthemes">github.com/nrennie/RSSthemes</a></p>
<p>Documentation: <a href="https://royal-statistical-society.github.io/datavisguide/docs/tools.html#r">royal-statistical-society.github.io/datavisguide/docs/tools</a></p>
</div>
</div>
</section>
<section id="art" class="level2">
<h2 class="anchored" data-anchor-id="art">aRt</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/aRt/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-6"><img src="https://raw.githubusercontent.com/nrennie/aRt/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>aRt</code> is an R package to create generative art, using <code>ggplot2</code> graphics.</p>
<p>GitHub: <a href="https://github.com/nrennie/aRt">github.com/nrennie/aRt</a></p>
<p>Documentation: <a href="https://nrennie.rbind.io/aRt/">nrennie.rbind.io/aRt</a></p>
</div>
</div>
</section>
<section id="artdata" class="level2">
<h2 class="anchored" data-anchor-id="artdata">aRtData</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/aRtData/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-7"><img src="https://raw.githubusercontent.com/nrennie/aRtData/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>aRtData</code> is an R package containing data used in the <code>aRt</code> package. Data generating functions are available, and the data included in the package use the default values from the functions in <code>aRt</code>.</p>
<p>GitHub: <a href="https://github.com/nrennie/aRtData">github.com/nrennie/aRtData</a></p>
<p>Documentation: <a href="https://nrennie.rbind.io/aRtData/">nrennie.rbind.io/aRtData</a></p>
</div>
</div>
</section>
<section id="colortools" class="level2">
<h2 class="anchored" data-anchor-id="colortools">colorTools</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://gitlab.com/nrennie/colorTools/-/raw/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-8"><img src="https://gitlab.com/nrennie/colorTools/-/raw/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>colorTools</code> is an R package containing helper functions for working with colours in R, including contrast checking and colour blending.</p>
<p>GitLab: <a href="https://gitlab.com/nrennie/colorTools">gitlab.com/nrennie/colorTools</a></p>
</div>
</div>
</section>
<section id="funcnetout" class="level2">
<h2 class="anchored" data-anchor-id="funcnetout">funcnetout</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/funcnetout/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-9"><img src="https://raw.githubusercontent.com/nrennie/funcnetout/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>funcnetout</code> is an R package for detecting functional outliers in a network setting, with options for online or offline detection.</p>
<p>GitHub: <a href="https://github.com/nrennie/funcnetout">github.com/nrennie/funcnetout</a></p>
<p>Documentation: <a href="https://nrennie.rbind.io/funcnetout/">nrennie.rbind.io/funcnetout</a></p>
</div>
</div>
</section>
<section id="ggalttext" class="level2">
<h2 class="anchored" data-anchor-id="ggalttext">ggalttext</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/ggalttext/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-10"><img src="https://raw.githubusercontent.com/nrennie/ggalttext/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>ggalttext</code> is an R package which generates alt text for plots created in <code>ggplot2</code>.</p>
<p>GitHub: <a href="https://github.com/nrennie/ggalttext">github.com/nrennie/ggalttext</a></p>
<p>Documentation: <a href="https://nrennie.rbind.io/ggalttext/">nrennie.rbind.io/alttext</a></p>
</div>
</div>
</section>
<section id="ggtextcircle" class="level2">
<h2 class="anchored" data-anchor-id="ggtextcircle">ggtextcircle</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/ggtextcircle/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-11"><img src="https://raw.githubusercontent.com/nrennie/ggtextcircle/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>ggtextcircle</code> is a <code>ggplot2</code> extension R package which contains <code>geom</code> and <code>stat</code> functions for plotting angled text in a (partial) circle.</p>
<p>GitHub: <a href="https://github.com/nrennie/ggtextcircle">github.com/nrennie/ggtextcircle</a></p>
</div>
</div>
</section>
<section id="londonmarathon" class="level2">
<h2 class="anchored" data-anchor-id="londonmarathon">LondonMarathon</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/LondonMarathon/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-12"><img src="https://raw.githubusercontent.com/nrennie/LondonMarathon/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>LondonMarathon</code> is an R package containing two data sets about London Marathon scraped from Wikipedia.</p>
<p>GitHub: <a href="https://github.com/nrennie/LondonMarathon">github.com/nrennie/LondonMarathon</a></p>
</div>
</div>
</section>
<section id="national.highways" class="level2">
<h2 class="anchored" data-anchor-id="national.highways">national.highways</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/national-highways/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-13"><img src="https://raw.githubusercontent.com/nrennie/national-highways/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>national.highways</code> is an R package to access the National Highways API from R.</p>
<p>GitHub: <a href="https://github.com/nrennie/national-highways">github.com/nrennie/national-highways</a></p>
<p>Documentation: <a href="https://nrennie.rbind.io/national-highways/">nrennie.rbind.io/national-highways</a></p>
</div>
</div>
</section>
<section id="simnetdemand" class="level2">
<h2 class="anchored" data-anchor-id="simnetdemand">simnetdemand</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/simnetdemand/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-14"><img src="https://raw.githubusercontent.com/nrennie/simnetdemand/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>simnetdemand</code> is an R package used to simulate demand patterns for different types of transport network.</p>
<p>GitHub: <a href="https://github.com/nrennie/simnetdemand">github.com/nrennie/simnetdemand</a></p>
<p>Documentation: <a href="https://nrennie.rbind.io/simnetdemand/">nrennie.rbind.io/simnetdemand</a></p>
</div>
</div>
</section>
<section id="usefunc" class="level2">
<h2 class="anchored" data-anchor-id="usefunc">usefunc</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/usefunc/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-15"><img src="https://raw.githubusercontent.com/nrennie/usefunc/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>usefunc</code> is an R package containing some additional useful functions.</p>
<p>GitHub: <a href="https://github.com/nrennie/usefunc">github.com/nrennie/usefunc</a></p>
<p>Documentation: <a href="https://nrennie.rbind.io/usefunc/">nrennie.rbind.io/usefunc</a></p>
</div>
</div>
</section>
<section id="wblifeexpectancy" class="level2">
<h2 class="anchored" data-anchor-id="wblifeexpectancy">WBLifeExpectancy</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/WBLifeExpectancy/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-16"><img src="https://raw.githubusercontent.com/nrennie/WBLifeExpectancy/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>WBLifeExpectancy</code> is an R package for analysing and visualising World Bank life expectancy data. It was created and used for the analysis in the Significance article <a href="https://significancemagazine.com/we-re-not-getting-any-younger-or-should-that-be-older/">We’re not getting any younger! Or should that be “older”</a>?</p>
<p>GitHub: <a href="https://github.com/nrennie/WBLifeExpectancy">github.com/nrennie/WBLifeExpectancy</a></p>
<p>Documentation: <a href="https://nrennie.rbind.io/WBLifeExpectancy/">nrennie.rbind.io/WBLifeExpectancy</a></p>
</div>
</div>


</section>

 ]]></description>
  <category>R</category>
  <category>Software Development</category>
  <guid>https://nrennie.com/projects/r-packages/</guid>
  <pubDate>Wed, 06 May 2026 13:13:45 GMT</pubDate>
  <media:content url="https://nrennie.com/projects/r-packages/featured.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>Schools Outreach</title>
  <link>https://nrennie.com/projects/schools-outreach/</link>
  <description><![CDATA[ 





<section id="royal-statistical-society-william-guy-lectureship-2024---2025" class="level2">
<h2 class="anchored" data-anchor-id="royal-statistical-society-william-guy-lectureship-2024---2025">Royal Statistical Society William Guy Lectureship 2024 - 2025</h2>
<p>Each year, the Royal Statistical Society appoints three statisticians as William Guy Lecturers to record and deliver talks about statistics for primary, secondary and sixth form schools and colleges around a specific theme. In the 2024-2025 year, the theme ‘statistics in plain sight’ will encourage young people to recognise the relevance of statistics and data to their everyday lives.</p>
<p>My talk will be aimed at 11-16 year olds and is titled <em>From lab to patient: How statistics shape decisions in medical treatment</em>. I was appointed alongside Mary Gregory ( Office for National Statistics), with her talk ‘From sweets to streets: Understanding the world through statistics’ (for ages 5–11); and Mike Campbell (University of Sheffield) with his talk ‘Can I really believe that number? Statistics and Covid-19’ (for age 16+).</p>
<p>Read more: <a href="https://rss.org.uk/policy-campaigns/policy-groups/education-policy-advisory-group/rss-william-guy-lecturers/william-guy-lecturers-2024-25/">rss.org.uk/policy-campaigns/policy-groups/education-policy-advisory-group/rss-william-guy-lecturers/william-guy-lecturers-2024-25/</a></p>
</section>
<section id="royal-institution-masterclass" class="level2">
<h2 class="anchored" data-anchor-id="royal-institution-masterclass">Royal Institution Masterclass</h2>
<p>The <a href="https://www.rigb.org/">Royal Institution</a> run <a href="https://www.rigb.org/learning/ri-masterclasses">Ri Masterclasses</a> - a series of hands-on workshops where students can explore mathematics and computer science beyond the scope of classroom curriculum.</p>
<section id="how-much-does-a-lemur-weigh" class="level3">
<h3 class="anchored" data-anchor-id="how-much-does-a-lemur-weigh">How much does a lemur weigh?</h3>
<p><strong>Title</strong>: How much does a lemur weigh? An introduction to data science projects</p>
<p>In February 2024, I delivered a 2.5 hour interactive masterclass for around 65 high school aged children from across the North West. It focused on an end-to-end data science projects, covering topics including data visualisation, modelling, predictions, and understanding unusual values.</p>
</section>
</section>
<section id="florence-nightingale-day" class="level2">
<h2 class="anchored" data-anchor-id="florence-nightingale-day">Florence Nightingale Day</h2>
<p>In January 2024, I delivered a talk about my career path and data science projects I’ve worked on as part of Lancaster University’s <a href="https://www.lancaster.ac.uk/maths/engagement/working-with-schools/florence-nightingale-day/">Florence Nightingale Day</a> celebrations, to an audience of around 200 students from local high schools.</p>
<section id="using-data-science-to-improve-health-outcomes" class="level3">
<h3 class="anchored" data-anchor-id="using-data-science-to-improve-health-outcomes">Using data science to improve health outcomes</h3>
<p><strong>Title</strong>: Data, technology and medicine: Using data science to improve health outcomes</p>
<p><strong>Abstract</strong>: The world is collecting more data than ever before, and there are many ways that it can be used in healthcare and medicine to improve our health and wellbeing. Data can help us to understand what happens to our brains as we get older, provide more information for doctors diagnosing rare heart murmurs, or identify ways to make the NHS more efficient. In this talk, I’ll discuss some of the research projects I’ve had the privilege to contribute to and showcase some of the ways we can make better use of data and technology within medicine. I’m also looking forward to sharing the process of working on these projects, and the journey I’ve taken to working in data science.</p>
</section>
</section>
<section id="stem-ambassador" class="level2">
<h2 class="anchored" data-anchor-id="stem-ambassador">STEM Ambassador</h2>
<p>I am registered as a <a href="https://www.stem.org.uk/stem-ambassadors">STEM Ambassador</a> with <a href="https://www.stem.org.uk/about-us">STEM Learning</a> - an organisation who deliver teacher CPD (continuing professional development) in STEM subjects, bring STEM role models into schools as part of the STEM Ambassador Programme and providing bespoke, long-term support for groups of schools in collaboration with companies.</p>
<p>You can request a STEM Ambassador <a href="https://www.stem.org.uk/stem-ambassadors/request-stem-ambassador">here</a>.</p>


</section>

 ]]></description>
  <category>Teaching</category>
  <guid>https://nrennie.com/projects/schools-outreach/</guid>
  <pubDate>Wed, 06 May 2026 13:13:45 GMT</pubDate>
  <media:content url="https://nrennie.com/projects/schools-outreach/featured.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>Generative Art</title>
  <link>https://nrennie.com/projects/generative-art/</link>
  <description><![CDATA[ 





<p>Generative art is a form of art that is created using algorithms, rules, or systems that are often (but not always) executed by computers. Artists set parameters, then the system generates the artwork. The examples here use a combination of R, D3.js, and Python.</p>
<section id="gallery" class="level2">
<h2 class="anchored" data-anchor-id="gallery">Gallery</h2>
<div class="grid">
<div class="g-col-12 g-col-md-3">
<p><a href="images/108.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1"><img src="https://nrennie.com/projects/generative-art/images/108.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/168.png" class="lightbox" data-gallery="quarto-lightbox-gallery-2"><img src="https://nrennie.com/projects/generative-art/images/168.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/182.png" class="lightbox" data-gallery="quarto-lightbox-gallery-3"><img src="https://nrennie.com/projects/generative-art/images/182.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/127.png" class="lightbox" data-gallery="quarto-lightbox-gallery-4"><img src="https://nrennie.com/projects/generative-art/images/127.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/125.png" class="lightbox" data-gallery="quarto-lightbox-gallery-5"><img src="https://nrennie.com/projects/generative-art/images/125.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/043.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-6"><img src="https://nrennie.com/projects/generative-art/images/043.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/112.png" class="lightbox" data-gallery="quarto-lightbox-gallery-7"><img src="https://nrennie.com/projects/generative-art/images/112.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/015.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-8"><img src="https://nrennie.com/projects/generative-art/images/015.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/010.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-9"><img src="https://nrennie.com/projects/generative-art/images/010.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/036.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-10"><img src="https://nrennie.com/projects/generative-art/images/036.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/013.png" class="lightbox" data-gallery="quarto-lightbox-gallery-11"><img src="https://nrennie.com/projects/generative-art/images/013.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/162.png" class="lightbox" data-gallery="quarto-lightbox-gallery-12"><img src="https://nrennie.com/projects/generative-art/images/162.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/186.png" class="lightbox" data-gallery="quarto-lightbox-gallery-13"><img src="https://nrennie.com/projects/generative-art/images/186.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/139.png" class="lightbox" data-gallery="quarto-lightbox-gallery-14"><img src="https://nrennie.com/projects/generative-art/images/139.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/033.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-15"><img src="https://nrennie.com/projects/generative-art/images/033.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/184.png" class="lightbox" data-gallery="quarto-lightbox-gallery-16"><img src="https://nrennie.com/projects/generative-art/images/184.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/006.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-17"><img src="https://nrennie.com/projects/generative-art/images/006.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/094.png" class="lightbox" data-gallery="quarto-lightbox-gallery-18"><img src="https://nrennie.com/projects/generative-art/images/094.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/130.png" class="lightbox" data-gallery="quarto-lightbox-gallery-19"><img src="https://nrennie.com/projects/generative-art/images/130.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/099.png" class="lightbox" data-gallery="quarto-lightbox-gallery-20"><img src="https://nrennie.com/projects/generative-art/images/099.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/084.png" class="lightbox" data-gallery="quarto-lightbox-gallery-21"><img src="https://nrennie.com/projects/generative-art/images/084.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/039.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-22"><img src="https://nrennie.com/projects/generative-art/images/039.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/014.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-23"><img src="https://nrennie.com/projects/generative-art/images/014.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/076.png" class="lightbox" data-gallery="quarto-lightbox-gallery-24"><img src="https://nrennie.com/projects/generative-art/images/076.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/194.png" class="lightbox" data-gallery="quarto-lightbox-gallery-25"><img src="https://nrennie.com/projects/generative-art/images/194.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/152.png" class="lightbox" data-gallery="quarto-lightbox-gallery-26"><img src="https://nrennie.com/projects/generative-art/images/152.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/038.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-27"><img src="https://nrennie.com/projects/generative-art/images/038.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/173.gif" class="lightbox" data-gallery="quarto-lightbox-gallery-28"><img src="https://nrennie.com/projects/generative-art/images/173.gif" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/054.png" class="lightbox" data-gallery="quarto-lightbox-gallery-29"><img src="https://nrennie.com/projects/generative-art/images/054.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/126.png" class="lightbox" data-gallery="quarto-lightbox-gallery-30"><img src="https://nrennie.com/projects/generative-art/images/126.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/142.png" class="lightbox" data-gallery="quarto-lightbox-gallery-31"><img src="https://nrennie.com/projects/generative-art/images/142.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/067.png" class="lightbox" data-gallery="quarto-lightbox-gallery-32"><img src="https://nrennie.com/projects/generative-art/images/067.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/063.png" class="lightbox" data-gallery="quarto-lightbox-gallery-33"><img src="https://nrennie.com/projects/generative-art/images/063.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/124.png" class="lightbox" data-gallery="quarto-lightbox-gallery-34"><img src="https://nrennie.com/projects/generative-art/images/124.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/176.gif" class="lightbox" data-gallery="quarto-lightbox-gallery-35"><img src="https://nrennie.com/projects/generative-art/images/176.gif" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/116.png" class="lightbox" data-gallery="quarto-lightbox-gallery-36"><img src="https://nrennie.com/projects/generative-art/images/116.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/161.png" class="lightbox" data-gallery="quarto-lightbox-gallery-37"><img src="https://nrennie.com/projects/generative-art/images/161.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/058.png" class="lightbox" data-gallery="quarto-lightbox-gallery-38"><img src="https://nrennie.com/projects/generative-art/images/058.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/135.png" class="lightbox" data-gallery="quarto-lightbox-gallery-39"><img src="https://nrennie.com/projects/generative-art/images/135.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/032.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-40"><img src="https://nrennie.com/projects/generative-art/images/032.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/187.png" class="lightbox" data-gallery="quarto-lightbox-gallery-41"><img src="https://nrennie.com/projects/generative-art/images/187.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/022.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-42"><img src="https://nrennie.com/projects/generative-art/images/022.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/055.png" class="lightbox" data-gallery="quarto-lightbox-gallery-43"><img src="https://nrennie.com/projects/generative-art/images/055.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/001.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-44"><img src="https://nrennie.com/projects/generative-art/images/001.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/026.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-45"><img src="https://nrennie.com/projects/generative-art/images/026.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/138.png" class="lightbox" data-gallery="quarto-lightbox-gallery-46"><img src="https://nrennie.com/projects/generative-art/images/138.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/035.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-47"><img src="https://nrennie.com/projects/generative-art/images/035.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/178.png" class="lightbox" data-gallery="quarto-lightbox-gallery-48"><img src="https://nrennie.com/projects/generative-art/images/178.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/100.png" class="lightbox" data-gallery="quarto-lightbox-gallery-49"><img src="https://nrennie.com/projects/generative-art/images/100.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/087.png" class="lightbox" data-gallery="quarto-lightbox-gallery-50"><img src="https://nrennie.com/projects/generative-art/images/087.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/056.png" class="lightbox" data-gallery="quarto-lightbox-gallery-51"><img src="https://nrennie.com/projects/generative-art/images/056.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/134.png" class="lightbox" data-gallery="quarto-lightbox-gallery-52"><img src="https://nrennie.com/projects/generative-art/images/134.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/157.png" class="lightbox" data-gallery="quarto-lightbox-gallery-53"><img src="https://nrennie.com/projects/generative-art/images/157.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/086.png" class="lightbox" data-gallery="quarto-lightbox-gallery-54"><img src="https://nrennie.com/projects/generative-art/images/086.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/049.png" class="lightbox" data-gallery="quarto-lightbox-gallery-55"><img src="https://nrennie.com/projects/generative-art/images/049.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/185.png" class="lightbox" data-gallery="quarto-lightbox-gallery-56"><img src="https://nrennie.com/projects/generative-art/images/185.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/047.png" class="lightbox" data-gallery="quarto-lightbox-gallery-57"><img src="https://nrennie.com/projects/generative-art/images/047.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/166.png" class="lightbox" data-gallery="quarto-lightbox-gallery-58"><img src="https://nrennie.com/projects/generative-art/images/166.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/095.png" class="lightbox" data-gallery="quarto-lightbox-gallery-59"><img src="https://nrennie.com/projects/generative-art/images/095.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/020.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-60"><img src="https://nrennie.com/projects/generative-art/images/020.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/188.png" class="lightbox" data-gallery="quarto-lightbox-gallery-61"><img src="https://nrennie.com/projects/generative-art/images/188.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/044.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-62"><img src="https://nrennie.com/projects/generative-art/images/044.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/008.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-63"><img src="https://nrennie.com/projects/generative-art/images/008.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/034.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-64"><img src="https://nrennie.com/projects/generative-art/images/034.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/129.png" class="lightbox" data-gallery="quarto-lightbox-gallery-65"><img src="https://nrennie.com/projects/generative-art/images/129.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/105.png" class="lightbox" data-gallery="quarto-lightbox-gallery-66"><img src="https://nrennie.com/projects/generative-art/images/105.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/064.png" class="lightbox" data-gallery="quarto-lightbox-gallery-67"><img src="https://nrennie.com/projects/generative-art/images/064.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/111.png" class="lightbox" data-gallery="quarto-lightbox-gallery-68"><img src="https://nrennie.com/projects/generative-art/images/111.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/072.png" class="lightbox" data-gallery="quarto-lightbox-gallery-69"><img src="https://nrennie.com/projects/generative-art/images/072.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/096.png" class="lightbox" data-gallery="quarto-lightbox-gallery-70"><img src="https://nrennie.com/projects/generative-art/images/096.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/189.png" class="lightbox" data-gallery="quarto-lightbox-gallery-71"><img src="https://nrennie.com/projects/generative-art/images/189.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/090.png" class="lightbox" data-gallery="quarto-lightbox-gallery-72"><img src="https://nrennie.com/projects/generative-art/images/090.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/141.png" class="lightbox" data-gallery="quarto-lightbox-gallery-73"><img src="https://nrennie.com/projects/generative-art/images/141.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/107.png" class="lightbox" data-gallery="quarto-lightbox-gallery-74"><img src="https://nrennie.com/projects/generative-art/images/107.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/119.png" class="lightbox" data-gallery="quarto-lightbox-gallery-75"><img src="https://nrennie.com/projects/generative-art/images/119.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/028.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-76"><img src="https://nrennie.com/projects/generative-art/images/028.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/148.png" class="lightbox" data-gallery="quarto-lightbox-gallery-77"><img src="https://nrennie.com/projects/generative-art/images/148.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/098.png" class="lightbox" data-gallery="quarto-lightbox-gallery-78"><img src="https://nrennie.com/projects/generative-art/images/098.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/106.png" class="lightbox" data-gallery="quarto-lightbox-gallery-79"><img src="https://nrennie.com/projects/generative-art/images/106.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/007.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-80"><img src="https://nrennie.com/projects/generative-art/images/007.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/004.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-81"><img src="https://nrennie.com/projects/generative-art/images/004.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/085.png" class="lightbox" data-gallery="quarto-lightbox-gallery-82"><img src="https://nrennie.com/projects/generative-art/images/085.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/117.png" class="lightbox" data-gallery="quarto-lightbox-gallery-83"><img src="https://nrennie.com/projects/generative-art/images/117.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/093.png" class="lightbox" data-gallery="quarto-lightbox-gallery-84"><img src="https://nrennie.com/projects/generative-art/images/093.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/009.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-85"><img src="https://nrennie.com/projects/generative-art/images/009.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/102.png" class="lightbox" data-gallery="quarto-lightbox-gallery-86"><img src="https://nrennie.com/projects/generative-art/images/102.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/192.png" class="lightbox" data-gallery="quarto-lightbox-gallery-87"><img src="https://nrennie.com/projects/generative-art/images/192.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/081.png" class="lightbox" data-gallery="quarto-lightbox-gallery-88"><img src="https://nrennie.com/projects/generative-art/images/081.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/046.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-89"><img src="https://nrennie.com/projects/generative-art/images/046.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/079.png" class="lightbox" data-gallery="quarto-lightbox-gallery-90"><img src="https://nrennie.com/projects/generative-art/images/079.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/062.png" class="lightbox" data-gallery="quarto-lightbox-gallery-91"><img src="https://nrennie.com/projects/generative-art/images/062.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/183.png" class="lightbox" data-gallery="quarto-lightbox-gallery-92"><img src="https://nrennie.com/projects/generative-art/images/183.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/190.png" class="lightbox" data-gallery="quarto-lightbox-gallery-93"><img src="https://nrennie.com/projects/generative-art/images/190.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/091.png" class="lightbox" data-gallery="quarto-lightbox-gallery-94"><img src="https://nrennie.com/projects/generative-art/images/091.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/169.png" class="lightbox" data-gallery="quarto-lightbox-gallery-95"><img src="https://nrennie.com/projects/generative-art/images/169.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/021.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-96"><img src="https://nrennie.com/projects/generative-art/images/021.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/151.png" class="lightbox" data-gallery="quarto-lightbox-gallery-97"><img src="https://nrennie.com/projects/generative-art/images/151.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/181.png" class="lightbox" data-gallery="quarto-lightbox-gallery-98"><img src="https://nrennie.com/projects/generative-art/images/181.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/068.png" class="lightbox" data-gallery="quarto-lightbox-gallery-99"><img src="https://nrennie.com/projects/generative-art/images/068.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/065.png" class="lightbox" data-gallery="quarto-lightbox-gallery-100"><img src="https://nrennie.com/projects/generative-art/images/065.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/089.png" class="lightbox" data-gallery="quarto-lightbox-gallery-101"><img src="https://nrennie.com/projects/generative-art/images/089.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/150.png" class="lightbox" data-gallery="quarto-lightbox-gallery-102"><img src="https://nrennie.com/projects/generative-art/images/150.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/083.png" class="lightbox" data-gallery="quarto-lightbox-gallery-103"><img src="https://nrennie.com/projects/generative-art/images/083.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/024.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-104"><img src="https://nrennie.com/projects/generative-art/images/024.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/103.png" class="lightbox" data-gallery="quarto-lightbox-gallery-105"><img src="https://nrennie.com/projects/generative-art/images/103.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/191.png" class="lightbox" data-gallery="quarto-lightbox-gallery-106"><img src="https://nrennie.com/projects/generative-art/images/191.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/071.png" class="lightbox" data-gallery="quarto-lightbox-gallery-107"><img src="https://nrennie.com/projects/generative-art/images/071.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/153.png" class="lightbox" data-gallery="quarto-lightbox-gallery-108"><img src="https://nrennie.com/projects/generative-art/images/153.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/165.png" class="lightbox" data-gallery="quarto-lightbox-gallery-109"><img src="https://nrennie.com/projects/generative-art/images/165.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/042.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-110"><img src="https://nrennie.com/projects/generative-art/images/042.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/160.png" class="lightbox" data-gallery="quarto-lightbox-gallery-111"><img src="https://nrennie.com/projects/generative-art/images/160.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/069.png" class="lightbox" data-gallery="quarto-lightbox-gallery-112"><img src="https://nrennie.com/projects/generative-art/images/069.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/121.png" class="lightbox" data-gallery="quarto-lightbox-gallery-113"><img src="https://nrennie.com/projects/generative-art/images/121.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/045.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-114"><img src="https://nrennie.com/projects/generative-art/images/045.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/136.png" class="lightbox" data-gallery="quarto-lightbox-gallery-115"><img src="https://nrennie.com/projects/generative-art/images/136.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/082.png" class="lightbox" data-gallery="quarto-lightbox-gallery-116"><img src="https://nrennie.com/projects/generative-art/images/082.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/115.png" class="lightbox" data-gallery="quarto-lightbox-gallery-117"><img src="https://nrennie.com/projects/generative-art/images/115.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/048.png" class="lightbox" data-gallery="quarto-lightbox-gallery-118"><img src="https://nrennie.com/projects/generative-art/images/048.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/180.png" class="lightbox" data-gallery="quarto-lightbox-gallery-119"><img src="https://nrennie.com/projects/generative-art/images/180.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/050.png" class="lightbox" data-gallery="quarto-lightbox-gallery-120"><img src="https://nrennie.com/projects/generative-art/images/050.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/147.png" class="lightbox" data-gallery="quarto-lightbox-gallery-121"><img src="https://nrennie.com/projects/generative-art/images/147.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/061.png" class="lightbox" data-gallery="quarto-lightbox-gallery-122"><img src="https://nrennie.com/projects/generative-art/images/061.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/057.png" class="lightbox" data-gallery="quarto-lightbox-gallery-123"><img src="https://nrennie.com/projects/generative-art/images/057.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/060.png" class="lightbox" data-gallery="quarto-lightbox-gallery-124"><img src="https://nrennie.com/projects/generative-art/images/060.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/005.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-125"><img src="https://nrennie.com/projects/generative-art/images/005.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/137.png" class="lightbox" data-gallery="quarto-lightbox-gallery-126"><img src="https://nrennie.com/projects/generative-art/images/137.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/052.png" class="lightbox" data-gallery="quarto-lightbox-gallery-127"><img src="https://nrennie.com/projects/generative-art/images/052.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/154.png" class="lightbox" data-gallery="quarto-lightbox-gallery-128"><img src="https://nrennie.com/projects/generative-art/images/154.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/012.png" class="lightbox" data-gallery="quarto-lightbox-gallery-129"><img src="https://nrennie.com/projects/generative-art/images/012.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/155.png" class="lightbox" data-gallery="quarto-lightbox-gallery-130"><img src="https://nrennie.com/projects/generative-art/images/155.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/017.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-131"><img src="https://nrennie.com/projects/generative-art/images/017.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/123.png" class="lightbox" data-gallery="quarto-lightbox-gallery-132"><img src="https://nrennie.com/projects/generative-art/images/123.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/080.png" class="lightbox" data-gallery="quarto-lightbox-gallery-133"><img src="https://nrennie.com/projects/generative-art/images/080.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/066.png" class="lightbox" data-gallery="quarto-lightbox-gallery-134"><img src="https://nrennie.com/projects/generative-art/images/066.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/143.png" class="lightbox" data-gallery="quarto-lightbox-gallery-135"><img src="https://nrennie.com/projects/generative-art/images/143.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/075.png" class="lightbox" data-gallery="quarto-lightbox-gallery-136"><img src="https://nrennie.com/projects/generative-art/images/075.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/027.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-137"><img src="https://nrennie.com/projects/generative-art/images/027.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/145.png" class="lightbox" data-gallery="quarto-lightbox-gallery-138"><img src="https://nrennie.com/projects/generative-art/images/145.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/174.gif" class="lightbox" data-gallery="quarto-lightbox-gallery-139"><img src="https://nrennie.com/projects/generative-art/images/174.gif" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/051.png" class="lightbox" data-gallery="quarto-lightbox-gallery-140"><img src="https://nrennie.com/projects/generative-art/images/051.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/097.png" class="lightbox" data-gallery="quarto-lightbox-gallery-141"><img src="https://nrennie.com/projects/generative-art/images/097.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/070.png" class="lightbox" data-gallery="quarto-lightbox-gallery-142"><img src="https://nrennie.com/projects/generative-art/images/070.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/059.png" class="lightbox" data-gallery="quarto-lightbox-gallery-143"><img src="https://nrennie.com/projects/generative-art/images/059.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/003.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-144"><img src="https://nrennie.com/projects/generative-art/images/003.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/041.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-145"><img src="https://nrennie.com/projects/generative-art/images/041.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/158.png" class="lightbox" data-gallery="quarto-lightbox-gallery-146"><img src="https://nrennie.com/projects/generative-art/images/158.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/078.png" class="lightbox" data-gallery="quarto-lightbox-gallery-147"><img src="https://nrennie.com/projects/generative-art/images/078.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/193.png" class="lightbox" data-gallery="quarto-lightbox-gallery-148"><img src="https://nrennie.com/projects/generative-art/images/193.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/175.gif" class="lightbox" data-gallery="quarto-lightbox-gallery-149"><img src="https://nrennie.com/projects/generative-art/images/175.gif" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/179.png" class="lightbox" data-gallery="quarto-lightbox-gallery-150"><img src="https://nrennie.com/projects/generative-art/images/179.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/031.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-151"><img src="https://nrennie.com/projects/generative-art/images/031.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/171.gif" class="lightbox" data-gallery="quarto-lightbox-gallery-152"><img src="https://nrennie.com/projects/generative-art/images/171.gif" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/074.png" class="lightbox" data-gallery="quarto-lightbox-gallery-153"><img src="https://nrennie.com/projects/generative-art/images/074.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/163.png" class="lightbox" data-gallery="quarto-lightbox-gallery-154"><img src="https://nrennie.com/projects/generative-art/images/163.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/177.gif" class="lightbox" data-gallery="quarto-lightbox-gallery-155"><img src="https://nrennie.com/projects/generative-art/images/177.gif" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/018.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-156"><img src="https://nrennie.com/projects/generative-art/images/018.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/073.png" class="lightbox" data-gallery="quarto-lightbox-gallery-157"><img src="https://nrennie.com/projects/generative-art/images/073.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/164.png" class="lightbox" data-gallery="quarto-lightbox-gallery-158"><img src="https://nrennie.com/projects/generative-art/images/164.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/114.png" class="lightbox" data-gallery="quarto-lightbox-gallery-159"><img src="https://nrennie.com/projects/generative-art/images/114.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/133.png" class="lightbox" data-gallery="quarto-lightbox-gallery-160"><img src="https://nrennie.com/projects/generative-art/images/133.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/170.gif" class="lightbox" data-gallery="quarto-lightbox-gallery-161"><img src="https://nrennie.com/projects/generative-art/images/170.gif" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/120.png" class="lightbox" data-gallery="quarto-lightbox-gallery-162"><img src="https://nrennie.com/projects/generative-art/images/120.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/016.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-163"><img src="https://nrennie.com/projects/generative-art/images/016.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/029.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-164"><img src="https://nrennie.com/projects/generative-art/images/029.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/128.png" class="lightbox" data-gallery="quarto-lightbox-gallery-165"><img src="https://nrennie.com/projects/generative-art/images/128.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/113.png" class="lightbox" data-gallery="quarto-lightbox-gallery-166"><img src="https://nrennie.com/projects/generative-art/images/113.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/030.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-167"><img src="https://nrennie.com/projects/generative-art/images/030.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/110.png" class="lightbox" data-gallery="quarto-lightbox-gallery-168"><img src="https://nrennie.com/projects/generative-art/images/110.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/159.png" class="lightbox" data-gallery="quarto-lightbox-gallery-169"><img src="https://nrennie.com/projects/generative-art/images/159.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/109.png" class="lightbox" data-gallery="quarto-lightbox-gallery-170"><img src="https://nrennie.com/projects/generative-art/images/109.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/040.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-171"><img src="https://nrennie.com/projects/generative-art/images/040.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/167.png" class="lightbox" data-gallery="quarto-lightbox-gallery-172"><img src="https://nrennie.com/projects/generative-art/images/167.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/002.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-173"><img src="https://nrennie.com/projects/generative-art/images/002.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/104.png" class="lightbox" data-gallery="quarto-lightbox-gallery-174"><img src="https://nrennie.com/projects/generative-art/images/104.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/156.png" class="lightbox" data-gallery="quarto-lightbox-gallery-175"><img src="https://nrennie.com/projects/generative-art/images/156.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/140.png" class="lightbox" data-gallery="quarto-lightbox-gallery-176"><img src="https://nrennie.com/projects/generative-art/images/140.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/144.png" class="lightbox" data-gallery="quarto-lightbox-gallery-177"><img src="https://nrennie.com/projects/generative-art/images/144.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/011.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-178"><img src="https://nrennie.com/projects/generative-art/images/011.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/122.png" class="lightbox" data-gallery="quarto-lightbox-gallery-179"><img src="https://nrennie.com/projects/generative-art/images/122.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/172.gif" class="lightbox" data-gallery="quarto-lightbox-gallery-180"><img src="https://nrennie.com/projects/generative-art/images/172.gif" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/149.png" class="lightbox" data-gallery="quarto-lightbox-gallery-181"><img src="https://nrennie.com/projects/generative-art/images/149.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/025.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-182"><img src="https://nrennie.com/projects/generative-art/images/025.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/101.png" class="lightbox" data-gallery="quarto-lightbox-gallery-183"><img src="https://nrennie.com/projects/generative-art/images/101.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/053.png" class="lightbox" data-gallery="quarto-lightbox-gallery-184"><img src="https://nrennie.com/projects/generative-art/images/053.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/019.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-185"><img src="https://nrennie.com/projects/generative-art/images/019.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/132.png" class="lightbox" data-gallery="quarto-lightbox-gallery-186"><img src="https://nrennie.com/projects/generative-art/images/132.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/131.png" class="lightbox" data-gallery="quarto-lightbox-gallery-187"><img src="https://nrennie.com/projects/generative-art/images/131.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/077.png" class="lightbox" data-gallery="quarto-lightbox-gallery-188"><img src="https://nrennie.com/projects/generative-art/images/077.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/092.png" class="lightbox" data-gallery="quarto-lightbox-gallery-189"><img src="https://nrennie.com/projects/generative-art/images/092.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/037.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-190"><img src="https://nrennie.com/projects/generative-art/images/037.jpg" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/118.png" class="lightbox" data-gallery="quarto-lightbox-gallery-191"><img src="https://nrennie.com/projects/generative-art/images/118.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
<div class="g-col-12 g-col-md-3">
<p><a href="images/088.png" class="lightbox" data-gallery="quarto-lightbox-gallery-192"><img src="https://nrennie.com/projects/generative-art/images/088.png" class="img-fluid" style="width:100.0%"></a></p>
</div>
</div>
<p>More examples of interactive generative art made with D3, can be found at <a href="https://nrennie.rbind.io/drawing-with-d3/">nrennie.rbind.io/drawing-with-d3</a>.</p>


</section>

 ]]></description>
  <guid>https://nrennie.com/projects/generative-art/</guid>
  <pubDate>Wed, 06 May 2026 13:13:45 GMT</pubDate>
  <media:content url="https://nrennie.com/projects/generative-art/featured.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>Applications of Data Science in Healthcare</title>
  <dc:creator>Apr 2023 - Mar 2025</dc:creator>
  <link>https://nrennie.com/projects/health-data-science/</link>
  <description><![CDATA[ 





<section id="cerebral-small-vessel-disease-in-routinely-collected-neurology-data" class="level2">
<h2 class="anchored" data-anchor-id="cerebral-small-vessel-disease-in-routinely-collected-neurology-data">Cerebral small vessel disease in routinely collected neurology data</h2>
<p>White matter hyperintensities (WMHs) are commonly seen on brain MRI scans and are often linked to cerebral small vessel disease (cSVD), a condition associated with cognitive decline and stroke risk. While WMHs are frequently observed in older adults, their significance in younger individuals remains uncertain. Analysis of routinely collected data from 1,033 patients referred for suspected central nervous system cancer over 30 months, aimed to assess the prevalence and possible causes of WMHs across different age groups. The findings showed that 89.7% of patients over 80 had WMHs, with 98.1% of these attributed to cSVD. Interestingly, around 20% of patients under 50 also exhibited WMHs, which are typically considered non-specific in younger individuals. The study suggests that these early WMHs could represent an initial stage of cSVD rather than incidental findings, emphasising the need for further research to understand their long-term implications and potential links to neurological disorders.</p>
<p><strong>Publication</strong>: <a href="https://doi.org/10.1186/s12883-025-04557-y">Prevalence of white matter hyperintensities and radiological cerebral small vessel disease: an insight from routinely collected data</a></p>
<hr>
</section>
<section id="preferences-for-face-to-face-contraceptive-services" class="level2">
<h2 class="anchored" data-anchor-id="preferences-for-face-to-face-contraceptive-services">Preferences for face-to-face contraceptive services</h2>
<p>Data from the Reproductive Health Survey for England was used to look at how people prefer to access contraceptive services. Using a large online survey of women and people assigned female at birth, we found that about one in four still want only in-person appointments rather than phone, online, or hybrid options. People who preferred face-to-face care were more likely to be younger or older people, less educated, struggling financially, living with a disability, and not in a relationship, suggesting that completely digital services might not meet everyone’s needs. We argue that maintaining a mix of in-person and remote contraceptive services is important for fair and person-centred healthcare.</p>
<p><strong>Publication</strong>: <a href="https://doi.org/10.1111/1471-0528.18323">Preference for face-to-face contraceptive service delivery post-COVID-19 pandemic: a cross-sectional study</a></p>
<hr>
</section>
<section id="why-some-areas-struggle-to-recruit-and-keep-doctors" class="level2">
<h2 class="anchored" data-anchor-id="why-some-areas-struggle-to-recruit-and-keep-doctors">Why some areas struggle to recruit and keep doctors</h2>
<p>This study explored why some parts of the UK struggle to recruit and keep doctors working there. Through interviews with doctors already working in these <em>under-doctored</em> areas (often rural or deprived communities), we found that a mix of personal life choices, career opportunities, and the characteristics of the place itself influence whether doctors move to and stay in these areas. The research highlights that understanding these factors could help improve doctor recruitment and reduce healthcare inequalities in underserved communities.</p>
<p><strong>Publication</strong>: <a href="https://doi.org/10.1016/j.healthplace.2025.103560">Medical training pathways and underdoctored areas: a qualitative study of doctors working in areas that struggle to recruit and retain</a></p>


</section>

 ]]></description>
  <category>Research</category>
  <guid>https://nrennie.com/projects/health-data-science/</guid>
  <pubDate>Wed, 06 May 2026 13:13:45 GMT</pubDate>
  <media:content url="https://nrennie.com/projects/health-data-science/featured.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>Quarto Extensions</title>
  <link>https://nrennie.com/projects/quarto-extensions/</link>
  <description><![CDATA[ 





<section id="prettypdf" class="level2">
<h2 class="anchored" data-anchor-id="prettypdf">PrettyPDF</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1"><img src="https://nrennie.com/projects/quarto-extensions/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Purple hexagon"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>PrettyPDF</code> is a Quarto extension which provides LaTeX templates and styling to create aesthetically pleasing PDF documents.</p>
<p>GitHub: <a href="https://github.com/nrennie/PrettyPDF">github.com/nrennie/PrettyPDF</a></p>
</div>
</div>
</section>
<section id="prettytypst" class="level2">
<h2 class="anchored" data-anchor-id="prettytypst">PrettyTypst</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-2"><img src="https://nrennie.com/projects/quarto-extensions/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Purple hexagon"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>PrettyTypst</code> is a Quarto extension which provides Typst templates and styling to create aesthetically pleasing PDF documents using Typst.</p>
<p>GitHub: <a href="https://github.com/nrennie/PrettyTypst">github.com/nrennie/PrettyTypst</a></p>
</div>
</div>


</section>

 ]]></description>
  <category>Quarto</category>
  <category>Software Development</category>
  <guid>https://nrennie.com/projects/quarto-extensions/</guid>
  <pubDate>Wed, 06 May 2026 13:13:45 GMT</pubDate>
  <media:content url="https://nrennie.com/projects/quarto-extensions/featured.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>Python packages</title>
  <link>https://nrennie.com/projects/python-packages/</link>
  <description><![CDATA[ 





<section id="prettycols" class="level2">
<h2 class="anchored" data-anchor-id="prettycols">PrettyCols</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/PrettyCols/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1"><img src="https://raw.githubusercontent.com/nrennie/PrettyCols/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>PrettyPyCols</code> is a Python package containing aesthetically pleasing colour palettes. It’s a Python implementation of the {PrettyCols} R package.</p>
<p>GitHub: <a href="https://github.com/nrennie/PrettyPyCols">github.com/nrennie/PrettyPyCols</a></p>
</div>
</div>
</section>
<section id="rsspythemes" class="level2">
<h2 class="anchored" data-anchor-id="rsspythemes">RSSpythemes</h2>
<div class="grid">
<div class="g-col-12 g-col-md-6">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://raw.githubusercontent.com/nrennie/RSSthemes/main/man/figures/logo.png" class="lightbox" data-gallery="quarto-lightbox-gallery-2"><img src="https://raw.githubusercontent.com/nrennie/RSSthemes/main/man/figures/logo.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:80.0%" alt="Hex logo"></a></p>
</figure>
</div>
</div>
<div class="g-col-12 g-col-md-6">
<p><code>RSSpythemes</code> is a Python package for styling graphics for RSS publications. This package accompanies the Best Practices for Data Visualisation guidance, published by the Royal Statistical Society, which can be found at <a href="https://royal-statistical-society.github.io/datavisguide/">rss.org.uk/datavisguide</a>. It’s a Python implementation of the {RSSthemes} R package.</p>
<p>GitHub: <a href="https://github.com/nrennie/RSSpythemes">github.com/nrennie/RSSpythemes</a></p>
</div>
</div>


</section>

 ]]></description>
  <category>Python</category>
  <category>Software Development</category>
  <guid>https://nrennie.com/projects/python-packages/</guid>
  <pubDate>Wed, 06 May 2026 13:13:45 GMT</pubDate>
  <media:content url="https://nrennie.com/projects/python-packages/featured.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>ScotRail performance dashboard</title>
  <link>https://nrennie.com/projects/scotrail-performance/</link>
  <description><![CDATA[ 





<div class="callout callout-style-default callout-warning callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Warning</span>Warning
</div>
</div>
<div class="callout-body-container callout-body">
<p>This dashboard is a personal project and is not affiliated with ScotRail.</p>
</div>
</div>
<p><a href="featured.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1"><img src="https://nrennie.com/projects/scotrail-performance/featured.png" class="img-fluid" style="width:100.0%" alt="Screenshot of scotrail performance dashboard"></a></p>
<section id="motivation-and-requirements" class="level3">
<h3 class="anchored" data-anchor-id="motivation-and-requirements">Motivation and requirements</h3>
<p>ScotRail is a publicly-owned company operating rail services in Scotland, owned by the Scottish Government. ScotRail claim to <em>“publish daily figures on our punctuality so customers can see how we performed over the previous 24 hours”</em>. However, these figures are currently (as of April 2026) published as inaccessible, and poorly structured PDF documents. This means the information can be hard to access, and even harder to compare over time. A solution is required that (i) collects existing data and provides it in a more accessible format; and (ii) displays the data to enable comparison.</p>
</section>
<section id="features" class="level3">
<h3 class="anchored" data-anchor-id="features">Features</h3>
<p>The dashboard has several features that make it more user friendly and easier to maintain:</p>
<blockquote class="blockquote">
<ul>
<li>It pre-filters posts based on a set of keywords to ensure posts are relevant to R, Python, and data science.</li>
<li>The data updates automatically on a schedule, meaning that there is no manual process involved in maintaining the dashboard’s relevance. It can also be triggered manually if required.</li>
<li>The table is searchable meaning that a user can look for links posted about a specific topic, or by a specific user, or even from a specific website.</li>
<li>It extracts and displays both the link to the original tweet and the link to the resource, meaning users can browser resources without visiting twitter but also see who and when it was posted.</li>
</ul>
</blockquote>
</section>
<section id="tools" class="level3">
<h3 class="anchored" data-anchor-id="tools">Tools</h3>
<p>The dashboard is built using freely available, open source tools.</p>
<ul>
<li><p><strong>Data</strong>: pdf, rvest, gh actions.</p></li>
<li><p><strong>Dashboard</strong>: the dashboard is built using Quarto. interactive elements (data downloads, tabsets, tooltips, modals with notes)</p></li>
<li><p><strong>Deployment</strong>: the github pages (static site) meaning no server is required in backend, using GitHub Actions to automatically re-deploy the dashboard whenever the data or content changes.</p></li>
</ul>
</section>
<section id="data" class="level3">
<h3 class="anchored" data-anchor-id="data">Data</h3>
<p>The data is scraped from (poorly structured) PDF documents, so no guarantee is given for the quality of the information provided.</p>
<p>Daily data</p>
<p>Source: <a href="https://www.scotrail.co.uk/performance-and-reliability/previous-daily-statistical-summaries">www.scotrail.co.uk/performance-and-reliability/previous-daily-statistical-summaries</a></p>
<p>Data is displayed for January 2026 onwards.</p>
<p>Monthly data</p>
<p>Source: <a href="https://www.scotrail.co.uk/about-scotrail/performance-and-reliability">www.scotrail.co.uk/about-scotrail/performance-and-reliability</a></p>
<p>There is no contents page showing historic data, and each PDF is published under a random, non-structured URL. Data is included from March 2026 onwards, with historic data included if I’ve been able to find it.</p>
</section>
<section id="links" class="level3">
<h3 class="anchored" data-anchor-id="links">Links</h3>
<p>The live dashboard can be found <a href="https://nrennie.rbind.io/scotrail-performance/">online</a>, and the source code is available on <a href="https://github.com/nrennie/scotrail-performance">GitHub</a>.</p>


</section>

 ]]></description>
  <category>R</category>
  <category>Dashboards</category>
  <category>Quarto</category>
  <guid>https://nrennie.com/projects/scotrail-performance/</guid>
  <pubDate>Wed, 06 May 2026 13:13:45 GMT</pubDate>
  <media:content url="https://nrennie.com/projects/scotrail-performance/featured.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>Poverty data gaps</title>
  <link>https://nrennie.com/projects/poverty-data-gaps/</link>
  <description><![CDATA[ 





<p>The Royal Statistical Society and the Centre for Public Data are undertaking research into gaps on poverty data in the UK, funded by the Joseph Rowntree Foundation Insight Infrastructure team. As part of this project, I built an interactive tool that lets users explore, filter and contribute to a shared picture of the key gaps.</p>
<section id="interactive-data-gaps-explorer" class="level2">
<h2 class="anchored" data-anchor-id="interactive-data-gaps-explorer">Interactive data gaps explorer</h2>
<p><a href="featured.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1"><img src="https://nrennie.com/projects/poverty-data-gaps/featured.png" class="img-fluid" style="width:100.0%" alt="Screenshot of interactive data explorer"></a></p>
<p>Explore the tool at <a href="https://royal-statistical-society.github.io/poverty-data-gaps/">royal-statistical-society.github.io/poverty-data-gaps</a>.</p>
<p>You can read more about the data gaps explorer on the <a href="https://rss.org.uk/news-publication/news-publications/2026/general-news/introducing-the-data-gaps-explorer-a-living-tool-f/">RSS website</a>. The source code can be viewed on <a href="https://github.com/royal-statistical-society/poverty-data-gaps">GitHub</a>.</p>
<section id="tools" class="level3">
<h3 class="anchored" data-anchor-id="tools">Tools</h3>
<p>The interactive data explorer is built primarily with open source tools, alongside Airtable for storing data.</p>
<ul>
<li>Uses <a href="https://airtable.com/">airtable</a> as a database to provide a user-friendly interface for adding and editing data gaps</li>
<li>Extracts and processes data from airtable using <a href="https://www.r-project.org/">R</a> using a reproducible workflow</li>
<li>Builds a website the <a href="https://quarto.org/">Quarto</a></li>
<li>with interactive tables created with <a href="https://observablehq.com/documentation/cells/observable-javascript">ObservableJS</a>.</li>
<li>The site is deployed using <a href="https://github.com/features/actions">GitHub Actions</a> to allow an automated workflow to deal with data updates and edits to the site, making updates easy for non-technical maintainers.</li>
</ul>


</section>
</section>

 ]]></description>
  <category>R</category>
  <category>Dashboards</category>
  <category>Observable</category>
  <category>Quarto</category>
  <guid>https://nrennie.com/projects/poverty-data-gaps/</guid>
  <pubDate>Wed, 06 May 2026 13:13:45 GMT</pubDate>
  <media:content url="https://nrennie.com/projects/poverty-data-gaps/featured.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>shinytweet Dashboard</title>
  <link>https://nrennie.com/projects/shinytweet/</link>
  <description><![CDATA[ 





<section id="shinytweet-browse-links-from-tweets-related-to-r-python-and-data-science" class="level2">
<h2 class="anchored" data-anchor-id="shinytweet-browse-links-from-tweets-related-to-r-python-and-data-science"><a href="https://github.com/nrennie/shinytweet">shinytweet</a>: Browse links from tweets related to R, Python, and data science</h2>
<p>An R shiny application to browse liked tweets related to R, Python, and data science. This app used GitHub Actions to automatically update data and redeploy the shiny app.</p>
<div class="callout callout-style-default callout-warning callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Warning</span>Warning
</div>
</div>
<div class="callout-body-container callout-body">
<p>Due to changes in the Twitter API, this app is no longer updated. Some of the links may be broken. Data is available up to April 2023.</p>
</div>
</div>
<p><a href="images/shinytweet.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1"><img src="https://nrennie.com/projects/shinytweet/images/shinytweet.png" class="img-fluid" style="width:100.0%" alt="Screenshot of shinytweet shiny app"></a></p>
<section id="motivation-and-requirements" class="level3">
<h3 class="anchored" data-anchor-id="motivation-and-requirements">Motivation and requirements</h3>
<p>When browsing through social media, especially when endlessly scrolling on mobile, we regularly see interesting links about things related to data science. However, those links are either impossible to find again later on desktop or mixed in with lots of non-data science posts if using Twitter’s bookmark feature. We wanted a way to gather together all of the relevant links to <em>interesting data science things</em> without having to do any manual work.</p>
</section>
<section id="features" class="level3">
<h3 class="anchored" data-anchor-id="features">Features</h3>
<p>The dashboard has several features that make it more user friendly and easier to maintain:</p>
<ul>
<li>It pre-filters posts based on a set of keywords to ensure posts are relevant to R, Python, and data science.</li>
<li>The data updates automatically on a schedule, meaning that there is no manual process involved in maintaining the dashboard’s relevance. It can also be triggered manually if required.</li>
<li>The table is searchable meaning that a user can look for links posted about a specific topic, or by a specific user, or even from a specific website.</li>
<li>It extracts and displays both the link to the original tweet and the link to the resource, meaning users can browser resources without visiting twitter but also see who and when it was posted.</li>
</ul>
</section>
<section id="tools" class="level3">
<h3 class="anchored" data-anchor-id="tools">Tools</h3>
<p>The dashboard is built using freely available, open source tools.</p>
<ul>
<li><strong>Data</strong>: the data is extracted through the Twitter API via R; with further processing in R. <a href="https://github.com/features/actions">GitHub Actions</a> is used to automatically run the extraction and processing scripts on a weekly basis.</li>
<li><strong>Dashboard</strong>: the dashboard is built using <a href="https://shiny.posit.co/">Shiny</a> in R and makes use of the <a href="https://glin.github.io/reactable/">reactable</a> package.</li>
<li><strong>Deployment</strong>: the dashboard is deployed through <a href="https://www.shinyapps.io/">shinyapps.io</a>, using GitHub Actions to automatically re-deploy the dashboard whenever the data or content changes. <a href="https://www.docker.com/">Docker</a> is used to ensure the versions of R and any packages used are consistent, and package updates do not trigger failed deployments.</li>
</ul>
<p>Read my <a href="https://nrennie.rbind.io/blog/automatically-deploying-a-shiny-app-for-browsing-rstats-tweets-with-github-actions/">blog post</a> about creating, deploying, and updating this Shiny app for more information.</p>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Update as of February 2025
</div>
</div>
<div class="callout-body-container callout-body">
<p>The deployment was changed to use <a href="https://posit-dev.github.io/r-shinylive/">Shinylive for R</a>, which enables the dashboard to run in a user’s browser without relying on an external server like <a href="https://www.shinyapps.io/">shinyapps.io</a>. This means there are no restrictions on the number of users or the number of hours the dashboard is active per month, with no associated costs.</p>
<p>The dashboard can be viewed at <a href="https://nrennie.rbind.io/shinytweet/">nrennie.rbind.io/shinytweet</a>.</p>
</div>
</div>


</section>
</section>

 ]]></description>
  <category>R</category>
  <category>Dashboards</category>
  <guid>https://nrennie.com/projects/shinytweet/</guid>
  <pubDate>Wed, 06 May 2026 13:13:45 GMT</pubDate>
  <media:content url="https://nrennie.com/projects/shinytweet/featured.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>Statistics Education</title>
  <dc:creator>Apr 2023 - Present</dc:creator>
  <link>https://nrennie.com/projects/statistics-education/</link>
  <description><![CDATA[ 





<section id="tools-for-teaching-data-wrangling" class="level2">
<h2 class="anchored" data-anchor-id="tools-for-teaching-data-wrangling">Tools for teaching data wrangling</h2>
<p>When teaching examples using R, instructors often using nice datasets - but these aren’t very realistic, and aren’t what students will later encounter in the real world. Real datasets have typos, missing values encoded in strange ways, and weird spaces. <a href="https://github.com/nrennie/messy">The {messy} R package</a> takes a clean dataset, and randomly adds these things in - giving students the opportunity to practice their data cleaning and wrangling skills without having to change all of your examples.</p>
<p><strong>Publication</strong>: <a href="https://nrennie.rbind.io/making-messy-data/">Making ‘messy’ Data: An R Package for Teaching Data Wrangling with Realistic Data</a> (pre-print)</p>
</section>
<section id="teaching-statistics-communities" class="level2">
<h2 class="anchored" data-anchor-id="teaching-statistics-communities">Teaching statistics communities</h2>
<section id="rss-teaching-statistics-section" class="level3">
<h3 class="anchored" data-anchor-id="rss-teaching-statistics-section">RSS Teaching Statistics Section</h3>
<p>The <a href="https://rss.org.uk/membership/rss-groups-and-committees/sections/teaching-statistics/">Teaching Statistics Section</a> of the <a href="https://rss.org.uk/">Royal Statistical Society</a> provides a platform to collate and disseminate ideas and best practice in the teaching of statistics in post-18 education, including higher education and professional training. Since October 2023, I’ve been a member of the RSS Teaching Statistics Section committee, and was elected as Secretary in August 2024.</p>
</section>
<section id="rose-network" class="level3">
<h3 class="anchored" data-anchor-id="rose-network">RoSE Network</h3>
<p>The <a href="https://www.rose-network.org/">RoSE Network</a> (Researchers of Statistics Education) creates an open and inclusive space for multidisciplinary researchers and practitioners of statistics education globally to connect, learn, and collaborate, toward advancing statistics education research. Between September 2023 and January 2025, I co-led the Statistics Software Special Interest Group, and was part of the Communications team.</p>


</section>
</section>

 ]]></description>
  <category>R</category>
  <category>Teaching</category>
  <guid>https://nrennie.com/projects/statistics-education/</guid>
  <pubDate>Wed, 06 May 2026 13:13:45 GMT</pubDate>
  <media:content url="https://nrennie.com/projects/statistics-education/featured.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>Identifying Transport Demand Outliers</title>
  <dc:creator>Oct 2018 - Oct 2021</dc:creator>
  <link>https://nrennie.com/projects/transport-demand-outliers/</link>
  <description><![CDATA[ 





<p>My PhD research focused on the development and use of functional analysis for detecting outliers in time series data, with case studies performed on multiple empirical data sets including railway booking data and bike-sharing usage data.</p>
<section id="project-description" class="level2">
<h2 class="anchored" data-anchor-id="project-description">Project description</h2>
<p>An outlier is generally considered an abnormal event that doesn’t fit with the pattern of events normally observed. In the transport setting, demand outliers might mean that there are a lot more (or less) passengers than normal, or that they book earlier than normal, or that passengers are willing to pay more than they normally would for the same ticket. There are many things that can cause these changes in demand such as, football matches, weather, or public holidays. Some of these events e.g.&nbsp;Christmas, are known about in advance and can be accounted for in the planning process. Others are not known about. And it’s these changes in demand that we want to identify. Ideally, they’d be identified as early as possible, in order for the transport company to take action.</p>
<p>It’s important to detect changes in demand for multiple reasons. Transport companies set prices and ticket availability based on forecasts of demand. If the demand no longer matches the forecasts, then the prices that have been set are no longer optimal. Then transport companies lose revenue. It could also result in transport services being busier than expected. If you’ve ever gotten on a packed train and been unable to get a seat, you know that incorrectly managed demand isn’t desirable for passengers either.</p>
<p>At the moment, many transport companies employ analysts to monitor the number of bookings. However, as human beings, we’re not very good at spotting things by eye, and we tend to see patterns that don’t exist. This research develops a statistical method to identify demand outliers and send alerts to analysts.</p>
</section>
<section id="developing-outlier-detection-methodology" class="level2">
<h2 class="anchored" data-anchor-id="developing-outlier-detection-methodology">Developing outlier detection methodology</h2>
<p>Most transport providers store information about bookings as a time series. For example, for train ABC departing on January 31 at 10:00, there is a series of observations of how many passengers had booked tickets by 3 months per departure, 1 month before departure, 1 week before departure … You get the idea.</p>
<blockquote class="blockquote">
<p>Note: we’ll mainly be talking about trains here, but it’s all generalisable to other types of transport systems.</p>
</blockquote>
<p>So for a set of departures, we would have a collection of time series that might look a bit like this:</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="images/bookings.jpg" class="lightbox" data-gallery="quarto-lightbox-gallery-1"><img src="https://nrennie.com/projects/transport-demand-outliers/images/bookings.jpg" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:100.0%" alt="Multiple time series"></a></p>
</figure>
</div>
<p>To detect outliers within this set of time series, we use <em>functional analysis</em>. Functional analysis treats each time series of bookings as an observation of a continuous function. We calculate the <em>functional depth</em> of the time series of bookings for each train. I won’t go into all of the details about the equations for calculating the functional depth because they’re not very nice. But generally, depth measures provide us with an ordering of the time series – where the time series closest to the centre i.e., the median, has the highest depth, and that in the tails of the distribution i.e.&nbsp;outliers, have low depth. This allows to consider both changes in magnitude (e.g.&nbsp;a big increase in bookings), and shape of booking patterns (e.g.&nbsp;passengers booking earlier than normal). Outliers are detected by setting a threshold for the functional depth. Any time series with a functional depth below that threshold is classified as an outlier.</p>
<p>Of course, we don’t just want to identify demand outliers in historic data (although this can still be beneficial on its own). We want to identify these outliers as they are happening, so that an analyst can make an adjustment. We found that forecasting the bookings still to come in, and performing the outlier detection on the forecasted bookings, helped us to identify the outliers earlier.</p>
</section>
<section id="developing-methodology-for-networks" class="level2">
<h2 class="anchored" data-anchor-id="developing-methodology-for-networks">Developing methodology for networks</h2>
<p>The vast majority of, if not all, transport systems do not simply consist of a single journey from A to B. There are often many places where passengers can start and end their journey, and multiple combinations to get between the two. It’s quite unlikely that any demand changes will only affect one single part of the transport network e.g.&nbsp;a single leg of a train journey. It’s also quite unlikely that the entire network will be affected by demand changes in the same way at the same time. Before even thinking about demand outliers, we developed a method split up the network into clusters that experience demand in similar ways. Our outlier detection method could then be applied jointly to legs in the same cluster which are likely to share common outliers.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="images/network.png" class="lightbox" data-gallery="quarto-lightbox-gallery-2"><img src="https://nrennie.com/projects/transport-demand-outliers/images/network.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="width:100.0%" alt="Railway network diagram for Germany"></a></p>
</figure>
</div>
<section id="railway-networks" class="level3">
<h3 class="anchored" data-anchor-id="railway-networks">Railway networks</h3>
<p>Through collaboration with Deutsche Bahn, the German rail provider, we were able to test the methods developed on their data. We tested our methodology on a section of the Deutsche Bahn network consisting of two train lines - (i) from Munich to Hamburg and (ii) from Basel in Switzerland to Berlin. Generally, legs in the same train line were clustered together, and the edges of the clusters coincided with major train stations.</p>
</section>
<section id="bike-sharing-networks" class="level3">
<h3 class="anchored" data-anchor-id="bike-sharing-networks">Bike-sharing networks</h3>
<p>Of course, it’s not all about trains. There are many other industries where detecting and accounting for systematic changes of demand is of interest. One of those industries is bike-sharing – where members of the public can pick-up a bike at a terminal and return it to any other terminal. Most bike-sharing systems are located in cities. Since some areas of a city are more populous than others, the bikes must be redistributed from the terminals that are commonly used as drop-offs to those that are commonly used for pick-ups. Although, a responsive approach could be taken to redistributing bikes i.e.&nbsp;only sending drivers to a terminal when it is full or empty, this isn’t very efficient. If we are able to identify and predict when unusual demand patterns occur, bike-sharing companies can better organise their resources. A case study of the Capital Bikeshare system in Washington D.C. finds that there are spatial and temporal patterns to the outliers that occur.</p>
<p>Overall, a key finding of this research is that functional data analysis is a very powerful tool for identifying demand outliers. However, features of the data such as network effects or seasonal patterns need to be taken into account first. More research into how an outlier-based alert system could be implemented in an automated way is still needed.</p>
</section>
</section>
<section id="building-a-proof-of-concept-dashboard" class="level2">
<h2 class="anchored" data-anchor-id="building-a-proof-of-concept-dashboard">Building a proof-of-concept dashboard</h2>
<p>The initial motivation for this research was to support analysts who monitor the number of bookings, sending them alerts when an intervention is required. To communicate the alerts to the analysts, I developed a proof of concept dashboard that uses the results of the statistical methods to generate a list of alerts that analysts can explore in more detail.</p>
<div class="quarto-video"><video id="video_shortcode_videojs_video1" class="video-js vjs-default-skin vjs-big-play-centered vjs-fluid" controls="" preload="auto" data-setup="{}" title=""><source src="images/outlier.mp4"></video></div>


</section>

 ]]></description>
  <category>Research</category>
  <guid>https://nrennie.com/projects/transport-demand-outliers/</guid>
  <pubDate>Wed, 06 May 2026 13:13:45 GMT</pubDate>
  <media:content url="https://nrennie.com/projects/transport-demand-outliers/featured.png" medium="image" type="image/png" height="81" width="144"/>
</item>
</channel>
</rss>
