Introducció a Quarto

Fem un càlcul senzill

a=2+3

i el valor de la variable a és ara 5.

import matplotlib.pyplot as plt
plt.plot([1,2,3],[4,2,1 ])
plt.show()

Fem un càlcul senzill

a=2+3

i el valor de la variable a és ara {r} a. També podem dibuixar

plot(1)

Fem un càlcul senzill

#| echo: false
a=2+3

i el valor de la variable a és ara {r} a.

#| echo: false
hist(rnorm(100))
#| echo: false
#| warning: false
notes<-read.csv2('./data/notes_atenea.csv',sep=",",dec='.')
#recodifiquem la nota a numèric
notes[is.na(notes)] <- 0
notes$P1<-as.numeric(notes$P1Parcial..Real.)
notes$P2<-as.numeric(notes$P2Parcial..Real.)
notes$P3<-as.numeric(notes$P3Parcial..Real.)
notes$P4<-as.numeric(notes$P4Parcial..Real.)
notes$nota<-as.numeric(notes$Total.Parcial..Real.)

Row

Presentats: r sum(!is.na(notes$nota))

Matriculats: r length(notes$nota)

Aprovats: r sum(notes$nota>4.999,na.rm=TRUE)

Row

#| echo: false
#| warning: false
#| title: Nota Total
library(ggplot2)
library(plotly)
library(tidyverse)
p<-notes %>%
  ggplot(aes(nota)) +
  geom_histogram(bins=10)
ggplotly(p)

Row

#| echo: false
#| warning: false
#| title: Problema 1
library(ggplot2)
library(plotly)
library(tidyverse)
p<-notes %>%
  ggplot(aes(P1)) +
  geom_histogram(bins=10)
ggplotly(p)
#| echo: false
#| warning: false
#| title: Problema 2
library(ggplot2)
library(plotly)
library(tidyverse)
p<-notes %>%
  ggplot(aes(P2)) +
  geom_histogram(bins=10)
ggplotly(p)
#| echo: false
#| warning: false
#| title: Problema 3
library(ggplot2)
library(plotly)
library(tidyverse)
p<-notes %>%
  ggplot(aes(P3)) +
  geom_histogram(bins=10)
ggplotly(p)
#| echo: false
#| warning: false
#| title: Problema 4
library(ggplot2)
library(plotly)
library(tidyverse)
p<-notes %>%
  ggplot(aes(P4)) +
  geom_histogram(bins=10)
ggplotly(p)

Quarto com a extensió de Markdown

  • Modificacions del format md estàndar: ‘xerrada.qmd’
  • Amb l’encapçalament definim com es renderitza el document per defecte:
---
title: "Introducció a Quarto"
author: Joaquim Puig
format: html
---

i aleshores quan ho renderitzem crearà ‘xerrada.html’.

quarto render xerrada.qmd

o bé de forma integrada a RStudio, VSCode…

Generació de PDF

Generació de PDF/Latex ‘xerrada.pdf’

---
title: "Introducció a Quarto"
author: Joaquim Puig
format: pdf
---

usant PDF/Typst https://typst.app ‘xerrada.pdf’

---
title: "Introducció a Quarto"
author: Joaquim Puig
format: typst
---

Més control sobre LaTeX

A part d’usar format: latex com a opció, també

---
title: "Introducció a Quarto"
author: Joaquim Puig
format:
  pdf:
    include-in-header:
      - text: |
          \usepackage{times}
    keep-tex: true
---

això ens crearà un fitxer [xerrada.tex](xerrada-latex.tex) que usarà el paquet times per a generar un ‘xerrada.pdf’. Podem També especificar macros, paquets locals, fitxers bibtex…

Generació de PPT/ODT

Per a presentacions, podem usar html a través de RevealJS com aquesta mateixa presentació index.qmd o bé PowerPoint:

---
title: "Introducció a Quarto"
author: Joaquim Puig
format: pptx
---

i ens crearà xerrada.pptx. Les equacions no es visualitzen bé en LibreOffice 😞.

Generació de DOCX/ODT

MS Word: xerrada.docx

---
title: "Introducció a Quarto"
author: Joaquim Puig
format: docx
---

ODT: xerrada.odt

---
title: "Introducció a Quarto"
author: Joaquim Puig
format: odt
---

Templates per a articles

Caldrà que ens instal·lem una extensió per a articles:

$ quarto use template quarto-journals/plos

i aleshores podem fer en format plos-docxo bé plos-pdf:

---
title: "PLOS template"
format:
  plos-docx:
(...)

Crearà un directori en un projecte amb:

Integració amb codi

Literate Programming (Programació lletrada?)

  • Integrar documentació i codi, veieu Wikipedia
  • Ja implementat per Knuth (1987) a través de WEB.
  • En l’univers R, ja fou desenvoupat per Yihui Xie.
  • La meva opinió personal és que els càlculs forts convé fer-los a part de cara a la reproductibilitat i disponibilitat de dades.
  • Convé usar l’opció cache:true per no haver de tornar a córrer càlculs.

Literate programming: R

---
title: "Literate Programming in R"
engine: R
---
quarto render dashboard-R.qmd

Literate programming: Python

---
title: "Literate programming"
jupyter: python3
---

i fem

quarto render calculs-python.qmd

Exemples:

Literate programming: Julia

---
title: "Literate Programming in Julia (quarto 1.5)"
engine: julia
---

Literate programming: Observable/JS

Podem aconseguir algun tipus d’interactivitat amb R+htmlwidgets:

Aplicacions interactives al navegador

