├── README.md ├── photos ├── originals │ ├── docs │ │ ├── index.html │ │ ├── search.json │ │ ├── sitemap.xml │ │ └── listings.json │ ├── photos │ │ ├── maya-gans.png │ │ ├── nic-crane.png │ │ ├── tracy-teal.png │ │ ├── andy-teucher.png │ │ ├── emil-hvitfeldt.png │ │ └── shannon-hagerty.png │ ├── academy.png │ ├── david-aja.jpg │ ├── emma-rand.jpg │ ├── eric-nantz.jpg │ ├── max-kuhn.jpeg │ ├── maya-gans.png │ ├── nic-crane.png │ ├── rika-gorn.jpeg │ ├── tracy-teal.png │ ├── andrew-bray.jpg │ ├── andy-teucher.png │ ├── colin-rundel.png │ ├── gagan-singh.jpg │ ├── hamel-husain.jpg │ ├── ian-lyttle.jpeg │ ├── julia-silge.jpg │ ├── matt-dancho.jpg │ ├── mike-thomas.jpeg │ ├── rob-hyndman.jpeg │ ├── ryan-johnson.jpg │ ├── sam-edwardes.jpg │ ├── simon-couch.jpg │ ├── cedric-scherer.jpg │ ├── david-granjon.jpg │ ├── emil-hvitfeldt.png │ ├── hadley-wickham.jpg │ ├── hannah-frick.jpeg │ ├── katie-masiello.jpg │ ├── shannon-pileggi.jpg │ ├── sharla-gelfand.jpg │ ├── steph-hazlitt.jpg │ ├── malcolm-barrett.jpeg │ ├── sebastian-raschka.jpeg │ ├── mine-cetinkaya-rundel.jpg │ ├── ijeamaka-anyene-fumagalli.jpeg │ └── prep-photos.R ├── academy.png ├── david-aja.jpg ├── emma-rand.jpg ├── eric-nantz.jpg ├── max-kuhn.jpeg ├── maya-gans.png ├── nic-crane.png ├── rika-gorn.jpeg ├── tracy-teal.png ├── andrew-bray.jpg ├── andy-teucher.png ├── colin-rundel.png ├── gagan-singh.jpg ├── hamel-husain.jpg ├── ian-lyttle.jpeg ├── julia-silge.jpg ├── matt-dancho.jpg ├── mike-thomas.jpeg ├── rob-hyndman.jpeg ├── ryan-johnson.jpg ├── sam-edwardes.jpg ├── simon-couch.jpg ├── cedric-scherer.jpg ├── david-granjon.jpg ├── emil-hvitfeldt.png ├── hadley-wickham.jpg ├── hannah-frick.jpeg ├── katie-masiello.jpg ├── shannon-pileggi.jpg ├── sharla-gelfand.jpg ├── steph-hazlitt.jpg ├── malcolm-barrett.jpeg ├── sebastian-raschka.jpeg ├── mine-cetinkaya-rundel.jpg └── ijeamaka-anyene-fumagalli.jpeg ├── docs ├── robots.txt ├── workshops │ ├── wtf │ │ ├── david-aja.jpg │ │ └── shannon-pileggi.jpg │ ├── admin │ │ └── rika-gorn.jpeg │ ├── arrow │ │ ├── nic-crane.png │ │ └── steph-hazlitt.jpg │ ├── intro-ds-r │ │ └── academy.png │ ├── pkgdev │ │ └── andy-teucher.png │ ├── shiny-ui │ │ ├── maya-gans.png │ │ └── david-granjon.jpg │ ├── gen-art │ │ ├── sharla-gelfand.jpg │ │ └── ijeamaka-anyene-fumagalli.jpeg │ ├── manage-os │ │ └── tracy-teal.png │ ├── shiny-python │ │ ├── joe-cheng.jpg │ │ └── gordon-shotwell.jpeg │ ├── shiny-r │ │ ├── colin-rundel.png │ │ └── garrick-aden-buie.jpg │ ├── forecasting │ │ └── rob-hyndman.jpeg │ ├── intro-ds-python │ │ └── academy.png │ ├── programming-r │ │ ├── emma-rand.jpg │ │ └── ian-lyttle.jpeg │ ├── ds-workflows-r │ │ ├── ryan-johnson.jpg │ │ └── katie-masiello.jpg │ ├── modeling-deploy │ │ └── julia-silge.jpg │ ├── quarto-python │ │ └── hamel-husain.jpg │ ├── quarto-r-docs │ │ └── andrew-bray.jpg │ ├── shiny-production │ │ ├── eric-nantz.jpg │ │ └── mike-thomas.jpeg │ ├── causal-inference │ │ ├── travis-gerke.jpg │ │ └── malcolm-barrett.jpeg │ ├── ml-python │ │ └── sebastian-raschka.jpeg │ ├── quarto-r-projects │ │ └── andrew-bray.jpg │ ├── shiny-dashboard │ │ ├── colin-rundel.png │ │ └── garrick-aden-buie.jpg │ ├── tidymodels-advanced │ │ └── max-kuhn.jpeg │ ├── tidymodels-intro │ │ ├── simon-couch.jpg │ │ ├── emil-hvitfeldt.png │ │ └── hannah-frick.jpeg │ ├── dataviz-ggplot2 │ │ └── cedric-scherer.jpg │ ├── ds-workflows-python │ │ ├── gagan-singh.jpg │ │ └── sam-edwardes.jpg │ ├── teach-ds │ │ └── mine-cetinkaya-rundel.jpg │ ├── pkgdev-masterclass │ │ └── hadley-wickham.jpg │ └── dataviz-storytelling │ │ └── cedric-scherer.jpg ├── site_libs │ ├── bootstrap │ │ └── bootstrap-icons.woff │ ├── quarto-html │ │ ├── tippy.css │ │ ├── quarto-syntax-highlighting.css │ │ ├── anchor.min.js │ │ └── popper.min.js │ ├── quarto-nav │ │ ├── headroom.min.js │ │ └── quarto-nav.js │ └── clipboard │ │ └── clipboard.min.js ├── images │ └── PositConf2023-EventLogo_github-teal.png └── sitemap.xml ├── .gitignore ├── workshops ├── wtf │ ├── david-aja.jpg │ ├── shannon-pileggi.jpg │ └── index.qmd ├── admin │ ├── rika-gorn.jpeg │ └── index.qmd ├── arrow │ ├── nic-crane.png │ ├── steph-hazlitt.jpg │ └── index.qmd ├── intro-ds-r │ ├── academy.png │ └── index.qmd ├── pkgdev │ ├── andy-teucher.png │ └── index.qmd ├── shiny-ui │ ├── maya-gans.png │ ├── david-granjon.jpg │ └── index.qmd ├── gen-art │ ├── sharla-gelfand.jpg │ ├── ijeamaka-anyene-fumagalli.jpeg │ └── index.qmd ├── manage-os │ ├── tracy-teal.png │ └── index.qmd ├── shiny-python │ ├── joe-cheng.jpg │ ├── gordon-shotwell.jpeg │ └── index.qmd ├── shiny-r │ ├── colin-rundel.png │ ├── garrick-aden-buie.jpg │ └── index.qmd ├── forecasting │ ├── rob-hyndman.jpeg │ └── index.qmd ├── intro-ds-python │ ├── academy.png │ └── index.qmd ├── programming-r │ ├── emma-rand.jpg │ ├── ian-lyttle.jpeg │ └── index.qmd ├── ds-workflows-r │ ├── ryan-johnson.jpg │ ├── katie-masiello.jpg │ └── index.qmd ├── modeling-deploy │ ├── julia-silge.jpg │ └── index.qmd ├── quarto-python │ ├── hamel-husain.jpg │ └── index.qmd ├── quarto-r-docs │ ├── andrew-bray.jpg │ └── index.qmd ├── shiny-production │ ├── eric-nantz.jpg │ ├── mike-thomas.jpeg │ └── index.qmd ├── causal-inference │ ├── travis-gerke.jpg │ ├── malcolm-barrett.jpeg │ └── index.qmd ├── ml-python │ ├── sebastian-raschka.jpeg │ └── index.qmd ├── quarto-r-projects │ ├── andrew-bray.jpg │ └── index.qmd ├── shiny-dashboard │ ├── colin-rundel.png │ ├── garrick-aden-buie.jpg │ └── index.qmd ├── tidymodels-advanced │ ├── max-kuhn.jpeg │ └── index.qmd ├── tidymodels-intro │ ├── simon-couch.jpg │ ├── emil-hvitfeldt.png │ ├── hannah-frick.jpeg │ └── index.qmd ├── dataviz-ggplot2 │ ├── cedric-scherer.jpg │ └── index.qmd ├── ds-workflows-python │ ├── gagan-singh.jpg │ ├── sam-edwardes.jpg │ └── index.qmd ├── teach-ds │ ├── mine-cetinkaya-rundel.jpg │ └── index.qmd ├── pkgdev-masterclass │ ├── hadley-wickham.jpg │ └── index.qmd └── dataviz-storytelling │ ├── cedric-scherer.jpg │ └── index.qmd ├── images └── PositConf2023-EventLogo_github-teal.png ├── style.scss ├── workshops.Rproj ├── _quarto.yml ├── table.R ├── index.qmd └── workshops.csv /README.md: -------------------------------------------------------------------------------- 1 | # posit-conf-workshops -------------------------------------------------------------------------------- /photos/originals/docs/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /photos/originals/docs/search.json: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /photos/originals/docs/sitemap.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /photos/originals/docs/listings.json: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /photos/originals/photos/maya-gans.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /photos/originals/photos/nic-crane.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /photos/originals/photos/tracy-teal.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /photos/originals/photos/andy-teucher.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /photos/originals/photos/emil-hvitfeldt.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /photos/originals/photos/shannon-hagerty.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/robots.txt: -------------------------------------------------------------------------------- 1 | Sitemap: https://posit-conf-2023.github.io/website/sitemap.xml 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .Rproj.user 2 | .Rhistory 3 | .RData 4 | .Ruserdata 5 | 6 | /.quarto/ 7 | -------------------------------------------------------------------------------- /photos/academy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/academy.png -------------------------------------------------------------------------------- /photos/david-aja.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/david-aja.jpg -------------------------------------------------------------------------------- /photos/emma-rand.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/emma-rand.jpg -------------------------------------------------------------------------------- /photos/eric-nantz.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/eric-nantz.jpg -------------------------------------------------------------------------------- /photos/max-kuhn.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/max-kuhn.jpeg -------------------------------------------------------------------------------- /photos/maya-gans.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/maya-gans.png -------------------------------------------------------------------------------- /photos/nic-crane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/nic-crane.png -------------------------------------------------------------------------------- /photos/rika-gorn.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/rika-gorn.jpeg -------------------------------------------------------------------------------- /photos/tracy-teal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/tracy-teal.png -------------------------------------------------------------------------------- /photos/andrew-bray.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/andrew-bray.jpg -------------------------------------------------------------------------------- /photos/andy-teucher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/andy-teucher.png -------------------------------------------------------------------------------- /photos/colin-rundel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/colin-rundel.png -------------------------------------------------------------------------------- /photos/gagan-singh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/gagan-singh.jpg -------------------------------------------------------------------------------- /photos/hamel-husain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/hamel-husain.jpg -------------------------------------------------------------------------------- /photos/ian-lyttle.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/ian-lyttle.jpeg -------------------------------------------------------------------------------- /photos/julia-silge.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/julia-silge.jpg -------------------------------------------------------------------------------- /photos/matt-dancho.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/matt-dancho.jpg -------------------------------------------------------------------------------- /photos/mike-thomas.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/mike-thomas.jpeg -------------------------------------------------------------------------------- /photos/rob-hyndman.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/rob-hyndman.jpeg -------------------------------------------------------------------------------- /photos/ryan-johnson.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/ryan-johnson.jpg -------------------------------------------------------------------------------- /photos/sam-edwardes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/sam-edwardes.jpg -------------------------------------------------------------------------------- /photos/simon-couch.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/simon-couch.jpg -------------------------------------------------------------------------------- /photos/cedric-scherer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/cedric-scherer.jpg -------------------------------------------------------------------------------- /photos/david-granjon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/david-granjon.jpg -------------------------------------------------------------------------------- /photos/emil-hvitfeldt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/emil-hvitfeldt.png -------------------------------------------------------------------------------- /photos/hadley-wickham.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/hadley-wickham.jpg -------------------------------------------------------------------------------- /photos/hannah-frick.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/hannah-frick.jpeg -------------------------------------------------------------------------------- /photos/katie-masiello.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/katie-masiello.jpg -------------------------------------------------------------------------------- /photos/shannon-pileggi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/shannon-pileggi.jpg -------------------------------------------------------------------------------- /photos/sharla-gelfand.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/sharla-gelfand.jpg -------------------------------------------------------------------------------- /photos/steph-hazlitt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/steph-hazlitt.jpg -------------------------------------------------------------------------------- /photos/malcolm-barrett.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/malcolm-barrett.jpeg -------------------------------------------------------------------------------- /photos/originals/academy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/academy.png -------------------------------------------------------------------------------- /workshops/wtf/david-aja.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/wtf/david-aja.jpg -------------------------------------------------------------------------------- /photos/originals/david-aja.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/david-aja.jpg -------------------------------------------------------------------------------- /photos/originals/emma-rand.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/emma-rand.jpg -------------------------------------------------------------------------------- /photos/originals/eric-nantz.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/eric-nantz.jpg -------------------------------------------------------------------------------- /photos/originals/max-kuhn.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/max-kuhn.jpeg -------------------------------------------------------------------------------- /photos/originals/maya-gans.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/maya-gans.png -------------------------------------------------------------------------------- /photos/originals/nic-crane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/nic-crane.png -------------------------------------------------------------------------------- /photos/originals/rika-gorn.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/rika-gorn.jpeg -------------------------------------------------------------------------------- /photos/originals/tracy-teal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/tracy-teal.png -------------------------------------------------------------------------------- /photos/sebastian-raschka.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/sebastian-raschka.jpeg -------------------------------------------------------------------------------- /workshops/admin/rika-gorn.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/admin/rika-gorn.jpeg -------------------------------------------------------------------------------- /workshops/arrow/nic-crane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/arrow/nic-crane.png -------------------------------------------------------------------------------- /docs/workshops/wtf/david-aja.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/wtf/david-aja.jpg -------------------------------------------------------------------------------- /photos/mine-cetinkaya-rundel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/mine-cetinkaya-rundel.jpg -------------------------------------------------------------------------------- /photos/originals/andrew-bray.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/andrew-bray.jpg -------------------------------------------------------------------------------- /photos/originals/andy-teucher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/andy-teucher.png -------------------------------------------------------------------------------- /photos/originals/colin-rundel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/colin-rundel.png -------------------------------------------------------------------------------- /photos/originals/gagan-singh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/gagan-singh.jpg -------------------------------------------------------------------------------- /photos/originals/hamel-husain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/hamel-husain.jpg -------------------------------------------------------------------------------- /photos/originals/ian-lyttle.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/ian-lyttle.jpeg -------------------------------------------------------------------------------- /photos/originals/julia-silge.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/julia-silge.jpg -------------------------------------------------------------------------------- /photos/originals/matt-dancho.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/matt-dancho.jpg -------------------------------------------------------------------------------- /photos/originals/mike-thomas.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/mike-thomas.jpeg -------------------------------------------------------------------------------- /photos/originals/rob-hyndman.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/rob-hyndman.jpeg -------------------------------------------------------------------------------- /photos/originals/ryan-johnson.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/ryan-johnson.jpg -------------------------------------------------------------------------------- /photos/originals/sam-edwardes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/sam-edwardes.jpg -------------------------------------------------------------------------------- /photos/originals/simon-couch.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/simon-couch.jpg -------------------------------------------------------------------------------- /workshops/arrow/steph-hazlitt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/arrow/steph-hazlitt.jpg -------------------------------------------------------------------------------- /workshops/intro-ds-r/academy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/intro-ds-r/academy.png -------------------------------------------------------------------------------- /workshops/pkgdev/andy-teucher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/pkgdev/andy-teucher.png -------------------------------------------------------------------------------- /workshops/shiny-ui/maya-gans.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/shiny-ui/maya-gans.png -------------------------------------------------------------------------------- /workshops/wtf/shannon-pileggi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/wtf/shannon-pileggi.jpg -------------------------------------------------------------------------------- /docs/workshops/admin/rika-gorn.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/admin/rika-gorn.jpeg -------------------------------------------------------------------------------- /docs/workshops/arrow/nic-crane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/arrow/nic-crane.png -------------------------------------------------------------------------------- /photos/originals/cedric-scherer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/cedric-scherer.jpg -------------------------------------------------------------------------------- /photos/originals/david-granjon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/david-granjon.jpg -------------------------------------------------------------------------------- /photos/originals/emil-hvitfeldt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/emil-hvitfeldt.png -------------------------------------------------------------------------------- /photos/originals/hadley-wickham.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/hadley-wickham.jpg -------------------------------------------------------------------------------- /photos/originals/hannah-frick.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/hannah-frick.jpeg -------------------------------------------------------------------------------- /photos/originals/katie-masiello.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/katie-masiello.jpg -------------------------------------------------------------------------------- /photos/originals/shannon-pileggi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/shannon-pileggi.jpg -------------------------------------------------------------------------------- /photos/originals/sharla-gelfand.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/sharla-gelfand.jpg -------------------------------------------------------------------------------- /photos/originals/steph-hazlitt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/steph-hazlitt.jpg -------------------------------------------------------------------------------- /workshops/gen-art/sharla-gelfand.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/gen-art/sharla-gelfand.jpg -------------------------------------------------------------------------------- /workshops/manage-os/tracy-teal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/manage-os/tracy-teal.png -------------------------------------------------------------------------------- /workshops/shiny-python/joe-cheng.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/shiny-python/joe-cheng.jpg -------------------------------------------------------------------------------- /workshops/shiny-r/colin-rundel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/shiny-r/colin-rundel.png -------------------------------------------------------------------------------- /workshops/shiny-ui/david-granjon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/shiny-ui/david-granjon.jpg -------------------------------------------------------------------------------- /docs/workshops/arrow/steph-hazlitt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/arrow/steph-hazlitt.jpg -------------------------------------------------------------------------------- /docs/workshops/intro-ds-r/academy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/intro-ds-r/academy.png -------------------------------------------------------------------------------- /docs/workshops/pkgdev/andy-teucher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/pkgdev/andy-teucher.png -------------------------------------------------------------------------------- /docs/workshops/shiny-ui/maya-gans.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/shiny-ui/maya-gans.png -------------------------------------------------------------------------------- /docs/workshops/wtf/shannon-pileggi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/wtf/shannon-pileggi.jpg -------------------------------------------------------------------------------- /photos/ijeamaka-anyene-fumagalli.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/ijeamaka-anyene-fumagalli.jpeg -------------------------------------------------------------------------------- /photos/originals/malcolm-barrett.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/malcolm-barrett.jpeg -------------------------------------------------------------------------------- /workshops/forecasting/rob-hyndman.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/forecasting/rob-hyndman.jpeg -------------------------------------------------------------------------------- /workshops/intro-ds-python/academy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/intro-ds-python/academy.png -------------------------------------------------------------------------------- /workshops/programming-r/emma-rand.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/programming-r/emma-rand.jpg -------------------------------------------------------------------------------- /docs/workshops/gen-art/sharla-gelfand.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/gen-art/sharla-gelfand.jpg -------------------------------------------------------------------------------- /docs/workshops/manage-os/tracy-teal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/manage-os/tracy-teal.png -------------------------------------------------------------------------------- /docs/workshops/shiny-python/joe-cheng.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/shiny-python/joe-cheng.jpg -------------------------------------------------------------------------------- /docs/workshops/shiny-r/colin-rundel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/shiny-r/colin-rundel.png -------------------------------------------------------------------------------- /docs/workshops/shiny-ui/david-granjon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/shiny-ui/david-granjon.jpg -------------------------------------------------------------------------------- /photos/originals/sebastian-raschka.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/sebastian-raschka.jpeg -------------------------------------------------------------------------------- /workshops/ds-workflows-r/ryan-johnson.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/ds-workflows-r/ryan-johnson.jpg -------------------------------------------------------------------------------- /workshops/modeling-deploy/julia-silge.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/modeling-deploy/julia-silge.jpg -------------------------------------------------------------------------------- /workshops/programming-r/ian-lyttle.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/programming-r/ian-lyttle.jpeg -------------------------------------------------------------------------------- /workshops/quarto-python/hamel-husain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/quarto-python/hamel-husain.jpg -------------------------------------------------------------------------------- /workshops/quarto-r-docs/andrew-bray.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/quarto-r-docs/andrew-bray.jpg -------------------------------------------------------------------------------- /workshops/shiny-production/eric-nantz.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/shiny-production/eric-nantz.jpg -------------------------------------------------------------------------------- /workshops/shiny-r/garrick-aden-buie.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/shiny-r/garrick-aden-buie.jpg -------------------------------------------------------------------------------- /docs/workshops/forecasting/rob-hyndman.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/forecasting/rob-hyndman.jpeg -------------------------------------------------------------------------------- /docs/workshops/intro-ds-python/academy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/intro-ds-python/academy.png -------------------------------------------------------------------------------- /docs/workshops/programming-r/emma-rand.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/programming-r/emma-rand.jpg -------------------------------------------------------------------------------- /photos/originals/mine-cetinkaya-rundel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/mine-cetinkaya-rundel.jpg -------------------------------------------------------------------------------- /workshops/causal-inference/travis-gerke.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/causal-inference/travis-gerke.jpg -------------------------------------------------------------------------------- /workshops/ds-workflows-r/katie-masiello.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/ds-workflows-r/katie-masiello.jpg -------------------------------------------------------------------------------- /workshops/ml-python/sebastian-raschka.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/ml-python/sebastian-raschka.jpeg -------------------------------------------------------------------------------- /workshops/quarto-r-projects/andrew-bray.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/quarto-r-projects/andrew-bray.jpg -------------------------------------------------------------------------------- /workshops/shiny-dashboard/colin-rundel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/shiny-dashboard/colin-rundel.png -------------------------------------------------------------------------------- /workshops/shiny-production/mike-thomas.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/shiny-production/mike-thomas.jpeg -------------------------------------------------------------------------------- /workshops/shiny-python/gordon-shotwell.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/shiny-python/gordon-shotwell.jpeg -------------------------------------------------------------------------------- /workshops/tidymodels-advanced/max-kuhn.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/tidymodels-advanced/max-kuhn.jpeg -------------------------------------------------------------------------------- /workshops/tidymodels-intro/simon-couch.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/tidymodels-intro/simon-couch.jpg -------------------------------------------------------------------------------- /docs/site_libs/bootstrap/bootstrap-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/site_libs/bootstrap/bootstrap-icons.woff -------------------------------------------------------------------------------- /docs/workshops/ds-workflows-r/ryan-johnson.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/ds-workflows-r/ryan-johnson.jpg -------------------------------------------------------------------------------- /docs/workshops/modeling-deploy/julia-silge.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/modeling-deploy/julia-silge.jpg -------------------------------------------------------------------------------- /docs/workshops/programming-r/ian-lyttle.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/programming-r/ian-lyttle.jpeg -------------------------------------------------------------------------------- /docs/workshops/quarto-python/hamel-husain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/quarto-python/hamel-husain.jpg -------------------------------------------------------------------------------- /docs/workshops/quarto-r-docs/andrew-bray.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/quarto-r-docs/andrew-bray.jpg -------------------------------------------------------------------------------- /docs/workshops/shiny-production/eric-nantz.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/shiny-production/eric-nantz.jpg -------------------------------------------------------------------------------- /docs/workshops/shiny-r/garrick-aden-buie.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/shiny-r/garrick-aden-buie.jpg -------------------------------------------------------------------------------- /images/PositConf2023-EventLogo_github-teal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/images/PositConf2023-EventLogo_github-teal.png -------------------------------------------------------------------------------- /workshops/dataviz-ggplot2/cedric-scherer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/dataviz-ggplot2/cedric-scherer.jpg -------------------------------------------------------------------------------- /workshops/ds-workflows-python/gagan-singh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/ds-workflows-python/gagan-singh.jpg -------------------------------------------------------------------------------- /workshops/ds-workflows-python/sam-edwardes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/ds-workflows-python/sam-edwardes.jpg -------------------------------------------------------------------------------- /workshops/teach-ds/mine-cetinkaya-rundel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/teach-ds/mine-cetinkaya-rundel.jpg -------------------------------------------------------------------------------- /workshops/tidymodels-intro/emil-hvitfeldt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/tidymodels-intro/emil-hvitfeldt.png -------------------------------------------------------------------------------- /workshops/tidymodels-intro/hannah-frick.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/tidymodels-intro/hannah-frick.jpeg -------------------------------------------------------------------------------- /docs/workshops/causal-inference/travis-gerke.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/causal-inference/travis-gerke.jpg -------------------------------------------------------------------------------- /docs/workshops/ds-workflows-r/katie-masiello.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/ds-workflows-r/katie-masiello.jpg -------------------------------------------------------------------------------- /docs/workshops/ml-python/sebastian-raschka.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/ml-python/sebastian-raschka.jpeg -------------------------------------------------------------------------------- /docs/workshops/quarto-r-projects/andrew-bray.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/quarto-r-projects/andrew-bray.jpg -------------------------------------------------------------------------------- /docs/workshops/shiny-dashboard/colin-rundel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/shiny-dashboard/colin-rundel.png -------------------------------------------------------------------------------- /docs/workshops/shiny-production/mike-thomas.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/shiny-production/mike-thomas.jpeg -------------------------------------------------------------------------------- /docs/workshops/shiny-python/gordon-shotwell.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/shiny-python/gordon-shotwell.jpeg -------------------------------------------------------------------------------- /docs/workshops/tidymodels-advanced/max-kuhn.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/tidymodels-advanced/max-kuhn.jpeg -------------------------------------------------------------------------------- /docs/workshops/tidymodels-intro/simon-couch.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/tidymodels-intro/simon-couch.jpg -------------------------------------------------------------------------------- /photos/originals/ijeamaka-anyene-fumagalli.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/photos/originals/ijeamaka-anyene-fumagalli.jpeg -------------------------------------------------------------------------------- /workshops/causal-inference/malcolm-barrett.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/causal-inference/malcolm-barrett.jpeg -------------------------------------------------------------------------------- /workshops/gen-art/ijeamaka-anyene-fumagalli.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/gen-art/ijeamaka-anyene-fumagalli.jpeg -------------------------------------------------------------------------------- /workshops/pkgdev-masterclass/hadley-wickham.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/pkgdev-masterclass/hadley-wickham.jpg -------------------------------------------------------------------------------- /workshops/shiny-dashboard/garrick-aden-buie.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/shiny-dashboard/garrick-aden-buie.jpg -------------------------------------------------------------------------------- /docs/images/PositConf2023-EventLogo_github-teal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/images/PositConf2023-EventLogo_github-teal.png -------------------------------------------------------------------------------- /docs/workshops/dataviz-ggplot2/cedric-scherer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/dataviz-ggplot2/cedric-scherer.jpg -------------------------------------------------------------------------------- /docs/workshops/ds-workflows-python/gagan-singh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/ds-workflows-python/gagan-singh.jpg -------------------------------------------------------------------------------- /docs/workshops/ds-workflows-python/sam-edwardes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/ds-workflows-python/sam-edwardes.jpg -------------------------------------------------------------------------------- /docs/workshops/teach-ds/mine-cetinkaya-rundel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/teach-ds/mine-cetinkaya-rundel.jpg -------------------------------------------------------------------------------- /docs/workshops/tidymodels-intro/emil-hvitfeldt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/tidymodels-intro/emil-hvitfeldt.png -------------------------------------------------------------------------------- /docs/workshops/tidymodels-intro/hannah-frick.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/tidymodels-intro/hannah-frick.jpeg -------------------------------------------------------------------------------- /workshops/dataviz-storytelling/cedric-scherer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/workshops/dataviz-storytelling/cedric-scherer.jpg -------------------------------------------------------------------------------- /docs/workshops/causal-inference/malcolm-barrett.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/causal-inference/malcolm-barrett.jpeg -------------------------------------------------------------------------------- /docs/workshops/gen-art/ijeamaka-anyene-fumagalli.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/gen-art/ijeamaka-anyene-fumagalli.jpeg -------------------------------------------------------------------------------- /docs/workshops/pkgdev-masterclass/hadley-wickham.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/pkgdev-masterclass/hadley-wickham.jpg -------------------------------------------------------------------------------- /docs/workshops/shiny-dashboard/garrick-aden-buie.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/shiny-dashboard/garrick-aden-buie.jpg -------------------------------------------------------------------------------- /docs/workshops/dataviz-storytelling/cedric-scherer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/posit-conf-2023/workshops/HEAD/docs/workshops/dataviz-storytelling/cedric-scherer.jpg -------------------------------------------------------------------------------- /style.scss: -------------------------------------------------------------------------------- 1 | /*-- scss:defaults --*/ 2 | 3 | @import 'https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible&display=swap'; 4 | 5 | $font-family: "Atkinson Hyperlegible", sans-serif; 6 | $link-color: #589398; 7 | $hover-color: darken($link-color, 40%); 8 | 9 | /*-- scss:rules --*/ 10 | -------------------------------------------------------------------------------- /workshops.Rproj: -------------------------------------------------------------------------------- 1 | Version: 1.0 2 | 3 | RestoreWorkspace: Default 4 | SaveWorkspace: Default 5 | AlwaysSaveHistory: Default 6 | 7 | EnableCodeIndexing: Yes 8 | UseSpacesForTab: Yes 9 | NumSpacesForTab: 2 10 | Encoding: UTF-8 11 | 12 | RnwWeave: Sweave 13 | LaTeX: pdfLaTeX 14 | 15 | AutoAppendNewline: Yes 16 | StripTrailingWhitespace: Yes 17 | 18 | MarkdownWrap: Sentence 19 | -------------------------------------------------------------------------------- /_quarto.yml: -------------------------------------------------------------------------------- 1 | project: 2 | type: website 3 | output-dir: docs 4 | 5 | website: 6 | title: "posit::conf(2023)" 7 | favicon: images/PositConf2023-EventLogo_github-teal.png 8 | site-url: https://posit-conf-2023.github.io/website 9 | description: "posit::conf(2023) workshops" 10 | 11 | repo-url: https://github.com/posit-conf-2023/workshops 12 | repo-actions: [edit, issue] 13 | 14 | open-graph: true 15 | 16 | navbar: 17 | background: "#589398" 18 | right: 19 | - icon: github 20 | href: https://github.com/posit-conf-2023/workshops 21 | left: 22 | - text: Workshops 23 | href: index.qmd 24 | 25 | format: 26 | html: 27 | mainfont: "Atkinson Hyperlegible" 28 | published-title: "Starts on" 29 | author-title: "Instructor" 30 | description-title: "Length" 31 | theme: style.scss 32 | linkcolor: "#589398" 33 | toc: true 34 | 35 | editor: visual 36 | -------------------------------------------------------------------------------- /table.R: -------------------------------------------------------------------------------- 1 | library(tidyverse) 2 | library(gt) 3 | library(glue) 4 | 5 | workshops <- read_csv("workshops.csv") |> 6 | mutate( 7 | day_1 = glue("[{day_1}](https://posit-conf-2023.github.io/workshops/workshops/{day_1_slug}/)"), 8 | day_2 = glue("[{day_2}](https://posit-conf-2023.github.io/workshops/workshops/{day_2_slug}/)") 9 | ) |> 10 | select(-room, -contains("slug")) 11 | 12 | workshops |> 13 | filter(type == "2-day") |> 14 | select(-type) |> 15 | gt() |> 16 | cols_merge( 17 | rows = is.na(day_2), 18 | columns = c(day_1, day_2), 19 | pattern = "{1}" 20 | ) |> 21 | cols_width(day_1 ~ px(800)) |> 22 | cols_align(day_1, align = "center") |> 23 | cols_label(day_1 = "Both Days") 24 | 25 | workshops |> 26 | filter(type == "1-day") |> 27 | select(-type) |> 28 | gt() |> 29 | fmt_markdown() |> 30 | cols_width( 31 | day_1 ~ px(400), 32 | day_2 ~ px(400) 33 | ) |> 34 | cols_align( 35 | align = "left", 36 | columns = c(day_1, day_2) 37 | ) |> 38 | tab_style( 39 | style = cell_borders( 40 | sides = c("right"), 41 | style = "solid" 42 | ), 43 | locations = cells_body( 44 | columns = day_1, 45 | rows = everything() 46 | ) 47 | ) |> 48 | cols_label( 49 | day_1 = "Day 1", 50 | day_2 = "Day 2" 51 | ) 52 | -------------------------------------------------------------------------------- /docs/site_libs/quarto-html/tippy.css: -------------------------------------------------------------------------------- 1 | .tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1} -------------------------------------------------------------------------------- /workshops/admin/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "DevOps for Data Scientists" 3 | author: "Rika Gorn" 4 | date: "2023-09-17" 5 | length: "A-2-day" 6 | description: "2-day workshop" 7 | day-one: "X" 8 | day-two: "X" 9 | languages: 10 | - R 11 | - Shell scripting 12 | tags: 13 | - admin 14 | --- 15 | 16 | # Description 17 | 18 | In this workshop, we will discuss ways to better containerize, deploy, and scale your data products. 19 | Participants will get hands-on practice deploying: 20 | 21 | - A quarto site using Github Actions 22 | 23 | - An API via a Docker container 24 | 25 | - A Linux server running Posit products 26 | 27 | You'll learn enough about servers, networking, security, and authorization to be dangerous -- or at least enough to communicate with your DevOps teams. 28 | By the end of the workshop you will have the tools to start deploying your own data science assets into production. 29 | 30 | # Audience 31 | 32 | This workshop is for you if you: 33 | 34 | - are a data scientist or analyst who wants to put their work into production, 35 | 36 | - want to learn a more about Docker containers and virtual machines, or 37 | 38 | - want to better understand importance of networking, security, storage, and different server architectures to deploying data apps. 39 | 40 | # Instructor 41 | 42 | | | | | 43 | |---------|---------|------------------------------------------------------| 44 | | ![](rika-gorn.jpeg) | | **Rika Gorn** is a Solutions Engineer at Posit, where she helps organizations deploy, configure, and use Posit Products as well as open source tooling. Before coming to Posit, Rika worked as a Data Science Manager at a mental health tech company. | 45 | 46 | : {tbl-colwidths="\[25,5,70\]"} 47 | -------------------------------------------------------------------------------- /workshops/pkgdev-masterclass/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Package Development Masterclass" 3 | author: "Hadley Wickham" 4 | date: "2023-09-17" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: "X" 8 | day-two: " " 9 | languages: 10 | - R 11 | tags: 12 | - packages 13 | - programming 14 | --- 15 | 16 | # Description 17 | 18 | In this one-day masterclass, you'll have the opportunity to dig deep into package development. 19 | We'll cover a selection of cutting-edge topics (e.g. advanced testing tools, writing actionable error messages) that have significantly impacted the way we develop packages in the last couple of years. 20 | There will be plenty of time to apply what you learn to your own package, in an environment where you can get help and talk things through with the tidyverse team. 21 | 22 | # Audience 23 | 24 | This workshop is for you if you: 25 | 26 | - have already developed one or more packages, and are prepared to work on them during with workshop, 27 | - are familiar with the basic devtools/RStudio workflow (e.g. `load_all()`, roxygen2, testthat, and usethis), and 28 | - are familiar with Git. 29 | 30 | # Instructor 31 | 32 | | | | | 33 | |-----------------|-----------------|--------------------------------------| 34 | | ![](hadley-wickham.jpg) | | [**Hadley Wickham**](https://hadley.nz) is Chief Scientist at RStudio, winner of the 2019 COPSS award, and a member of the R Foundation. He builds tools (both computational and cognitive) to make data science easier, faster, and more fun. His work includes packages for data science (like the tidyverse, which includes ggplot2, dplyr, and tidyr)and principled software development (e.g. roxygen2, testthat, and pkgdown). He is also a writer, educator, and speaker promoting the use of R for data science. Learn more on his website, . | 35 | 36 | : {tbl-colwidths="\[25,5,70\]"} 37 | -------------------------------------------------------------------------------- /workshops/intro-ds-python/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Introduction to Data Science with Python" 3 | author: "Posit Academy Team" 4 | date: "2023-09-17" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: "X" 8 | day-two: " " 9 | languages: 10 | - Python 11 | tags: 12 | - data science 13 | - pandas 14 | --- 15 | 16 | # Description 17 | 18 | This is not a standard workshop, but a six-week online apprenticeship that culminates in one in-person day at posit::conf(2023). 19 | Here, you will learn the foundations of Python and data analysis under the guidance of a Posit Academy mentor and in the company of a close group of fellow learners. 20 | You will be expected to complete a weekly curriculum of interactive tutorials, and to attend a weekly presentation meeting with your mentor and fellow students. 21 | Topics will include importing packages and datasets, visualizing data with plotnine, wrangling data with pandas, writing and applying functions, and reporting reproducibly with quarto. 22 | Begins August 7th, 2023. 23 | No knowledge of Python required. 24 | Visit [http://posit.co/academy](https://www.google.com/url?q=http://posit.co/academy&source=gmail-imap&ust=1677017488000000&usg=AOvVaw3yY4MqPaT1vQFeyevvGpmS) to learn more about this uniquely effective learning format. 25 | 26 | # Audience 27 | 28 | This course is ideal for: 29 | 30 | - those new to Python, 31 | 32 | - anyone who has dabbled in Python, but is not sure how to use Python to do data science, or 33 | 34 | - R users who want to work more closely with Python users on their team. 35 | 36 | # Instructors 37 | 38 | | | | | 39 | |-----------------|-----------------|--------------------------------------| 40 | | ![](academy.png) | | Posit Academy is Posit's internal team of data scientists and educators. We provide a cohort-based, mentor-led, hands-on data science apprenticeship for working professionals. It is delivered on an online platform with interactive coding exercises and frequent cross-student collaboration. | 41 | 42 | : {tbl-colwidths="\[25,5,70\]"} 43 | -------------------------------------------------------------------------------- /index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | execute: 3 | echo: false 4 | page-layout: full 5 | editor_options: 6 | chunk_output_type: console 7 | --- 8 | 9 | ```{r} 10 | #| message: false 11 | 12 | library(tidyverse) 13 | library(gt) 14 | library(glue) 15 | 16 | workshops <- read_csv("workshops.csv") |> 17 | mutate( 18 | day_1 = glue("[{day_1}](/workshops/{day_1_slug}/)"), 19 | day_2 = glue("[{day_2}](/workshops/{day_2_slug}/)"), 20 | day_2 = if_else(type == "2-day", "", day_2), 21 | day_2_instructor = if_else(type == "2-day", "", day_2_instructor), 22 | day_1_link = glue("[{day_1_link}]({day_1_link})"), 23 | day_2_link = glue("[{day_2_link}]({day_2_link})"), 24 | day_2_link = if_else(type == "2-day", "", day_2_link), 25 | type = paste0("**", type, " workshops**") 26 | ) |> 27 | select(-room, -contains("slug")) 28 | ``` 29 | 30 | Choose one of the 2-day workshops or a 1-day workshop for each day. 31 | 32 | ```{r} 33 | #| results: asis 34 | 35 | workshops |> 36 | gt(groupname_col = "type", process_md = TRUE) |> 37 | fmt_url(columns = c(day_1, day_2, day_1_link, day_2_link)) |> 38 | cols_width( 39 | no ~ pct(8), 40 | day_1 ~ pct(46), 41 | day_2 ~ pct(46) 42 | ) |> 43 | cols_align( 44 | align = "left", 45 | columns = c(day_1, day_2) 46 | ) |> 47 | tab_style( 48 | style = cell_borders( 49 | sides = c("right"), 50 | style = "solid" 51 | ), 52 | locations = cells_body( 53 | columns = day_1, 54 | rows = c(5:18) 55 | ) 56 | ) |> 57 | tab_style( 58 | style = cell_borders( 59 | sides = c("right"), 60 | style = "solid" 61 | ), 62 | locations = cells_body( 63 | columns = c(no, day_2), 64 | rows = everything() 65 | ) 66 | ) |> 67 | cols_merge( 68 | columns = c(day_1, day_1_instructor, day_1_link), 69 | pattern = "{1}
  {2}
  {3}" 70 | ) |> 71 | cols_merge( 72 | columns = c(day_2, day_2_instructor, day_2_link), 73 | pattern = "{1}
  {2}
  {3}" 74 | ) |> 75 | tab_style( 76 | style = list( 77 | cell_fill(color = "lightgray") 78 | ), 79 | locations = cells_row_groups() 80 | ) |> 81 | cols_label( 82 | day_1 = "Day 1 - Sep 17", 83 | day_2 = "Day 2 - Sep 18", 84 | no = "" 85 | ) |> 86 | tab_options(quarto.disable_processing = TRUE) 87 | ``` 88 | -------------------------------------------------------------------------------- /workshops/intro-ds-r/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Introduction to Data Science with R and Tidyverse" 3 | author: "Posit Academy Team" 4 | date: "2023-09-17" 5 | length: "A-2-day" 6 | description: "2-day workshop" 7 | day-one: "X" 8 | day-two: "X" 9 | languages: 10 | - R 11 | tags: 12 | - data science 13 | - tidyverse 14 | --- 15 | 16 | # Description 17 | 18 | This is not a standard workshop, but a six-week online apprenticeship that culminates in two in-person days at posit::conf(2023). Here, you will learn the foundations of R and the Tidyverse under the guidance of a Posit Academy mentor and in the company of a close group of fellow learners. You will be expected to complete a weekly curriculum of interactive tutorials, and to attend a weekly presentation meeting with your mentor and fellow students. Topics will include the basics of R, importing data, visualizing data with ggplot2, wrangling data with dplyr and tidyr, working with strings, factors, and date-times, modelling data with base R, and reporting reproducibly with quarto. Begins August 7th, 2023. No knowledge of R required. Visit [posit.co/academy](https://www.google.com/url?q=http://posit.co/academy&source=gmail-imap&ust=1676588939000000&usg=AOvVaw21BohFX4j-xCOFPKh2MeLz) to learn more about this uniquely effective learning format. 19 | 20 | # Audience 21 | 22 | This course is ideal for: 23 | 24 | - those new to R or the Tidyverse, 25 | 26 | - anyone who has dabbled in R, but now wants a rigorous foundation in up-to-date data science best practices, or 27 | 28 | - SAS and Excel users looking to switch their workflows to R. 29 | 30 | # Instructors 31 | 32 | | | | | 33 | |----------------|----------------|----------------------------------------| 34 | | ![](academy.png) | | Posit Academy is Posit's internal team of data scientists and educators. We provide a cohort-based, mentor-led, hands-on data science apprenticeship for working professionals. It is delivered on an online platform with interactive coding exercises and frequent cross-student collaboration. | 35 | 36 | : {tbl-colwidths="\[25,5,70\]"} 37 | -------------------------------------------------------------------------------- /workshops/shiny-dashboard/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Shiny Dashboards" 3 | author: "Garrick Aden-Buie & Colin Rundel" 4 | date: "2023-09-18" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: " " 8 | day-two: "X" 9 | languages: 10 | - R 11 | tags: 12 | - dashboards 13 | - shiny 14 | - user interface 15 | --- 16 | 17 | # Description 18 | 19 | In this workshop we will explore all of the interesting and variety ways you can use shiny: from adding dynamic elements to your existing RMarkdown / Quarto documents, to building and deploying dashboards for reporting, and customizing the appearance and themeing of the app (and your outplots like plots and tables). 20 | This workshop assumes that you have a basic familiarity with Shiny (e.g. the ability to write simple apps and basics of reactivity). 21 | 22 | # Audience 23 | 24 | This course is for you if you: 25 | 26 | - have some experience with Shiny and want to improve your skills, 27 | - are interested in building dashboards for reporting, and 28 | - want to learn about styling and theming your dashboards. 29 | 30 | Users who are new to Shiny will benefit from taking [Getting Started with Shiny for R](/shiny-r/) before joining this workshop. 31 | 32 | # Instructor 33 | 34 | | | | | 35 | |------------------|------------------|-------------------------------------| 36 | | ![](colin-rundel.png) | | [**Colin Rundel**](https://rundel.github.io/) is Associate Professor of the Practice at Duke University where he has been teaching since 2012. His work focuses on teaching statistical computing to both undergraduate and graduate students in both R and Python. He has been teaching and using Shiny since 2015. | 37 | | ![](garrick-aden-buie.jpg) | | [**Garrick Aden-Buie**](https://www.garrickadenbuie.com/) is a Software Engineer for [Shiny](https://shiny.rstudio.com/) at [Posit](https://posit.co/). He builds tools in [R](https://r-project.org/), [R Markdown](https://rmarkdown.rstudio.com/), [Shiny](https://shiny.rstudio.com/) to help you do data science with R. | 38 | 39 | : {tbl-colwidths="\[25,5,70\]"} 40 | -------------------------------------------------------------------------------- /workshops/modeling-deploy/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Deploy and maintain models with vetiver" 3 | author: "Julia Silge" 4 | date: "2023-09-18" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: " " 8 | day-two: "X" 9 | languages: 10 | - R 11 | - Python 12 | tags: 13 | - modelling 14 | - deployment 15 | --- 16 | 17 | # Description 18 | 19 | Many data scientists understand what goes into training a machine learning or statistical model, but creating a strategy to deploy and maintain that model can be daunting. 20 | In this workshop, learn what MLOps (machine learning operations) is, what principles can be used to create a practical MLOps strategy, and what kinds of tasks and components are involved. 21 | We'll use vetiver, a framework for MLOps tasks in Python and R, to version, deploy, and monitor the models you have trained and want to deploy and maintain in production reliably and efficiently. 22 | 23 | # Audience 24 | 25 | We expect participants to have exposure to basic modeling and machine learning practice, but NOT expert familiarity with advanced ML or MLOps topics. 26 | 27 | This workshop is for you if you: 28 | 29 | - have intermediate R **or** Python knowledge (this will be a "choose your own adventure" workshop where you can work through the exercises in either R or Python), 30 | 31 | - can read data from CSV and other flat files, transform and reshape data, and make a wide variety of graphs, and 32 | 33 | - can fit a model to data with your modeling framework of choice. 34 | 35 | # Instructor 36 | 37 | | | | | 38 | |------------------|------------------|-------------------------------------| 39 | | ![](julia-silge.jpg) | | **Julia Silge** is a data scientist and software engineer at Posit PBC where she works on open source modeling and MLOps tools. She is an author, an international keynote speaker, and a real-world practitioner focusing on data analysis and machine learning.Julia loves text analysis, making beautiful charts, and communicating about technical topics with diverse audiences. | 40 | 41 | : {tbl-colwidths="\[25,5,70\]"} 42 | -------------------------------------------------------------------------------- /photos/originals/prep-photos.R: -------------------------------------------------------------------------------- 1 | library(magick) 2 | library(tidyverse) 3 | library(image.libfacedetection) 4 | library(fs) 5 | 6 | find_face_center <- function(image) { 7 | detections <- image.libfacedetection::image_detect_faces(image)$detections 8 | dims <- as.list(detections[1, c("x", "y", "width", "height")]) 9 | list( 10 | x = dims$x + dims$width / 2, 11 | y = dims$y + dims$height / 2 12 | ) 13 | } 14 | 15 | resize_consistent <- function(image, size = 800) { 16 | info <- image_info(image) 17 | image_resize( 18 | image, 19 | geometry_size_pixels( 20 | height = if (info$width >= info$height) size, 21 | width = if (info$height > info$width) size 22 | ) 23 | ) 24 | } 25 | 26 | clip_offset <- function(point, range, width) { 27 | # point 28 | # |--[=====*=====]-----| 29 | # ^~~ width ~~^ 30 | # ^....................^ range 31 | 32 | if ((point - width / 2) < 0) { 33 | # must start at left edge 34 | return(0) 35 | } 36 | if ((point + width / 2) > range) { 37 | # must start at right edge 38 | return(range - width) 39 | } 40 | # enough space on both sides to center width in range 41 | point - width / 2 42 | } 43 | 44 | clip_to_face <- function(image, size = 800) { 45 | info <- image_info(image) 46 | size <- min(size, info$width, info$height) 47 | 48 | image <- resize_consistent(image, size) 49 | 50 | info <- image_info(image) 51 | if (info$width == info$height && info$width == size) { 52 | return(image) 53 | } 54 | 55 | face <- find_face_center(image) 56 | 57 | offset <- if (info$width == size) { 58 | glue::glue("+0+{offset}", offset = clip_offset(face$y, info$height, size)) 59 | } else { 60 | glue::glue("+{offset}+0", offset = clip_offset(face$x, info$width, size)) 61 | } 62 | 63 | image_crop( 64 | image, 65 | geometry = glue::glue( 66 | "{size}x{size}{offset}" 67 | ) 68 | ) 69 | } 70 | 71 | process_image <- function(path, size = 500) { 72 | cli::cli_process_start("{.path {path}}") 73 | path |> 74 | image_read() |> 75 | clip_to_face(size) |> 76 | image_write(path("..", path)) 77 | } 78 | 79 | 80 | # Process Photos ---------------------------------------------------------- 81 | 82 | photos <- dir_ls(regexp = "jpe?g|png$") 83 | 84 | # These required manual cropping 85 | manual <- c( 86 | "academy.png", 87 | "colin-rundel.png" 88 | ) 89 | 90 | photos <- setdiff(photos, manual) 91 | 92 | # auto-process all the photos 93 | walk(photos, process_image) 94 | -------------------------------------------------------------------------------- /workshops/quarto-r-projects/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Advanced Quarto with R & RStudio" 3 | subtitle: "Projects, Websites, Books, and More" 4 | author: "Andrew Bray" 5 | date: "2023-09-18" 6 | length: "B-1-day" 7 | description: "1-day workshop" 8 | day-one: " " 9 | day-two: "X" 10 | languages: 11 | - R 12 | tags: 13 | - quarto 14 | --- 15 | 16 | # Description 17 | 18 | This workshop will prepare you to author a rich array of documents in Quarto, the next generation of R Markdown. 19 | Quarto is an open-source scientific and technical publishing system that offers multilingual programming language support to create dynamic and static documents, books, presentations, blogs, and other online resources. 20 | 21 | The focus for this workshop will be on projects that weave together multiple documents and allow you to write books and build websites. 22 | You will also learn various ways to deploy and publish your Quarto projects on the web. 23 | 24 | # Audience 25 | 26 | This course is for you if you: 27 | 28 | - have a basic knowledge of how to use the RStudio IDE. 29 | 30 | - have experience working with single R Markdown and/or Quarto files. 31 | 32 | - are excited to author multi-document projects like books, websites, and blogs. 33 | 34 | Participants who are new to computational documents will benefit from taking [Intro to Quarto with R and RStudio: Documents and Presentations](/quarto-r-docs) before joining this workshop. 35 | 36 | # Instructor 37 | 38 | | | | | 39 | |------------------|------------------|------------------------------------| 40 | | ![](andrew-bray.jpg) | | **Andrew Bray** is an Associate Teaching Professor in the Department of Statistics at UC Berkeley where he develops and teaches courses in statistics and data science. His research interests include statistical computing, data privacy, and applications of statistical models to solve real world problems. He was previously an Associate Professor of Statistics in the Department of Mathematics at Reed College and an NSF Five Colleges postdoctoral fellow in western Massachusetts. | 41 | 42 | : {tbl-colwidths="\[25,5,70\]"} 43 | -------------------------------------------------------------------------------- /workshops/shiny-r/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Getting Started with Shiny for R" 3 | author: "Garrick Aden-Buie & Colin Rundel" 4 | date: "2023-09-17" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: "X" 8 | day-two: " " 9 | languages: 10 | - R 11 | tags: 12 | - shiny 13 | --- 14 | 15 | # Description 16 | 17 | Shiny is an R package that makes it easy to build interactive web apps straight from R. 18 | This workshop will start at the beginning: designing and creating user interfaces, learning and mastering the reactive model that connects your R code to the interface, and deploying apps publicly and privately. 19 | We will wrap up with some intermediate-level tools: debugging and modularizing your apps and implementing dynamic user interfaces. 20 | In the end, you'll be a confident Shiny user, able to design interactive apps to achieve your purpose and produce a polished and professional implementation. 21 | 22 | # Audience 23 | 24 | This course is for you if you: 25 | 26 | - are comfortable with the basics of R, such as writing functions, indexing vectors and lists, debugging simple errors, and working with data structures like data frames, 27 | - are interested in creating interactive web applications, and 28 | - have no or minimal experience with Shiny for R. 29 | 30 | If you have a bit of experience, you'll see things in a new way. 31 | If you don't, we'll get you started on the right footing. 32 | 33 | # Instructor 34 | 35 | | | | | 36 | |------------------|------------------|-------------------------------------| 37 | | ![](colin-rundel.png) | | [**Colin Rundel**](https://rundel.github.io/) is Associate Professor of the Practice at Duke University where he has been teaching since 2012. His work focuses on teaching statistical computing to both undergraduate and graduate students in both R and Python. He has been teaching and using Shiny since 2015. | 38 | | ![](garrick-aden-buie.jpg) | | [**Garrick Aden-Buie**](https://www.garrickadenbuie.com/) is a Software Engineer for [Shiny](https://shiny.rstudio.com/) at [Posit](https://posit.co/). He builds tools in [R](https://r-project.org/), [R Markdown](https://rmarkdown.rstudio.com/), [Shiny](https://shiny.rstudio.com/) to help you do data science with R. | 39 | 40 | : {tbl-colwidths="\[25,5,70\]"} 41 | -------------------------------------------------------------------------------- /workshops/ds-workflows-python/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Data Science Workflows with Posit Tools — Python Focus" 3 | author: "Gagandeep Singh & Sam Edwardes" 4 | date: "2023-09-18" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: " " 8 | day-two: "X" 9 | languages: 10 | - Python 11 | tags: 12 | - data science 13 | - pro products 14 | --- 15 | 16 | # Description 17 | 18 | In this Python-focused workshop, we will discuss ways to improve your data science workflows! During the course, we will review packages for data validation, alerting, modeling, and more. We'll use Posit's open source and professional tools to string all the pieces together for an efficient workflow. We'll discuss environments, managing deployed content, working with databases, and interoperability across data products. 19 | 20 | # Audience 21 | 22 | This course is for you if you: 23 | 24 | - Build finished data products starting from raw data and are looking to improve your workflow 25 | - Are looking to expand your knowledge of Posit open source and professional tools 26 | - Want to improve interoperability between data products in your work or on your team 27 | - Have experience developing in Python. An analogous course with an R focus is also offered 28 | 29 | # Instructors 30 | 31 | | | | | 32 | |-----------------|-----------------|--------------------------------------| 33 | | ![](gagan-singh.jpg) | | [**Gagandeep Singh**](https://ca.linkedin.com/in/gagandeeepuw) is a former software engineer and data scientist who has worked in a variety of cross-technology teams. Before joining Posit as a Solutions Engineer, he was consulting with fortune 500 companies to build their analytical capacities. Outside of work you can find him at a local bookstore or exploring the beautiful Pacific Northwest. | 34 | | ![](sam-edwardes.jpg) | | [**Sam Edwardes**](https://ca.linkedin.com/in/samedwardes) is obsessed with data science, R, Python, and all things open source. As a Solutions Engineer at Posit, he loves getting into the nitty gritty and optimizing everything. When he is not tinkering on his computer you can find Sam and his dog Roo on adventures in beautiful British Columbia. | 35 | 36 | : {tbl-colwidths="\[25,5,70\]"} 37 | -------------------------------------------------------------------------------- /workshops/wtf/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "What They Forgot to Teach You About R" 3 | subtitle: "Project oriented workflows with Git and GitHub" 4 | author: "Shannon Pileggi & David Aja" 5 | date: "2023-09-17" 6 | length: "B-1-day" 7 | description: "1-day workshop" 8 | day-one: "X" 9 | day-two: " " 10 | languages: 11 | - R 12 | tags: 13 | - version control 14 | - projects 15 | - workflows 16 | --- 17 | 18 | # Description 19 | 20 | This 1 day What They Forgot (WTF) To Teach You About R workshop is for experienced R and RStudio users who want to (re)design their R lifestyle via project-oriented workflows and version control for data science (Git/GitHub). 21 | At the conclusion of the workshop you will have strategies for organizing data science projects and workflows, employing robust file paths, constructing human and machine readable file names, and facilitating collaboration with yourself or others via version control. 22 | 23 | # Audience 24 | 25 | This course is for you if you answer yes to these questions: 26 | 27 | - Have you been using R for a while and feel there might be better ways to organize your R life, but don't know what they are? 28 | - Do you want to put programming on pause and learn about actionable programming-adjacent workflows for streamlining analysis in R? 29 | - Are you willing to feel a bit of (git) pain to leverage the benefits of version control for collaboration and time travel? 30 | 31 | # Instructors 32 | 33 | | | | | 34 | |------------------|------------------|-------------------------------------| 35 | | ![](shannon-pileggi.jpg) | | [**Shannon Pileggi**](https://www.pipinghotdata.com/) PhD (she/her) is a Lead Data Scientist at The Prostate Cancer Clinical Trials Consortium, a frequent blogger, and a member of the R-Ladies Global leadership team. She enjoys automating data wrangling and data outputs, and making both data insights and learning new material digestible. | 36 | | ![](david-aja.jpg) | | [**David Aja**](https://edavidaja.com/) is a Solutions Engineer at Posit. Before joining Posit, he worked as a data scientist in the public sector. | 37 | 38 | : {tbl-colwidths="\[25,5,70\]"} 39 | 40 | -------------------------------------------------------------------------------- /workshops/arrow/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Big Data with Arrow in R" 3 | author: "Nic Crane & Steph Hazlitt" 4 | date: "2023-09-17" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: "X" 8 | day-two: " " 9 | languages: 10 | - R 11 | tags: 12 | - big data 13 | - data engineering 14 | --- 15 | 16 | # Description 17 | 18 | Data analysis pipelines with larger-than-memory data are becoming more and more commonplace. 19 | In this workshop you will learn how to use Apache Arrow, a multi-language toolbox for working with larger-than-memory tabular data, to create seamless "big" data analysis pipelines with R. 20 | 21 | The workshop will focus on using the the arrow R package---a mature R interface to Apache Arrow--- to process larger-than-memory files and multi-file data sets with arrow using familiar dplyr syntax. 22 | You'll learn to create and use interoperable data file formats like Parquet for efficient data storage and access, with data stored both on disk and in the cloud, and also how to exercise fine control over data types to avoid common large data pipeline problems. 23 | This workshop will provide a foundation for using Arrow, giving you access to a powerful suite of tools for performant analysis of larger-than-memory data in R. 24 | 25 | # Audience 26 | 27 | This course is for you if you: 28 | 29 | - want to learn how to work with tabular data that is too large to fit in memory using existing R and tidyverse syntax implemented in Arrow 30 | 31 | - want to learn about Parquet and other file formats that are powerful alternatives to CSV files 32 | 33 | - want to learn how to engineer your tabular data storage for more performant access and analysis with Apache Arrow 34 | 35 | # Instructors 36 | 37 | | | | | 38 | |---------|---------|------------------------------------------------------| 39 | | ![](nic-crane.png) | | **Nic Crane** is a software engineer with a background in data science, and has a lot of enthusiasm for open source and learning and teaching all things R. Nic is part of the core team who maintain the Arrow R package. | 40 | | ![](steph-hazlitt.jpg) | | **Steph Hazlitt** is a data scientist, researcher and R enthusiast. She has spent the better part of her career wrangling data with R and supporting people and teams in learning, creating and sharing data science-related products and open source software. | 41 | 42 | : {tbl-colwidths="\[25,5,70\]"} 43 | -------------------------------------------------------------------------------- /workshops/quarto-r-docs/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Introduction to Quarto with R & RStudio" 3 | subtitle: "Documents and Presentations" 4 | author: "Andrew Bray" 5 | date: "2023-09-17" 6 | length: "B-1-day" 7 | description: "1-day workshop" 8 | day-one: "X" 9 | day-two: " " 10 | languages: 11 | - R 12 | tags: 13 | - quarto 14 | --- 15 | 16 | # Description 17 | 18 | This workshop will prepare you to author a rich array of documents in Quarto, the next generation of R Markdown. 19 | Quarto is an open-source scientific and technical publishing system that offers multilingual programming language support to create dynamic and static documents, books, presentations, blogs, and other online resources. 20 | 21 | The focus for this workshop will be on single documents. 22 | You will learn to create static documents, to add interactivity to them with Shiny and htmlwidgets, or steer them in the direction of sophisticated scientific documents. 23 | In the afternoon you'll take the same authoring approaches to create slide presentations in various formats such as reveal.js, beamer, and pptx. 24 | 25 | # Audience 26 | 27 | This course is for you if you: 28 | 29 | - have a basic knowledge of how to use the RStudio IDE, 30 | 31 | - have some familiarity with markdown, or 32 | 33 | - are excited to author flexible single documents like technical reports and slide presentations. 34 | 35 | Seasoned users of R Markdown will get more out of the [Advanced Quarto with R and RStudio: Projects, Websites, Books, and More](/quarto-r-projects) workshop, which is focused on projects, a distinct strength of Quarto in authoring work that spans multiple documents. 36 | 37 | # Instructor 38 | 39 | | | | | 40 | |------------------|------------------|------------------------------------| 41 | | ![](andrew-bray.jpg) | | **Andrew Bray** is an Associate Teaching Professor in the Department of Statistics at UC Berkeley where he develops and teaches courses in statistics and data science. His research interests include statistical computing, data privacy, and applications of statistical models to solve real world problems. He was previously an Associate Professor of Statistics in the Department of Mathematics at Reed College and an NSF Five Colleges postdoctoral fellow in western Massachusetts. | 42 | 43 | : {tbl-colwidths="\[25,5,70\]"} 44 | -------------------------------------------------------------------------------- /workshops/shiny-ui/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Web Design for Shiny Developers" 3 | author: "David Granjon & Maya Gans" 4 | date: "2023-09-17" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: "X" 8 | day-two: " " 9 | languages: 10 | - R 11 | tags: 12 | - shiny 13 | - user interface 14 | --- 15 | 16 | # Description 17 | 18 | Website design and development is one of the most critical factors contributing to whether the user has a good or poor experience while browsing your site, directly influencing the overall impression of your brand. 19 | Besides, bad design decisions can significantly impact app performances. 20 | By exposing you to common governing rules of design, this course will walk you through the entire design process, from ideation to execution. 21 | These rules will help you to become a better collaborator to design teams, and enable you to create beautiful front-end experiences for Shiny. 22 | 23 | # Audience 24 | 25 | This course is for you if: 26 | 27 | - you are an R developer with basic Shiny knowledge 28 | 29 | - you want to quickly test new business ideas 30 | 31 | - you want to increase the reach of your apps and websites 32 | 33 | # Instructors 34 | 35 | | | | | 36 | |-----------------|-----------------|--------------------------------------| 37 | | ![](david-granjon.jpg) | | **David Granjon** holds a PhD in applied mathematics from Université Pierre et Marie Curie and Université de Lausanne. He is the founder and maintainer of the open source RinteRface organisation ([https://rinterface.com](https://www.google.com/url?q=https://rinterface.com&source=gmail-imap&ust=1675347738000000&usg=AOvVaw2NkucZjjrZRlnqHxASUhVq)) where he develops Shiny extensions such as {bs4Dash}, {shinyMobile} or {shinydashboardplus} and delivers novel advanced Shiny workshops in worldwide R conferences like useR or R in Pharma. David works as a full stack software developer at Novartis where he provides his expertise to help associates to design production ready shiny apps, from ideation to headless testing and automated deployment with CICD. He wrote Outstanding User Interfaces with Shiny", a CRC press book published in 2022 (bookdown version: , book: ). | 38 | | ![](maya-gans.png) | | **Maya Gans** is a Data Visualization Engineer at Atorus Research where she designs and develops custom applications using R, JavaScript, or a combination of both. As an intern at RStudio Maya designed TidyBlocks, a visual block based programming language. Maya also co-wrote JavaScript for Data Science. When Maya isn't designing or programming, she is rock climbing. | 39 | 40 | : {tbl-colwidths="\[25,5,70\]"} 41 | -------------------------------------------------------------------------------- /workshops/causal-inference/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Causal Inference with R" 3 | author: "Malcolm Barrett & Travis Gerke" 4 | date: "2023-09-17" 5 | length: "A-2-day" 6 | description: "2-day workshop" 7 | day-one: "X" 8 | day-two: "X" 9 | languages: 10 | - R 11 | tags: 12 | - statistics 13 | - modelling 14 | - inference 15 | --- 16 | 17 | # Description 18 | 19 | In this workshop, we'll teach the essential elements of answering causal questions in R through causal diagrams, and causal modeling techniques such as propensity scores and inverse probability weighting. 20 | 21 | In both data science and academic research, prediction modeling is often not enough; to answer many questions, we need to approach them causally. In this workshop, we'll teach the essential elements of answering causal questions in R through causal diagrams, and causal modeling techniques such as propensity scores and inverse probability weighting. We'll also show that by distinguishing predictive models from causal models, we can better take advantage of both tools. You'll be able to use the tools you already know\--the tidyverse, regression models, and more\--to answer the questions that are important to your work. 22 | 23 | # Audience 24 | 25 | This course is for you if you: 26 | 27 | - know how to fit a linear regression model in R, 28 | 29 | - have a basic understanding of data manipulation and visualization using tidyverse tools, and 30 | 31 | - are interested in understanding the fundamentals behind how to move from estimating correlations to causal relationships. 32 | 33 | # Instructors 34 | 35 | | | | | 36 | |----------------|----------------|----------------------------------------| 37 | | ![](malcolm-barrett.jpeg) | | **Malcolm Barrett** is a data scientist and an epidemiologist. During his Ph.D., he studied vision loss, focusing on epidemiologic methods. He's since worked in the private sector, including Teladoc Health and Apple. Malcolm is also the author of several causal inference-focused R packages, such as ggdag and tidysmd. He regularly contributes to other open source software, including favorite community projects like usethis, ggplot2, R Markdown. | 38 | | ![](travis-gerke.jpg) | | **Travis Gerke** is a post-academic leading data science teams for clinical trials. In his graduate training (AM Biostatistics and ScD Epidemiology, Harvard), Travis was fortunate to learn from key leaders in the causal inference domain, and he is thrilled to pass along relevant insights in this workshop. Like Malcolm, Travis enjoys developing R packages (shinyDAG, ggconsort, ggswimlane), and is an active member of the wonderful R community. | 39 | 40 | : {tbl-colwidths="\[25,5,70\]"} 41 | -------------------------------------------------------------------------------- /workshops/tidymodels-advanced/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Advanced tidymodels" 3 | author: "Max Kuhn" 4 | date: "2023-09-17" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: "X" 8 | day-two: " " 9 | languages: 10 | - R 11 | tags: 12 | - tidymodels 13 | - modelling 14 | --- 15 | 16 | # Description 17 | 18 | In this workshop you will learn more about model optimization using the tune and finetune packages, including racing and iterative methods. 19 | You'll be able to do more sophisticated feature engineering with recipes. 20 | Time permitting, model ensembles via stacking will be introduced. 21 | This course is focused on the analysis of tabular data and does not include deep learning methods. 22 | Participants who have completed the "Introduction to tidymodels" workshop will be well-prepared for this course. 23 | 24 | # Audience 25 | 26 | This workshop is for you if you: 27 | 28 | - have used tidymodels packages like recipes, rsample, and parsnip. 29 | - are comfortable with tidyverse syntax (e.g. piping, mutates, pivoting), and 30 | - have some experience with resampling and modeling (e.g., linear regression, random forests, etc.), but we don't expect you to be an expert in these. 31 | 32 | Participants who are new to tidymodels will benefit from taking the [Introduction to tidymodels](/tidymodels-intro/) workshop before joining this one. 33 | 34 | # Instructor 35 | 36 | | | | | 37 | |--------------------|-----|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| 38 | | ![](max-kuhn.jpeg) | | **Max Kuhn** is a software engineer at Posit. He is responsible for the tidymodels ecosystem and maintains about 30 packages, including caret. He was applying models in the pharmaceutical and diagnostic industries for over 18 years. Max has a Ph.D. in Biostatistics. He, and Kjell Johnson, wrote the book *Applied Predictive Modeling*, which won the Ziegel award from the American Statistical Association. Their second book, [*Feature Engineering and Selection*](https://bookdown.org/max/FES/), was published in 2019 and the book [*Tidy Models with R*](https://www.tmwr.org) was published in 2022. | 39 | 40 | : {tbl-colwidths="\[25,5,70\]"} 41 | -------------------------------------------------------------------------------- /workshops/shiny-python/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Getting Started with Shiny for Python" 3 | author: "Joe Cheng & Gordon Shotwell" 4 | date: "2023-09-17" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: "X" 8 | day-two: " " 9 | languages: 10 | - Python 11 | tags: 12 | - shiny 13 | --- 14 | 15 | # Description 16 | 17 | Shiny for Python is a new framework for building performant, beautiful web applications in Python. 18 | In this one-day workshop, you will learn the basic building blocks of a Shiny application which will let you create both quick, simple applications and elaborate mission-critical ones. 19 | 20 | In particular this workshop will cover: 21 | 22 | - The basics of building a Shiny for Python app 23 | - When to use reactive calculations and reactive effects 24 | - How modules can help you develop reusable components 25 | - Theming and deploying your application 26 | 27 | At the end of this course you will be able to: 28 | 29 | - Build a Shiny app in Python 30 | - Articulate how Shiny differs from other frameworks 31 | - Utilize best practices to make sure your app is robust and scalable 32 | 33 | ## FAQ 34 | 35 | 1. What if I'm a complete beginner? 36 | 37 | You should have a basic understanding of Python and be able to install packages with pip, do basic data manipulation, and draw plots. 38 | 39 | 2. What if I've never built a Shiny app before? 40 | 41 | This workshops doesn't require any Shiny or web application experience. 42 | We will start from scratch to build simple applications before moving on to more complex ones. 43 | 44 | 3. Why should I learn Shiny if I already know Streamlit or Dash? 45 | 46 | We believe that Shiny is the best framework for building data applications in Python. 47 | It's reactive execution model means that you can build performant applications without explicitly caching data or managing application state. 48 | See this [blog post](https://posit.co/blog/why-shiny-for-python/) for more on why we think that Shiny is worth learning. 49 | 50 | 4. I'm an expert with Shiny for R, is this workshop for me? 51 | 52 | The R and Python Shiny packages are quite similar, so some of the content in this workshop may be familiar to you. 53 | That said it's a great opportunity to fill in missing pieces and ask question about Python best practices. 54 | Check out our [quickstart guide](https://shiny.rstudio.com/py/docs/r-quickstart.html) for R users and [this tutorial](https://www.youtube.com/watch?v=pXidQWYY14w) if you want to quickly get up to speed with Shiny for Python. 55 | 56 | # Audience 57 | 58 | This course is for you if you are: 59 | 60 | - An R programmer interested in building Shiny apps in Python 61 | - A Python programmer interested in quickly building efficient web applications 62 | - An educator interested in integration Shiny apps into your python course 63 | 64 | # Instructors 65 | 66 | | | | | 67 | |------------------|------------------|-----------------------------------| 68 | | ![](joe-cheng.jpg) | | **Joe Cheng** is the CTO of Posit and creator of Shiny. | 69 | | ![](gordon-shotwell.jpeg) | | **Gordon Shotwell** is a Software Engineer on the Shiny team. | 70 | 71 | : {tbl-colwidths="\[25,5,70\]"} 72 | -------------------------------------------------------------------------------- /workshops/ml-python/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Machine Learning and Deep Learning with Python" 3 | author: "Sebastian Raschka" 4 | date: "2023-09-18" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: " " 8 | day-two: "X" 9 | languages: 10 | - Python 11 | tags: 12 | - machine learning 13 | - deep learning 14 | - scikit-learn 15 | - pytorch 16 | --- 17 | 18 | # Description 19 | 20 | In this workshop, you will learn the machine and deep learning fundamentals using a modern open-source stack. 21 | We'll start with a brief introduction to Python's scientific computing libraries, including NumPy, Pandas, and Matplotlib, which provide the foundation for data analysis and visualization. 22 | From there, we will dive into the scikit-learn API, a user-friendly, open-source library for machine learning in Python. 23 | You will learn how to use it to create machine learning classifiers and apply tree-based models like random forests, gradient boosting, and XGBoost. 24 | 25 | In the second part of this workshop, we will also cover deep learning concepts and introduce PyTorch, the most widely used deep learning research library. 26 | You will also learn about training multi-layer neural networks efficiently using multi-GPU and mixed-precision techniques. 27 | Finally, we will explore how to use a pretrained large language transformer with scikit-learn and fine-tune it on a custom downstream task using PyTorch. 28 | 29 | By the end of this workshop, you will have a good understanding of the fundamental principles of machine learning and be able to construct advanced classification pipelines for tabular data using scikit-learn. 30 | Additionally, you will gain experience in image classification and natural language processing techniques using PyTorch and be able to implement them in your own predictive modeling projects effectively. 31 | 32 | # Audience 33 | 34 | This workshop is for you if you: 35 | 36 | - are a researcher, programmer, or engineer who wants to apply machine learning and deep learning, 37 | - are a scientific computing practitioner who is interested in predictive modeling, or 38 | - are a problem solver who want to learn about Python-tools for tabular, image, and text data. 39 | 40 | # Instructor 41 | 42 | | | | | 43 | |-----------------|-----------------|--------------------------------------| 44 | | ![](sebastian-raschka.jpeg) | | **Sebastian Raschka** is a machine learning and AI researcher with a strong passion for education. As Lead AI Educator at Lightning AI, he is excited about making AI and deep learning more accessible and teaching people how to utilize these technologies at scale. Before dedicating his time fully to Lightning AI, Sebastian held a position as Assistant Professor of Statistics at the University of Wisconsin-Madison, where he specialized in deep learning and machine learning research. Moreover, Sebastian loves open-source software and has been a passionate contributor for over a decade. Next to coding, he also loves writing and authored the bestselling "Python Machine Learning" book and "Machine Learning with PyTorch and Scikit-learn". If you want to learn more about Sebastian and what he is currently up to, please visit his website at . | 45 | 46 | : {tbl-colwidths="\[25,5,70\]"} 47 | -------------------------------------------------------------------------------- /workshops/ds-workflows-r/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Data Science Workflows with Posit Tools — R Focus" 3 | author: "Ryan Johnson & Katie Masiello" 4 | date: "2023-09-17" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: "X" 8 | day-two: " " 9 | languages: 10 | - R 11 | tags: 12 | - data science 13 | - pro products 14 | --- 15 | 16 | # Description 17 | 18 | In this R-focused workshop, we will discuss ways to improve your data science workflows! During the course, we will review packages for data validation, alerting, modeling, and more. We'll use Posit's open source and professional tools to string all the pieces together for an efficient workflow. We'll discuss environments, managing deployed content, working with databases, and interoperability across data products. 19 | 20 | # Audience 21 | 22 | This course is for you if you: 23 | 24 | - Build finished data products starting from raw data and are looking to improve your workflow 25 | - Are looking to expand your knowledge of Posit open source and professional tools 26 | - Want to improve interoperability between data products in your work or on your team 27 | - Have experience developing in R. An analogous course with a Python focus is also offered 28 | 29 | # Instructors 30 | 31 | | | | | 32 | |----------------|----------------|----------------------------------------| 33 | | ![](ryan-johnson.jpg) | | [**Ryan Johnson**](https://www.linkedin.com/in/ryjohnson09/) is a Data Science Advisor at Posit with a background in Microbiology and Bioinformatics. He obtained his PhD from the Uniformed Services University in Maryland and did his postdoctoral training at the National Human Genome Research Institute, NIH. The only thing that rivals his love for infectious diseases is generating 'super cool' visualizations from large data sets using R and RStudio. In his free time, you can find Ryan running marathons/ultramarathons in the DC area or hiking miles along the Appalachian Trail. Ryan resides in Gaithersburg with his wife and two feline co-workers. | 34 | | ![](katie-masiello.jpg) | | [**Katie Masiello**](https://www.linkedin.com/in/katiemasiello) is a Solutions Engineer at Posit. A mechanical engineer by training, she found her calling in data science while working statistical analysis in the aerospace industry. A good cup of coffee, reproducibility, and making life easier for the next user are three things she loves most. Katie is an avid knitter and knitr, and she can often be found trying to tame her ridiculously overgrown garden, collecting pebbles, or thinking about taking up running as a hobby. | 35 | 36 | : {tbl-colwidths="\[25,5,70\]"} 37 | -------------------------------------------------------------------------------- /workshops/dataviz-storytelling/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Designing Data Visualizations to Successfully Tell a Story" 3 | author: "Cédric Scherer" 4 | date: "2023-09-17" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: "X" 8 | day-two: " " 9 | languages: 10 | - " " 11 | tags: 12 | - visualization 13 | --- 14 | 15 | # Description 16 | 17 | Communicating data through meaningful and easily accessible visualization is a critical competence for most data-related roles including data scientists, analysts, scientific researchers, and managers. A well-designed graphic is able to inform, spark engagement, explain patterns, and drive decisions and actions. At the same time, poor choices in the design process can complicate interpretation or even, intentionally or unintentionally, mislead the audience. 18 | 19 | The aim of this course is to demystify the creative processes of data visualization design to turn data into a meaningful story. Participants will learn helpful tips and tricks to create appealing and informative data visualizations that are not "just showing the numbers" but successfully tell a story. We will cover principles of good data visualization design, explore different options to display data, and discuss ways to guide and engage viewers with the aim to create impactful graphics. The course also features sessions on picking suitable yet beautiful colors, what to consider when choosing and pairing typefaces, and the layout of graphics, also in the context of dashboard building. 20 | 21 | # Audience 22 | 23 | This course is for you if you: 24 | 25 | - want to understand and learn the art of communicating data with impactful visualizations, 26 | 27 | - aim to improve your data visualization design to create effective and informative graphics, and 28 | 29 | - are willing to spend a bit more time to choose the right chart, proper color palettes, and suitable fonts along with additional elements to guide the viewer. 30 | 31 | # Instructor 32 | 33 | | | | | 34 | |--------------|--------------|--------------------------------------------| 35 | | ![](cedric-scherer.jpg) | | [**Cédric Scherer**](https://cedricscherer.com) is a data visualization designer, consultant, and instructor helping clients and workshop participants to create engaging and effective graphics. As a graduated ecologist, he has acquired an extensive hypothesis--driven research experience and problem--solving expertise in data wrangling, statistical analysis, and model development. As an independent data visualization designer, Cédric later combined his expertise in analyzing large data sets with his passion for design, colors and typefaces. Cédric has designed graphics across all disciplines, purposes, and styles applying a code--first approach and regularly talks about data visualization design and ggplot2 techniques. Due to regular participation in social data challenges such as [#TidyTuesday](https://github.com/rfordatascience/tidytuesday), he is now well known for complex and visually appealing figures, entirely made with ggplot2, that look as if they have been created with a vector design tool. | 36 | 37 | : {tbl-colwidths="[25,5,70]"} 38 | -------------------------------------------------------------------------------- /workshops/forecasting/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Tidy time series and forecasting in R" 3 | author: "Rob Hyndman" 4 | date: "2023-09-17" 5 | length: "A-2-day" 6 | description: "2-day workshop" 7 | day-one: "X" 8 | day-two: "X" 9 | languages: 10 | - R 11 | tags: 12 | - time series 13 | - forecasting 14 | - modelling 15 | --- 16 | 17 | # Description 18 | 19 | It is common for organizations to collect huge amounts of data over time, and existing time series analysis tools are not always suitable to handle the scale, frequency and structure of the data collected. In this workshop, we will look at some packages and methods that have been developed to handle the analysis of large collections of time series. 20 | 21 | On day 1, we will look at the tsibble data structure for flexibly managing collections of related time series. We will look at how to do data wrangling, data visualizations and exploratory data analysis. We will explore feature-based methods to explore time series data in high dimensions. A similar feature-based approach can be used to identify anomalous time series within a collection of time series, or to cluster or classify time series. Primary packages for day 1 will be tsibble, lubridate and feasts (along with the tidyverse of course). 22 | 23 | Day 2 will be about forecasting. We will look at some classical time series models and how they are automated in the fable package, and we will explore the creation of ensemble forecasts and hybrid forecasts. Best practices for evaluating forecast accuracy will also be covered. Finally, we will look at forecast reconciliation, allowing millions of time series to be forecast in a relatively short time while accounting for constraints on how the series are related. 24 | 25 | # Audience 26 | 27 | This course is for you if you: 28 | 29 | - already use the tidyverse packages in R such as dplyr, tidyr, tibble and ggplot2, 30 | - need to analyze large collections of related time series, and 31 | - would like to learn how to use some tidy tools for time series analysis including visualization, decomposition and forecasting. 32 | 33 | # Instructor 34 | 35 | | | | | 36 | |--------------|--------------|--------------------------------------------| 37 | | ![](rob-hyndman.jpeg) | | [**Rob J Hyndman**](https://robjhyndman.com) is Professor of Statistics in the Department of Econometrics and Business Statistics at Monash University. From 2005 to 2018 he was Editor-in-Chief of the International Journal of Forecasting and a Director of the International Institute of Forecasters. Rob is the author of over 200 research papers and 5 books in statistical science. He is an elected Fellow of both the Australian Academy of Science and the Academy of Social Sciences in Australia. In 2007, he received the Moran medal from the Australian Academy of Science for his contributions to statistical research, especially in the area of statistical forecasting. In 2021, he received the Pitman medal from the Statistical Society of Australia. For over 30 years, Rob has maintained an active consulting practice, assisting hundreds of companies and organizations around the world. He has won awards for his research, teaching, consulting and graduate supervision. | 38 | 39 | : {tbl-colwidths="[25,5,70]"} 40 | -------------------------------------------------------------------------------- /workshops/tidymodels-intro/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Introduction to tidymodels" 3 | author: "Hannah Frick & Simon Couch & Emil Hvitfeldt" 4 | date: "2023-09-17" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: "X" 8 | day-two: " " 9 | languages: 10 | - R 11 | tags: 12 | - tidymodels 13 | - modelling 14 | --- 15 | 16 | # Description 17 | 18 | This workshop will teach you core tidymodels packages and their uses: data splitting/resampling with rsample, model fitting with parsnip, measuring model performance with yardstick, and basic pre-processing with recipes. 19 | Time permitting, you'll be introduced to model optimization using the tune package. 20 | You'll learn tidymodels syntax as well as the process of predictive modeling for tabular data. 21 | 22 | # Audience 23 | 24 | This workshop is for you if you: 25 | 26 | - are comfortable using tidyverse packages to read data into R, transform and reshape data, and make a variety of graphs, and 27 | - have had some exposure to basic statistical concepts such as linear models, residuals, etc. 28 | 29 | Intermediate or expert familiarity with modeling or machine learning is not required. Interested students who have intermediate or expert familiarity with modeling or machine learning may be interested in the [Advanced tidymodels](/tidymodels-advanced/) workshop. 30 | 31 | # Instructors 32 | 33 | | | | | 34 | |-------------------------|-----|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| 35 | | ![](hannah-frick.jpeg) | | [**Hannah Frick**](https://www.frick.ws/) is a software engineer and statistician on the tidymodels team at Posit. She holds a PhD in statistics and has worked in data science consultancy as well as interdisciplinary research at University College London in cooperation with Team GB Hockey. | 36 | | ![](simon-couch.jpg) | | [**Simon Couch**](https://www.simonpcouch.com/) works on software for statistical modeling on the tidymodels team at Posit. With a background in statistics and sociology, Simon is passionate about free and open source software and data pedagogy. He is an author and maintainer of several R packages, including the stacks package, which was awarded the 2021 John M. Chambers Statistical Software Award. | 37 | | ![](emil-hvitfeldt.png) | | [**Emil Hvitfeldt**](https://www.emilhvitfeldt.com/) is a software engineer at Posit and part of the tidymodels team's effort to improve R's modeling capabilities. He maintains several packages within the realms of modeling, text analysis, and color palettes. He co-authored the book *Supervised Machine Learning for Text Analysis in R* with Julia Silge. | 38 | 39 | : {tbl-colwidths="\[25,5,70\]"} 40 | -------------------------------------------------------------------------------- /workshops/programming-r/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "From R User to R Programmer" 3 | author: "Emma Rand & Ian Lyttle" 4 | date: "2023-09-18" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: " " 8 | day-two: "X" 9 | languages: 10 | - R 11 | tags: 12 | - tidyverse 13 | - programming 14 | --- 15 | 16 | # Description 17 | 18 | This is a one-day, hands-on workshop for those who have embraced the tidyverse and want to improve their R programming skills and, especially, reduce the amount of duplication in their code. 19 | The two main ways to reduce duplication are creating functions and using iteration. 20 | We will use a tidyverse approach to cover function design and iteration with purrr. 21 | 22 | In this workshop you will master the art of writing functions that do one thing well, adhere to existing conventions and can be fluently combined together to solve more complex problems. 23 | You will also learn how to perform the same action on many objects using code which is succinct and easy to read. 24 | 25 | # Audience 26 | 27 | This course is for you if you: 28 | 29 | - have experience equivalent to an introductory data science course using tidyverse 30 | - feel comfortable with the [Whole game](https://r4ds.hadley.nz/whole-game.html) part of [R for Data Science](https://r4ds.hadley.nz/) 31 | 32 | # Instructors 33 | 34 | | | | | 35 | |----------------------|-----|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| 36 | | ![](emma-rand.jpg) | | **Emma Rand** is a Senior Lecturer in the Department of Biology at the University of York where she specializes in teaching data science and reproducibility, particularly to those who do not see themselves as programmers. She leads a UKRI funded project called Cloud-SPAN which trains researchers in cloud-based high performance computing for 'omics. She is a Software Sustainability Institute Fellow, a Teaching team lead for R Forwards and delivers data science training for the Royal Society of Biology and the Biochemical Society. | 37 | | ![](ian-lyttle.jpeg) | | **Ian Lyttle** is a Data Scientist at Schneider Electric. His technical interests include visualization, interactivity, and functional programming. He is a community contributor to tidyverse and r-lib, and maintains CRAN packages including vegawidget and boxr. He has delivered tutorials on a variety of R topics at UseR!, Uncoast Unconf, and the Iowa State University Graphics Group. | 38 | 39 | : {tbl-colwidths="\[25,5,70\]"} 40 | -------------------------------------------------------------------------------- /workshops/gen-art/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Steal like an Rtist: Creative Coding in R" 3 | author: "Ijeamaka Anyene Fumagalli & Sharla Gelfand" 4 | date: "2023-09-18" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: " " 8 | day-two: "X" 9 | languages: 10 | - R 11 | tags: 12 | - visualization 13 | - programming 14 | - art 15 | --- 16 | 17 | # Description 18 | 19 | R is a tool for data analysis, but also can be used for self expression. This workshop will be an introduction to creative coding in R in order to make visual art. We will take an inspiration-first approach, using compelling pieces to discuss and learn the techniques that shape the work. This workshop takes guidance from its namesake, the book "Steal Like An Artist" by Austin Kleon - once we have identified and learned to recreate existing works, we will cover how to take this inspiration and transform, remix, or reinterpret it in the pursuit of developing our own work and artistic styles. \ 20 | \ 21 | This workshop is hands on and will cover colour theory and manipulation, a reintroduction of the data frame as the foundation for creating art (instead of just for analyzing data!), using ggplot2 as an artistic canvas, creating basic and specialized shapes, tiling and pattern making, developing your own functions and using iteration. We will also discuss how to use controlled randomness to convert a standalone piece into a generative art system that can produce many distinct outputs. Creative coding may seem a world apart from data analysis, but we see a large overlap and intersection of the skills used in both, not to mention the creative muscles that are already used in data visualization. 22 | 23 | # Audience 24 | 25 | This workshop is for you if you: 26 | 27 | - are comfortable with R and RStudio, experience with tidyverse and ggplot2, 28 | 29 | - are interested in applying data visualization skills more creatively, but may not know where to start or how to develop style/inspiration, and 30 | 31 | - are an artist interested in exploring code as another medium for creating their work, 32 | 33 | # Instructors 34 | 35 | | | | | 36 | |----------------|----------------|----------------------------------------| 37 | | ![](ijeamaka-anyene-fumagalli.jpeg) | | **Ijeamaka Anyene Fumagalli** is a full-time senior data analyst in the healthcare space and a free time computational artist. Using code, mainly the R programming language, she creates data art and generative art systems. She loves all things grid based, minimal, and geometric which naturally led to her love for textile arts as well. | 38 | | ![](sharla-gelfand.jpg) | | **Sharla Gelfand** is a freelance statistician, software developer, and artist with interests in web development, generative art, and textile arts. Their work explores the play between art created by a computer and by hand, creating generative art that looks like it could have been made by hand (like a textile, drawing, or painting), and making physical art based on data or outputs of a generative system, exploring the strengths and limitations of each. | 39 | 40 | : {tbl-colwidths="\[25,5,70\]"} 41 | -------------------------------------------------------------------------------- /workshops/manage-os/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "It's not just code: managing an open source project" 3 | author: "Tracy Teal" 4 | date: "2023-09-17" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: "X" 8 | day-two: " " 9 | languages: 10 | - " " 11 | tags: 12 | - open-source 13 | --- 14 | 15 | # Description 16 | 17 | An open source project starts with ideas and code, but it continues with people. 18 | We know that most open source projects rely on just one or two people for most of the work. 19 | And code is just a small part of these roles, which also include project management, conflict resolution, decision making in uncertain situations, building an inclusive community, and lots and lots of communication. 20 | Whether you're just starting a project, interested in getting involved in open source, or already have a community of thousands, there are some tips, tricks and templates that you can use to make maintaining an open source project more manageable. 21 | 22 | In this interactive 1-day workshop you'll learn some key practices for effect open source project management. 23 | You'll walk away with new approaches for making project decisions, better strategies to manage user and contributor interactions, and better ways to set boundaries. 24 | Different projects make different decisions based on their needs and in this workshop you'll see what types of decisions are possible, and how you can make the ones appropriate for you. 25 | During the workshop, you'll create useful documents for your repository and begin to outline some processes you can finalize later or with your team. 26 | 27 | # Audience 28 | 29 | This workshop is for you if you: 30 | 31 | - are involved in maintaining an open source project and struggling to feel like it's sustainable, or are looking for practice or guidance, 32 | - are starting out or interested in being involved in maintaining an open source project, and want to learn how to set up the project for the most effective engagement from contributors and users, or 33 | - are interested in learning more about the people side of open source project maintenance and connecting with other maintainers. 34 | 35 | # Instructor 36 | 37 | | | | | 38 | |----------------|----------------|----------------------------------------| 39 | | ![](tracy-teal.png) | | **Tracy Teal** is the Open Source Program Director at Posit. Previously, she was a co-founder of Data Carpentry and the Executive Director of The Carpentries. She developed open source bioinformatics software as an assistant professor at Michigan State University and holds a PhD in computation and neural systems from California Institute of Technology. Tracy is involved in the open source software and reproducible research communities, including serving on advisory committees for NumFOCUS, pyOpenSci, EarthLab and carbonplan, and has been working with open source communities, developing curriculum, and teaching people how to work with data and code as a developer, instructor and project leader throughout her career. | 40 | 41 | : {tbl-colwidths="\[25,5,70\]"} 42 | -------------------------------------------------------------------------------- /workshops/pkgdev/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Fundamentals of Package Development" 3 | author: "Andy Teucher" 4 | date: "2023-09-17" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: "X" 8 | day-two: " " 9 | languages: 10 | - R 11 | tags: 12 | - packages 13 | - programming 14 | --- 15 | 16 | # Description 17 | 18 | We are often faced with the need to share our code with others, or find ourselves writing similar code over and over again across different projects. 19 | In R, the fundamental unit of reusable code is a package, containing helpful functions, documentation, and sometimes sample data. 20 | This workshop will teach you the fundamentals of package development in R, using tools and principles developed and used extensively by the tidyverse team - specifically the 'devtools' family of packages including usethis, testthat, and roxygen2. 21 | These packages and workflows help you focus on the contents of your package rather than the minutiae of package structure.  22 | 23 | You will learn the structure of a package, how to organize your code, and workflows to help you develop your package iteratively. 24 | You will learn how to write good documentation so that users can learn how to use your package, and how to use automated testing to ensure it is functioning the way you expect it to, now and into the future. 25 | You will also learn how to check your package for common problems, and how to distribute your package for others to use. 26 | 27 | This will be an interactive 1-day workshop, and we will be using the RStudio IDE to work through the materials, as it has been designed to work well with the development practices we will be featuring. 28 | 29 | # Audience 30 | 31 | This workshop is for you if: 32 | 33 | - You have written several R scripts and find yourself wondering how to reuse or share the code you've written; 34 | - You know how to write functions in R 35 | - You are looking for a way to take the next step in your R programming journey 36 | 37 | We will be demonstrating some workflows using Git and GitHub. 38 | Knowledge of these tools is not required, and you will absolutely be able to complete the workshop without them, but some of the lessons will be more rewarding to you if you are prepared to try them out. 39 | If you are looking to get started with Git and GitHub, we recommend you register for the ["What they forgot to teach you about R"](https://posit-conf-2023.github.io/workshops/workshops/wtf/) workshop on Day 1, and join us for this workshop on Day 2. 40 | 41 | # Instructor 42 | 43 | | | | | 44 | |------------------|------------------|-------------------------------------| 45 | | ![](andy-teucher.png) | | **Andy Teucher**'s background is in conservation biology, with an MSc in Ecology from the University of Calgary. He has spent much of his career as a data scientist in government, where he made it his mission to promote and teach open, reproducible data science practices. He has written R packages for internal use in his teams as well as for a broader audience, with several hosted on CRAN. Andy especially enjoys developing packages to make it easier to work with spatial data in R. He has a passion for teaching others to learn how to use data science tools to make their work more efficient and reproducible. Andy is a certified Software Carpentry and Data Carpentry instructor, and has led many workshops teaching programming skills to scientists and data professionals. | 46 | 47 | : {tbl-colwidths="\[25,5,70\]"} 48 | -------------------------------------------------------------------------------- /workshops/quarto-python/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Enhancing Communication & Collaboration with Jupyter Notebooks & Quarto" 3 | author: "Hamel Husain" 4 | date: "2023-09-18" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: " " 8 | day-two: "X" 9 | languages: 10 | - Python 11 | tags: 12 | - quarto 13 | - notebooks 14 | - python 15 | --- 16 | 17 | # Description 18 | 19 | Sharing knowledge through writing is a critical aspect of scientific activity, including data science. 20 | It allows researchers to communicate their findings and insights to a wider audience, build upon existing work, and collaborate with others in their field. 21 | However, until recently, there have been limited options for publishing long-form writing and expository analyses authored in Jupyter Notebooks, a popular medium for data scientists. 22 | 23 | Enter Quarto - an innovative, open-source scientific and technical publishing system compatible with Jupyter Notebooks and other popular mediums. 24 | Quarto provides data scientists with a seamless way to publish their work in a high-quality format that is easily accessible and shareable. 25 | With Quarto, researchers can turn their Jupyter Notebooks into professional-looking publications in a variety of formats, including web pages, books, and slides. 26 | 27 | In this workshop, we will demonstrate how Quarto enables data scientists to turn their work products into professional, high-quality publications, websites, blog posts, and other shareable artifacts. 28 | As a bonus, we will also discuss how you can create and document Python packages using Jupyter notebooks and Quarto with the help of [nbdev](https://nbdev.fast.ai/). 29 | 30 | The learning outcomes for the workshop include: 31 | 32 | - examine case studies where sharing scientific knowledge has greatly improved the efficacy of data science teams. 33 | 34 | - author documents in plain text markdown or Jupyter notebooks with equations, citations, crossrefs, figure panels, callouts, and advanced layouts. 35 | 36 | - learn how to author content in IPython/Jupyter and the Quarto VS Code extension. 37 | 38 | - leverage Quarto for creating different types of publications, including personal blogs, knowledge management for teams, notes, books, websites, and presentation slides. 39 | 40 | - extend Quarto with notebook filters and extensions. 41 | 42 | - host websites and publications on platforms like GitHub Pages, QuartoPub, and Netlify. 43 | 44 | - test notebooks and documentation with Quarto's execution options. 45 | 46 | - create and document Python packages with [nbdev](https://nbdev.fast.ai/) and Quarto. 47 | 48 | # Audience 49 | 50 | This workshop is for you if you: 51 | 52 | - have some experience with Python and Jupyter and want to learn how Quarto can support and enhance your workflows, 53 | - want to learn about turning your notebooks to websites and publications and 54 | - want to learn how to write python packages with Jupyter notebooks and Quarto with the help of [nbdev](https://nbdev.fast.ai/). 55 | 56 | The workshop will assume some prior experience with Python and Jupyter Notebooks. 57 | 58 | # Instructors 59 | 60 | | | | | 61 | |--------------------|--------------|-------------------------------------| 62 | | ![](hamel-husain.jpg) | | [**Hamel Husain**](https://hamel.dev). Hamel is an entreprenuer-in-residence at [fast.ai](https://github.com/fastai), where he is building new software development tools like [nbdev](https://github.com/fastai/nbdev) that leverages Quarto. Prior to fast.ai, Hamel was a machine learning engineer at companies like Airbnb, GitHub, and DataRobot, and other related roles in management consulting. You can find more about Hamel on his [personal site](https://hamel.dev/). | 63 | 64 | : {tbl-colwidths="\[25,5,70\]"} 65 | -------------------------------------------------------------------------------- /workshops.csv: -------------------------------------------------------------------------------- 1 | room,no,type,day_1,day_1_slug,day_1_instructor,day_1_link,day_2,day_2_slug,day_2_instructor,day_2_link 2 | Michigan 2,1,2-day,DevOps for Data Scientists,devops,Rika Gorn,https://github.com/posit-conf-2023/devops,,,, 3 | Grand Hall GH,2,2-day,Causal Inference with R,causal-inference,Malcolm Barrett & Travis Gerke,https://r-causal.github.io/causal_workshop_website,,,, 4 | Randolph 1 AB,3,2-day,Introduction to Data Science with R,intro-ds-r,Posit Academy,https://intro-tidyverse-2023.netlify.app,,,, 5 | Grand Hall I,4,2-day,Tidy Time Series and Forecasting in R,forecasting,Rob Hyndman,https://posit-conf-2023.github.io/forecasting,,,, 6 | Grand Ballroom A,1,1-day,Advanced tidymodels,tidymodels-advanced,Max Kuhn,https://workshops.tidymodels.org,Advanced tidymodels,tidymodels-advanced,Max Kuhn,https://workshops.tidymodels.org 7 | Grand Ballroom B,2,1-day,Introduction to tidymodels,tidymodels-intro,Hannah Frick & Simon Couch & Emil Hvitfeldt,https://workshops.tidymodels.org,Deploy and Maintain Models with vetiver,modeling-deploy,Julia Silge,https://posit-conf-2023.github.io/vetiver 8 | Grand Hall L,3,1-day,Getting Started with Shiny for Python,shiny-python,Joe Cheng & Gordon Shotwell,https://posit-dev.github.io/shiny-python-workshop-2023,Enhancing Communication & Collaboration with Jupyter Notebooks & Quarto,quarto-python,Hamel Husain,https://hamelsmu.github.io/posit-python-quarto 9 | Michigan 1 ABC,4,1-day,Getting Started with Shiny for R,shiny-r,Garrick Aden-Buie & Colin Rundel,https://posit-conf-2023.github.io/shiny-r-intro,Shiny Dashboards,shiny-dashboard,Garrick Aden-Buie & Colin Rundel,https://posit-conf-2023.github.io/shiny-r-dashboard 10 | Grand Ballroom E,5,1-day,Web Design for Shiny Developers,shiny-ui,Maya Gans & David Granjon,https://webdesign4shiny.rinterface.com,Shiny in Production: Tools and Techniques,shiny-production,Eric Nantz & Mike Thomas,https://posit-conf-2023.github.io/shiny-r-prod 11 | Grand Ballroom F,6,1-day,Introduction to Quarto with R & RStudio,quarto-r-docs,Andrew Bray,https://posit-conf-2023.github.io/quarto-r,Advanced Quarto with R & RStudio,quarto-r-projects,Andrew Bray,https://posit-conf-2023.github.io/quarto-r 12 | Grand Hall MN,7,1-day,Introduction to Data Science with Python,intro-ds-python,Posit Academy,https://github.com/chendaniely/positconf2023-academy_python,Machine Learning and Deep Learning with Python,ml-python,Sebastian Raschka,https://github.com/posit-conf-2023/python-modeling 13 | Roosevelt 1 AB,8,1-day,Package Development Masterclass,pkgdev-masterclass,Hadley Wickham,https://github.com/posit-conf-2023/pkg-dev-masterclass,Package Development Masterclass,pkgdev-masterclass,Hadley Wickham,https://github.com/posit-conf-2023/pkg-dev-masterclass 14 | Roosevelt 3 AB,9,1-day,Fundamentals of Package Development,pkgdev,Andy Teucher,https://posit-conf-2023.github.io/pkg-dev,Fundamentals of Package Development,pkgdev,Andy Teucher,https://posit-conf-2023.github.io/pkg-dev 15 | Grand Hall J,10,1-day,What They Forgot to Teach You About R,wtf,Shannion Pileggi & David Aja,https://pos.it/wtf,From R User to R Programmer,programming-r,Emma Rand & Ian Lyttle,https://posit-conf-2023.github.io/programming-r 16 | Michigan 3,11,1-day,Big Data with Arrow,arrow,Nic Crane & Steph Hazlitt,https://posit-conf-2023.github.io/arrow,Teaching Data Science Masterclass,teach-ds,Mine Cetinkaya-Rundel,https://posit-conf-2023.github.io/teach-ds-masterclass 17 | Grand Hall K,12,1-day,Designing Data Visualizations to Successfully Tell a Story,dataviz-storytelling,Cedric Scherer,https://posit-conf-2023.github.io/dataviz-storytelling,Engaging and Beautiful Data Visualizations with ggplot2,dataviz-ggplot2,Cedric Scherer,https://posit-conf-2023.github.io/dataviz-ggplot2 18 | Randolph 3,13,1-day,It's Not Just Code: Managing an Open Source Project,managing-os-project,Tracy Teal,https://posit-conf-2023.github.io/managing-os-project,Steal Like an Rtist: Creative Coding in R,gen-art,Ijeamaka Anyene & Sharla Gelfand,https://github.com/posit-conf-2023/creative-coding 19 | Randolph 2,14,1-day,Data Science Workflows with Posit Tools - R Focus,ds-workflows-r,Ryan Johnson & Katie Masiello,https://katie.quarto.pub/ds-workflows-r,Data Science Workflows with Posit Tools - Python Focus,ds-workflows-python,Gagandeep Singh & Sam Edwardes,https://posit-conf-2023.github.io/ds-workflows-python -------------------------------------------------------------------------------- /docs/site_libs/quarto-html/quarto-syntax-highlighting.css: -------------------------------------------------------------------------------- 1 | /* quarto syntax highlight colors */ 2 | :root { 3 | --quarto-hl-ot-color: #003B4F; 4 | --quarto-hl-at-color: #657422; 5 | --quarto-hl-ss-color: #20794D; 6 | --quarto-hl-an-color: #5E5E5E; 7 | --quarto-hl-fu-color: #4758AB; 8 | --quarto-hl-st-color: #20794D; 9 | --quarto-hl-cf-color: #003B4F; 10 | --quarto-hl-op-color: #5E5E5E; 11 | --quarto-hl-er-color: #AD0000; 12 | --quarto-hl-bn-color: #AD0000; 13 | --quarto-hl-al-color: #AD0000; 14 | --quarto-hl-va-color: #111111; 15 | --quarto-hl-bu-color: inherit; 16 | --quarto-hl-ex-color: inherit; 17 | --quarto-hl-pp-color: #AD0000; 18 | --quarto-hl-in-color: #5E5E5E; 19 | --quarto-hl-vs-color: #20794D; 20 | --quarto-hl-wa-color: #5E5E5E; 21 | --quarto-hl-do-color: #5E5E5E; 22 | --quarto-hl-im-color: #00769E; 23 | --quarto-hl-ch-color: #20794D; 24 | --quarto-hl-dt-color: #AD0000; 25 | --quarto-hl-fl-color: #AD0000; 26 | --quarto-hl-co-color: #5E5E5E; 27 | --quarto-hl-cv-color: #5E5E5E; 28 | --quarto-hl-cn-color: #8f5902; 29 | --quarto-hl-sc-color: #5E5E5E; 30 | --quarto-hl-dv-color: #AD0000; 31 | --quarto-hl-kw-color: #003B4F; 32 | } 33 | 34 | /* other quarto variables */ 35 | :root { 36 | --quarto-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 37 | } 38 | 39 | pre > code.sourceCode > span { 40 | color: #003B4F; 41 | } 42 | 43 | code span { 44 | color: #003B4F; 45 | } 46 | 47 | code.sourceCode > span { 48 | color: #003B4F; 49 | } 50 | 51 | div.sourceCode, 52 | div.sourceCode pre.sourceCode { 53 | color: #003B4F; 54 | } 55 | 56 | code span.ot { 57 | color: #003B4F; 58 | font-style: inherit; 59 | } 60 | 61 | code span.at { 62 | color: #657422; 63 | font-style: inherit; 64 | } 65 | 66 | code span.ss { 67 | color: #20794D; 68 | font-style: inherit; 69 | } 70 | 71 | code span.an { 72 | color: #5E5E5E; 73 | font-style: inherit; 74 | } 75 | 76 | code span.fu { 77 | color: #4758AB; 78 | font-style: inherit; 79 | } 80 | 81 | code span.st { 82 | color: #20794D; 83 | font-style: inherit; 84 | } 85 | 86 | code span.cf { 87 | color: #003B4F; 88 | font-style: inherit; 89 | } 90 | 91 | code span.op { 92 | color: #5E5E5E; 93 | font-style: inherit; 94 | } 95 | 96 | code span.er { 97 | color: #AD0000; 98 | font-style: inherit; 99 | } 100 | 101 | code span.bn { 102 | color: #AD0000; 103 | font-style: inherit; 104 | } 105 | 106 | code span.al { 107 | color: #AD0000; 108 | font-style: inherit; 109 | } 110 | 111 | code span.va { 112 | color: #111111; 113 | font-style: inherit; 114 | } 115 | 116 | code span.bu { 117 | font-style: inherit; 118 | } 119 | 120 | code span.ex { 121 | font-style: inherit; 122 | } 123 | 124 | code span.pp { 125 | color: #AD0000; 126 | font-style: inherit; 127 | } 128 | 129 | code span.in { 130 | color: #5E5E5E; 131 | font-style: inherit; 132 | } 133 | 134 | code span.vs { 135 | color: #20794D; 136 | font-style: inherit; 137 | } 138 | 139 | code span.wa { 140 | color: #5E5E5E; 141 | font-style: italic; 142 | } 143 | 144 | code span.do { 145 | color: #5E5E5E; 146 | font-style: italic; 147 | } 148 | 149 | code span.im { 150 | color: #00769E; 151 | font-style: inherit; 152 | } 153 | 154 | code span.ch { 155 | color: #20794D; 156 | font-style: inherit; 157 | } 158 | 159 | code span.dt { 160 | color: #AD0000; 161 | font-style: inherit; 162 | } 163 | 164 | code span.fl { 165 | color: #AD0000; 166 | font-style: inherit; 167 | } 168 | 169 | code span.co { 170 | color: #5E5E5E; 171 | font-style: inherit; 172 | } 173 | 174 | code span.cv { 175 | color: #5E5E5E; 176 | font-style: italic; 177 | } 178 | 179 | code span.cn { 180 | color: #8f5902; 181 | font-style: inherit; 182 | } 183 | 184 | code span.sc { 185 | color: #5E5E5E; 186 | font-style: inherit; 187 | } 188 | 189 | code span.dv { 190 | color: #AD0000; 191 | font-style: inherit; 192 | } 193 | 194 | code span.kw { 195 | color: #003B4F; 196 | font-style: inherit; 197 | } 198 | 199 | .prevent-inlining { 200 | content: "s.tolerance[a.direction],e(a),l=t,i=!1}function h(){i||(i=!0,n=requestAnimationFrame(c))}var u=!!o&&{passive:!0,capture:!1};return t.addEventListener("scroll",h,u),c(),{destroy:function(){cancelAnimationFrame(n),t.removeEventListener("scroll",h,u)}}}function o(t){return t===Object(t)?t:{down:t,up:t}}function s(t,n){n=n||{},Object.assign(this,s.options,n),this.classes=Object.assign({},s.options.classes,n.classes),this.elem=t,this.tolerance=o(this.tolerance),this.offset=o(this.offset),this.initialised=!1,this.frozen=!1}return s.prototype={constructor:s,init:function(){return s.cutsTheMustard&&!this.initialised&&(this.addClass("initial"),this.initialised=!0,setTimeout(function(t){t.scrollTracker=n(t.scroller,{offset:t.offset,tolerance:t.tolerance},t.update.bind(t))},100,this)),this},destroy:function(){this.initialised=!1,Object.keys(this.classes).forEach(this.removeClass,this),this.scrollTracker.destroy()},unpin:function(){!this.hasClass("pinned")&&this.hasClass("unpinned")||(this.addClass("unpinned"),this.removeClass("pinned"),this.onUnpin&&this.onUnpin.call(this))},pin:function(){this.hasClass("unpinned")&&(this.addClass("pinned"),this.removeClass("unpinned"),this.onPin&&this.onPin.call(this))},freeze:function(){this.frozen=!0,this.addClass("frozen")},unfreeze:function(){this.frozen=!1,this.removeClass("frozen")},top:function(){this.hasClass("top")||(this.addClass("top"),this.removeClass("notTop"),this.onTop&&this.onTop.call(this))},notTop:function(){this.hasClass("notTop")||(this.addClass("notTop"),this.removeClass("top"),this.onNotTop&&this.onNotTop.call(this))},bottom:function(){this.hasClass("bottom")||(this.addClass("bottom"),this.removeClass("notBottom"),this.onBottom&&this.onBottom.call(this))},notBottom:function(){this.hasClass("notBottom")||(this.addClass("notBottom"),this.removeClass("bottom"),this.onNotBottom&&this.onNotBottom.call(this))},shouldUnpin:function(t){return"down"===t.direction&&!t.top&&t.toleranceExceeded},shouldPin:function(t){return"up"===t.direction&&t.toleranceExceeded||t.top},addClass:function(t){this.elem.classList.add.apply(this.elem.classList,this.classes[t].split(" "))},removeClass:function(t){this.elem.classList.remove.apply(this.elem.classList,this.classes[t].split(" "))},hasClass:function(t){return this.classes[t].split(" ").every(function(t){return this.classList.contains(t)},this.elem)},update:function(t){t.isOutOfBounds||!0!==this.frozen&&(t.top?this.top():this.notTop(),t.bottom?this.bottom():this.notBottom(),this.shouldUnpin(t)?this.unpin():this.shouldPin(t)&&this.pin())}},s.options={tolerance:{up:0,down:0},offset:0,scroller:t()?window:null,classes:{frozen:"headroom--frozen",pinned:"headroom--pinned",unpinned:"headroom--unpinned",top:"headroom--top",notTop:"headroom--not-top",bottom:"headroom--bottom",notBottom:"headroom--not-bottom",initial:"headroom"}},s.cutsTheMustard=!!(t()&&function(){}.bind&&"classList"in document.documentElement&&Object.assign&&Object.keys&&requestAnimationFrame),s}); 8 | -------------------------------------------------------------------------------- /workshops/dataviz-ggplot2/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Engaging and Beautiful Data Visualizations with ggplot2" 3 | author: "Cédric Scherer" 4 | date: "2023-09-18" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: " " 8 | day-two: "X" 9 | languages: 10 | - R 11 | tags: 12 | - visualization 13 | --- 14 | 15 | # Description 16 | 17 | Creating effective and easily accessible data visualizations of high quality in an efficient and preferably reproducible way is an essential skill for everyone working in a data-related field. Luckily, by leveraging the functionality of ggplot2, the most famous package for data visualization with R, and related extension packages one can create highly customized data visualization without the need for post-processing. 18 | 19 | This workshop provides everything one needs to know to create and customize numerous chart types with ggplot2. Participants will learn the most important steps and helpful tips to create visually appealing and informative graphics with a code-only approach. The power of ggplot2 and related extension packages will be illustrated with advanced real--life examples that help to understand useful coding tricks and the process of creating engaging and effective visualizations. The workshop will particularly focus on more advanced tasks with ggplot2 such as styling labels and titles, customizing themes and visual aesthetics, and using less-common chart types. 20 | 21 | # Audience 22 | 23 | This course will be appropriate if you: 24 | 25 | - already know how to create basic graphics with the ggplot2 package, 26 | 27 | - aim to improve the design of your ggplot outputs, and 28 | 29 | - want to learn how to create more complex charts which feature multiple layers, annotations, text styling, custom themes, and more. 30 | 31 | # Instructor 32 | 33 | | | | | 34 | |-------------------------|-----|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| 35 | | ![](cedric-scherer.jpg) | | [**Cédric Scherer**](https://cedricscherer.com) is a data visualization designer, consultant, and instructor helping clients and workshop participants to create engaging and effective graphics. As a graduated ecologist, he has acquired an extensive hypothesis--driven research experience and problem--solving expertise in data wrangling, statistical analysis, and model development. As an independent data visualization designer, Cédric later combined his expertise in analyzing large data sets with his passion for design, colors and typefaces. Cédric has designed graphics across all disciplines, purposes, and styles applying a code--first approach and regularly talks about data visualization design and ggplot2 techniques. Due to regular participation in social data challenges such as [#TidyTuesday](https://github.com/rfordatascience/tidytuesday), he is now well known for complex and visually appealing figures, entirely made with ggplot2, that look as if they have been created with a vector design tool. | 36 | 37 | : {tbl-colwidths="\[25,5,70\]"} 38 | -------------------------------------------------------------------------------- /docs/sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | https://posit-conf-2023.github.io/website/index.html 5 | 2023-12-05T02:46:19.469Z 6 | 7 | 8 | https://posit-conf-2023.github.io/website/workshops/causal-inference/index.html 9 | 2023-12-04T14:29:17.553Z 10 | 11 | 12 | https://posit-conf-2023.github.io/website/workshops/quarto-r-docs/index.html 13 | 2023-12-04T14:29:17.570Z 14 | 15 | 16 | https://posit-conf-2023.github.io/website/workshops/tidymodels-advanced/index.html 17 | 2023-12-04T14:29:17.575Z 18 | 19 | 20 | https://posit-conf-2023.github.io/website/workshops/ds-workflows-python/index.html 21 | 2023-12-04T14:29:17.555Z 22 | 23 | 24 | https://posit-conf-2023.github.io/website/workshops/shiny-ui/index.html 25 | 2023-12-04T14:29:17.573Z 26 | 27 | 28 | https://posit-conf-2023.github.io/website/workshops/ds-workflows-r/index.html 29 | 2023-12-04T14:29:17.555Z 30 | 31 | 32 | https://posit-conf-2023.github.io/website/workshops/quarto-r-projects/index.html 33 | 2023-12-04T14:29:17.570Z 34 | 35 | 36 | https://posit-conf-2023.github.io/website/workshops/pkgdev/index.html 37 | 2023-12-04T14:29:17.569Z 38 | 39 | 40 | https://posit-conf-2023.github.io/website/workshops/admin/index.html 41 | 2023-12-04T14:29:17.552Z 42 | 43 | 44 | https://posit-conf-2023.github.io/website/workshops/manage-os/index.html 45 | 2023-12-04T14:29:17.557Z 46 | 47 | 48 | https://posit-conf-2023.github.io/website/workshops/arrow/index.html 49 | 2023-12-04T14:29:17.552Z 50 | 51 | 52 | https://posit-conf-2023.github.io/website/workshops/tidymodels-intro/index.html 53 | 2023-12-04T14:29:17.575Z 54 | 55 | 56 | https://posit-conf-2023.github.io/website/workshops/intro-ds-r/index.html 57 | 2023-12-04T14:29:17.557Z 58 | 59 | 60 | https://posit-conf-2023.github.io/website/workshops/ml-python/index.html 61 | 2023-12-04T14:29:17.558Z 62 | 63 | 64 | https://posit-conf-2023.github.io/website/workshops/gen-art/index.html 65 | 2023-12-04T14:29:17.556Z 66 | 67 | 68 | https://posit-conf-2023.github.io/website/workshops/dataviz-storytelling/index.html 69 | 2023-12-04T14:29:17.554Z 70 | 71 | 72 | https://posit-conf-2023.github.io/website/workshops/modeling-deploy/index.html 73 | 2023-12-04T14:29:17.558Z 74 | 75 | 76 | https://posit-conf-2023.github.io/website/workshops/teach-ds/index.html 77 | 2023-12-04T14:29:17.573Z 78 | 79 | 80 | https://posit-conf-2023.github.io/website/workshops/shiny-r/index.html 81 | 2023-12-04T14:46:45.623Z 82 | 83 | 84 | https://posit-conf-2023.github.io/website/workshops/pkgdev-masterclass/index.html 85 | 2023-12-04T14:29:17.568Z 86 | 87 | 88 | https://posit-conf-2023.github.io/website/workshops/shiny-dashboard/index.html 89 | 2023-12-04T14:48:29.128Z 90 | 91 | 92 | https://posit-conf-2023.github.io/website/workshops/shiny-python/index.html 93 | 2023-12-04T14:29:17.572Z 94 | 95 | 96 | https://posit-conf-2023.github.io/website/workshops/quarto-python/index.html 97 | 2023-12-04T14:29:17.569Z 98 | 99 | 100 | https://posit-conf-2023.github.io/website/workshops/programming-r/index.html 101 | 2023-12-04T14:29:17.569Z 102 | 103 | 104 | https://posit-conf-2023.github.io/website/workshops/dataviz-ggplot2/index.html 105 | 2023-12-04T14:29:17.554Z 106 | 107 | 108 | https://posit-conf-2023.github.io/website/workshops/intro-ds-python/index.html 109 | 2023-12-04T14:29:17.557Z 110 | 111 | 112 | https://posit-conf-2023.github.io/website/workshops/forecasting/index.html 113 | 2023-12-04T14:29:17.555Z 114 | 115 | 116 | https://posit-conf-2023.github.io/website/workshops/wtf/index.html 117 | 2023-12-04T14:29:17.577Z 118 | 119 | 120 | https://posit-conf-2023.github.io/website/workshops/shiny-production/index.html 121 | 2023-12-04T14:29:17.571Z 122 | 123 | 124 | -------------------------------------------------------------------------------- /workshops/teach-ds/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Teaching Data Science Masterclass" 3 | author: "Mine Çetinkaya-Rundel" 4 | date: "2023-09-18" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: " " 8 | day-two: "X" 9 | languages: 10 | - R 11 | tags: 12 | - teaching 13 | - tidyverse 14 | - Quarto 15 | - version control 16 | --- 17 | 18 | # Description 19 | 20 | There has been significant innovation in introductory statistics and data science courses to equip students with the statistical, computing, and communication skills needed for modern data analysis. 21 | Success in data science and statistics is dependent on the development of both analytical and computational skills, and the demand for educators who are proficient at teaching both these skills is growing. 22 | The goal of this masterclass is to equip educators with concrete information on content, workflows, and infrastructure for *painlessly* introducing modern computation with R and RStudio within a data science curriculum. 23 | In a nutshell, the day you'll spend in this workshop will save you endless hours of solo work designing and setting up your course. 24 | 25 | Topics will cover teaching the tidyverse in 2023, highlighting updates to *R for Data Science (2nd ed)* and *Data Science in a Box* as well as present tooling options and workflows for reproducible authoring, computing infrastructure, version control, and collaboration. 26 | 27 | The workshop will be comprised of four modules: 28 | 29 | - Teaching data science with the tidyverse and Quarto 30 | - Teaching data science with Git and GitHub 31 | - Organizing, publishing, and sharing of course materials 32 | - Computing infrastructure for teaching data science 33 | 34 | Throughout each module we'll shift between the student perspective and the instructor perspective. 35 | The activities and demos will be hands-on; attendees will also have the opportunity to exchange ideas and ask questions throughout the session. 36 | 37 | In addition to gaining technical knowledge, participants will engage in discussion around the decisions that go into developing a data science curriculum and choosing workflows and infrastructure that best support the curriculum and allow for scalability. 38 | We will also discuss best practices for configuring and deploying classroom infrastructures to support these tools. 39 | 40 | # Audience 41 | 42 | This masterclass is aimed primarily at participants teaching data science in an academic setting in semester-long courses, however much of the information and tooling we introduce is applicable for shorter teaching experiences like workshops and bootcamps as well. 43 | Basic knowledge of R is assumed and familiarity with the tidyverse and Git is preferred. 44 | 45 | This course is for you if you: 46 | 47 | - you want to learn / discuss curriculum, pedagogy, and computing infrastructure design for teaching data science with R and RStudio using the tidyverse and Quarto, 48 | - you are interested in setting up your class in Posit Cloud, 49 | - you want to integrate version control with git into your teaching and learn about tools and best practices for running your course on GitHub. 50 | 51 | # Instructor 52 | 53 | | | | | 54 | |--------|--------|---------------------------------------------------------| 55 | | ![](mine-cetinkaya-rundel.jpg) | | [**Dr. Mine Çetinkaya-Rundel**](http://mine-cr.com/) (she/her) is Professor of the Practice at Duke University and Developer Educator at Posit. Mine's work focuses on innovation in statistics and data science pedagogy, with an emphasis on computing, reproducible research, student-centered learning, and open-source education as well as pedagogical approaches for enhancing retention of women and under-represented minorities in STEM. Mine works on integrating computation into the undergraduate statistics curriculum, using reproducible research methodologies and analysis of real and complex datasets. Mine works on the OpenIntro project, whose mission is to make educational products that are free, transparent, and lower barriers to education. As part of this project she co-authored four open-source introductory statistics textbooks. She is also the creator and maintainer of datasciencebox.org and she teaches the popular Statistics with R MOOC on Coursera. Mine is a Fellow of the ASA and Elected Member of the ISI as well as the winner of the 2021 Robert V. Hogg Award for For Excellence in Teaching Introductory Statistics. | 56 | 57 | : {tbl-colwidths="\[25,5,70\]"} 58 | -------------------------------------------------------------------------------- /workshops/shiny-production/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Shiny in Production: Tools and Techniques" 3 | author: "Eric Nantz" 4 | date: "2023-09-18" 5 | length: "B-1-day" 6 | description: "1-day workshop" 7 | day-one: " " 8 | day-two: "X" 9 | languages: 10 | - R 11 | tags: 12 | - shiny 13 | - deployment 14 | --- 15 | 16 | # Description 17 | 18 | Shiny brings tremendous possibilities to share innovative data science workflows with others inside an intuitive web interface. 19 | Many in the Shiny community have shared effective development techniques for building a robust application. 20 | Even with the best intentions during application development, a myriad of issues can arise once it leaves the confines of your machine.  21 | In this one-day workshop, you will implement core techniques to account for common scenarios that arise once your application is used in production, such as accounting for thousands of simultaneous users, how effective profiling can address performance bottlenecks, and ensuring your application is doing as little as possible to ensure a smooth and responsive experience. 22 |   23 | 24 | # Audience 25 | 26 | This course assumes intermediate knowledge of building Shiny applications in R and prior experience deploying an application to a platform such as the [shinyapps.io](https://www.google.com/url?q=http://shinyapps.io&source=gmail-imap&ust=1675909279000000&usg=AOvVaw16Rb7h20MkEcMyfHS3Xlot) service or products like Posit Connect. 27 | 28 | This course is for you if you: 29 | 30 | - had a Shiny application work just fine on your machine, but encounters critical issues after deployment, 31 | - are eager to prospectively apply techniques before deployment to plan for the unexpected, and 32 | - want to know the benefits and trade-offs between various ways of hosting Shiny applications. 33 | 34 | # Instructors 35 | 36 | | | | | 37 | |-----------------------|-----|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| 38 | | ![](eric-nantz.jpg) | | **Eric Nantz** is a director within the statistical innovation center at Eli Lilly and Company, creating analytical pipelines and capabilities of advanced statistical methodologies for clinical design used in multiple phases of development. Outside of his day job, Eric is passionate about connecting with and showcasing the brilliant R community in multiple ways. You may recognize his voice from the [R-Podcast](https://r-podcast.org) that he launched in 2012. Eric is also the creator of the [Shiny Developer Series](https://shinydevseries.com) where he interviews authors of Shiny-related packages and practitioners developing applications, as well as sharing his own R and Shiny adventures via live streams on his [Twitch channel](https://twitch.tv/rpodcast). In addition, Eric is a curator for the [RWeekly project](https://rweekly.org) and co-host of the [RWeekly Highlights podcast](https://rweekly.fireside.fm) which accompanies every issue. | 39 | | ![](mike-thomas.jpeg) | | **Mike Thomas** is the Chief Data Scientist at [Ketchbrook Analytics](https://www.ketchbrookanalytics.com/). He holds a B.S. in Accounting and Mathematics from Stonehill College, and an M.S. in Business Intelligence & Analytics from Saint Joseph's University. He specializes in architecting and executing end-to-end data science solutions, which often culminate in the development of a Shiny web application. Michael is a Posit-certified trainer in both Tidyverse and Shiny, and he co-hosts the [R Weekly Highlights](https://rweekly.fireside.fm/) podcast. He enjoys developing Shiny apps that benefit [his local community](https://www.youtube.com/watch?v=21MnLDuRbS8&feature=youtu.be) and [beyond](https://www.ketchbrookanalytics.com/post/cohhio-launches-youth-homelessness-dashboard-developed-by-ketchbrook-analytics). | 40 | 41 | : {tbl-colwidths="\[25,5,70\]"} 42 | -------------------------------------------------------------------------------- /docs/site_libs/quarto-html/anchor.min.js: -------------------------------------------------------------------------------- 1 | // @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat 2 | // 3 | // AnchorJS - v5.0.0 - 2023-01-18 4 | // https://www.bryanbraun.com/anchorjs/ 5 | // Copyright (c) 2023 Bryan Braun; Licensed MIT 6 | // 7 | // @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat 8 | !function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(globalThis,function(){"use strict";return function(A){function u(A){A.icon=Object.prototype.hasOwnProperty.call(A,"icon")?A.icon:"",A.visible=Object.prototype.hasOwnProperty.call(A,"visible")?A.visible:"hover",A.placement=Object.prototype.hasOwnProperty.call(A,"placement")?A.placement:"right",A.ariaLabel=Object.prototype.hasOwnProperty.call(A,"ariaLabel")?A.ariaLabel:"Anchor",A.class=Object.prototype.hasOwnProperty.call(A,"class")?A.class:"",A.base=Object.prototype.hasOwnProperty.call(A,"base")?A.base:"",A.truncate=Object.prototype.hasOwnProperty.call(A,"truncate")?Math.floor(A.truncate):64,A.titleText=Object.prototype.hasOwnProperty.call(A,"titleText")?A.titleText:""}function d(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new TypeError("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}this.options=A||{},this.elements=[],u(this.options),this.add=function(A){var e,t,o,i,n,s,a,r,l,c,h,p=[];if(u(this.options),0!==(e=d(A=A||"h2, h3, h4, h5, h6")).length){for(null===document.head.querySelector("style.anchorjs")&&((A=document.createElement("style")).className="anchorjs",A.appendChild(document.createTextNode("")),void 0===(h=document.head.querySelector('[rel="stylesheet"],style'))?document.head.appendChild(A):document.head.insertBefore(A,h),A.sheet.insertRule(".anchorjs-link{opacity:0;text-decoration:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}",A.sheet.cssRules.length),A.sheet.insertRule(":hover>.anchorjs-link,.anchorjs-link:focus{opacity:1}",A.sheet.cssRules.length),A.sheet.insertRule("[data-anchorjs-icon]::after{content:attr(data-anchorjs-icon)}",A.sheet.cssRules.length),A.sheet.insertRule('@font-face{font-family:anchorjs-icons;src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}',A.sheet.cssRules.length)),h=document.querySelectorAll("[id]"),t=[].map.call(h,function(A){return A.id}),i=0;i\]./()*\\\n\t\b\v\u00A0]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),A=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||A||!1}}}); 9 | // @license-end -------------------------------------------------------------------------------- /docs/site_libs/clipboard/clipboard.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * clipboard.js v2.0.11 3 | * https://clipboardjs.com/ 4 | * 5 | * Licensed MIT © Zeno Rocha 6 | */ 7 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1 { 17 | btn.style.display = "none"; 18 | }; 19 | const showBackToTop = () => { 20 | btn.style.display = "inline-block"; 21 | }; 22 | if (btn) { 23 | window.document.addEventListener( 24 | "scroll", 25 | function () { 26 | const currentScrollTop = 27 | window.pageYOffset || document.documentElement.scrollTop; 28 | 29 | // Shows and hides the button 'intelligently' as the user scrolls 30 | if (currentScrollTop - scrollDownBuffer > lastScrollTop) { 31 | hideBackToTop(); 32 | lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; 33 | } else if (currentScrollTop < lastScrollTop - scrollUpBuffer) { 34 | showBackToTop(); 35 | lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; 36 | } 37 | 38 | // Show the button at the bottom, hides it at the top 39 | if (currentScrollTop <= 0) { 40 | hideBackToTop(); 41 | } else if ( 42 | window.innerHeight + currentScrollTop >= 43 | document.body.offsetHeight 44 | ) { 45 | showBackToTop(); 46 | } 47 | }, 48 | false 49 | ); 50 | } 51 | 52 | function throttle(func, wait) { 53 | var timeout; 54 | return function () { 55 | const context = this; 56 | const args = arguments; 57 | const later = function () { 58 | clearTimeout(timeout); 59 | timeout = null; 60 | func.apply(context, args); 61 | }; 62 | 63 | if (!timeout) { 64 | timeout = setTimeout(later, wait); 65 | } 66 | }; 67 | } 68 | 69 | function headerOffset() { 70 | // Set an offset if there is are fixed top navbar 71 | const headerEl = window.document.querySelector("header.fixed-top"); 72 | if (headerEl) { 73 | return headerEl.clientHeight; 74 | } else { 75 | return 0; 76 | } 77 | } 78 | 79 | function footerOffset() { 80 | const footerEl = window.document.querySelector("footer.footer"); 81 | if (footerEl) { 82 | return footerEl.clientHeight; 83 | } else { 84 | return 0; 85 | } 86 | } 87 | 88 | function dashboardOffset() { 89 | const dashboardNavEl = window.document.getElementById( 90 | "quarto-dashboard-header" 91 | ); 92 | if (dashboardNavEl !== null) { 93 | return dashboardNavEl.clientHeight; 94 | } else { 95 | return 0; 96 | } 97 | } 98 | 99 | function updateDocumentOffsetWithoutAnimation() { 100 | updateDocumentOffset(false); 101 | } 102 | 103 | function updateDocumentOffset(animated) { 104 | // set body offset 105 | const topOffset = headerOffset(); 106 | const bodyOffset = topOffset + footerOffset() + dashboardOffset(); 107 | const bodyEl = window.document.body; 108 | bodyEl.setAttribute("data-bs-offset", topOffset); 109 | bodyEl.style.paddingTop = topOffset + "px"; 110 | 111 | // deal with sidebar offsets 112 | const sidebars = window.document.querySelectorAll( 113 | ".sidebar, .headroom-target" 114 | ); 115 | sidebars.forEach((sidebar) => { 116 | if (!animated) { 117 | sidebar.classList.add("notransition"); 118 | // Remove the no transition class after the animation has time to complete 119 | setTimeout(function () { 120 | sidebar.classList.remove("notransition"); 121 | }, 201); 122 | } 123 | 124 | if (window.Headroom && sidebar.classList.contains("sidebar-unpinned")) { 125 | sidebar.style.top = "0"; 126 | sidebar.style.maxHeight = "100vh"; 127 | } else { 128 | sidebar.style.top = topOffset + "px"; 129 | sidebar.style.maxHeight = "calc(100vh - " + topOffset + "px)"; 130 | } 131 | }); 132 | 133 | // allow space for footer 134 | const mainContainer = window.document.querySelector(".quarto-container"); 135 | if (mainContainer) { 136 | mainContainer.style.minHeight = "calc(100vh - " + bodyOffset + "px)"; 137 | } 138 | 139 | // link offset 140 | let linkStyle = window.document.querySelector("#quarto-target-style"); 141 | if (!linkStyle) { 142 | linkStyle = window.document.createElement("style"); 143 | linkStyle.setAttribute("id", "quarto-target-style"); 144 | window.document.head.appendChild(linkStyle); 145 | } 146 | while (linkStyle.firstChild) { 147 | linkStyle.removeChild(linkStyle.firstChild); 148 | } 149 | if (topOffset > 0) { 150 | linkStyle.appendChild( 151 | window.document.createTextNode(` 152 | section:target::before { 153 | content: ""; 154 | display: block; 155 | height: ${topOffset}px; 156 | margin: -${topOffset}px 0 0; 157 | }`) 158 | ); 159 | } 160 | if (init) { 161 | window.dispatchEvent(headroomChanged); 162 | } 163 | init = true; 164 | } 165 | 166 | // initialize headroom 167 | var header = window.document.querySelector("#quarto-header"); 168 | if (header && window.Headroom) { 169 | const headroom = new window.Headroom(header, { 170 | tolerance: 5, 171 | onPin: function () { 172 | const sidebars = window.document.querySelectorAll( 173 | ".sidebar, .headroom-target" 174 | ); 175 | sidebars.forEach((sidebar) => { 176 | sidebar.classList.remove("sidebar-unpinned"); 177 | }); 178 | updateDocumentOffset(); 179 | }, 180 | onUnpin: function () { 181 | const sidebars = window.document.querySelectorAll( 182 | ".sidebar, .headroom-target" 183 | ); 184 | sidebars.forEach((sidebar) => { 185 | sidebar.classList.add("sidebar-unpinned"); 186 | }); 187 | updateDocumentOffset(); 188 | }, 189 | }); 190 | headroom.init(); 191 | 192 | let frozen = false; 193 | window.quartoToggleHeadroom = function () { 194 | if (frozen) { 195 | headroom.unfreeze(); 196 | frozen = false; 197 | } else { 198 | headroom.freeze(); 199 | frozen = true; 200 | } 201 | }; 202 | } 203 | 204 | window.addEventListener( 205 | "hashchange", 206 | function (e) { 207 | if ( 208 | getComputedStyle(document.documentElement).scrollBehavior !== "smooth" 209 | ) { 210 | window.scrollTo(0, window.pageYOffset - headerOffset()); 211 | } 212 | }, 213 | false 214 | ); 215 | 216 | // Observe size changed for the header 217 | const headerEl = window.document.querySelector("header.fixed-top"); 218 | if (headerEl && window.ResizeObserver) { 219 | const observer = new window.ResizeObserver(() => { 220 | setTimeout(updateDocumentOffsetWithoutAnimation, 0); 221 | }); 222 | observer.observe(headerEl, { 223 | attributes: true, 224 | childList: true, 225 | characterData: true, 226 | }); 227 | } else { 228 | window.addEventListener( 229 | "resize", 230 | throttle(updateDocumentOffsetWithoutAnimation, 50) 231 | ); 232 | } 233 | setTimeout(updateDocumentOffsetWithoutAnimation, 250); 234 | 235 | // fixup index.html links if we aren't on the filesystem 236 | if (window.location.protocol !== "file:") { 237 | const links = window.document.querySelectorAll("a"); 238 | for (let i = 0; i < links.length; i++) { 239 | if (links[i].href) { 240 | links[i].href = links[i].href.replace(/\/index\.html/, "/"); 241 | } 242 | } 243 | 244 | // Fixup any sharing links that require urls 245 | // Append url to any sharing urls 246 | const sharingLinks = window.document.querySelectorAll( 247 | "a.sidebar-tools-main-item, a.quarto-navigation-tool, a.quarto-navbar-tools, a.quarto-navbar-tools-item" 248 | ); 249 | for (let i = 0; i < sharingLinks.length; i++) { 250 | const sharingLink = sharingLinks[i]; 251 | const href = sharingLink.getAttribute("href"); 252 | if (href) { 253 | sharingLink.setAttribute( 254 | "href", 255 | href.replace("|url|", window.location.href) 256 | ); 257 | } 258 | } 259 | 260 | // Scroll the active navigation item into view, if necessary 261 | const navSidebar = window.document.querySelector("nav#quarto-sidebar"); 262 | if (navSidebar) { 263 | // Find the active item 264 | const activeItem = navSidebar.querySelector("li.sidebar-item a.active"); 265 | if (activeItem) { 266 | // Wait for the scroll height and height to resolve by observing size changes on the 267 | // nav element that is scrollable 268 | const resizeObserver = new ResizeObserver((_entries) => { 269 | // The bottom of the element 270 | const elBottom = activeItem.offsetTop; 271 | const viewBottom = navSidebar.scrollTop + navSidebar.clientHeight; 272 | 273 | // The element height and scroll height are the same, then we are still loading 274 | if (viewBottom !== navSidebar.scrollHeight) { 275 | // Determine if the item isn't visible and scroll to it 276 | if (elBottom >= viewBottom) { 277 | navSidebar.scrollTop = elBottom; 278 | } 279 | 280 | // stop observing now since we've completed the scroll 281 | resizeObserver.unobserve(navSidebar); 282 | } 283 | }); 284 | resizeObserver.observe(navSidebar); 285 | } 286 | } 287 | } 288 | }); 289 | -------------------------------------------------------------------------------- /docs/site_libs/quarto-html/popper.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @popperjs/core v2.11.7 - MIT License 3 | */ 4 | 5 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function c(){return!/^((?!chrome|android).)*safari/i.test(f())}function p(e,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);var a=e.getBoundingClientRect(),f=1,p=1;o&&r(e)&&(f=e.offsetWidth>0&&s(a.width)/e.offsetWidth||1,p=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var u=(n(e)?t(e):window).visualViewport,l=!c()&&i,d=(a.left+(l&&u?u.offsetLeft:0))/f,h=(a.top+(l&&u?u.offsetTop:0))/p,m=a.width/f,v=a.height/p;return{width:m,height:v,top:h,right:d+m,bottom:h+v,left:d,x:d,y:h}}function u(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function l(e){return e?(e.nodeName||"").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function h(e){return p(d(e)).left+u(e).scrollLeft}function m(e){return t(e).getComputedStyle(e)}function v(e){var t=m(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function y(e,n,o){void 0===o&&(o=!1);var i,a,f=r(n),c=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),m=d(n),y=p(e,c,o),g={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!o)&&(("body"!==l(n)||v(m))&&(g=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:u(i)),r(n)?((b=p(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):m&&(b.x=h(m))),{x:y.left+g.scrollLeft-b.x,y:y.top+g.scrollTop-b.y,width:y.width,height:y.height}}function g(e){var t=p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function b(e){return"html"===l(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||d(e)}function x(e){return["html","body","#document"].indexOf(l(e))>=0?e.ownerDocument.body:r(e)&&v(e)?e:x(b(e))}function w(e,n){var r;void 0===n&&(n=[]);var o=x(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],v(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(w(b(s)))}function O(e){return["table","td","th"].indexOf(l(e))>=0}function j(e){return r(e)&&"fixed"!==m(e).position?e.offsetParent:null}function E(e){for(var n=t(e),i=j(e);i&&O(i)&&"static"===m(i).position;)i=j(i);return i&&("html"===l(i)||"body"===l(i)&&"static"===m(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&r(e)&&"fixed"===m(e).position)return null;var n=b(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(l(n))<0;){var i=m(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var D="top",A="bottom",L="right",P="left",M="auto",k=[D,A,L,P],W="start",B="end",H="viewport",T="popper",R=k.reduce((function(e,t){return e.concat([t+"-"+W,t+"-"+B])}),[]),S=[].concat(k,[M]).reduce((function(e,t){return e.concat([t,t+"-"+W,t+"-"+B])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function q(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e){return e.split("-")[0]}function N(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function I(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function _(e,r,o){return r===H?I(function(e,n){var r=t(e),o=d(e),i=r.visualViewport,a=o.clientWidth,s=o.clientHeight,f=0,p=0;if(i){a=i.width,s=i.height;var u=c();(u||!u&&"fixed"===n)&&(f=i.offsetLeft,p=i.offsetTop)}return{width:a,height:s,x:f+h(e),y:p}}(e,o)):n(r)?function(e,t){var n=p(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(r,o):I(function(e){var t,n=d(e),r=u(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+h(e),c=-r.scrollTop;return"rtl"===m(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:c}}(d(e)))}function F(e,t,o,s){var f="clippingParents"===t?function(e){var t=w(b(e)),o=["absolute","fixed"].indexOf(m(e).position)>=0&&r(e)?E(e):e;return n(o)?t.filter((function(e){return n(e)&&N(e,o)&&"body"!==l(e)})):[]}(e):[].concat(t),c=[].concat(f,[o]),p=c[0],u=c.reduce((function(t,n){var r=_(e,n,s);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),_(e,p,s));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function U(e){return e.split("-")[1]}function z(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function X(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?C(o):null,a=o?U(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case D:t={x:s,y:n.y-r.height};break;case A:t={x:s,y:n.y+n.height};break;case L:t={x:n.x+n.width,y:f};break;case P:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?z(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case W:t[c]=t[c]-(n[p]/2-r[p]/2);break;case B:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function G(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function J(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.strategy,s=void 0===a?e.strategy:a,f=r.boundary,c=void 0===f?"clippingParents":f,u=r.rootBoundary,l=void 0===u?H:u,h=r.elementContext,m=void 0===h?T:h,v=r.altBoundary,y=void 0!==v&&v,g=r.padding,b=void 0===g?0:g,x=Y("number"!=typeof b?b:G(b,k)),w=m===T?"reference":T,O=e.rects.popper,j=e.elements[y?w:m],E=F(n(j)?j:j.contextElement||d(e.elements.popper),c,l,s),P=p(e.elements.reference),M=X({reference:P,element:O,strategy:"absolute",placement:i}),W=I(Object.assign({},O,M)),B=m===T?W:P,R={top:E.top-B.top+x.top,bottom:B.bottom-E.bottom+x.bottom,left:E.left-B.left+x.left,right:B.right-E.right+x.right},S=e.modifiersData.offset;if(m===T&&S){var V=S[i];Object.keys(R).forEach((function(e){var t=[L,A].indexOf(e)>=0?1:-1,n=[D,A].indexOf(e)>=0?"y":"x";R[e]+=V[n]*t}))}return R}var K={placement:"bottom",modifiers:[],strategy:"absolute"};function Q(){for(var e=arguments.length,t=new Array(e),n=0;n=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,L].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},se={left:"right",right:"left",bottom:"top",top:"bottom"};function fe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var ce={start:"end",end:"start"};function pe(e){return e.replace(/start|end/g,(function(e){return ce[e]}))}function ue(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?S:f,p=U(r),u=p?s?R:R.filter((function(e){return U(e)===p})):k,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=J(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[C(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var le={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,y=C(v),g=f||(y===v||!h?[fe(v)]:function(e){if(C(e)===M)return[];var t=fe(e);return[pe(e),t,pe(t)]}(v)),b=[v].concat(g).reduce((function(e,n){return e.concat(C(n)===M?ue(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,j=!0,E=b[0],k=0;k=0,S=R?"width":"height",V=J(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),q=R?T?L:P:T?A:D;x[S]>w[S]&&(q=fe(q));var N=fe(q),I=[];if(i&&I.push(V[H]<=0),s&&I.push(V[q]<=0,V[N]<=0),I.every((function(e){return e}))){E=B,j=!1;break}O.set(B,I)}if(j)for(var _=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,"break"},F=h?3:1;F>0;F--){if("break"===_(F))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function de(e,t,n){return i(e,a(t,n))}var he={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,v=n.tetherOffset,y=void 0===v?0:v,b=J(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=C(t.placement),w=U(t.placement),O=!w,j=z(x),M="x"===j?"y":"x",k=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(k){if(s){var q,N="y"===j?D:P,I="y"===j?A:L,_="y"===j?"height":"width",F=k[j],X=F+b[N],Y=F-b[I],G=m?-H[_]/2:0,K=w===W?B[_]:H[_],Q=w===W?-H[_]:-B[_],Z=t.elements.arrow,$=m&&Z?g(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[N],ne=ee[I],re=de(0,B[_],$[_]),oe=O?B[_]/2-G-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=O?-B[_]/2+G+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&E(t.elements.arrow),se=ae?"y"===j?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(q=null==S?void 0:S[j])?q:0,ce=F+ie-fe,pe=de(m?a(X,F+oe-fe-se):X,F,m?i(Y,ce):Y);k[j]=pe,V[j]=pe-F}if(c){var ue,le="x"===j?D:P,he="x"===j?A:L,me=k[M],ve="y"===M?"height":"width",ye=me+b[le],ge=me-b[he],be=-1!==[D,P].indexOf(x),xe=null!=(ue=null==S?void 0:S[M])?ue:0,we=be?ye:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ge,je=m&&be?function(e,t,n){var r=de(e,t,n);return r>n?n:r}(we,me,Oe):de(m?we:ye,me,m?Oe:ge);k[M]=je,V[M]=je-me}t.modifiersData[r]=V}},requiresIfExists:["offset"]};var me={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=C(n.placement),f=z(s),c=[P,L].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return Y("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:G(e,k))}(o.padding,n),u=g(i),l="y"===f?D:P,d="y"===f?A:L,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],v=E(i),y=v?"y"===f?v.clientHeight||0:v.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],O=y/2-u[c]/2+b,j=de(x,O,w),M=f;n.modifiersData[r]=((t={})[M]=j,t.centerOffset=j-O,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&N(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ve(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(e){return[D,L,A,P].some((function(t){return e[t]>=0}))}var ge={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=J(t,{elementContext:"reference"}),s=J(t,{altBoundary:!0}),f=ve(a,r),c=ve(s,o,i),p=ye(f),u=ye(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},be=Z({defaultModifiers:[ee,te,oe,ie]}),xe=[ee,te,oe,ie,ae,le,he,me,ge],we=Z({defaultModifiers:xe});e.applyStyles=ie,e.arrow=me,e.computeStyles=oe,e.createPopper=we,e.createPopperLite=be,e.defaultModifiers=xe,e.detectOverflow=J,e.eventListeners=ee,e.flip=le,e.hide=ge,e.offset=ae,e.popperGenerator=Z,e.popperOffsets=te,e.preventOverflow=he,Object.defineProperty(e,"__esModule",{value:!0})})); 6 | 7 | --------------------------------------------------------------------------------