Mixing writing and julia

Author

Denis Schluppeck

Session date:

2023-01-04

Background

Here is an example of a document that produces a plot from some data that’s stored separately.

The data in ?@fig-timeseries shows the daily interactions with the moodle page for my second year lab classes. Can you spot the two dominant patterns in the data?

an actual computed figure

#| label: fig-timeseries
#| fig-cap: "A line plot of some mystery data"

# julia script
#
# schluppeck, 2022-12-12

using CSV
using Dates
using DataFrames
using Plots
using FindPeaks1D

gr()

df = DataFrame(CSV.File("2017-mysteryTimeseries.csv"))

the_plot = plot(df.theTime_day, df.n;
         lw = 2, 
         xlims = Date.(("2016-09-01", "2016-12-31")),
         legend = false
)
ylabel!("# of moodle interactions")
xlabel!("day")

or a table

A badly formatted table… rstats with various packages handles tabular data much more nicely!

# get head()... first 10 rows
head(d) = first(d, 10)
head(df)

or some further analysis

If you want to compute things for including in your text, so-called inline code, then you can make your code spit out markdown that’s been patched up. If you turn #| echo: true to false, then the code is hidden!

We can also elaborate on previous plots, bu adding additional analysis. ?@fig-timeseries-with-peaks shows the days, where \(n>100\).

#| echo: false
#| label: fig-timeseries-with-peaks
#| fig-cap: "Events with > 100 interactions labelled"

# use findpeaks to find days where 
# interactions topped 100
p = findpeaks1d(df.n, height = 100)

# and superimpose on previous plot
plot(the_plot, size = (600,300), widen = 1.1)
scatter!(df[p[1],:theTime_day], p[2]["peak_heights"]) #, color=:red, ms=12)

Notes

  • to find out which kernels you can use with jupyter, you can check in terminal with
jupyter kernelspec list
  • Check out how conveniently the output format can be swapped out with quarto render 01-doc-with-julia.qmd --to pdf etc