Execució Client vs Servidor

  • Fins ara els exemples que hem vist permeten interactivitat en la visualització però no en els càlculs (excepte OJS).
  • Si es vol interactivitat (en R/Python/Julia) s’ha d’usar un servidor on es fan els càlculs, que es visualitzen interactivament en el client.
  • En els darrers mesos (o setmanes 🙈 …) hi ha hagut grans avenços en WASM: la possibilitat de compilar codi en R, Python o fins i tot Julia en el navegador.

Aplicacions interactives: R + WebR

$ quarto add coatless/quarto-webr

Exemples:

Versió en Python: Python + Pydiode

En clicar aquesta cel·la se’ns executarà el codi

n = 5
while n > 0:
  print(n)
  n = n - 1

print('Blastoff!')

Amb l’extensió quarto-webr es poden usar cel·les interactives al navegador que es poden executar sense necessitat d’instal·lar cap software:

vec<-c(1,2,3,4,1,3,1)
mean(vec)

amb què també es poden fer dibuixos

num_obs<-10
hist(rnorm(num_obs))

Modifiqueu el següent codi perquè la funció myfun sigui \(x\mapsto x^2+1\):

myfun <- function(x) #omplir aquí el valor 
#check values
table(c(myfun(0)==1,myfun(-1)==2,myfun(3)==10))
using DifferentialEquations, LinearAlgebra

function mathieu_trace(a,b)

    A0=zeros(2,2);A0[1,2]=1     #Define the matrix
    A1=zeros(2,2); A1[2,1]=1
    u = Matrix(I, 2, 2)         #Initial condition

    f(u,p,t) = (A0-p(t)*A1)*u   # Define the ODE
    prob = ODEProblem(f,u,(0,2*pi),t -> (a-b*cos(t)))

    sol = solve(prob,save_everystep=false) # Value in 2π
    tr(sol.u[2])                #u[2] is X(2π)
end

and plot some results

using Plots
a=0:0.01:5
b=0:0.01:5        # May take a while
plot(a,b,(x,y)->abs(mathieu_trace(x,y))>2,st=:contour,fill = true,colorbar_entry=false,c=cgrad([:white, :black]))

El codi és reactiu

El quadrat del número que has posat a sota és ${xx}.

//| echo: false
xx=var_a*var_a
viewof var_a = Inputs.range([-2, 11], {value: 5, step: 1, label: "Insert a value"})

Importar des de cel·les d’ObservableHQ

Gràfiques de Roger Veciana

//| echo: false
import {graph} from "@rveciana/monthly-mean-co-sub-2-sub-concentration-at-mauna-loa"
graph

o dibuixar una cicloide (gràfiques de @mcmcclur)

//| echo: false
import {make_cycloid} from "@mcmcclur/the-cycloid"
cycloid = make_cycloid(r, t)

per als següents valors dels paràmetres

//| echo: false
viewof t = Inputs.range([0, 6 * Math.PI], {value: 1, step: 1, label: "distància"})
viewof r = Inputs.range([0, 2], {value: 1, step: 0.01, label: "radi"})

Més informació

Veieu la xerrada de Roger Veciana

Informe sobre notes d’Atenea

#| echo: true
#| warning: false
notes<-read.csv2('./data/notes_atenea.csv',sep=",",dec='.')
#recodifiquem la nota a numèric
notes[is.na(notes)] <- 0
notes$P1<-as.numeric(notes$P1Parcial..Real.)
notes$P2<-as.numeric(notes$P2Parcial..Real.)
notes$P3<-as.numeric(notes$P3Parcial..Real.)
notes$P4<-as.numeric(notes$P4Parcial..Real.)
notes$nota<-as.numeric(notes$Total.Parcial..Real.)

Nota final

summary(notes)

Entre els r sum(!is.na(notes$nota)) (sobre r length(notes$nota)) presentats hi ha hagut:

  • r sum(notes$nota>4.999,na.rm=TRUE) aprovats
  • r sum(notes$nota<4.999,na.rm=TRUE) suspesos, dels quals r sum(notes$nota<2.999,na.rm=TRUE) alumnes amb nota inferior a 3.

Es poden veure els resultats a la Figura ?@fig-notes

#| echo: true
#| warning: false
#| label: fig-notes
#| fig-cap: "Histograma de les notes"
hist(notes$nota)
a=2+3

i podem dir que el valor de a és {julia} a. També podem dibuixar:

using Plots
plot(cos)

Quarto com a extensió de Markdown

  • És un sistema de publicació basat en el llenguatge **Markdown^* (Aaron Swartz et al) (*.qmd)
  • Permet exportar a múltiples formats (PDF/Web/Word/Epub/Wiki…), de moment no he trobat suport per Moodle 😞.

Gramàtica de markdown

  • El sistema d’equacions és el de TeX: \(\cos{\pi}=-1\) (en línia) o bé \[ \alpha x + \beta y = 0 \tag{1}\]
  • També es poden insertar cites de fitxers bibtex i enllaços a equacions com Equation 1.
  • Podem també insertar imatges,
    Literate Programming by D.E. Knuth (1984)

Integració amb codi

  • Quarto permet insertar codi, que s’executi i s’incorpori l’output o elements interactius.
$ quarto render
  • Es pot executar a CLI, VSCode, RStudio/Posit…

Arquitectura

  • Successor de RMarkdwon (òrbita R). Open Source desenvolupat per Posit.
  • Inspirat/Construït: Pandoc, Reveal, Hugo…

Per saber-ne més

  • Molt bona documentació a www.posit.com, que podeu trobar aquí.
  • Quarto és al mateix temps una extensió del llenguatge markdown i una distribució de paquets que implementa el literate programming de Knuth (1984) a través de les idees originàries del paquet KnitR de R de Yihui Xie (2012).