' to get more details:
+Packages:
+ Name | Version | Package Types | Platforms
+ ------------------------- | ------ | --------------- | ---------------
+ IOOS/rasterio | 1.0a2 | conda | linux-64, win-32, win-64, osx-64
+ Terradue/rasterio | 0.32.0 | conda | linux-64
+ : Fast and direct raster I/O for use with Numpy and SciPy
+ anaconda/rasterio | 0.36.0 | conda | linux-64, win-32, win-64, linux-32, osx-64
+ conda-forge/rasterio | 1.0a2 | conda | linux-64, win-32, win-64, osx-64
+ : Rasterio reads and writes geospatial raster datasets
+ dharhas/rasterio | 0.23.0 | conda | win-64
+ : Rasterio reads and writes geospatial raster datasets.
+ erdc/rasterio | 0.23.0 | conda | win-64
+ : Rasterio reads and writes geospatial raster datasets.
+ jesserobertson/rasterio | 0.23.0 | conda | linux-64, linux-32, osx-64
+ jhamman/rasterio_to_xarray | 2016.03.16-1558 | ipynb |
+ : IPython notebook
+ krisvanneste/rasterio | 0.26.0 | conda | win-64
+ ocefpaf/rasterio | 0.19.1 | conda | linux-64, osx-64
+ omgarcia/rasterio | 0.25.0 | conda | linux-64
+ pypi/rasterio | 0.13.2 | pypi |
+ : Fast and direct raster I/O for Python programmers who use Numpy
+ robintw/rasterio | 0.35.1 | conda | osx-64
+ : Rasterio reads and writes geospatial raster datasets
+ sgillies/rasterio | 0.15 | conda | osx-64
+ ztessler/rasterio | 0.31.0 | conda | osx-64
+ : Fast and direct raster I/O for use with Numpy and SciPy
+Found 15 packages
+```
+
+### Installing conda package
+
+Under the name column of the result in the terminal or the package column in the Anaconda Cloud listing,
+shows the necessary information to install the package.
+e.g. conda-forge/rasterio.
+The first word list the channel that this package is from and the second part shows the name of the package.
+
+To install the latest version available within the channel, do not specify in the install command. We will install version 0.35 of `rasterio` from conda-forge into `test_env` in this example. Conda will also automatically install the dependencies for this package.
+
+```bash
+conda install -c conda-forge rasterio=0.35
+```
+
+If you have a few trusted channels that you prefer to use, you can pre-configure these so that everytime you are creating an environment, you won't need to explicitly declare the channel.
+
+```bash
+conda config --add channels conda-forge
+```
+
+#### Removing a conda Package
+
+We decided that rasterio is not needed in this tutorial, so we will remove it from `test_env`.
+Note that this will remove the main package rasterio and its dependencies (unless a dependency was installed explicitly at an earlier point in time or is required be another package).
+
+```bash
+conda remove -n test_env rasterio
+```
+
+```bash
+Using Anaconda Cloud api site https://api.anaconda.org
+Fetching package metadata .........
+Solving package specifications: ..........
+
+Package plan for package removal in environment //anaconda/envs/test_env:
+
+The following packages will be REMOVED:
+
+ rasterio: 0.35.1-np111py27_1 conda-forge
+
+Proceed ([y]/n)? y
+
+Unlinking packages ...
+[ COMPLETE ]|#######################################################################################################| 100%
+```
+
+---
+
+Select all the correct answers
+
+Which of the following sentences are true about Conda?
+
+```
+A. It is a command line tool
+B. It is a package manager
+C. It is a Python package
+D. It is installed as part of Anaconda and Miniconda
+E. It is a metapackage
+F. It installs Python
+G. Using it you can handle Python packages only
+```
+---
+
+# R environments
+
+In R,
+environments are managed by `renv`,
+which works with similar principles as `conda`,
+and other virtual environment managers,
+but the commands are different.
+To see which commands are used in `renv`,
+you can [visit the project website](https://rstudio.github.io/renv/articles/renv.html).
+Briefly,
+`renv::init()` is used to create a new env,
+`renv::snapshot` is used to save/export the environment to a file (`renv.lock`),
+and installing and removing packages are done as usual
+via the `install.packages()` and `remove.packages()` commands.
+
+
+
+
+## Attribution
+
+The conda virtual environment section of this guide
+was originally published at http://geohackweek.github.io/ under a CC-BY license
+and has been updated to reflect recent changes in conda,
+as well as modified slightly to fit the MDS lecture format.
+
+# R Markdown repetition and a few tips
+
+Let's start with creating an r project again.
+To use this with an existing git repo,
+with can select "Existing dir".
+You can also create an empty one
+and move your git repo in here later,
+as long as there is an `.git` folder
+RStudio will show you the context menu for git.
+
+Next,
+let's create an R Notebook.
+We could have a create an R Markdown document also,
+but the notebook offers a few conveniences.
+Mostly that it has a preview option `html_notebook`
+that renders the notebook to HTML
+in its curent state.
+In contrast,
+knitting the notebook to HTML via `html_document`
+will run all cells so this takes longer.
+
+**Note that it is important to knit to HTML before sharing
+so that you are sure everything works from scratch.**
+This is the same reason we should do "Run all" in Jupyter Lab before sharing
+and why we don't want to store our R workspace sessions.
+We need to make sure that someone new can run this from it's current state.
+Another useful tool for this in R is to use `devtools::session_info()`
+at the top or bottom of your document
+(I put it at the end of the chunk where I load libraries)
+to ensure that you have included information
+about the versions of the packages you are running
+so that someone else can use the same version.
+There are more robust ways of version control
+that we will get into later in MDS,
+but this is a good minimum measure
+that is easy for you to get into the habit of doing.
+
+A couple of features that are good to know
+in addition to those we learnt last time,
+are block commenting and automatic code reformatting.
+If I type a few lines where I for example forget to add whitespace
+around an operator or assignment,
+going to `Code -> Reformat code`
+(
+Ctrl + Shift + A on Windows/Linux or
+⌘ + Shift + A on a Mac
+)
+will fix this automatically
+for all highlighted lines.
+If I want to toogle commenting for some lines,
+I can click `Code -> Comment/Uncomment line`
+(
+Ctrl + Shift + C on Windows/Linux or
+⌘ + Shift + C on a Mac
+),
+instead of manually adding `#` in front of each line.
+
+One final tip is the use of the `here` package for file paths.
+We have already solved the part of setting working directory
+by creating an R proj.
+If you only plant on using R Markdown file,
+you would be fine writing relative paths
+(e.g. `../data/cars.csv`)
+the same way you would write them in Python
+because they look relative their own location.
+However,
+if you also need to run something from a script or the console,
+note that the working directory path will now be used
+as the current directory,
+rather than the directoy of the script
+so the same relative path will not work
+(you would need `data/cars.csv` instead).
+`here` solves this by allowing you to type
+`here::here('data', 'cars.csv')` from wherever you are
+which also makes sure that file paths work across operating systems
+([more info on `here` here](https://malco.io/2018/11/05/why-should-i-use-the-here-package-when-i-m-already-using-projects/).
+
+# R Markdown YAML header
+
+The YAML header
+(also called the "front matter")
+is where we can specify metadata about our project.
+It is delimited by two `---` (three hyphens)
+and we create a new notebook,
+it looks like this:
+
+```yaml
+---
+title: "R Notebook"
+output: html_notebook
+---
+```
+
+In YAML,
+data is stored as a `key: value` pair,
+just like a Python dictionary.
+We can add new values,
+for example the author name
+and the date.
+
+```yaml
+---
+title: "R Notebook"
+output: html_notebook
+author: Joel Ostblom
+date: 2020-09-23
+---
+```
+
+R code can be evaluated inside the YAML header,
+so if we wanted the date to be updated
+every time we stitch the document,
+we could instead write ``date: `r Sys.Date()` ``.
+Other useful options include the ones for
+numbering headings, adding a table of contents,
+and placing the table of contents on the side of the document.
+Since these are options to the output document,
+they are indented under that section with two or four spaces:
+
+```yaml
+---
+output:
+ html_notebook:
+ toc: yes
+ toc_float: yes
+ number_sections: yes
+---
+```
+
+Another useful option is to fold away your code,
+but still having it available for view if someone desires to see it.
+
+```yaml
+---
+output:
+ html_document:
+ code_folding: hide
+---
+```
+
+
+## Attribution
+
+The conda virtual environment section of this guide
+was originally published at http://geohackweek.github.io/ under a CC-BY license
+and has been updated to reflect recent changes in conda,
+as well as modified slightly to fit the MDS lecture format.
diff --git a/lectures/8-regex-filenames-project-organization.qmd b/lectures/8-regex-filenames-project-organization.qmd
index f6410ff..db1efd1 100644
--- a/lectures/8-regex-filenames-project-organization.qmd
+++ b/lectures/8-regex-filenames-project-organization.qmd
@@ -551,296 +551,6 @@ What is wrong with the following
---
-# Introduction to Regular Expressions (REGEX)
-
-Like with most things,
-the best way for you to learn Regex is to get practice using it.
-There are a few exercises included in the notebook,
-and at the end I have also included links interactive online exercises
-with are great to practice your regexes!
-
-To see what a particular regex is matching and how,
-you can use one of these two webpages,
-which both do a great job visualizing and explaining the different parts of a regex match:
-
-- https://regexr.com/
- - regexr interprets text input as one big string by default,
- so you need to check "multiline" under "flags" (top right)
- for it to behave as expected with beginning and end of line matches
- (it hints at this in the output for both ^ and $).
-- https://regex101.com/
- - regex101 has the "multiline" flag set by default.
-
-## Basic matching
-
-- Basic matching: if you look for a regular string, like `banana`,
- regex will match the exact string (including its upper/lower case).
-- Both JupyterLab and VS Code have built in regex functionality
- (bring up the search box and click the `.*` symbol to use regex
- rather than the default search).
-- When learning regex it is helpful to use one of the two webtools
- mentioned in the previous cell
- in order to visualize how your regex is matching the text.
-- For this lecture, we will use a list of fruits to learn about regex.
-
-applesas
-apple
-apricot
-banana
-bilberry
-blackberry
-blackcurrant
-blood orange
-blueberry
-canary melon
-cantaloupe
-cherry
-clementine
-cloudberry
-coconut
-cranberry
-cucumber
-currant
-dragonfruit
-durian
-elderberry
-gooseberry
-grape
-grapefruit
-papaya
-passionfruit
-peach
-orange
-oranges unripe
-persimmon
-pineapple
-pomegranate
-pomelo
-purple mangosteen
-rock melon
-salal berry
-satsuma
-star fruit
-strawberry
-watermelon
-
-## The square brackets: `[]`
-
-- If you want to specify the set of possible characters
- you can use square brackets `[]`;
-- For example, `[Aa]pple` would match `Apple` and `apple`.
-
-:::{.exercise}
-::::{.exercise-header}
-### Lecture 8 Exercise 1
-::::
-::::{.exercise-container}
-Find all the pairs of vowels in the fruit list.
-
-Highlight the black box below to see than correct answer
-(the black box will not show up on GitHub,
-so download the notebook unless you want the answer displayed)
-Remember to use one of the websites linked above to help you understand
-what your regex is matching
-(https://regexr.com/ or https://regex101.com/).
-
-
-[aeiou][aeiou]
-
-
-::::
-:::
-
-
-### Ranges within `[]`
-
-- You can also define ranges when using brackets. For example:
- - `[A-Z]`: will match any upper case letter
- - `[a-z]`: will match any lower case letter
- - `[0-9]`: will match any digit
- - `[0-5]`: will match any digit between 0 and 5
-- The order cannot be reversed, `[z-A]` does not work.
-- You can combine ranges: `[A-Za-z]`.
-- You can use square brackets starting with a caret. For example:
- - `[^A-Z]`: will match anything that is not an upper case letter
- - `[^0-9]`: will match anything that is not a digit
- - Note that the caret needs to be inside the bracket,
- if it is outside it will match the beginning of a line as described under the "Anchors" section below.
-- For the curious, these ranges are ordered based on [ASCI codes](https://en.wikipedia.org/wiki/ASCII#Printable_characters)
- where every character is represented by a number.
- The first character in the list is ` ` (space) and the last is `~` (tilde).
- The full list is shown below:
- ```
- !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
- ```
-
-## Special matching characters
-
-- A common operation is to match any character (e.g. between two important characters).
-- Instead of writing out the full range `[ -~]` (space to tilde),
- the special character `.` can be used to match any character in the list above.
- - Note that `.` does not match the newline character,
- so if you have an expression that continues on the next line it will not be matched.
-- To match a literal `.` (the period character),
- you can "escape" its special meaning by prefacing it with a backslash `\.` (most common)
- or surrounding it with square brackets `[.]`.
-- Another useful special character is `\w`,
- which matches any character that normally occurs inside a word
- (so it does not match spaces, underlines, etc)
-
-
-:::{.exercise}
-::::{.exercise-header}
-### Lecture 8 Exercise 2
-::::
-::::{.exercise-container}
-
-What is the difference between writing `[A-Za-z]` and [`A-z`]?
-
-
-[A-z] will also match the characters `[/]^_`, as you can see in the list above.
-
-::::
-:::
-
-
-:::{.exercise}
-::::{.exercise-header}
-### Lecture 8 Exercise 3
-::::
-::::{.exercise-container}
-
-Match any characters between two `_`.
-
-
-_.*_
-
-
-::::
-:::
-
-## Anchors
-
-- The caret outside the brackets means beginning of line. For example, `^apple` will match all lines that start with `apple`, including `apple sauce` and `apples`.
-- The dollar sign `$` means end of line, e.g., `fruit$` will match lines that end with `fruit`.
-- To remember this, you can use the mnemonic "Start with power (`^`) and end with money (`$`)" (originally from Jenny Bryan).
-- Another useful anchor is `\b`, which matches end of word.
-
-
-:::{.exercise}
-::::{.exercise-header}
-### Lecture 8 Exercise 4
-::::
-::::{.exercise-container}
-Write a regex that will match a line that contains only pineapple. (Hint: you cannot just write `pineapple` - it will not work - why?)
-
-
-^pineapple$
-
note that if you use just `pineapple`, lines that also contain other words would match too.
-
-::::
-:::
-
-
-
-
-## Repetitions
-
-- To match multiple of the same character,
- you can either repeat it or use the following syntax:
- - `{n}`: exactly `n` occurrences
- - `{n,}`: at least `n` occurrences
- - `{0,m}`: at most `m` occurrences
- - `{n,m}`: between `n` and `m` (inclusive) occurrences
-
-
-### Special repetition characters
-
-- There are some shortcuts for the most common repetitions:
- - `?`: means 0 or 1 time (`{0,1}`)
- - `*`: means 0 or more time (`{0,}`)
- - `+`: means 1 or more time (`{1,}`)
-- For example, `apples?` will match `apple` and `apples`.
- - But `apples+` will not match `apple` or `appplesq`,
- but it will match `apples`, `appless`, `applesss`, etc.
-
-:::{.exercise}
-::::{.exercise-header}
-### Lecture 8 Exercise 5
-::::
-::::{.exercise-container}
-Find the fruits with names between 10 and 12 characters.
-
-
-.{10,12}
-
-::::
-:::
-
-:::{.exercise}
-::::{.exercise-header}
-### Lecture 8 Exercise 6
-::::
-::::{.exercise-container}
-Find the lines with no more than 4 letters.
-
-
-^.{0,4}$
-
-::::
-:::
-
-:::{.exercise}
-::::{.exercise-header}
-### Lecture 8 Exercise 7
-::::
-::::{.exercise-container}
-Find all the words that contain at least two consecutive vowels.
-
-
-
-[aeiou]{2,}
-
or
-[aeiou][aeiou]+
-
-
-::::
-:::
-
-:::{.exercise}
-::::{.exercise-header}
-### Lecture 8 Exercise 8
-::::
-::::{.exercise-container}
-
-This is a bit harder and derives from all previous sections: Match entire words that end in `_`.
-
-
-\\w*_\\b
-
-
-::::
-:::
-
-:::{.exercise}
-::::{.exercise-header}
-### Additional exercises
-::::
-::::{.exercise-container}
-
-
-- Go through the interactive tutorials and practice sessions at https://regexone.com/
- that correspond to the topics we have covered during class.
-- The Library Carpentry organization has many regex exercises
- in all sections of their regex course here https://librarycarpentry.org/lc-data-intro/
- (you can just to do the exercises).
-
-::::
-:::
-
-
-
-
## References
[1] Kery, M. B., Radensky, M., Arya, M., John, B. E., & Myers, B. A. (2018, April). The story in the notebook: Exploratory data science using a literate programming tool. In Proceedings of the 2018 CHI Conference on Human Factors in Computing Systems (pp. 1-11).
diff --git a/lectures/8b-regex.qmd b/lectures/8b-regex.qmd
new file mode 100644
index 0000000..c8e5205
--- /dev/null
+++ b/lectures/8b-regex.qmd
@@ -0,0 +1,305 @@
+---
+title: Introduction to Regular Expressions (RegEx)
+jupyter: python3
+---
+
+## Learning outcomes
+
+{{< include ../learning_objectives/lo-ch-08.qmd >}}
+
+
+## Introduction
+
+Like with most things,
+the best way for you to learn Regex is to get practice using it.
+There are a few exercises included in the notebook,
+and at the end I have also included links interactive online exercises
+with are great to practice your regexes!
+
+To see what a particular regex is matching and how,
+you can use one of these two webpages,
+which both do a great job visualizing and explaining the different parts of a regex match:
+
+- https://regexr.com/
+ - regexr interprets text input as one big string by default,
+ so you need to check "multiline" under "flags" (top right)
+ for it to behave as expected with beginning and end of line matches
+ (it hints at this in the output for both ^ and $).
+- https://regex101.com/
+ - regex101 has the "multiline" flag set by default.
+
+## Basic matching
+
+- Basic matching: if you look for a regular string, like `banana`,
+ regex will match the exact string (including its upper/lower case).
+- Both JupyterLab and VS Code have built in regex functionality
+ (bring up the search box and click the `.*` symbol to use regex
+ rather than the default search).
+- When learning regex it is helpful to use one of the two webtools
+ mentioned in the previous cell
+ in order to visualize how your regex is matching the text.
+- For this lecture, we will use a list of fruits to learn about regex.
+
+```markdown
+applesas
+apple
+apricot
+banana
+bilberry
+blackberry
+blackcurrant
+blood orange
+blueberry
+canary melon
+cantaloupe
+cherry
+clementine
+cloudberry
+coconut
+cranberry
+cucumber
+currant
+dragonfruit
+durian
+elderberry
+gooseberry
+grape
+grapefruit
+papaya
+passionfruit
+peach
+orange
+oranges unripe
+persimmon
+pineapple
+pomegranate
+pomelo
+purple mangosteen
+rock melon
+salal berry
+satsuma
+star fruit
+strawberry
+watermelon
+```
+
+## The square brackets: `[]`
+
+- If you want to specify the set of possible characters
+ you can use square brackets `[]`;
+- For example, `[Aa]pple` would match `Apple` and `apple`.
+
+:::{.exercise}
+::::{.exercise-header}
+### Lecture 8 Exercise 1
+::::
+::::{.exercise-container}
+Find all the pairs of vowels in the fruit list.
+
+Highlight the black box below to see than correct answer
+(the black box will not show up on GitHub,
+so download the notebook unless you want the answer displayed)
+Remember to use one of the websites linked above to help you understand
+what your regex is matching
+(https://regexr.com/ or https://regex101.com/).
+
+
+[aeiou][aeiou]
+
+
+::::
+:::
+
+
+### Ranges within `[]`
+
+- You can also define ranges when using brackets. For example:
+ - `[A-Z]`: will match any upper case letter
+ - `[a-z]`: will match any lower case letter
+ - `[0-9]`: will match any digit
+ - `[0-5]`: will match any digit between 0 and 5
+- The order cannot be reversed, `[z-A]` does not work.
+- You can combine ranges: `[A-Za-z]`.
+- You can use square brackets starting with a caret. For example:
+ - `[^A-Z]`: will match anything that is not an upper case letter
+ - `[^0-9]`: will match anything that is not a digit
+ - Note that the caret needs to be inside the bracket,
+ if it is outside it will match the beginning of a line as described under the "Anchors" section below.
+- For the curious, these ranges are ordered based on [ASCI codes](https://en.wikipedia.org/wiki/ASCII#Printable_characters)
+ where every character is represented by a number.
+ The first character in the list is ` ` (space) and the last is `~` (tilde).
+ The full list is shown below:
+ ```
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+ ```
+
+## Special matching characters
+
+- A common operation is to match any character (e.g. between two important characters).
+- Instead of writing out the full range `[ -~]` (space to tilde),
+ the special character `.` can be used to match any character in the list above.
+ - Note that `.` does not match the newline character,
+ so if you have an expression that continues on the next line it will not be matched.
+- To match a literal `.` (the period character),
+ you can "escape" its special meaning by prefacing it with a backslash `\.` (most common)
+ or surrounding it with square brackets `[.]`.
+- Another useful special character is `\w`,
+ which matches any character that normally occurs inside a word
+ (so it does not match spaces, underlines, etc)
+
+
+:::{.exercise}
+::::{.exercise-header}
+### Lecture 8 Exercise 2
+::::
+::::{.exercise-container}
+
+What is the difference between writing `[A-Za-z]` and [`A-z`]?
+
+
+[A-z] will also match the characters `[/]^_`, as you can see in the list above.
+
+::::
+:::
+
+
+:::{.exercise}
+::::{.exercise-header}
+### Lecture 8 Exercise 3
+::::
+::::{.exercise-container}
+
+Match any characters between two `_`.
+
+
+_.*_
+
+
+::::
+:::
+
+## Anchors
+
+- The caret outside the brackets means beginning of line. For example, `^apple` will match all lines that start with `apple`, including `apple sauce` and `apples`.
+- The dollar sign `$` means end of line, e.g., `fruit$` will match lines that end with `fruit`.
+- To remember this, you can use the mnemonic "Start with power (`^`) and end with money (`$`)" (originally from Jenny Bryan).
+- Another useful anchor is `\b`, which matches end of word.
+
+
+:::{.exercise}
+::::{.exercise-header}
+### Lecture 8 Exercise 4
+::::
+::::{.exercise-container}
+Write a regex that will match a line that contains only pineapple. (Hint: you cannot just write `pineapple` - it will not work - why?)
+
+
+^pineapple$
+
note that if you use just `pineapple`, lines that also contain other words would match too.
+
+::::
+:::
+
+
+
+
+## Repetitions
+
+- To match multiple of the same character,
+ you can either repeat it or use the following syntax:
+ - `{n}`: exactly `n` occurrences
+ - `{n,}`: at least `n` occurrences
+ - `{0,m}`: at most `m` occurrences
+ - `{n,m}`: between `n` and `m` (inclusive) occurrences
+
+
+### Special repetition characters
+
+- There are some shortcuts for the most common repetitions:
+ - `?`: means 0 or 1 time (`{0,1}`)
+ - `*`: means 0 or more time (`{0,}`)
+ - `+`: means 1 or more time (`{1,}`)
+- For example, `apples?` will match `apple` and `apples`.
+ - But `apples+` will not match `apple` or `appplesq`,
+ but it will match `apples`, `appless`, `applesss`, etc.
+
+:::{.exercise}
+::::{.exercise-header}
+### Lecture 8 Exercise 5
+::::
+::::{.exercise-container}
+Find the fruits with names between 10 and 12 characters.
+
+
+.{10,12}
+
+::::
+:::
+
+:::{.exercise}
+::::{.exercise-header}
+### Lecture 8 Exercise 6
+::::
+::::{.exercise-container}
+Find the lines with no more than 4 letters.
+
+
+^.{0,4}$
+
+::::
+:::
+
+:::{.exercise}
+::::{.exercise-header}
+### Lecture 8 Exercise 7
+::::
+::::{.exercise-container}
+Find all the words that contain at least two consecutive vowels.
+
+
+
+[aeiou]{2,}
+
or
+[aeiou][aeiou]+
+
+
+::::
+:::
+
+:::{.exercise}
+::::{.exercise-header}
+### Lecture 8 Exercise 8
+::::
+::::{.exercise-container}
+
+This is a bit harder and derives from all previous sections: Match entire words that end in `_`.
+
+
+\\w*_\\b
+
+
+::::
+:::
+
+:::{.exercise}
+::::{.exercise-header}
+### Additional exercises
+::::
+::::{.exercise-container}
+
+
+- Go through the interactive tutorials and practice sessions at https://regexone.com/
+ that correspond to the topics we have covered during class.
+- The Library Carpentry organization has many regex exercises
+ in all sections of their regex course here https://librarycarpentry.org/lc-data-intro/
+ (you can just to do the exercises).
+
+::::
+:::
+
+
+
+
+## References
+
+[1] Kery, M. B., Radensky, M., Arya, M., John, B. E., & Myers, B. A. (2018, April). The story in the notebook: Exploratory data science using a literate programming tool. In Proceedings of the 2018 CHI Conference on Human Factors in Computing Systems (pp. 1-11).
diff --git a/renv.lock b/renv.lock
index c723e84..4a2abf4 100644
--- a/renv.lock
+++ b/renv.lock
@@ -136,6 +136,16 @@
],
"Hash": "e0b3a53876554bd45879e596cdb10a52"
},
+ "here": {
+ "Package": "here",
+ "Version": "1.0.1",
+ "Source": "Repository",
+ "Repository": "CRAN",
+ "Requirements": [
+ "rprojroot"
+ ],
+ "Hash": "24b224366f9c2e7534d2344d10d59211"
+ },
"highr": {
"Package": "highr",
"Version": "0.11",
@@ -287,6 +297,16 @@
],
"Hash": "062470668513dcda416927085ee9bdc7"
},
+ "rprojroot": {
+ "Package": "rprojroot",
+ "Version": "2.0.4",
+ "Source": "Repository",
+ "Repository": "CRAN",
+ "Requirements": [
+ "R"
+ ],
+ "Hash": "4c8415e0ec1e29f3f4f6fc108bef0144"
+ },
"sass": {
"Package": "sass",
"Version": "0.4.9",
diff --git a/requirements.txt b/requirements.txt
index e3bb248..b09dd89 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,5 +3,9 @@ jupyter
numpy
matplotlib
+# supplemental to help run the course
+jupyterlab
+
# used for instructors in course grading
otter-grader==5.6.0
+rpy2