From 45d92ab7a6206a0dad97a92ea110813ca87e884d Mon Sep 17 00:00:00 2001 From: "Zane (She/They)" <55933131+PythonCoderUnicorn@users.noreply.github.com> Date: Mon, 26 Sep 2022 13:30:53 -0600 Subject: [PATCH 1/5] readme --- README.md | 3 +++ logog.png | Bin 0 -> 102449 bytes 2 files changed, 3 insertions(+) create mode 100644 logog.png diff --git a/README.md b/README.md index d117872..df4d8fa 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ + + + # Code from screencasts of #tidytuesday These are the R Markdown documents produced during live analyses of [#tidytuesday data](https://github.com/rfordatascience/tidytuesday). diff --git a/logog.png b/logog.png new file mode 100644 index 0000000000000000000000000000000000000000..747210ee014d0594028f9a476e04dd11a2fd4cc2 GIT binary patch literal 102449 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 z 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 mjq?9}{{N}`zv%^2c}j$bg7a>@c#q$JeBzX literal 0 HcmV?d00001 From a0a339adae0d7a5e0e6765eccc40ff696b0176aa Mon Sep 17 00:00:00 2001 From: "Zane (She/They)" <55933131+PythonCoderUnicorn@users.noreply.github.com> Date: Mon, 26 Sep 2022 13:31:22 -0600 Subject: [PATCH 2/5] readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index df4d8fa..93740a5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ - + # Code from screencasts of #tidytuesday From c9368c3fb6bdedd72488475b5f6a6ab715ca9db2 Mon Sep 17 00:00:00 2001 From: "Zane (She/They)" <55933131+PythonCoderUnicorn@users.noreply.github.com> Date: Mon, 26 Sep 2022 13:32:23 -0600 Subject: [PATCH 3/5] readme --- logog.png => logo.png | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename logog.png => logo.png (100%) diff --git a/logog.png b/logo.png similarity index 100% rename from logog.png rename to logo.png From 7105b58bad3f7f7e853fd588f551c5807847790d Mon Sep 17 00:00:00 2001 From: "Zane (She/They)" <55933131+PythonCoderUnicorn@users.noreply.github.com> Date: Mon, 26 Sep 2022 13:35:19 -0600 Subject: [PATCH 4/5] year folders --- .DS_Store | Bin 0 -> 6148 bytes .../2020_07_28_penguins.Rmd | 0 .../2020_08_04_europe_energy.Rmd | 0 .../2020_08_18_extinct_plants.Rmd | 0 .../2020_08_25_chopped.Rmd | 0 .../2020_09_01_crop_yields.Rmd | 0 .../2020_09_08_friends.Rmd | 0 .../2020_09_15_government_spending_kids.Rmd | 0 .../2020_09_22_himalayan_climbers.Rmd | 0 .../2020_09_29_taylor_swift_beyonce.Rmd | 0 .../2020_10_06_ncaa_womens_basketball.Rmd | 0 .../2020_10_20_beer_awards.Rmd | 0 2020_11_03_ikea.Rmd => 2020/2020_11_03_ikea.Rmd | 0 .../2020_11_10_phone_history.Rmd | 0 .../2020_12_15_ninja_warrior.Rmd | 0 .../2020_12_22_big_mac_index.Rmd | 0 .../2021_01_05_transit_costs.Rmd | 0 .../2021_01_12_tate_art.Rmd | 0 .../2021_01_19_kenya_census.Rmd | 0 2021_02_02_hbcu.Rmd => 2021/2021_02_02_hbcu.Rmd | 0 .../2021_02_09_lifetime_earn.Rmd | 0 .../2021_02_23_employment_earnings.Rmd | 0 .../2021_03_02_super_bowl_ads.Rmd | 0 .../2021_03_09_bechdel_test.Rmd | 0 .../2021_03_16_video_games.Rmd | 0 .../2021_03_23_un_votes.Rmd | 0 .../2021_04_06_deforestation.Rmd | 0 .../2021_04_13_post_offices.Rmd | 0 .../2021_04_20_netflix_titles.Rmd | 0 .../2021_05_04_water_access.Rmd | 0 .../2021_05_11_broadband.Rmd | 0 .../2021_05_18_salary_survey.Rmd | 0 .../2021_06_08_great_lakes_fish.Rmd | 0 .../2021_09_14_billboard_100.Rmd | 0 .../2021_10_05_registered_nurses.Rmd | 0 .../2021_11_23_doctor_who.Rmd | 0 .../2022_02_22_world_freedom_index.Rmd | 0 .../2022_08_23_chips.Rmd | 0 .../2022_09_06_legos.Rmd | 0 39 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .DS_Store rename 2020_07_28_penguins.Rmd => 2020/2020_07_28_penguins.Rmd (100%) rename 2020_08_04_europe_energy.Rmd => 2020/2020_08_04_europe_energy.Rmd (100%) rename 2020_08_18_extinct_plants.Rmd => 2020/2020_08_18_extinct_plants.Rmd (100%) rename 2020_08_25_chopped.Rmd => 2020/2020_08_25_chopped.Rmd (100%) rename 2020_09_01_crop_yields.Rmd => 2020/2020_09_01_crop_yields.Rmd (100%) rename 2020_09_08_friends.Rmd => 2020/2020_09_08_friends.Rmd (100%) rename 2020_09_15_government_spending_kids.Rmd => 2020/2020_09_15_government_spending_kids.Rmd (100%) rename 2020_09_22_himalayan_climbers.Rmd => 2020/2020_09_22_himalayan_climbers.Rmd (100%) rename 2020_09_29_taylor_swift_beyonce.Rmd => 2020/2020_09_29_taylor_swift_beyonce.Rmd (100%) rename 2020_10_06_ncaa_womens_basketball.Rmd => 2020/2020_10_06_ncaa_womens_basketball.Rmd (100%) rename 2020_10_20_beer_awards.Rmd => 2020/2020_10_20_beer_awards.Rmd (100%) rename 2020_11_03_ikea.Rmd => 2020/2020_11_03_ikea.Rmd (100%) rename 2020_11_10_phone_history.Rmd => 2020/2020_11_10_phone_history.Rmd (100%) rename 2020_12_15_ninja_warrior.Rmd => 2020/2020_12_15_ninja_warrior.Rmd (100%) rename 2020_12_22_big_mac_index.Rmd => 2020/2020_12_22_big_mac_index.Rmd (100%) rename 2021_01_05_transit_costs.Rmd => 2021/2021_01_05_transit_costs.Rmd (100%) rename 2021_01_12_tate_art.Rmd => 2021/2021_01_12_tate_art.Rmd (100%) rename 2021_01_19_kenya_census.Rmd => 2021/2021_01_19_kenya_census.Rmd (100%) rename 2021_02_02_hbcu.Rmd => 2021/2021_02_02_hbcu.Rmd (100%) rename 2021_02_09_lifetime_earn.Rmd => 2021/2021_02_09_lifetime_earn.Rmd (100%) rename 2021_02_23_employment_earnings.Rmd => 2021/2021_02_23_employment_earnings.Rmd (100%) rename 2021_03_02_super_bowl_ads.Rmd => 2021/2021_03_02_super_bowl_ads.Rmd (100%) rename 2021_03_09_bechdel_test.Rmd => 2021/2021_03_09_bechdel_test.Rmd (100%) rename 2021_03_16_video_games.Rmd => 2021/2021_03_16_video_games.Rmd (100%) rename 2021_03_23_un_votes.Rmd => 2021/2021_03_23_un_votes.Rmd (100%) rename 2021_04_06_deforestation.Rmd => 2021/2021_04_06_deforestation.Rmd (100%) rename 2021_04_13_post_offices.Rmd => 2021/2021_04_13_post_offices.Rmd (100%) rename 2021_04_20_netflix_titles.Rmd => 2021/2021_04_20_netflix_titles.Rmd (100%) rename 2021_05_04_water_access.Rmd => 2021/2021_05_04_water_access.Rmd (100%) rename 2021_05_11_broadband.Rmd => 2021/2021_05_11_broadband.Rmd (100%) rename 2021_05_18_salary_survey.Rmd => 2021/2021_05_18_salary_survey.Rmd (100%) rename 2021_06_08_great_lakes_fish.Rmd => 2021/2021_06_08_great_lakes_fish.Rmd (100%) rename 2021_09_14_billboard_100.Rmd => 2021/2021_09_14_billboard_100.Rmd (100%) rename 2021_10_05_registered_nurses.Rmd => 2021/2021_10_05_registered_nurses.Rmd (100%) rename 2021_11_23_doctor_who.Rmd => 2021/2021_11_23_doctor_who.Rmd (100%) rename 2022_02_22_world_freedom_index.Rmd => 2022/2022_02_22_world_freedom_index.Rmd (100%) rename 2022_08_23_chips.Rmd => 2022/2022_08_23_chips.Rmd (100%) rename 2022_09_06_legos.Rmd => 2022/2022_09_06_legos.Rmd (100%) diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 Date: Mon, 26 Sep 2022 14:17:56 -0600 Subject: [PATCH 5/5] screencasts into folders --- .DS_Store | Bin 6148 -> 6148 bytes 2018/.DS_Store | Bin 0 -> 6148 bytes .../baltimore_bridges.Rmd | 0 cetaceans.Rmd => 2018/cetaceans.Rmd | 0 college-majors.Rmd => 2018/college-majors.Rmd | 0 malaria.Rmd => 2018/malaria.Rmd | 0 medium-datasci.Rmd => 2018/medium-datasci.Rmd | 0 movie-profit.Rmd => 2018/movie-profit.Rmd | 0 .../nyc-restaurants.Rmd | 0 r-downloads.Rmd => 2018/r-downloads.Rmd | 0 thanksgiving.Rmd => 2018/thanksgiving.Rmd | 0 trees.Rmd => 2018/trees.Rmd | 0 umbrella-week.Rmd => 2018/umbrella-week.Rmd | 0 us-dairy.Rmd => 2018/us-dairy.Rmd | 0 us-wind.Rmd => 2018/us-wind.Rmd | 0 us_phds.Rmd => 2018/us_phds.Rmd | 0 bike_traffic.Rmd => 2019/bike_traffic.Rmd | 0 .../bird-collisions.Rmd | 0 board-games.Rmd => 2019/board-games.Rmd | 0 bob-ross.Rmd => 2019/bob-ross.Rmd | 0 car-economy.Rmd => 2019/car-economy.Rmd | 0 cran-code.Rmd => 2019/cran-code.Rmd | 0 french-trains.Rmd => 2019/french-trains.Rmd | 0 golden-age-tv.Rmd => 2019/golden-age-tv.Rmd | 0 grand-slams.Rmd => 2019/grand-slams.Rmd | 0 .../honeycomb-puzzle.Rmd | 0 .../horror-movie-ratings.Rmd | 0 .../media-franchises.Rmd | 0 nobel-prize.Rmd => 2019/nobel-prize.Rmd | 0 nyc-pizza.Rmd => 2019/nyc-pizza.Rmd | 0 2019/nyc-squirrels/.DS_Store | Bin 0 -> 6148 bytes .../nyc-squirrels/nyc-squirrels-app}/app.R | 0 .../nyc-squirrels/nyc-squirrels.Rmd | 0 .../pascals-triangle.Rmd | 0 plastic-waste.Rmd => 2019/plastic-waste.Rmd | 0 ramen-ratings.Rmd => 2019/ramen-ratings.Rmd | 0 .../riddler-die-reroll.Rmd | 0 .../riddler-die-roll-low.Rmd | 0 .../riddler-spam-comments.Rmd | 0 seattle-pets.Rmd => 2019/seattle-pets.Rmd | 0 .../simpsons-guests.Rmd | 0 space-launches.Rmd => 2019/space-launches.Rmd | 0 .../student-teacher-ratios.Rmd | 0 .../tidytuesday-tweets.Rmd | 0 wine-ratings.Rmd => 2019/wine-ratings.Rmd | 0 2019/women-workplace/.DS_Store | Bin 0 -> 6148 bytes .../women-workplace-app}/app.R | 0 .../women-workplace/women-workplace.Rmd | 0 .../womens-world-cup.Rmd | 0 .../african-american-achievements.Rmd | 0 .../african-american-history.Rmd | 0 .../animal-crossing.Rmd | 0 .../australian-animal-outcomes.Rmd | 0 .../beach-volleyball.Rmd | 0 .../beer-production.Rmd | 0 2020/broadway/.DS_Store | Bin 0 -> 6148 bytes 2020/broadway/broadway-shinybones/.DS_Store | Bin 0 -> 6148 bytes .../broadway/broadway-shinybones}/.gitignore | 0 .../broadway/broadway-shinybones}/README.md | 0 .../broadway/broadway-shinybones}/_site.yml | 0 .../broadway/broadway-shinybones}/app.R | 0 .../broadway-shinybones.Rproj | 0 .../broadway-shinybones}/components/README.md | 0 .../broadway-shinybones}/pages/README.md | 0 .../broadway-shinybones}/show_metrics.rds | Bin broadway.Rmd => 2020/broadway/broadway.Rmd | 0 .../caribou-locations.Rmd | 0 cocktails.Rmd => 2020/cocktails.Rmd | 0 coffee-ratings.Rmd => 2020/coffee-ratings.Rmd | 0 cord-19.Rmd => 2020/cord-19.Rmd | 0 .../crop-yields-shiny}/app.Rmd | 0 .../crop-yields-shiny}/yields_tidy.rds | Bin gdpr.Rmd => 2020/gdpr.Rmd | 0 .../office-transcripts.Rmd | 0 .../riddler-circular-table.Rmd | 0 .../riddler-prisoner-coin-flip.Rmd | 0 tour-de-france.Rmd => 2020/tour-de-france.Rmd | 0 uncanny-xmen.Rmd => 2020/uncanny-xmen.Rmd | 0 .../volcano-eruptions.Rmd | 0 .../ml-practice}/board-games.Rmd | 0 {ml-practice => 2021/ml-practice}/chopped.Rmd | 0 {ml-practice => 2021/ml-practice}/ep11.Rmd | 0 .../ml-practice}/ep11_EDA.Rmd | 0 {ml-practice => 2021/ml-practice}/ep12.Rmd | 0 .../ml-practice}/ep12_eda.Rmd | 0 {ml-practice => 2021/ml-practice}/ep4.Rmd | 0 {ml-practice => 2021/ml-practice}/ep5.Rmd | 0 {ml-practice => 2021/ml-practice}/ep7.Rmd | 0 {ml-practice => 2021/ml-practice}/ep7_EDA.Rmd | 0 {ml-practice => 2021/ml-practice}/ep9.Rmd | 0 {ml-practice => 2021/ml-practice}/ep9_EDA.Rmd | 0 .../ml-practice}/memes/templates/drake.jpeg | Bin .../memes/templates/galaxybrain3.png | Bin .../memes/templates/galaxybrain4.jpg | Bin .../ml-practice}/memes/templates/happysad.jpg | Bin .../ml-practice}/ml-template.Rmd | 0 .../registered-nurses}/app.R | 0 .../transit_costs}/transit_costs.Rmd | 0 video-game-app.Rmd => 2021/video-game-app.Rmd | 0 {chips => 2022/chips}/app.R | 0 {lego-data => 2022/lego-data}/colors.csv.gz | Bin {lego-data => 2022/lego-data}/elements.csv.gz | Bin .../lego-data}/inventories.csv.gz | Bin .../lego-data}/inventory_minifigs.csv.gz | Bin .../lego-data}/inventory_parts.csv.gz | Bin .../lego-data}/inventory_sets.csv.gz | Bin {lego-data => 2022/lego-data}/minifigs.csv.gz | Bin .../lego-data}/part_categories.csv.gz | Bin .../lego-data}/part_relationships.csv.gz | Bin {lego-data => 2022/lego-data}/parts.csv.gz | Bin {lego-data => 2022/lego-data}/sets.csv.gz | Bin {lego-data => 2022/lego-data}/themes.csv.gz | Bin {viz-buzz => 2022/viz-buzz}/viz-buzz-pilot.R | 0 screencast-annotations/README.md | 4673 ++++++++--------- 114 files changed, 2180 insertions(+), 2493 deletions(-) create mode 100644 2018/.DS_Store rename baltimore_bridges.Rmd => 2018/baltimore_bridges.Rmd (100%) rename cetaceans.Rmd => 2018/cetaceans.Rmd (100%) rename college-majors.Rmd => 2018/college-majors.Rmd (100%) rename malaria.Rmd => 2018/malaria.Rmd (100%) rename medium-datasci.Rmd => 2018/medium-datasci.Rmd (100%) rename movie-profit.Rmd => 2018/movie-profit.Rmd (100%) rename nyc-restaurants.Rmd => 2018/nyc-restaurants.Rmd (100%) rename r-downloads.Rmd => 2018/r-downloads.Rmd (100%) rename thanksgiving.Rmd => 2018/thanksgiving.Rmd (100%) rename trees.Rmd => 2018/trees.Rmd (100%) rename umbrella-week.Rmd => 2018/umbrella-week.Rmd (100%) rename us-dairy.Rmd => 2018/us-dairy.Rmd (100%) rename us-wind.Rmd => 2018/us-wind.Rmd (100%) rename us_phds.Rmd => 2018/us_phds.Rmd (100%) rename bike_traffic.Rmd => 2019/bike_traffic.Rmd (100%) rename bird-collisions.Rmd => 2019/bird-collisions.Rmd (100%) rename board-games.Rmd => 2019/board-games.Rmd (100%) rename bob-ross.Rmd => 2019/bob-ross.Rmd (100%) rename car-economy.Rmd => 2019/car-economy.Rmd (100%) rename cran-code.Rmd => 2019/cran-code.Rmd (100%) rename french-trains.Rmd => 2019/french-trains.Rmd (100%) rename golden-age-tv.Rmd => 2019/golden-age-tv.Rmd (100%) rename grand-slams.Rmd => 2019/grand-slams.Rmd (100%) rename honeycomb-puzzle.Rmd => 2019/honeycomb-puzzle.Rmd (100%) rename horror-movie-ratings.Rmd => 2019/horror-movie-ratings.Rmd (100%) rename media-franchises.Rmd => 2019/media-franchises.Rmd (100%) rename nobel-prize.Rmd => 2019/nobel-prize.Rmd (100%) rename nyc-pizza.Rmd => 2019/nyc-pizza.Rmd (100%) create mode 100644 2019/nyc-squirrels/.DS_Store rename {nyc-squirrels-app => 2019/nyc-squirrels/nyc-squirrels-app}/app.R (100%) rename nyc-squirrels.Rmd => 2019/nyc-squirrels/nyc-squirrels.Rmd (100%) rename pascals-triangle.Rmd => 2019/pascals-triangle.Rmd (100%) rename plastic-waste.Rmd => 2019/plastic-waste.Rmd (100%) rename ramen-ratings.Rmd => 2019/ramen-ratings.Rmd (100%) rename riddler-die-reroll.Rmd => 2019/riddler-die-reroll.Rmd (100%) rename riddler-die-roll-low.Rmd => 2019/riddler-die-roll-low.Rmd (100%) rename riddler-spam-comments.Rmd => 2019/riddler-spam-comments.Rmd (100%) rename seattle-pets.Rmd => 2019/seattle-pets.Rmd (100%) rename simpsons-guests.Rmd => 2019/simpsons-guests.Rmd (100%) rename space-launches.Rmd => 2019/space-launches.Rmd (100%) rename student-teacher-ratios.Rmd => 2019/student-teacher-ratios.Rmd (100%) rename tidytuesday-tweets.Rmd => 2019/tidytuesday-tweets.Rmd (100%) rename wine-ratings.Rmd => 2019/wine-ratings.Rmd (100%) create mode 100644 2019/women-workplace/.DS_Store rename {women-workplace-app => 2019/women-workplace/women-workplace-app}/app.R (100%) rename women-workplace.Rmd => 2019/women-workplace/women-workplace.Rmd (100%) rename womens-world-cup.Rmd => 2019/womens-world-cup.Rmd (100%) rename african-american-achievements.Rmd => 2020/african-american-achievements.Rmd (100%) rename african-american-history.Rmd => 2020/african-american-history.Rmd (100%) rename animal-crossing.Rmd => 2020/animal-crossing.Rmd (100%) rename australian-animal-outcomes.Rmd => 2020/australian-animal-outcomes.Rmd (100%) rename beach-volleyball.Rmd => 2020/beach-volleyball.Rmd (100%) rename beer-production.Rmd => 2020/beer-production.Rmd (100%) create mode 100644 2020/broadway/.DS_Store create mode 100644 2020/broadway/broadway-shinybones/.DS_Store rename {broadway-shinybones => 2020/broadway/broadway-shinybones}/.gitignore (100%) rename {broadway-shinybones => 2020/broadway/broadway-shinybones}/README.md (100%) rename {broadway-shinybones => 2020/broadway/broadway-shinybones}/_site.yml (100%) rename {broadway-shinybones => 2020/broadway/broadway-shinybones}/app.R (100%) rename {broadway-shinybones => 2020/broadway/broadway-shinybones}/broadway-shinybones.Rproj (100%) rename {broadway-shinybones => 2020/broadway/broadway-shinybones}/components/README.md (100%) rename {broadway-shinybones => 2020/broadway/broadway-shinybones}/pages/README.md (100%) rename {broadway-shinybones => 2020/broadway/broadway-shinybones}/show_metrics.rds (100%) rename broadway.Rmd => 2020/broadway/broadway.Rmd (100%) rename caribou-locations.Rmd => 2020/caribou-locations.Rmd (100%) rename cocktails.Rmd => 2020/cocktails.Rmd (100%) rename coffee-ratings.Rmd => 2020/coffee-ratings.Rmd (100%) rename cord-19.Rmd => 2020/cord-19.Rmd (100%) rename {crop-yields-shiny => 2020/crop-yields-shiny}/app.Rmd (100%) rename {crop-yields-shiny => 2020/crop-yields-shiny}/yields_tidy.rds (100%) rename gdpr.Rmd => 2020/gdpr.Rmd (100%) rename office-transcripts.Rmd => 2020/office-transcripts.Rmd (100%) rename riddler-circular-table.Rmd => 2020/riddler-circular-table.Rmd (100%) rename riddler-prisoner-coin-flip.Rmd => 2020/riddler-prisoner-coin-flip.Rmd (100%) rename tour-de-france.Rmd => 2020/tour-de-france.Rmd (100%) rename uncanny-xmen.Rmd => 2020/uncanny-xmen.Rmd (100%) rename volcano-eruptions.Rmd => 2020/volcano-eruptions.Rmd (100%) rename {ml-practice => 2021/ml-practice}/board-games.Rmd (100%) rename {ml-practice => 2021/ml-practice}/chopped.Rmd (100%) rename {ml-practice => 2021/ml-practice}/ep11.Rmd (100%) rename {ml-practice => 2021/ml-practice}/ep11_EDA.Rmd (100%) rename {ml-practice => 2021/ml-practice}/ep12.Rmd (100%) rename {ml-practice => 2021/ml-practice}/ep12_eda.Rmd (100%) rename {ml-practice => 2021/ml-practice}/ep4.Rmd (100%) rename {ml-practice => 2021/ml-practice}/ep5.Rmd (100%) rename {ml-practice => 2021/ml-practice}/ep7.Rmd (100%) rename {ml-practice => 2021/ml-practice}/ep7_EDA.Rmd (100%) rename {ml-practice => 2021/ml-practice}/ep9.Rmd (100%) rename {ml-practice => 2021/ml-practice}/ep9_EDA.Rmd (100%) rename {ml-practice => 2021/ml-practice}/memes/templates/drake.jpeg (100%) rename {ml-practice => 2021/ml-practice}/memes/templates/galaxybrain3.png (100%) rename {ml-practice => 2021/ml-practice}/memes/templates/galaxybrain4.jpg (100%) rename {ml-practice => 2021/ml-practice}/memes/templates/happysad.jpg (100%) rename {ml-practice => 2021/ml-practice}/ml-template.Rmd (100%) rename {registered-nurses => 2021/registered-nurses}/app.R (100%) rename {transit_costs => 2021/transit_costs}/transit_costs.Rmd (100%) rename video-game-app.Rmd => 2021/video-game-app.Rmd (100%) rename {chips => 2022/chips}/app.R (100%) rename {lego-data => 2022/lego-data}/colors.csv.gz (100%) rename {lego-data => 2022/lego-data}/elements.csv.gz (100%) rename {lego-data => 2022/lego-data}/inventories.csv.gz (100%) rename {lego-data => 2022/lego-data}/inventory_minifigs.csv.gz (100%) rename {lego-data => 2022/lego-data}/inventory_parts.csv.gz (100%) rename {lego-data => 2022/lego-data}/inventory_sets.csv.gz (100%) rename {lego-data => 2022/lego-data}/minifigs.csv.gz (100%) rename {lego-data => 2022/lego-data}/part_categories.csv.gz (100%) rename {lego-data => 2022/lego-data}/part_relationships.csv.gz (100%) rename {lego-data => 2022/lego-data}/parts.csv.gz (100%) rename {lego-data => 2022/lego-data}/sets.csv.gz (100%) rename {lego-data => 2022/lego-data}/themes.csv.gz (100%) rename {viz-buzz => 2022/viz-buzz}/viz-buzz-pilot.R (100%) diff --git a/.DS_Store b/.DS_Store index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..2fa2949b7ff2f71e31e4619883ea7e975f2f05cb 100644 GIT binary patch literal 6148 zcmeHKOG*Pl5UtWIM%)Ah5m$Wyk=&pSm`H!nwD zVb|YaFQ@BKKWXscLV-{q6bJ?WwF0=a#foji@S#8`5DL62Am>9u5zLOQp&lJ@ngRgj z8Lfu88rZtCh{~zO*=}q#xlxT$lp}-$gfCuHI9Ai^{w|>~3+_eei3`I=lwNinh-gyL| hA?L`R4%&EAjHu~2NHo+1YW5HK<@2yA9#Vq@DZz_f~SGdl-A2T%b}H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0XKb;<3Qv6ghUnbSu)zx! z7-N6__o&z&;|>j)>R~cl)a%92EG{3{UNa^78zSd+d5d;6@aM6XcOvo<|HOH z5Q~hhBP|s1P@;!QzG8@n)1IALfuj^(NZxRx{sV& dr}rn-*;8aWBj5-tu1ww&$1@wGKEQ)2u-qDT@R`vuS>NVPozTGj2 zNdv?(WADfaO`J+}s^lkzIGyp7$CVj-N2f#V%bX{F`R(x{`GzaWhC@ons6&BJU{`^C zZ;mzppYg9W_{iU-L@N{s1^$=Hg fj;+)Cllts0Gxm-;i^h#kjEjH?5>+Vh0}8wX$2>o4 literal 0 HcmV?d00001 diff --git a/women-workplace-app/app.R b/2019/women-workplace/women-workplace-app/app.R similarity index 100% rename from women-workplace-app/app.R rename to 2019/women-workplace/women-workplace-app/app.R diff --git a/women-workplace.Rmd b/2019/women-workplace/women-workplace.Rmd similarity index 100% rename from women-workplace.Rmd rename to 2019/women-workplace/women-workplace.Rmd diff --git a/womens-world-cup.Rmd b/2019/womens-world-cup.Rmd similarity index 100% rename from womens-world-cup.Rmd rename to 2019/womens-world-cup.Rmd diff --git a/african-american-achievements.Rmd b/2020/african-american-achievements.Rmd similarity index 100% rename from african-american-achievements.Rmd rename to 2020/african-american-achievements.Rmd diff --git a/african-american-history.Rmd b/2020/african-american-history.Rmd similarity index 100% rename from african-american-history.Rmd rename to 2020/african-american-history.Rmd diff --git a/animal-crossing.Rmd b/2020/animal-crossing.Rmd similarity index 100% rename from animal-crossing.Rmd rename to 2020/animal-crossing.Rmd diff --git a/australian-animal-outcomes.Rmd b/2020/australian-animal-outcomes.Rmd similarity index 100% rename from australian-animal-outcomes.Rmd rename to 2020/australian-animal-outcomes.Rmd diff --git a/beach-volleyball.Rmd b/2020/beach-volleyball.Rmd similarity index 100% rename from beach-volleyball.Rmd rename to 2020/beach-volleyball.Rmd diff --git a/beer-production.Rmd b/2020/beer-production.Rmd similarity index 100% rename from beer-production.Rmd rename to 2020/beer-production.Rmd diff --git a/2020/broadway/.DS_Store b/2020/broadway/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2fa2949b7ff2f71e31e4619883ea7e975f2f05cb GIT binary patch literal 6148 zcmeHKOG*Pl5UtWIM%)Ah5m$Wyk=&pSm`H!nwD zVb|YaFQ@BKKWXscLV-{q6bJ?WwF0=a#foji@S#8`5DL62Am>9u5zLOQp&lJ@ngRgj z8Lfu88rZtCh{~zO*=}q#xlxT$lp}-$gfCuHI9Ai^{w|>~3+_eei3`I=lwNinh-gyL| hA?L`R4%&E%JI){czK!;?Yok?5Hop)a)WM7!fZGQjWd zoK}>mqzblqf7{J;u}WoSMc)j?m8mF}+qA@d_V#{veYN|X4acs39a}xM*XR97r>O9O zHrQeNAJt(ew`bcmWgksVt^6{5SJEHRvp(10;tV(g&cHD+fS%2gT`0PB2AlzBpkaW& z4-v|k8`g^Q>41?V0B{Vq2*&cS28`?g=7zN*JdmKNKuryH#0Z)Wf3&#VuvXM`3bHcp zV=D(cp#)hS{wU!Taz(e!fHQE&z=>W?xc}b{pZ^b&{K^?{29An>FfJCw9FJtZwexV? sYa{d?%EEEAVv~Y_v|_|^E53w^z#n-4%nfTrcp&~GAT+pf2L6 100% | -| Plastic Waste | [29:00](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=1740s) | Starting to make a choropleth map | -| Plastic Waste | [29:30](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=1770s) | Connecting ISO country names (used in mapping code) to country names given in the dataset | -| Plastic Waste | [32:00](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=1920s) | Actual code to create the map using given longitude and latitude | +| Seattle Bike Counts | [26:30](https://www.youtube.com/watch?v=sBho2GJE5lc&t=1590s) | Normalizing day of week data to percent of weekly traffic | +| Seattle Bike Counts | [42:00](https://www.youtube.com/watch?v=sBho2GJE5lc&t=2520s) | Starting analysis of directions of travel by time of day (commute vs. reverse-commute) | +| Seattle Bike Counts | [43:45](https://www.youtube.com/watch?v=sBho2GJE5lc&t=2625s) | Filtering out weekend days using wday function from `lubridate` package | +| Seattle Bike Counts | [45:30](https://www.youtube.com/watch?v=sBho2GJE5lc&t=2730s) | Using `spread` function to create new variable of ratio of bike counts at different commute times | +| Seattle Bike Counts | [47:30](https://www.youtube.com/watch?v=sBho2GJE5lc&t=2850s) | Visualizing ratio of bike counts by time of day | +| Seattle Bike Counts | [50:15](https://www.youtube.com/watch?v=sBho2GJE5lc&t=3015s) | Visualizing ratio by hour instead of time of day | +| Seattle Bike Counts | [52:50](https://www.youtube.com/watch?v=sBho2GJE5lc&t=3170s) | Ordering crossing in graph by when the average trip happened using mean of hour weighted by bike count | +| Seattle Bike Counts | [54:50](https://www.youtube.com/watch?v=sBho2GJE5lc&t=3290s) | Quick and dirty filter when creating a new variable within a `mutate` function | + +------------------------------------------------------------------------ + +#### Tennis Tournaments {#tennis-tournaments} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Tennis Tournaments | [5:00](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=300s) | Identifying duplicated rows ands fixing them | +| Tennis Tournaments | [11:15](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=675s) | Using `add_count` and `fct_reorder` functions to order categories that are broken down into sub-categories for graphing | +| Tennis Tournaments | [13:00](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=780s) | Tidying graph titles (e.g., replacing underscores with spaces) using `str_to_title` and `str_replace` functions | +| Tennis Tournaments | [15:00](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=900s) | Using `inner_join` function to merge datasets | +| Tennis Tournaments | [15:30](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=930s) | Calculating age from date of birth using `difftime` and `as.numeric` functions | +| Tennis Tournaments | [16:35](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=995s) | Adding simple calculations like `mean` and `median` into the text portion of markdown document | +| Tennis Tournaments | [17:45](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=1065s) | Looking at distribution of wins by sex using overlapping histograms | +| Tennis Tournaments | [18:55](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=1135s) | Binning years into decades using truncated division `%/%` | +| Tennis Tournaments | [20:15](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=1215s) | Splitting up boxplots so that they are separated into pairs (M/F) across a different group (decade) using `interaction` function | +| Tennis Tournaments | [20:30](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=1230s) | Analyzing distribution of ages across decades, looking specifically at the effect of Serena Williams (one individual having a disproportionate affect on the data, making it look like there's a trend) | +| Tennis Tournaments | [24:30](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=1470s) | Avoiding double-counting of individuals by counting their average age instead of their age at each win | +| Tennis Tournaments | [30:20](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=1820s) | Starting analysis to predict winner of Grand Slam tournaments | +| Tennis Tournaments | [35:00](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=2100s) | Creating rolling count using `row_number` function to make a count of previous tournament experience | +| Tennis Tournaments | [39:45](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=2385s) | Creating rolling win count using `cumsum` function | +| Tennis Tournaments | [41:00](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=2460s) | Lagging rolling win count using `lag` function (otherwise we get information about a win before a player has actually won, for prediction purposes) | +| Tennis Tournaments | [43:30](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=2610s) | Asking, "When someone is a finalist, what is their probability of winning as a function of previous tournaments won?" | +| Tennis Tournaments | [48:00](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=2880s) | Asking, "How does the number of wins a finalist has affect their chance of winning?" | +| Tennis Tournaments | [49:00](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=2940s) | Backtesting simple classifier where person with more tournament wins is predicted to win the given tournament | +| Tennis Tournaments | [51:45](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=3105s) | Creating classifier that gives points based on how far a player got in previous tournaments | +| Tennis Tournaments | [52:55](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=3175s) | Using `match` function to turn name of round reached (1st round, 2nd round, ...) into a number score (1, 2, ...) | +| Tennis Tournaments | [54:20](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=3260s) | Using `cummean` function to get score of average past performance (instead of `cumsum` function) | +| Tennis Tournaments | [1:04:10](https://www.youtube.com/watch?v=YWUCUfEeNJI&t=3850s) | Pulling names of rounds (1st round, 2nd round, ... ) based on the rounded numeric score of previous performance | + +------------------------------------------------------------------------ + +#### Bird Collisions {#bird-collisions} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Bird Collisions | [2:45](https://www.youtube.com/watch?v=zjWm__nFLXI&t=165s) | Analyzing when NAs appear in a dimension | +| Bird Collisions | [7:30](https://www.youtube.com/watch?v=zjWm__nFLXI&t=450s) | Looking at multiple categorical variable at the same time by gathering them into one column and eventually graphing each as a different facet | +| Bird Collisions | [9:30](https://www.youtube.com/watch?v=zjWm__nFLXI&t=570s) | Re-order facet graphs according to which ones have the fewest categories in them to ones that have the most | +| Bird Collisions | [20:45](https://www.youtube.com/watch?v=zjWm__nFLXI&t=1245s) | Geometric mean for estimating counts when there are a lot of low values (1-3 bird collisions, in this case) | +| Bird Collisions | [23:15](https://www.youtube.com/watch?v=zjWm__nFLXI&t=1395s) | Filling in "blank" observations where there were no observations made | +| Bird Collisions | [27:00](https://www.youtube.com/watch?v=zjWm__nFLXI&t=1620s) | Using log+1 to convert a dimension with values of 0 into a log scale | +| Bird Collisions | [29:00](https://www.youtube.com/watch?v=zjWm__nFLXI&t=1740s) | Adding confidence bounds for data using a geometric mean (where he first gets the idea of bootstrapping) | +| Bird Collisions | [32:00](https://www.youtube.com/watch?v=zjWm__nFLXI&t=1920s) | Actual coding of bootstrap starts | +| Bird Collisions | [38:30](https://www.youtube.com/watch?v=zjWm__nFLXI&t=2310s) | Adding confidence bounds using bootstrap data | +| Bird Collisions | [42:00](https://www.youtube.com/watch?v=zjWm__nFLXI&t=2520s) | Investigating potential confounding variables | +| Bird Collisions | [44:15](https://www.youtube.com/watch?v=zjWm__nFLXI&t=2655s) | Discussing approaches to dealing with confounding variables | +| Bird Collisions | [46:45](https://www.youtube.com/watch?v=zjWm__nFLXI&t=2805s) | Using `complete` function to get explicit NA values | + +------------------------------------------------------------------------ + +#### Student Teacher Ratios {#student-teacher-ratios} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Student-Teacher Ratios | [7:30](https://www.youtube.com/watch?v=NoUHdrailxA&t=450s) | Using `slice` function to select 10 highest and 10 lowest student-teacher ratios (like a filter using row numbers) | +| Student-Teacher Ratios | [12:35](https://www.youtube.com/watch?v=NoUHdrailxA&t=755s) | Adding GDP per capita to a dataset using `WDI` package | +| Student-Teacher Ratios | [17:40](https://www.youtube.com/watch?v=NoUHdrailxA&t=1060s) | Using `geom_text` to add labels to points on a scatterplot | +| Student-Teacher Ratios | [19:00](https://www.youtube.com/watch?v=NoUHdrailxA&t=1140s) | Using `WDIsearch` function from `WDI` package to search for country population data | +| Student-Teacher Ratios | [23:20](https://www.youtube.com/watch?v=NoUHdrailxA&t=1400s) | Explanation of trick with `geom_text` function's check_overlap argument to get label for US to appear by rearranging row order | +| Student-Teacher Ratios | [25:45](https://www.youtube.com/watch?v=NoUHdrailxA&t=1545s) | Using `comma_format` function from `scales` format to get more readable numeric legend (e.g., "500,000,000" instead of "5e+08") | +| Student-Teacher Ratios | [27:55](https://www.youtube.com/watch?v=NoUHdrailxA&t=1675s) | Exploring different education-related indicators in the `WDI` package | +| Student-Teacher Ratios | [31:55](https://www.youtube.com/watch?v=NoUHdrailxA&t=1915s) | Using `spread` function (now `pivot_wider`) to turn data from tidy to wide format | +| Student-Teacher Ratios | [32:15](https://www.youtube.com/watch?v=NoUHdrailxA&t=1935s) | Using `to_snake_case` function from `snakecase` package to convert field names to snake_case | +| Student-Teacher Ratios | [48:30](https://www.youtube.com/watch?v=NoUHdrailxA&t=2910s) | Exploring female/male school secondary school enrollment | +| Student-Teacher Ratios | [51:50](https://www.youtube.com/watch?v=NoUHdrailxA&t=3110s) | Note of caution on keeping confounders in mind when interpreting scatterplots | +| Student-Teacher Ratios | [52:30](https://www.youtube.com/watch?v=NoUHdrailxA&t=3150s) | Creating a linear regression of secondary school enrollment to explore confounders | +| Student-Teacher Ratios | [54:30](https://www.youtube.com/watch?v=NoUHdrailxA&t=3270s) | Discussing the actual confounder (GDP per capita) in the linear regression above | +| Student-Teacher Ratios | [57:20](https://www.youtube.com/watch?v=NoUHdrailxA&t=3440s) | Adding world region as another potential confounder | +| Student-Teacher Ratios | [58:00](https://www.youtube.com/watch?v=NoUHdrailxA&t=3480s) | Using `aov` function (ANOVA) to explore confounders further | +| Student-Teacher Ratios | [1:06:50](https://www.youtube.com/watch?v=NoUHdrailxA&t=4010s) | Reviewing and interpreting the final linear regression model | +| Student-Teacher Ratios | [1:08:00](https://www.youtube.com/watch?v=NoUHdrailxA&t=4080s) | Using `cor` function (correlation) to get correlation matrix for three variables (and brief explanation of multi-collinearity) | +| Student-Teacher Ratios | [1:10:10](https://www.youtube.com/watch?v=NoUHdrailxA&t=4210s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Nobel Prize Winners {#nobel-prize-winners} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Nobel Prize Winners | [2:00](https://www.youtube.com/watch?v=yWSpLfmES7w&t=120s) | Creating a stacked bar plot using `geom_col` and the `aes` function's `fill` argument (also bins years into decades with truncated division operator `%/%`) | +| Nobel Prize Winners | [3:30](https://www.youtube.com/watch?v=yWSpLfmES7w&t=210s) | Using `n_distinct` function to quickly count unique years in a group | +| Nobel Prize Winners | [9:00](https://www.youtube.com/watch?v=yWSpLfmES7w&t=540s) | Using `distinct` function and its `.keep_all` argument to de-duplicate data | +| Nobel Prize Winners | [10:50](https://www.youtube.com/watch?v=yWSpLfmES7w&t=650s) | Using `coalesce` function to replace NAs in a variable (similar to SQL COALESCE verb) | +| Nobel Prize Winners | [16:10](https://www.youtube.com/watch?v=yWSpLfmES7w&t=970s) | Using `year` function from `lubridate` package to calculate (approx.) age of laureates at time of award | +| Nobel Prize Winners | [16:50](https://www.youtube.com/watch?v=yWSpLfmES7w&t=1010s) | Using `fct_reorder` function to arrange boxplot graph by the median age of winners | +| Nobel Prize Winners | [22:50](https://www.youtube.com/watch?v=yWSpLfmES7w&t=1370s) | Defining a new variable within the `count` function (like doing a `mutate` in the `count` function) | +| Nobel Prize Winners | [23:40](https://www.youtube.com/watch?v=yWSpLfmES7w&t=1420s) | Creating a small multiples bar plot using `geom_col` and `facet_wrap` functions | +| Nobel Prize Winners | [26:15](https://www.youtube.com/watch?v=yWSpLfmES7w&t=1575s) | Importing income data from `WDI` package to explore relationship between high/low income countries and winners | +| Nobel Prize Winners | [33:45](https://www.youtube.com/watch?v=yWSpLfmES7w&t=2025s) | Using `fct_relevel` to change the levels of a categorical income variable (e.g., "Upper middle income") so that the ordering makes sense | +| Nobel Prize Winners | [36:25](https://www.youtube.com/watch?v=yWSpLfmES7w&t=2185s) | Starting to explore new dataset of nobel laureate publications | +| Nobel Prize Winners | [44:25](https://www.youtube.com/watch?v=yWSpLfmES7w&t=2665s) | Taking the mean of a subset of data without needing to fully filter the data beforehand | +| Nobel Prize Winners | [49:15](https://www.youtube.com/watch?v=yWSpLfmES7w&t=2955s) | Using `rank` function and its `ties.method` argument to add the ordinal number of a laureate's publication (e.g., 1st paper, 2nd paper) | +| Nobel Prize Winners | [1:05:10](https://www.youtube.com/watch?v=yWSpLfmES7w&t=3910s) | Lots of playing around with exploratory histograms (`geom_histogram`) | +| Nobel Prize Winners | [1:06:45](https://www.youtube.com/watch?v=yWSpLfmES7w&t=4005s) | Discussion of right-censoring as an issue (people winning the Nobel prize but still having active careers) | +| Nobel Prize Winners | [1:10:20](https://www.youtube.com/watch?v=yWSpLfmES7w&t=4220s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Plastic Waste {#plastic-waste} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Plastic Waste | [1:45](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=105s) | Using `summarise_all` to get proportion of NA values across many variables | +| Plastic Waste | [16:50](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=1010s) | Adding text labels to scatter plot for some points using check_overlap argument | +| Plastic Waste | [21:45](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=1305s) | Using `pmin` function to get the lower of two possible numbers for a percentage variable that was showing \> 100% | +| Plastic Waste | [29:00](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=1740s) | Starting to make a choropleth map | +| Plastic Waste | [29:30](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=1770s) | Connecting ISO country names (used in mapping code) to country names given in the dataset | +| Plastic Waste | [32:00](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=1920s) | Actual code to create the map using given longitude and latitude | | Plastic Waste | [33:45](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=2025s) | Using `fuzzyjoin` package to link variables that use regular expression instead of character (using `regex_right_join` / `regex_left_join` function) | -| Plastic Waste | [36:15](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=2175s) | Using `coord_fixed` function as a hack to get proper ratios for maps | -| Plastic Waste | [39:30](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=2370s) | Bringing in additional data using `WDI` package | -| Plastic Waste | [47:30](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=2850s) | Using `patchwork` package to show multiple graphs in the same plot | -| Plastic Waste | [53:00](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=3180s) | Importing and renaming multiple indicators from the `WDI` package at the same time | - - - -*** - - - -#### Wine Ratings - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Wine Ratings | [3:15](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=195s) | Using `extract` function from `tidyr` package to pull out year from text field | -| Wine Ratings | [9:15](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=555s) | Changing `extract` function to pull out year column more accurately | -| Wine Ratings | [13:00](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=780s) | Starting to explore prediction of points | -| Wine Ratings | [17:00](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=1020s) | Using `fct_lump` on country variable to collapse countries into an "Other" category, then `fct_relevel` to set the baseline category for a linear model | -| Wine Ratings | [21:30](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=1290s) | Investigating year as a potential confounding variable | -| Wine Ratings | [24:45](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=1485s) | Investigating "taster_name" as a potential confounding variable | -| Wine Ratings | [27:45](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=1665s) | Coefficient (TIE fighter) plot to see effect size of terms in a linear model, using `tidy` function from `broom` package | -| Wine Ratings | [30:45](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=1845s) | Polishing category names for presentation in graph using `str_replace` function | -| Wine Ratings | [32:15](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=1935s) | Using `augment` function to add predictions of linear model to original data | -| Wine Ratings | [33:30](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2010s) | Plotting predicted points vs. actual points | -| Wine Ratings | [34:45](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2085s) | Using ANOVA to determine the amount of variation that explained by different terms | -| Wine Ratings | [36:45](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2205s) | Using `tidytext` package to set up wine review text for Lasso regression | -| Wine Ratings | [40:00](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2400s) | Setting up and using `pairwise_cor` function to look at words that appear in reviews together | -| Wine Ratings | [45:00](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2700s) | Creating sparse matrix using `cast_sparse` function from `tidytext` package; used to perform a regression on positive/negative words | -| Wine Ratings | [46:45](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2805s) | Checking if row names of sparse matrix correspond to the wine_id values they represent | -| Wine Ratings | [47:00](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2820s) | Setting up sparse matrix for using `glmnet` package to do sparse regression using Lasso method | -| Wine Ratings | [48:15](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2895s) | Actually writing code for doing Lasso regression | -| Wine Ratings | [49:45](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2985s) | Basic explanation of Lasso regression | -| Wine Ratings | [51:00](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=3060s) | Putting Lasso model into tidy format | -| Wine Ratings | [53:15](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=3195s) | Explaining how the number of terms increases as lambda (penalty parameter) decreases | -| Wine Ratings | [54:00](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=3240s) | Answering how we choose a lambda value (penalty parameter) for Lasso regression | -| Wine Ratings | [56:45](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=3405s) | Using parallelization for intensive computations | -| Wine Ratings | [58:30](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=3510s) | Adding price (from original linear model) to Lasso regression | -| Wine Ratings | [1:02:15](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=3735s) | Shows glmnet.fit piece of a Lasso model (using `glmnet` package) | -| Wine Ratings | [1:03:30](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=3810s) | Picking a lambda value (penalty parameter) and explaining which one to pick | -| Wine Ratings | [1:08:15](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=4095s) | Taking most extreme coefficients (positive and negative) by grouping theme by direction | -| Wine Ratings | [1:10:30](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=4230s) | Demonstrating `tidytext` package's sentiment lexicon, then looking at individual reviews to demonstrate the model | -| Wine Ratings | [1:17:30](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=4650s) | Visualizing each coefficient's effect on a single review | -| Wine Ratings | [1:20:30](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=4830s) | Using `str_trunc` to truncate character strings | - - - -*** - - - -#### Ramen Reviews - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Ramen Reviews | [1:45](https://www.youtube.com/watch?v=tCa2di7aEP4&t=105s) | Looking at the website the data came from | -| Ramen Reviews | [2:55](https://www.youtube.com/watch?v=tCa2di7aEP4&t=175s) | Using `gather` function (now `pivot_longer`) to convert wide data to long (tidy) format | -| Ramen Reviews | [4:15](https://www.youtube.com/watch?v=tCa2di7aEP4&t=255s) | Graphing counts of all categorical variables at once, then exploring them | -| Ramen Reviews | [5:35](https://www.youtube.com/watch?v=tCa2di7aEP4&t=335s) | Using `fct_lump` function to lump three categorical variables to the top N categories and "Other" | -| Ramen Reviews | [7:45](https://www.youtube.com/watch?v=tCa2di7aEP4&t=465s) | Using `reorder_within` function to re-order factors that have the same name across multiple facets | -| Ramen Reviews | [9:10](https://www.youtube.com/watch?v=tCa2di7aEP4&t=550s) | Using `lm` function (linear model) to predict star rating | -| Ramen Reviews | [9:50](https://www.youtube.com/watch?v=tCa2di7aEP4&t=590s) | Visualising effects (and 95% CI) of indendent variables in linear model with a coefficient plot (TIE fighter plot) | -| Ramen Reviews | [11:30](https://www.youtube.com/watch?v=tCa2di7aEP4&t=690s) | Using `fct_relevel` function to get "Other" as the base reference level for categorical independent variables in a linear model | -| Ramen Reviews | [13:05](https://www.youtube.com/watch?v=tCa2di7aEP4&t=785s) | Using `extract` function and regex to split a camelCase variable into two separate variables | -| Ramen Reviews | [14:45](https://www.youtube.com/watch?v=tCa2di7aEP4&t=885s) | Using `facet_wrap` function to split coefficient / TIE fighter plot into three separate plots, based on type of coefficient | -| Ramen Reviews | [15:40](https://www.youtube.com/watch?v=tCa2di7aEP4&t=940s) | Using `geom_vline` function to add reference line to graph | +| Plastic Waste | [36:15](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=2175s) | Using `coord_fixed` function as a hack to get proper ratios for maps | +| Plastic Waste | [39:30](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=2370s) | Bringing in additional data using `WDI` package | +| Plastic Waste | [47:30](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=2850s) | Using `patchwork` package to show multiple graphs in the same plot | +| Plastic Waste | [53:00](https://www.youtube.com/watch?v=BRdLOYtJk9o&t=3180s) | Importing and renaming multiple indicators from the `WDI` package at the same time | + +------------------------------------------------------------------------ + +#### Wine Ratings {#wine-ratings} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Wine Ratings | [3:15](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=195s) | Using `extract` function from `tidyr` package to pull out year from text field | +| Wine Ratings | [9:15](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=555s) | Changing `extract` function to pull out year column more accurately | +| Wine Ratings | [13:00](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=780s) | Starting to explore prediction of points | +| Wine Ratings | [17:00](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=1020s) | Using `fct_lump` on country variable to collapse countries into an "Other" category, then `fct_relevel` to set the baseline category for a linear model | +| Wine Ratings | [21:30](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=1290s) | Investigating year as a potential confounding variable | +| Wine Ratings | [24:45](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=1485s) | Investigating "taster_name" as a potential confounding variable | +| Wine Ratings | [27:45](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=1665s) | Coefficient (TIE fighter) plot to see effect size of terms in a linear model, using `tidy` function from `broom` package | +| Wine Ratings | [30:45](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=1845s) | Polishing category names for presentation in graph using `str_replace` function | +| Wine Ratings | [32:15](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=1935s) | Using `augment` function to add predictions of linear model to original data | +| Wine Ratings | [33:30](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2010s) | Plotting predicted points vs. actual points | +| Wine Ratings | [34:45](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2085s) | Using ANOVA to determine the amount of variation that explained by different terms | +| Wine Ratings | [36:45](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2205s) | Using `tidytext` package to set up wine review text for Lasso regression | +| Wine Ratings | [40:00](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2400s) | Setting up and using `pairwise_cor` function to look at words that appear in reviews together | +| Wine Ratings | [45:00](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2700s) | Creating sparse matrix using `cast_sparse` function from `tidytext` package; used to perform a regression on positive/negative words | +| Wine Ratings | [46:45](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2805s) | Checking if row names of sparse matrix correspond to the wine_id values they represent | +| Wine Ratings | [47:00](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2820s) | Setting up sparse matrix for using `glmnet` package to do sparse regression using Lasso method | +| Wine Ratings | [48:15](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2895s) | Actually writing code for doing Lasso regression | +| Wine Ratings | [49:45](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=2985s) | Basic explanation of Lasso regression | +| Wine Ratings | [51:00](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=3060s) | Putting Lasso model into tidy format | +| Wine Ratings | [53:15](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=3195s) | Explaining how the number of terms increases as lambda (penalty parameter) decreases | +| Wine Ratings | [54:00](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=3240s) | Answering how we choose a lambda value (penalty parameter) for Lasso regression | +| Wine Ratings | [56:45](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=3405s) | Using parallelization for intensive computations | +| Wine Ratings | [58:30](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=3510s) | Adding price (from original linear model) to Lasso regression | +| Wine Ratings | [1:02:15](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=3735s) | Shows glmnet.fit piece of a Lasso model (using `glmnet` package) | +| Wine Ratings | [1:03:30](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=3810s) | Picking a lambda value (penalty parameter) and explaining which one to pick | +| Wine Ratings | [1:08:15](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=4095s) | Taking most extreme coefficients (positive and negative) by grouping theme by direction | +| Wine Ratings | [1:10:30](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=4230s) | Demonstrating `tidytext` package's sentiment lexicon, then looking at individual reviews to demonstrate the model | +| Wine Ratings | [1:17:30](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=4650s) | Visualizing each coefficient's effect on a single review | +| Wine Ratings | [1:20:30](https://www.youtube.com/watch?v=AQzZNIyjyWM&t=4830s) | Using `str_trunc` to truncate character strings | + +------------------------------------------------------------------------ + +#### Ramen Reviews {#ramen-reviews} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Ramen Reviews | [1:45](https://www.youtube.com/watch?v=tCa2di7aEP4&t=105s) | Looking at the website the data came from | +| Ramen Reviews | [2:55](https://www.youtube.com/watch?v=tCa2di7aEP4&t=175s) | Using `gather` function (now `pivot_longer`) to convert wide data to long (tidy) format | +| Ramen Reviews | [4:15](https://www.youtube.com/watch?v=tCa2di7aEP4&t=255s) | Graphing counts of all categorical variables at once, then exploring them | +| Ramen Reviews | [5:35](https://www.youtube.com/watch?v=tCa2di7aEP4&t=335s) | Using `fct_lump` function to lump three categorical variables to the top N categories and "Other" | +| Ramen Reviews | [7:45](https://www.youtube.com/watch?v=tCa2di7aEP4&t=465s) | Using `reorder_within` function to re-order factors that have the same name across multiple facets | +| Ramen Reviews | [9:10](https://www.youtube.com/watch?v=tCa2di7aEP4&t=550s) | Using `lm` function (linear model) to predict star rating | +| Ramen Reviews | [9:50](https://www.youtube.com/watch?v=tCa2di7aEP4&t=590s) | Visualising effects (and 95% CI) of indendent variables in linear model with a coefficient plot (TIE fighter plot) | +| Ramen Reviews | [11:30](https://www.youtube.com/watch?v=tCa2di7aEP4&t=690s) | Using `fct_relevel` function to get "Other" as the base reference level for categorical independent variables in a linear model | +| Ramen Reviews | [13:05](https://www.youtube.com/watch?v=tCa2di7aEP4&t=785s) | Using `extract` function and regex to split a camelCase variable into two separate variables | +| Ramen Reviews | [14:45](https://www.youtube.com/watch?v=tCa2di7aEP4&t=885s) | Using `facet_wrap` function to split coefficient / TIE fighter plot into three separate plots, based on type of coefficient | +| Ramen Reviews | [15:40](https://www.youtube.com/watch?v=tCa2di7aEP4&t=940s) | Using `geom_vline` function to add reference line to graph | | Ramen Reviews | [17:20](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1040s) | Using `unnest_tokens` function from `tidytext` package to explore the relationship between variety (a sparse categorical variable) and star rating | -| Ramen Reviews | [18:55](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1135s) | Explanation of how he would approach variety variable with Lasso regression | -| Ramen Reviews | [19:35](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1175s) | Web scraping the using `rvest` package and `SelectorGadget` (Chrome Extension CSS selector) | -| Ramen Reviews | [21:20](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1280s) | Actually writing code for web scraping, using `read_html`, `html_node`, and `html_table` functions | -| Ramen Reviews | [22:25](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1345s) | Using `clean_names` function from `janitor` package to clean up names of variables | -| Ramen Reviews | [23:05](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1385s) | Explanation of web scraping task: get full review text using the links from the review summary table scraped above | -| Ramen Reviews | [25:40](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1540s) | Using `parse_number` function as alternative to `as.integer` function to cleverly drop extra weird text in review number | -| Ramen Reviews | [26:45](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1605s) | Using `SelectorGadget` (Chrome Extension CSS selector) to identify part of page that contains review text | -| Ramen Reviews | [27:35](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1655s) | Using `html_nodes`, `html_text`, and `str_subset` functions to write custom function to scrape review text identified in step above | -| Ramen Reviews | [29:15](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1755s) | Adding `message` function to custom scraping function to display URLs as they are being scraped | -| Ramen Reviews | [30:15](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1815s) | Using `unnest_tokens` and `anti_join` functions to split review text into individual words and remove stop words (e.g., "the", "or", "and") | -| Ramen Reviews | [31:05](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1865s) | Catching a mistake in the custom function causing it to read the same URL every time | -| Ramen Reviews | [31:55](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1915s) | Using `str_detect` function to filter out review paragraphs without a keyword in it | -| Ramen Reviews | [32:40](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1960s) | Using `str_remove` function and regex to get rid of string that follows a specific pattern | -| Ramen Reviews | [34:10](https://www.youtube.com/watch?v=tCa2di7aEP4&t=2050s) | Explanation of `possibly` and `safely` functions in `purrr` package | -| Ramen Reviews | [37:45](https://www.youtube.com/watch?v=tCa2di7aEP4&t=2265s) | Reviewing output of the URL that failed to scrape, including using `character(0)` as a default null value | -| Ramen Reviews | [48:00](https://www.youtube.com/watch?v=tCa2di7aEP4&t=2880s) | Using `pairwise_cor` function from `widyr` package to see which words tend to appear in reviews together | -| Ramen Reviews | [51:05](https://www.youtube.com/watch?v=tCa2di7aEP4&t=3065s) | Using `igraph` and `ggraph` packages to make network plot of word correlations | -| Ramen Reviews | [51:55](https://www.youtube.com/watch?v=tCa2di7aEP4&t=3115s) | Using `geom_node_text` function to add labels to network plot | -| Ramen Reviews | [52:35](https://www.youtube.com/watch?v=tCa2di7aEP4&t=3155s) | Including all words (not just those connected to others) as vertices in the network plot | -| Ramen Reviews | [54:40](https://www.youtube.com/watch?v=tCa2di7aEP4&t=3280s) | Tweaking and refining network plot aesthetics (vertex size and colour) | -| Ramen Reviews | [56:00](https://www.youtube.com/watch?v=tCa2di7aEP4&t=3360s) | Weird hack for getting a dark outline on hard-to-see vertex points | -| Ramen Reviews | [59:15](https://www.youtube.com/watch?v=tCa2di7aEP4&t=3555s) | Summary of screencast | - - - -*** - - - -#### Media Franchise Revenue - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Media Franchise Revenue | [9:15](https://www.youtube.com/watch?v=1xsbTs9-a50&t=555s) | Explaining use of `semi_join` function to aggregate and filter groups | -| Media Franchise Revenue | [11:00](https://www.youtube.com/watch?v=1xsbTs9-a50&t=660s) | Putting the largest categories on the bottom of a stacked bar chart | -| Media Franchise Revenue | [14:30](https://www.youtube.com/watch?v=1xsbTs9-a50&t=870s) | Using `glue` function as alternative to `paste` for combining text, plus good explanation of it | -| Media Franchise Revenue | [19:30](https://www.youtube.com/watch?v=1xsbTs9-a50&t=1170s) | Multiple re-ordering using `fct_reorder` function of facetted graph (he works through several obstacles) | -| Media Franchise Revenue | [20:40](https://www.youtube.com/watch?v=1xsbTs9-a50&t=1240s) | Re-ordering the position of facetted graphs so that highest total revenue is at top left | -| Media Franchise Revenue | [26:00](https://www.youtube.com/watch?v=1xsbTs9-a50&t=1560s) | Investigating relationship between year created and revenue | -| Media Franchise Revenue | [26:40](https://www.youtube.com/watch?v=1xsbTs9-a50&t=1600s) | Creating scatter plot with points scaled by size and labelled points (`geom_text` function) | -| Media Franchise Revenue | [29:30](https://www.youtube.com/watch?v=1xsbTs9-a50&t=1770s) | Summary of screencast up to this point | +| Ramen Reviews | [18:55](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1135s) | Explanation of how he would approach variety variable with Lasso regression | +| Ramen Reviews | [19:35](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1175s) | Web scraping the using `rvest` package and `SelectorGadget` (Chrome Extension CSS selector) | +| Ramen Reviews | [21:20](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1280s) | Actually writing code for web scraping, using `read_html`, `html_node`, and `html_table` functions | +| Ramen Reviews | [22:25](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1345s) | Using `clean_names` function from `janitor` package to clean up names of variables | +| Ramen Reviews | [23:05](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1385s) | Explanation of web scraping task: get full review text using the links from the review summary table scraped above | +| Ramen Reviews | [25:40](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1540s) | Using `parse_number` function as alternative to `as.integer` function to cleverly drop extra weird text in review number | +| Ramen Reviews | [26:45](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1605s) | Using `SelectorGadget` (Chrome Extension CSS selector) to identify part of page that contains review text | +| Ramen Reviews | [27:35](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1655s) | Using `html_nodes`, `html_text`, and `str_subset` functions to write custom function to scrape review text identified in step above | +| Ramen Reviews | [29:15](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1755s) | Adding `message` function to custom scraping function to display URLs as they are being scraped | +| Ramen Reviews | [30:15](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1815s) | Using `unnest_tokens` and `anti_join` functions to split review text into individual words and remove stop words (e.g., "the", "or", "and") | +| Ramen Reviews | [31:05](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1865s) | Catching a mistake in the custom function causing it to read the same URL every time | +| Ramen Reviews | [31:55](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1915s) | Using `str_detect` function to filter out review paragraphs without a keyword in it | +| Ramen Reviews | [32:40](https://www.youtube.com/watch?v=tCa2di7aEP4&t=1960s) | Using `str_remove` function and regex to get rid of string that follows a specific pattern | +| Ramen Reviews | [34:10](https://www.youtube.com/watch?v=tCa2di7aEP4&t=2050s) | Explanation of `possibly` and `safely` functions in `purrr` package | +| Ramen Reviews | [37:45](https://www.youtube.com/watch?v=tCa2di7aEP4&t=2265s) | Reviewing output of the URL that failed to scrape, including using `character(0)` as a default null value | +| Ramen Reviews | [48:00](https://www.youtube.com/watch?v=tCa2di7aEP4&t=2880s) | Using `pairwise_cor` function from `widyr` package to see which words tend to appear in reviews together | +| Ramen Reviews | [51:05](https://www.youtube.com/watch?v=tCa2di7aEP4&t=3065s) | Using `igraph` and `ggraph` packages to make network plot of word correlations | +| Ramen Reviews | [51:55](https://www.youtube.com/watch?v=tCa2di7aEP4&t=3115s) | Using `geom_node_text` function to add labels to network plot | +| Ramen Reviews | [52:35](https://www.youtube.com/watch?v=tCa2di7aEP4&t=3155s) | Including all words (not just those connected to others) as vertices in the network plot | +| Ramen Reviews | [54:40](https://www.youtube.com/watch?v=tCa2di7aEP4&t=3280s) | Tweaking and refining network plot aesthetics (vertex size and colour) | +| Ramen Reviews | [56:00](https://www.youtube.com/watch?v=tCa2di7aEP4&t=3360s) | Weird hack for getting a dark outline on hard-to-see vertex points | +| Ramen Reviews | [59:15](https://www.youtube.com/watch?v=tCa2di7aEP4&t=3555s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Media Franchise Revenue {#media-franchise-revenue} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Media Franchise Revenue | [9:15](https://www.youtube.com/watch?v=1xsbTs9-a50&t=555s) | Explaining use of `semi_join` function to aggregate and filter groups | +| Media Franchise Revenue | [11:00](https://www.youtube.com/watch?v=1xsbTs9-a50&t=660s) | Putting the largest categories on the bottom of a stacked bar chart | +| Media Franchise Revenue | [14:30](https://www.youtube.com/watch?v=1xsbTs9-a50&t=870s) | Using `glue` function as alternative to `paste` for combining text, plus good explanation of it | +| Media Franchise Revenue | [19:30](https://www.youtube.com/watch?v=1xsbTs9-a50&t=1170s) | Multiple re-ordering using `fct_reorder` function of facetted graph (he works through several obstacles) | +| Media Franchise Revenue | [20:40](https://www.youtube.com/watch?v=1xsbTs9-a50&t=1240s) | Re-ordering the position of facetted graphs so that highest total revenue is at top left | +| Media Franchise Revenue | [26:00](https://www.youtube.com/watch?v=1xsbTs9-a50&t=1560s) | Investigating relationship between year created and revenue | +| Media Franchise Revenue | [26:40](https://www.youtube.com/watch?v=1xsbTs9-a50&t=1600s) | Creating scatter plot with points scaled by size and labelled points (`geom_text` function) | +| Media Franchise Revenue | [29:30](https://www.youtube.com/watch?v=1xsbTs9-a50&t=1770s) | Summary of screencast up to this point | | Media Franchise Revenue | [29:50](https://www.youtube.com/watch?v=1xsbTs9-a50&t=1790s) | Starting analysis original media of franchise (e.g., novel, video game, animated film) and revenue type (e.g., box office, merchandise) | -| Media Franchise Revenue | [33:35](https://www.youtube.com/watch?v=1xsbTs9-a50&t=2015s) | Graphing original media and revenue category as facetted bar plot with lots of reordering (ends at around 38:40) | -| Media Franchise Revenue | [40:30](https://www.youtube.com/watch?v=1xsbTs9-a50&t=2430s) | Alternative visualization of original media/revenue category using heat map | -| Media Franchise Revenue | [41:20](https://www.youtube.com/watch?v=1xsbTs9-a50&t=2480s) | Using `scale_fill_gradient2` function to specify custom colour scale | -| Media Franchise Revenue | [42:05](https://www.youtube.com/watch?v=1xsbTs9-a50&t=2525s) | Getting rid of gridlines in graph using `theme` function's panel.grid argument | -| Media Franchise Revenue | [44:05](https://www.youtube.com/watch?v=1xsbTs9-a50&t=2645s) | Using `fct_rev` function to reverse levels of factors | -| Media Franchise Revenue | [44:35](https://www.youtube.com/watch?v=1xsbTs9-a50&t=2675s) | Fixing overlapping axis text with tweaks to `theme` function's axis.text argument | -| Media Franchise Revenue | [46:05](https://www.youtube.com/watch?v=1xsbTs9-a50&t=2765s) | Reviewing visualization that inspired this dataset | -| Media Franchise Revenue | [47:25](https://www.youtube.com/watch?v=1xsbTs9-a50&t=2845s) | Adding text of total revenue to the end of each bar in a previous graph | -| Media Franchise Revenue | [50:20](https://www.youtube.com/watch?v=1xsbTs9-a50&t=3020s) | Using `paste0` function at add a "B" (for "billions") to the end of text labels on graph | -| Media Franchise Revenue | [51:35](https://www.youtube.com/watch?v=1xsbTs9-a50&t=3095s) | Using `expand_limits` functions to give more space for text labels not to get cut off | -| Media Franchise Revenue | [53:45](https://www.youtube.com/watch?v=1xsbTs9-a50&t=3225s) | Summary of screencast | - - - -*** - - - -#### Women's World Cup - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Women's World Cup | [2:15](https://www.youtube.com/watch?v=ZOQSuapvHqA&t=135s) | Adding country names using `countrycode` package | -| Women's World Cup | [3:45](https://www.youtube.com/watch?v=ZOQSuapvHqA&t=225s) | Web scraping country codes from Wikipedia | -| Women's World Cup | [6:00](https://www.youtube.com/watch?v=ZOQSuapvHqA&t=360s) | Combining tables that are separate lists into one dataframe | -| Women's World Cup | [14:00](https://www.youtube.com/watch?v=ZOQSuapvHqA&t=840s) | Using `rev` function (reverse) to turn multiple rows of soccer match scores into one row (base team and opposing team) | -| Women's World Cup | [26:30](https://www.youtube.com/watch?v=ZOQSuapvHqA&t=1590s) | Applying a `geom_smooth` linear model line to a scatter plot, then facetting it | -| Women's World Cup | [28:30](https://www.youtube.com/watch?v=ZOQSuapvHqA&t=1710s) | Adding a line with a slope of 1 (x = y) using `geom_abline` | -| Women's World Cup | [40:00](https://www.youtube.com/watch?v=ZOQSuapvHqA&t=2400s) | Pulling out elements of a list that is embedded in a dataframe | -| Women's World Cup | [1:09:45](https://www.youtube.com/watch?v=ZOQSuapvHqA&t=4185s) | Using `glue` function to add context to facet titles | - - - -*** - - - -#### Bob Ross Paintings - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Bob Ross Paintings | [1:40](https://www.youtube.com/watch?v=sD993H5FBIY&t=100s) | Using `clean_names` function in `janitor` package to get field names to snake_case | -| Bob Ross Paintings | [1:50](https://www.youtube.com/watch?v=sD993H5FBIY&t=110s) | Using `gather` function (now 'pivot_longer') to get wide elements into tall (tidy) format | -| Bob Ross Paintings | [2:35](https://www.youtube.com/watch?v=sD993H5FBIY&t=155s) | Cleaning text (`str_to_title`, `str_replace`) to get into nicer-to-read format | -| Bob Ross Paintings | [3:30](https://www.youtube.com/watch?v=sD993H5FBIY&t=210s) | Using `str_remove_all` function to trim trimming quotation marks and backslashes | -| Bob Ross Paintings | [4:40](https://www.youtube.com/watch?v=sD993H5FBIY&t=280s) | Using `extract` function to extract the season number and episode number from episode field; uses regex capturing groups | -| Bob Ross Paintings | [14:00](https://www.youtube.com/watch?v=sD993H5FBIY&t=840s) | Using `add_count` function's name argument to specify field's name | -| Bob Ross Paintings | [15:35](https://www.youtube.com/watch?v=sD993H5FBIY&t=935s) | Getting into whether the elements of Ross's paintings changed over time (e.g., are mountains more/less common over time?) | -| Bob Ross Paintings | [20:00](https://www.youtube.com/watch?v=sD993H5FBIY&t=1200s) | Quick point: could have used logistic regression to see change over time of elements | -| Bob Ross Paintings | [21:10](https://www.youtube.com/watch?v=sD993H5FBIY&t=1270s) | Asking, "What elements tends to appear together?" prompting clustering analysis | -| Bob Ross Paintings | [22:15](https://www.youtube.com/watch?v=sD993H5FBIY&t=1335s) | Using `pairwise_cor` to see which elements tend to appear together | +| Media Franchise Revenue | [33:35](https://www.youtube.com/watch?v=1xsbTs9-a50&t=2015s) | Graphing original media and revenue category as facetted bar plot with lots of reordering (ends at around 38:40) | +| Media Franchise Revenue | [40:30](https://www.youtube.com/watch?v=1xsbTs9-a50&t=2430s) | Alternative visualization of original media/revenue category using heat map | +| Media Franchise Revenue | [41:20](https://www.youtube.com/watch?v=1xsbTs9-a50&t=2480s) | Using `scale_fill_gradient2` function to specify custom colour scale | +| Media Franchise Revenue | [42:05](https://www.youtube.com/watch?v=1xsbTs9-a50&t=2525s) | Getting rid of gridlines in graph using `theme` function's panel.grid argument | +| Media Franchise Revenue | [44:05](https://www.youtube.com/watch?v=1xsbTs9-a50&t=2645s) | Using `fct_rev` function to reverse levels of factors | +| Media Franchise Revenue | [44:35](https://www.youtube.com/watch?v=1xsbTs9-a50&t=2675s) | Fixing overlapping axis text with tweaks to `theme` function's axis.text argument | +| Media Franchise Revenue | [46:05](https://www.youtube.com/watch?v=1xsbTs9-a50&t=2765s) | Reviewing visualization that inspired this dataset | +| Media Franchise Revenue | [47:25](https://www.youtube.com/watch?v=1xsbTs9-a50&t=2845s) | Adding text of total revenue to the end of each bar in a previous graph | +| Media Franchise Revenue | [50:20](https://www.youtube.com/watch?v=1xsbTs9-a50&t=3020s) | Using `paste0` function at add a "B" (for "billions") to the end of text labels on graph | +| Media Franchise Revenue | [51:35](https://www.youtube.com/watch?v=1xsbTs9-a50&t=3095s) | Using `expand_limits` functions to give more space for text labels not to get cut off | +| Media Franchise Revenue | [53:45](https://www.youtube.com/watch?v=1xsbTs9-a50&t=3225s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Women's World Cup {#womens-world-cup} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Women's World Cup | [2:15](https://www.youtube.com/watch?v=ZOQSuapvHqA&t=135s) | Adding country names using `countrycode` package | +| Women's World Cup | [3:45](https://www.youtube.com/watch?v=ZOQSuapvHqA&t=225s) | Web scraping country codes from Wikipedia | +| Women's World Cup | [6:00](https://www.youtube.com/watch?v=ZOQSuapvHqA&t=360s) | Combining tables that are separate lists into one dataframe | +| Women's World Cup | [14:00](https://www.youtube.com/watch?v=ZOQSuapvHqA&t=840s) | Using `rev` function (reverse) to turn multiple rows of soccer match scores into one row (base team and opposing team) | +| Women's World Cup | [26:30](https://www.youtube.com/watch?v=ZOQSuapvHqA&t=1590s) | Applying a `geom_smooth` linear model line to a scatter plot, then facetting it | +| Women's World Cup | [28:30](https://www.youtube.com/watch?v=ZOQSuapvHqA&t=1710s) | Adding a line with a slope of 1 (x = y) using `geom_abline` | +| Women's World Cup | [40:00](https://www.youtube.com/watch?v=ZOQSuapvHqA&t=2400s) | Pulling out elements of a list that is embedded in a dataframe | +| Women's World Cup | [1:09:45](https://www.youtube.com/watch?v=ZOQSuapvHqA&t=4185s) | Using `glue` function to add context to facet titles | + +------------------------------------------------------------------------ + +#### Bob Ross Paintings {#bob-ross-paintings} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Bob Ross Paintings | [1:40](https://www.youtube.com/watch?v=sD993H5FBIY&t=100s) | Using `clean_names` function in `janitor` package to get field names to snake_case | +| Bob Ross Paintings | [1:50](https://www.youtube.com/watch?v=sD993H5FBIY&t=110s) | Using `gather` function (now 'pivot_longer') to get wide elements into tall (tidy) format | +| Bob Ross Paintings | [2:35](https://www.youtube.com/watch?v=sD993H5FBIY&t=155s) | Cleaning text (`str_to_title`, `str_replace`) to get into nicer-to-read format | +| Bob Ross Paintings | [3:30](https://www.youtube.com/watch?v=sD993H5FBIY&t=210s) | Using `str_remove_all` function to trim trimming quotation marks and backslashes | +| Bob Ross Paintings | [4:40](https://www.youtube.com/watch?v=sD993H5FBIY&t=280s) | Using `extract` function to extract the season number and episode number from episode field; uses regex capturing groups | +| Bob Ross Paintings | [14:00](https://www.youtube.com/watch?v=sD993H5FBIY&t=840s) | Using `add_count` function's name argument to specify field's name | +| Bob Ross Paintings | [15:35](https://www.youtube.com/watch?v=sD993H5FBIY&t=935s) | Getting into whether the elements of Ross's paintings changed over time (e.g., are mountains more/less common over time?) | +| Bob Ross Paintings | [20:00](https://www.youtube.com/watch?v=sD993H5FBIY&t=1200s) | Quick point: could have used logistic regression to see change over time of elements | +| Bob Ross Paintings | [21:10](https://www.youtube.com/watch?v=sD993H5FBIY&t=1270s) | Asking, "What elements tends to appear together?" prompting clustering analysis | +| Bob Ross Paintings | [22:15](https://www.youtube.com/watch?v=sD993H5FBIY&t=1335s) | Using `pairwise_cor` to see which elements tend to appear together | | Bob Ross Paintings | [22:50](https://www.youtube.com/watch?v=sD993H5FBIY&t=1370s) | Discussion of a blind spot of pairwise correlation (high or perfect correlation on elements that only appear once or twice) | -| Bob Ross Paintings | [28:05](https://www.youtube.com/watch?v=sD993H5FBIY&t=1685s) | Asking, "What are clusters of elements that belong together?" | -| Bob Ross Paintings | [28:30](https://www.youtube.com/watch?v=sD993H5FBIY&t=1710s) | Creating network plot using `ggraph` and `igraph` packages | -| Bob Ross Paintings | [30:15](https://www.youtube.com/watch?v=sD993H5FBIY&t=1815s) | Reviewing network plot for interesting clusters (e.g., beach cluster, mountain cluster, structure cluster) | -| Bob Ross Paintings | [31:55](https://www.youtube.com/watch?v=sD993H5FBIY&t=1915s) | Explanation of Principal Component Analysis (PCA) | -| Bob Ross Paintings | [34:35](https://www.youtube.com/watch?v=sD993H5FBIY&t=2075s) | Start of actual PCA coding | -| Bob Ross Paintings | [34:50](https://www.youtube.com/watch?v=sD993H5FBIY&t=2090s) | Using `acast` function to create matrix of painting titles x painting elements (initially wrong, corrected at 36:30) | -| Bob Ross Paintings | [36:55](https://www.youtube.com/watch?v=sD993H5FBIY&t=2215s) | Centering the matrix data using `t` function (transpose of matrix), `colSums` function, and `colMeans` functions | -| Bob Ross Paintings | [38:15](https://www.youtube.com/watch?v=sD993H5FBIY&t=2295s) | Using `svd` function to performn singular value decomposition, then tidying with `broom` package | -| Bob Ross Paintings | [39:55](https://www.youtube.com/watch?v=sD993H5FBIY&t=2395s) | Exploring one principal component to get a better feel for what PCA is doing | -| Bob Ross Paintings | [43:20](https://www.youtube.com/watch?v=sD993H5FBIY&t=2600s) | Using `reorder_within` function to re-order factors within a grouping | -| Bob Ross Paintings | [48:00](https://www.youtube.com/watch?v=sD993H5FBIY&t=2880s) | Exploring different matrix names in PCA (u, v, d) | -| Bob Ross Paintings | [56:50](https://www.youtube.com/watch?v=sD993H5FBIY&t=3410s) | Looking at top 6 principal components of painting elements | -| Bob Ross Paintings | [57:45](https://www.youtube.com/watch?v=sD993H5FBIY&t=3465s) | Showing percentage of variation that each principal component is responsible for | - - - -*** - - - -#### Simpsons Guest Stars - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Simpsons Guest Stars | [4:15](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=255s) | Using `str_detect` function to find guests that played themselves | -| Simpsons Guest Stars | [7:55](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=475s) | Using `separate_rows` function and regex to get delimited values onto different rows (e.g., "Edna Krabappel; Ms. Melon" gets split into two rows) | -| Simpsons Guest Stars | [9:55](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=595s) | Using `parse_number` function to convert a numeric variable coded as character to a proper numeric variable | -| Simpsons Guest Stars | [14:45](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=885s) | Downloading and importing supplementary dataset of dialogue | -| Simpsons Guest Stars | [16:10](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=970s) | Using `semi_join` function to filter dataframe based on values that appear in another dataframe | -| Simpsons Guest Stars | [18:05](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=1085s) | Using `anti_join` function to check which values in a dataframe do not appear in another dataframe | -| Simpsons Guest Stars | [20:50](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=1250s) | Using `ifelse` function to recode a single value with another (i.e., "Edna Krapabbel" becomes "Edna Krabappel-Flanders") | -| Simpsons Guest Stars | [26:20](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=1580s) | Explaining the goal of all the data cleaning steps | -| Simpsons Guest Stars | [31:25](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=1885s) | Using `sample` function to get an example line for each character | -| Simpsons Guest Stars | [33:20](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=2000s) | Setting `geom_histogram` function's `binwidth` and `center` arguments to get specific bin sizes | +| Bob Ross Paintings | [28:05](https://www.youtube.com/watch?v=sD993H5FBIY&t=1685s) | Asking, "What are clusters of elements that belong together?" | +| Bob Ross Paintings | [28:30](https://www.youtube.com/watch?v=sD993H5FBIY&t=1710s) | Creating network plot using `ggraph` and `igraph` packages | +| Bob Ross Paintings | [30:15](https://www.youtube.com/watch?v=sD993H5FBIY&t=1815s) | Reviewing network plot for interesting clusters (e.g., beach cluster, mountain cluster, structure cluster) | +| Bob Ross Paintings | [31:55](https://www.youtube.com/watch?v=sD993H5FBIY&t=1915s) | Explanation of Principal Component Analysis (PCA) | +| Bob Ross Paintings | [34:35](https://www.youtube.com/watch?v=sD993H5FBIY&t=2075s) | Start of actual PCA coding | +| Bob Ross Paintings | [34:50](https://www.youtube.com/watch?v=sD993H5FBIY&t=2090s) | Using `acast` function to create matrix of painting titles x painting elements (initially wrong, corrected at 36:30) | +| Bob Ross Paintings | [36:55](https://www.youtube.com/watch?v=sD993H5FBIY&t=2215s) | Centering the matrix data using `t` function (transpose of matrix), `colSums` function, and `colMeans` functions | +| Bob Ross Paintings | [38:15](https://www.youtube.com/watch?v=sD993H5FBIY&t=2295s) | Using `svd` function to performn singular value decomposition, then tidying with `broom` package | +| Bob Ross Paintings | [39:55](https://www.youtube.com/watch?v=sD993H5FBIY&t=2395s) | Exploring one principal component to get a better feel for what PCA is doing | +| Bob Ross Paintings | [43:20](https://www.youtube.com/watch?v=sD993H5FBIY&t=2600s) | Using `reorder_within` function to re-order factors within a grouping | +| Bob Ross Paintings | [48:00](https://www.youtube.com/watch?v=sD993H5FBIY&t=2880s) | Exploring different matrix names in PCA (u, v, d) | +| Bob Ross Paintings | [56:50](https://www.youtube.com/watch?v=sD993H5FBIY&t=3410s) | Looking at top 6 principal components of painting elements | +| Bob Ross Paintings | [57:45](https://www.youtube.com/watch?v=sD993H5FBIY&t=3465s) | Showing percentage of variation that each principal component is responsible for | + +------------------------------------------------------------------------ + +#### Simpsons Guest Stars {#simpsons-guest-stars} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Simpsons Guest Stars | [4:15](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=255s) | Using `str_detect` function to find guests that played themselves | +| Simpsons Guest Stars | [7:55](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=475s) | Using `separate_rows` function and regex to get delimited values onto different rows (e.g., "Edna Krabappel; Ms. Melon" gets split into two rows) | +| Simpsons Guest Stars | [9:55](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=595s) | Using `parse_number` function to convert a numeric variable coded as character to a proper numeric variable | +| Simpsons Guest Stars | [14:45](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=885s) | Downloading and importing supplementary dataset of dialogue | +| Simpsons Guest Stars | [16:10](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=970s) | Using `semi_join` function to filter dataframe based on values that appear in another dataframe | +| Simpsons Guest Stars | [18:05](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=1085s) | Using `anti_join` function to check which values in a dataframe do not appear in another dataframe | +| Simpsons Guest Stars | [20:50](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=1250s) | Using `ifelse` function to recode a single value with another (i.e., "Edna Krapabbel" becomes "Edna Krabappel-Flanders") | +| Simpsons Guest Stars | [26:20](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=1580s) | Explaining the goal of all the data cleaning steps | +| Simpsons Guest Stars | [31:25](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=1885s) | Using `sample` function to get an example line for each character | +| Simpsons Guest Stars | [33:20](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=2000s) | Setting `geom_histogram` function's `binwidth` and `center` arguments to get specific bin sizes | | Simpsons Guest Stars | [37:25](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=2245s) | Using `unnest_tokens` and `anti_join` functions from `tidytext` package to split dialogue into individual words and remove stop words (e.g., "the", "or", "and") | -| Simpsons Guest Stars | [38:55](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=2335s) | Using `bind_tf_idf` function from `tidytext` package to get the TF-IDF (term frequency-inverse document frequency) of individual words | -| Simpsons Guest Stars | [42:50](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=2570s) | Using `top_n` function to get the top 1 TF-IDF value for each role | -| Simpsons Guest Stars | [44:05](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=2645s) | Using `paste0` function to combine two character variables (e.g., "Groundskeeper Willie" and "ach" (separate variables) become "Groundskeeper Willie: ach") | -| Simpsons Guest Stars | [48:10](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=2890s) | Explanation of what TF-IDF (text frequency-inverse document frequency) tells us and how it is a "catchphrase detector" | -| Simpsons Guest Stars | [56:40](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=3400s) | Summary of screencast | - - - -*** - +| Simpsons Guest Stars | [38:55](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=2335s) | Using `bind_tf_idf` function from `tidytext` package to get the TF-IDF (term frequency-inverse document frequency) of individual words | +| Simpsons Guest Stars | [42:50](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=2570s) | Using `top_n` function to get the top 1 TF-IDF value for each role | +| Simpsons Guest Stars | [44:05](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=2645s) | Using `paste0` function to combine two character variables (e.g., "Groundskeeper Willie" and "ach" (separate variables) become "Groundskeeper Willie: ach") | +| Simpsons Guest Stars | [48:10](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=2890s) | Explanation of what TF-IDF (text frequency-inverse document frequency) tells us and how it is a "catchphrase detector" | +| Simpsons Guest Stars | [56:40](https://www.youtube.com/watch?v=EYuuAGDeGrQ&t=3400s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Pizza Ratings {#pizza-ratings} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Pizza Ratings | [4:45](https://www.youtube.com/watch?v=Mkac8DHScps&t=285s) | Transforming time into something more readable (from time value of seconds since Unix epoch 1970-01-01), then converting it into a date | +| Pizza Ratings | [9:05](https://www.youtube.com/watch?v=Mkac8DHScps&t=545s) | Formatting x-axis text so that it is rotated and readable, then re-ordering using `fct_relevel` function so that it is in its proper ordinal order | +| Pizza Ratings | [11:00](https://www.youtube.com/watch?v=Mkac8DHScps&t=660s) | Converting string answers to integer counterparts to get an overall numeric value for how good each place is | +| Pizza Ratings | [12:30](https://www.youtube.com/watch?v=Mkac8DHScps&t=750s) | Commentary on speed of `mutate` calculation within or without a group (non-grouped is slightly faster) | +| Pizza Ratings | [15:30](https://www.youtube.com/watch?v=Mkac8DHScps&t=930s) | Re-ordering groups by total votes using `fct_reorder` function, while still maintaining the groups themselves | +| Pizza Ratings | [19:15](https://www.youtube.com/watch?v=Mkac8DHScps&t=1155s) | Using `glue` package to combine place name and total respondents | +| Pizza Ratings | [20:30](https://www.youtube.com/watch?v=Mkac8DHScps&t=1230s) | Using statistical test to give confidence intervals on average score | +| Pizza Ratings | [22:15](https://www.youtube.com/watch?v=Mkac8DHScps&t=1335s) | Actually using the `t.test` function with toy example | +| Pizza Ratings | [23:15](https://www.youtube.com/watch?v=Mkac8DHScps&t=1395s) | Using weighted linear model instead (which doesn't end up working) | +| Pizza Ratings | [26:00](https://www.youtube.com/watch?v=Mkac8DHScps&t=1560s) | Using custom function with `rep` function to get vector of repeated scores (sneaky way of weighting) so that we can perform a proper t-test | +| Pizza Ratings | [27:30](https://www.youtube.com/watch?v=Mkac8DHScps&t=1650s) | Summarizing `t.test` function into a list (alternative to nesting) | +| Pizza Ratings | [31:20](https://www.youtube.com/watch?v=Mkac8DHScps&t=1880s) | Adding error bars using `geom_errorbarh` to make a TIE fighter plot that shows confidence intervals | +| Pizza Ratings | [36:30](https://www.youtube.com/watch?v=Mkac8DHScps&t=2190s) | Bringing in additional data from Barstool ratings (to supplement survey of Open R meetup NY) | +| Pizza Ratings | [39:45](https://www.youtube.com/watch?v=Mkac8DHScps&t=2385s) | Getting survey data to the place level so that we can add an additional dataset | +| Pizza Ratings | [41:15](https://www.youtube.com/watch?v=Mkac8DHScps&t=2475s) | Checking for duplicates in the joined data | +| Pizza Ratings | [42:15](https://www.youtube.com/watch?v=Mkac8DHScps&t=2535s) | Calling off the planned analysis due to low sample sizes (too much noise, not enough overlap between datasets) | +| Pizza Ratings | [45:15](https://www.youtube.com/watch?v=Mkac8DHScps&t=2715s) | Looking at Barstool data on its own | +| Pizza Ratings | [55:15](https://www.youtube.com/watch?v=Mkac8DHScps&t=3315s) | Renaming all variables with a certain string pattern in them | +| Pizza Ratings | [58:00](https://www.youtube.com/watch?v=Mkac8DHScps&t=3480s) | Comparing Dave's reviews with all other critics | +| Pizza Ratings | [59:15](https://www.youtube.com/watch?v=Mkac8DHScps&t=3555s) | Adding `geom_abline` showing x = y as comparison for `geom_smooth` linear model line | +| Pizza Ratings | [1:02:30](https://www.youtube.com/watch?v=Mkac8DHScps&t=3750s) | Changing the location of the `aes` function to change what the legend icons look like for size aesthetic | + +------------------------------------------------------------------------ + +#### Car Fuel Efficiency {#car-fuel-efficiency} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Car Fuel Efficiency | [3:20](https://www.youtube.com/watch?v=RpeioixHOHw&t=200s) | Using `select`, `sort`, and `colnames` functions to sort variables in alphabetical order | +| Car Fuel Efficiency | [10:00](https://www.youtube.com/watch?v=RpeioixHOHw&t=600s) | Adding `geom_abline` for y = x to a scatter plot for comparison | +| Car Fuel Efficiency | [18:00](https://www.youtube.com/watch?v=RpeioixHOHw&t=1080s) | Visualising using `geom_boxplot` for mpg by vehicle class (size of car) | +| Car Fuel Efficiency | [24:45](https://www.youtube.com/watch?v=RpeioixHOHw&t=1485s) | Start of explanation of prediction goals | +| Car Fuel Efficiency | [27:00](https://www.youtube.com/watch?v=RpeioixHOHw&t=1620s) | Creating train and test sets, along with trick using `sample_frac` function to randomly re-arrange all rows in a dataset | +| Car Fuel Efficiency | [28:35](https://www.youtube.com/watch?v=RpeioixHOHw&t=1715s) | First step of developing linear model: visually adding `geom_smooth` | +| Car Fuel Efficiency | [30:00](https://www.youtube.com/watch?v=RpeioixHOHw&t=1800s) | Using `augment` function to add extra variables from model to original dataset (fitted values and residuals, especially) | +| Car Fuel Efficiency | [30:45](https://www.youtube.com/watch?v=RpeioixHOHw&t=1845s) | Creating residuals plot and explaining what you want and don't want to see | +| Car Fuel Efficiency | [31:50](https://www.youtube.com/watch?v=RpeioixHOHw&t=1910s) | Explanation of splines | +| Car Fuel Efficiency | [33:30](https://www.youtube.com/watch?v=RpeioixHOHw&t=2010s) | Visualising effect of regressing using natural splines | +| Car Fuel Efficiency | [35:10](https://www.youtube.com/watch?v=RpeioixHOHw&t=2110s) | Creating a tibble to test different degrees of freedom (1:10) for natural splines | +| Car Fuel Efficiency | [36:30](https://www.youtube.com/watch?v=RpeioixHOHw&t=2190s) | Using `unnest` function to get tidy versions of different models | +| Car Fuel Efficiency | [37:55](https://www.youtube.com/watch?v=RpeioixHOHw&t=2275s) | Visualising fitted values of all 6 different models at the same time | +| Car Fuel Efficiency | [42:10](https://www.youtube.com/watch?v=RpeioixHOHw&t=2530s) | Investigating whether the model got "better" as we added degrees of freedom to the natural splines, using the `glance` function | +| Car Fuel Efficiency | [47:45](https://www.youtube.com/watch?v=RpeioixHOHw&t=2865s) | Using ANOVA to perform a statistical test on whether natural splines as a group explain variation in MPG | +| Car Fuel Efficiency | [48:30](https://www.youtube.com/watch?v=RpeioixHOHw&t=2910s) | Exploring colinearity of dependant variables (displacement and cylinders) | +| Car Fuel Efficiency | [55:10](https://www.youtube.com/watch?v=RpeioixHOHw&t=3310s) | Binning years into every two years using `floor` function | +| Car Fuel Efficiency | [56:40](https://www.youtube.com/watch?v=RpeioixHOHw&t=3400s) | Using `summarise_at` function to do quick averaging of multiple variables | +------------------------------------------------------------------------ -#### Pizza Ratings +#### Horror Movies {#horror-movies} [Back to summary](#screencast-summary) -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Pizza Ratings | [4:45](https://www.youtube.com/watch?v=Mkac8DHScps&t=285s) | Transforming time into something more readable (from time value of seconds since Unix epoch 1970-01-01), then converting it into a date | -| Pizza Ratings | [9:05](https://www.youtube.com/watch?v=Mkac8DHScps&t=545s) | Formatting x-axis text so that it is rotated and readable, then re-ordering using `fct_relevel` function so that it is in its proper ordinal order | -| Pizza Ratings | [11:00](https://www.youtube.com/watch?v=Mkac8DHScps&t=660s) | Converting string answers to integer counterparts to get an overall numeric value for how good each place is | -| Pizza Ratings | [12:30](https://www.youtube.com/watch?v=Mkac8DHScps&t=750s) | Commentary on speed of `mutate` calculation within or without a group (non-grouped is slightly faster) | -| Pizza Ratings | [15:30](https://www.youtube.com/watch?v=Mkac8DHScps&t=930s) | Re-ordering groups by total votes using `fct_reorder` function, while still maintaining the groups themselves | -| Pizza Ratings | [19:15](https://www.youtube.com/watch?v=Mkac8DHScps&t=1155s) | Using `glue` package to combine place name and total respondents | -| Pizza Ratings | [20:30](https://www.youtube.com/watch?v=Mkac8DHScps&t=1230s) | Using statistical test to give confidence intervals on average score | -| Pizza Ratings | [22:15](https://www.youtube.com/watch?v=Mkac8DHScps&t=1335s) | Actually using the `t.test` function with toy example | -| Pizza Ratings | [23:15](https://www.youtube.com/watch?v=Mkac8DHScps&t=1395s) | Using weighted linear model instead (which doesn't end up working) | -| Pizza Ratings | [26:00](https://www.youtube.com/watch?v=Mkac8DHScps&t=1560s) | Using custom function with `rep` function to get vector of repeated scores (sneaky way of weighting) so that we can perform a proper t-test | -| Pizza Ratings | [27:30](https://www.youtube.com/watch?v=Mkac8DHScps&t=1650s) | Summarizing `t.test` function into a list (alternative to nesting) | -| Pizza Ratings | [31:20](https://www.youtube.com/watch?v=Mkac8DHScps&t=1880s) | Adding error bars using `geom_errorbarh` to make a TIE fighter plot that shows confidence intervals | -| Pizza Ratings | [36:30](https://www.youtube.com/watch?v=Mkac8DHScps&t=2190s) | Bringing in additional data from Barstool ratings (to supplement survey of Open R meetup NY) | -| Pizza Ratings | [39:45](https://www.youtube.com/watch?v=Mkac8DHScps&t=2385s) | Getting survey data to the place level so that we can add an additional dataset | -| Pizza Ratings | [41:15](https://www.youtube.com/watch?v=Mkac8DHScps&t=2475s) | Checking for duplicates in the joined data | -| Pizza Ratings | [42:15](https://www.youtube.com/watch?v=Mkac8DHScps&t=2535s) | Calling off the planned analysis due to low sample sizes (too much noise, not enough overlap between datasets) | -| Pizza Ratings | [45:15](https://www.youtube.com/watch?v=Mkac8DHScps&t=2715s) | Looking at Barstool data on its own | -| Pizza Ratings | [55:15](https://www.youtube.com/watch?v=Mkac8DHScps&t=3315s) | Renaming all variables with a certain string pattern in them | -| Pizza Ratings | [58:00](https://www.youtube.com/watch?v=Mkac8DHScps&t=3480s) | Comparing Dave's reviews with all other critics | -| Pizza Ratings | [59:15](https://www.youtube.com/watch?v=Mkac8DHScps&t=3555s) | Adding `geom_abline` showing x = y as comparison for `geom_smooth` linear model line | -| Pizza Ratings | [1:02:30](https://www.youtube.com/watch?v=Mkac8DHScps&t=3750s) | Changing the location of the `aes` function to change what the legend icons look like for size aesthetic | - - - -*** - +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Horror Movies | [4:15](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=255s) | Extracting digits (release year) from character string using regex, along with good explanation of `extract` function | +| Horror Movies | [8:00](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=480s) | Quick check on why `parse_number` is unable to parse some values -- is it because they are NA or some other reason? | +| Horror Movies | [9:45](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=585s) | Visually investigating correlation between budget and rating | +| Horror Movies | [11:50](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=710s) | Investigating correlation between MPAA rating (PG-13, R, etc.) and rating using boxplots | +| Horror Movies | [12:50](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=770s) | Using `pull` function to quickly check levels of a factor | +| Horror Movies | [13:30](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=810s) | Using ANOVA to check difference of variation within groups (MPAA rating) than between groups | +| Horror Movies | [15:40](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=940s) | Separating genre using `separate_rows` function (instead of `str_split` and `unnest`) | +| Horror Movies | [18:00](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1080s) | Removing boilerplate "Directed by..." and "With..." part of plot variable and isolating plot, first using regex, then by using `separate` function with periods as separator | +| Horror Movies | [20:40](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1240s) | Unnesting word tokens, removing stop words, and counting appearances | +| Horror Movies | [21:20](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1280s) | Aggregating by word to find words that appear in high- or low-rated movies | +| Horror Movies | [23:00](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1380s) | Discussing potential confounding factors for ratings associated with specific words | +| Horror Movies | [24:50](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1490s) | Searching for duplicated movie titles | +| Horror Movies | [25:50](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1550s) | De-duping using `distinct` function | +| Horror Movies | [26:55](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1615s) | Loading in and explaining `glmnet` package | +| Horror Movies | [28:00](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1680s) | Using movie titles to pull out ratings using `rownmaes` and `match` functions to create an index of which rating to pull out of the original dataset | +| Horror Movies | [29:10](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1750s) | Actually using `glmnet` function to create lasso model | +| Horror Movies | [34:05](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=2045s) | Showing built-in plot of lasso lambda against mean-squared error | +| Horror Movies | [37:05](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=2225s) | Explaining when certain terms appeared in the lasso model as the lambda value dropped | +| Horror Movies | [41:10](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=2470s) | Gathering all variables except for title, so that the dataset is very tall | +| Horror Movies | [42:35](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=2555s) | Using `unite` function to combine two variables (better alternative to `paste`) | +| Horror Movies | [45:45](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=2745s) | Creating a new lasso with tons of new variables other than plot words | + +------------------------------------------------------------------------ + +#### NYC Squirrel Census {#nyc-squirrel-census} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| NYC Squirrel Census | [5:45](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=345s) | Starter EDA of latitude and longitude using `geom_point` | +| NYC Squirrel Census | [6:45](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=405s) | Aggregating squirrel counts by hectare to get a "binned" map | +| NYC Squirrel Census | [9:00](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=540s) | Investigating colour notes | +| NYC Squirrel Census | [10:30](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=630s) | Asking question, "Are there areas of the parks where we see certain-coloured squirrels | +| NYC Squirrel Census | [12:45](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=765s) | Plotting latitude and percentage of gray squirrels to answer, "Do we get a lower proportion of gray squirrels as we go farther north?" | +| NYC Squirrel Census | [13:30](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=810s) | Using logistic regression to test gray squirrel (proportion as we go farther north) | +| NYC Squirrel Census | [16:30](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=990s) | Noting that he could have used original data sets as input for logistic regression function | +| NYC Squirrel Census | [19:30](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1170s) | "Does a squirrel run away?" based on location in the park (latitude), using logistic regression | +| NYC Squirrel Census | [20:45](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1245s) | Using `summarise_at` function to apply same function to multiple variables | +| NYC Squirrel Census | [25:25](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1525s) | Loading `ggmap` package | +| NYC Squirrel Census | [27:00](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1620s) | Start using `ggmap`, with the `get_map` function | +| NYC Squirrel Census | [28:20](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1700s) | Decision to not set up Google API key to use `ggmap` properly | +| NYC Squirrel Census | [30:15](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1815s) | Using the `sf` package to read in a shapefile of Central Park | +| NYC Squirrel Census | [30:40](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1840s) | Using `read_sf` function from `sf` package to import a shapefile into R | +| NYC Squirrel Census | [31:30](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1890s) | Using `geom_sf` function from `sf` package to visualise the imported shapefile | +| NYC Squirrel Census | [32:45](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1965s) | Combining shapefile "background" with relevant squirrel data in one plot | +| NYC Squirrel Census | [34:40](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2080s) | Visualising pathways (footpaths, bicycle paths) in the shapefile | +| NYC Squirrel Census | [37:55](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2275s) | Finishing visualisation and moving on to analysing activity types | +| NYC Squirrel Census | [38:45](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2325s) | Selecting fields based on whether they end with "ing", then gathering those fields into tidy format | +| NYC Squirrel Census | [39:50](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2390s) | Decision to create a `shiny` visualisation | +| NYC Squirrel Census | [41:30](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2490s) | Setting `shiny` app settings (e.g., slider for minimum number of squirrels) | +| NYC Squirrel Census | [42:15](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2535s) | Setting up `shiny` app options / variables | +| NYC Squirrel Census | [43:50](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2630s) | Explanation of why setting up options in `shiny` app the way he did | +| NYC Squirrel Census | [46:00](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2760s) | Solving error "Discrete value supplied to continuous scale" | +| NYC Squirrel Census | [46:50](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2810s) | First draft of `shiny` app | +| NYC Squirrel Census | [48:35](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2915s) | Creating a dynamic midpoint for the two-gradient scale in the `shiny` app | +| NYC Squirrel Census | [51:30](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=3090s) | Adding additional variables of more behaviours to `shiny` app (kuks, moans, runs from, etc.) | +| NYC Squirrel Census | [53:10](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=3190s) | "What are the distributions of some of these behaviours?" | +| NYC Squirrel Census | [56:50](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=3410s) | Adding ground location (above ground, ground plane) to `shiny` app | +| NYC Squirrel Census | [58:20](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=3500s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### CRAN Package Code {#cran-package-code} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| CRAN Package Code | [4:30](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=270s) | Summarizing many things by language (e.g., lines of code, comment/code ratio) | +| CRAN Package Code | [9:35](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=575s) | Using `gather` function (now `pivot_longer`) to consolidate multiple metrics into one dimension, then visualizing by facetting by metric | +| CRAN Package Code | [11:20](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=680s) | Setting ncol = 1 within `facet_wrap` function to get facetted graphs to stack vertically | +| CRAN Package Code | [11:30](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=690s) | Using `reorder_within` function from `tidytext` package to properly reorder factors within each facet | +| CRAN Package Code | [16:00](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=960s) | Using `geom_text` label to add language name as label to scatter points | +| CRAN Package Code | [20:00](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=1200s) | Completing preliminary overview and looking at distribution of R code in packages | +| CRAN Package Code | [26:15](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=1575s) | Using `str_extract` to extract only letters and names from character vector (using regex) | +| CRAN Package Code | [34:00](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=2040s) | Re-ordering the order of categorical variables in the legend using `guides` function | +| CRAN Package Code | [36:00](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=2160s) | Investigating comment/code ratio | +| CRAN Package Code | [43:05](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=2585s) | Importing additional package data (looking around for a bit, then starting to actually import \~46:00) | +| CRAN Package Code | [54:40](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=3280s) | Importing even more additional data (available packages) | +| CRAN Package Code | [57:50](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=3470s) | Using `separate_rows` function to separate delimited values | +| CRAN Package Code | [58:45](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=3525s) | Using `extract` function and regex to pull out specific types of characters from a string | +| CRAN Package Code | [1:05:35](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=3935s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Riddler: Spelling Bee Honeycomb {#riddler-spelling-bee-honeycomb} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Riddler: Spelling Bee Honeycomb | [2:00](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=120s) | Using `read_lines` function to import a plain text file (.txt) | +| Riddler: Spelling Bee Honeycomb | [2:35](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=155s) | Using `str_detect` function to filter out words that do not contain the letter "g" | +| Riddler: Spelling Bee Honeycomb | [3:25](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=205s) | Using `str_split` function to get a list of a word's individual letters | +| Riddler: Spelling Bee Honeycomb | [3:55](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=235s) | Using `setdiff` function to find words with invalid letters (letters that are not in the puzzle honeycomb) -- also needs `map` function (at 4:35) | +| Riddler: Spelling Bee Honeycomb | [10:45](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=645s) | Changing existing code to make a function that will calculate scores for letter combinations | +| Riddler: Spelling Bee Honeycomb | [14:10](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=850s) | Noticing the rule about bonus points for pangrams and using `n_distinct` function to determine if a word gets those points | +| Riddler: Spelling Bee Honeycomb | [17:25](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=1045s) | Using `map` function to eliminate duplicate letters from each word's list of component letters | +| Riddler: Spelling Bee Honeycomb | [25:55](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=1555s) | Using `acast` function from `reshape2` package to create a matrix of words by letters | +| Riddler: Spelling Bee Honeycomb | [27:50](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=1670s) | Using the words/letters matrix to find valid words for a given letter combination | +| Riddler: Spelling Bee Honeycomb | [29:55](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=1795s) | Using the matrix multiplication operator `%*%` to find the number of "forbidden" letters for each word | +| Riddler: Spelling Bee Honeycomb | [42:05](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=2525s) | Using `microbenchmark` function from `microbenchmark` package to test how long it takes to run a function | +| Riddler: Spelling Bee Honeycomb | [43:35](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=2615s) | Using combn function to get the actual combinations of 6 letters (not just the count) | +| Riddler: Spelling Bee Honeycomb | [45:15](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=2715s) | Using `map` function to get scores for different combinations of letters created above | +| Riddler: Spelling Bee Honeycomb | [47:30](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=2850s) | Using `which.max` function to find the position of the max value in a vector | +| Riddler: Spelling Bee Honeycomb | [1:05:10](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=3910s) | Using `t` function to transpose a matrix | +| Riddler: Spelling Bee Honeycomb | [1:19:15](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=4755s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### The Office {#the-office} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| The Office | [1:45](https://www.youtube.com/watch?v=_IvAubTDQME&t=105s) | Overview of transcripts data | +| The Office | [2:25](https://www.youtube.com/watch?v=_IvAubTDQME&t=145s) | Overview of ratintgs data | +| The Office | [4:10](https://www.youtube.com/watch?v=_IvAubTDQME&t=250s) | Using `fct_inorder` function to create a factor with levels based on when they appear in the dataframe | +| The Office | [4:50](https://www.youtube.com/watch?v=_IvAubTDQME&t=290s) | Using `theme` and `element_text` functions to turn axis labels 90 degrees | +| The Office | [5:55](https://www.youtube.com/watch?v=_IvAubTDQME&t=355s) | Creating a line graph with points at each observation (using `geom_line` and `geom_point`) | +| The Office | [7:10](https://www.youtube.com/watch?v=_IvAubTDQME&t=430s) | Adding text labels to very high and very low-rated episodes | +| The Office | [8:50](https://www.youtube.com/watch?v=_IvAubTDQME&t=530s) | Using `theme` function's `panel.grid.major` argument to get rid of some extraneous gridlines, using `element_blank` function | +| The Office | [10:15](https://www.youtube.com/watch?v=_IvAubTDQME&t=615s) | Using `geom_text_repel` from `ggrepel` package to experiment with different labelling (before abandoning this approach) | +| The Office | [12:45](https://www.youtube.com/watch?v=_IvAubTDQME&t=765s) | Using `row_number` function to add episode_number field to make graphing easier | +| The Office | [14:05](https://www.youtube.com/watch?v=_IvAubTDQME&t=845s) | Explanation of why number of ratings (votes) is relevant to interpreting the graph | +| The Office | [19:10](https://www.youtube.com/watch?v=_IvAubTDQME&t=1150s) | Using `unnest_tokens` function from `tidytext` package to split full-sentence text field to individual words | +| The Office | [20:10](https://www.youtube.com/watch?v=_IvAubTDQME&t=1210s) | Using `anti_join` function to filter out stop words (e.g., and, or, the) | +| The Office | [22:25](https://www.youtube.com/watch?v=_IvAubTDQME&t=1345s) | Using `str_remove_all` function to get rid of quotation marks from character names (quirks that might pop up when parsing) | +| The Office | [25:40](https://www.youtube.com/watch?v=_IvAubTDQME&t=1540s) | Asking, "Are there words that are specific to certain characters?" (using `bind_tf_idf` function) | +| The Office | [32:25](https://www.youtube.com/watch?v=_IvAubTDQME&t=1945s) | Using `reorder_within` function to re-order factors within a grouping (when a term appears in multiple groups) and `scale_x_reordered` function to graph | +| The Office | [37:05](https://www.youtube.com/watch?v=_IvAubTDQME&t=2225s) | Asking, "What effects the popularity of an episode?" | +| The Office | [37:55](https://www.youtube.com/watch?v=_IvAubTDQME&t=2275s) | Dealing with inconsistent episode names between datasets | +| The Office | [41:25](https://www.youtube.com/watch?v=_IvAubTDQME&t=2485s) | Using `str_remove` function and some regex to remove "(Parts 1&2)" from some episode names | +| The Office | [42:45](https://www.youtube.com/watch?v=_IvAubTDQME&t=2565s) | Using `str_to_lower` function to further align episode names (addresses inconsistent capitalization) | +| The Office | [52:20](https://www.youtube.com/watch?v=_IvAubTDQME&t=3140s) | Setting up dataframe of features for a LASSO regression, with director and writer each being a feature with its own line | +| The Office | [52:55](https://www.youtube.com/watch?v=_IvAubTDQME&t=3175s) | Using `separate_rows` function to separate episodes with multiple writers so that each has their own row | +| The Office | [58:25](https://www.youtube.com/watch?v=_IvAubTDQME&t=3505s) | Using `log2` function to transform number of lines fields to something more useable (since it is log-normally distributed) | +| The Office | [1:00:20](https://www.youtube.com/watch?v=_IvAubTDQME&t=3620s) | Using `cast_sparse` function from `tidytext` package to create a sparse matrix of features by episode | +| The Office | [1:01:55](https://www.youtube.com/watch?v=_IvAubTDQME&t=3715s) | Using `semi_join` function as a "filtering join" | +| The Office | [1:02:30](https://www.youtube.com/watch?v=_IvAubTDQME&t=3750s) | Setting up dataframes (after we have our features) to run LASSO regression | +| The Office | [1:03:50](https://www.youtube.com/watch?v=_IvAubTDQME&t=3830s) | Using `cv.glmnet` function from `glmnet` package to run a cross-validated LASSO regression | +| The Office | [1:05:35](https://www.youtube.com/watch?v=_IvAubTDQME&t=3935s) | Explanation of how to pick a lambda penalty parameter | +| The Office | [1:05:55](https://www.youtube.com/watch?v=_IvAubTDQME&t=3955s) | Explanation of output of LASSO model | +| The Office | [1:09:25](https://www.youtube.com/watch?v=_IvAubTDQME&t=4165s) | Outline of why David likes regularized linear models (which is what LASSO is) | +| The Office | [1:10:55](https://www.youtube.com/watch?v=_IvAubTDQME&t=4255s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### COVID-19 Open Research Dataset (CORD-19) {#covid-19-open-research-dataset-cord-19} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| COVID-19 Open Research Dataset (CORD-19) | [0:55](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=55s) | Disclaimer that David's not an epidemiologist | +| COVID-19 Open Research Dataset (CORD-19) | [2:55](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=175s) | Overview of dataset | +| COVID-19 Open Research Dataset (CORD-19) | [7:50](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=470s) | Using `dir` function with its `full.names` argument to get file paths for all files in a folder | +| COVID-19 Open Research Dataset (CORD-19) | [9:45](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=585s) | Inspecting JSON-formatted data | +| COVID-19 Open Research Dataset (CORD-19) | [10:40](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=640s) | Introducing `hoist` function as a way to deal with nested lists (typical for JSON data) | +| COVID-19 Open Research Dataset (CORD-19) | [11:40](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=700s) | Continuing to use the `hoist` function | +| COVID-19 Open Research Dataset (CORD-19) | [13:10](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=790s) | Brief explanation of `pluck` specification | +| COVID-19 Open Research Dataset (CORD-19) | [16:35](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=995s) | Using `object.size` function to check size of JSON data | +| COVID-19 Open Research Dataset (CORD-19) | [17:40](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=1060s) | Using `map_chr` and `str_c` functions together to combine paragraphs of text in a list into a single character string | +| COVID-19 Open Research Dataset (CORD-19) | [20:00](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=1200s) | Using `unnest_tokens` function from `tidytext` package to split full paragraphs into individual words | +| COVID-19 Open Research Dataset (CORD-19) | [22:50](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=1370s) | Overview of `scispaCy` package for Python, which has named entity recognition features | +| COVID-19 Open Research Dataset (CORD-19) | [24:40](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=1480s) | Introducting `spacyr` package, which is a R wrapper around the Python `scispaCy` package | +| COVID-19 Open Research Dataset (CORD-19) | [28:50](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=1730s) | Showing how `tidytext` can use a custom tokenization function (David uses `spacyr` package's named entity recognition) | +| COVID-19 Open Research Dataset (CORD-19) | [32:20](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=1940s) | Demonstrating the `tokenize_words` function from the `tokenizers` package | +| COVID-19 Open Research Dataset (CORD-19) | [37:00](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=2220s) | Actually using a custom tokenizer in `unnest_tokens` function | +| COVID-19 Open Research Dataset (CORD-19) | [39:45](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=2385s) | Using `sample_n` function to get a random sample of n rows | +| COVID-19 Open Research Dataset (CORD-19) | [43:25](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=2605s) | Asking, "What are groups of words that tend to occur together?" | +| COVID-19 Open Research Dataset (CORD-19) | [44:30](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=2670s) | Using `pairwise_cor` from `widyr` package to find correlation between named entities | +| COVID-19 Open Research Dataset (CORD-19) | [45:40](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=2740s) | Using `ggraph` and `igraph` packages to create a network plot | +| COVID-19 Open Research Dataset (CORD-19) | [52:05](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=3125s) | Starting to look at papers' references | +| COVID-19 Open Research Dataset (CORD-19) | [53:30](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=3210s) | Using `unnest_longer` then `unnest_wider` function to convert lists into a tibble | +| COVID-19 Open Research Dataset (CORD-19) | [59:30](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=3570s) | Using `str_trunc` function to truncate long character strings to a certain number of characters | +| COVID-19 Open Research Dataset (CORD-19) | [1:06:25](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=3985s) | Using `glue` function for easy combination of strings and R code | +| COVID-19 Open Research Dataset (CORD-19) | [1:19:15](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=4755s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### CORD-19 Data Package {#cord-19-data-package} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| CORD-19 Data Package | [1:10](https://www.youtube.com/watch?v=F4oUJp76KUY&t=70s) | Overview of JSON files with the data David will make a package of | +| CORD-19 Data Package | [3:05](https://www.youtube.com/watch?v=F4oUJp76KUY&t=185s) | Starting to create a new package with "New Project" in RStudio | +| CORD-19 Data Package | [5:40](https://www.youtube.com/watch?v=F4oUJp76KUY&t=340s) | Creating a file to reference the license for the dataset | +| CORD-19 Data Package | [7:25](https://www.youtube.com/watch?v=F4oUJp76KUY&t=445s) | Using `use_data_raw` function from `usethis` package to set up a folder structure and preliminary function for raw data | +| CORD-19 Data Package | [8:30](https://www.youtube.com/watch?v=F4oUJp76KUY&t=510s) | Explanation that we want to limit the number of packages we load when building a package (e.g., no `library(tidyverse)` ) | +| CORD-19 Data Package | [9:00](https://www.youtube.com/watch?v=F4oUJp76KUY&t=540s) | Using `use_package` function from `usethis` package to add "Suggested packages" | +| CORD-19 Data Package | [10:15](https://www.youtube.com/watch?v=F4oUJp76KUY&t=615s) | Reviewing import and cleaning code already completed | +| CORD-19 Data Package | [14:55](https://www.youtube.com/watch?v=F4oUJp76KUY&t=895s) | Using `roxygen2` package to write documentation | +| CORD-19 Data Package | [19:35](https://www.youtube.com/watch?v=F4oUJp76KUY&t=1175s) | More documentation writing | +| CORD-19 Data Package | [24:50](https://www.youtube.com/watch?v=F4oUJp76KUY&t=1490s) | Using `use_data` function from `usethis` package to create a folder structure and datafile for (finished/cleaned) data | +| CORD-19 Data Package | [26:10](https://www.youtube.com/watch?v=F4oUJp76KUY&t=1570s) | Making a mistake clicking "Install and Restart" button on the "Build" tab (because of huge objects in the environment) (see 26:50 for alternative) | +| CORD-19 Data Package | [26:50](https://www.youtube.com/watch?v=F4oUJp76KUY&t=1610s) | Using `load_all` function from `devtrools` package as an alternative to "Install and Restart" from above step | +| CORD-19 Data Package | [27:35](https://www.youtube.com/watch?v=F4oUJp76KUY&t=1655s) | Using `document` function from `devtools` package to process written documentation | +| CORD-19 Data Package | [32:20](https://www.youtube.com/watch?v=F4oUJp76KUY&t=1940s) | De-duplicating paper data in a way the keeps records that have fewer missing values than other records for the same paper | +| CORD-19 Data Package | [39:50](https://www.youtube.com/watch?v=F4oUJp76KUY&t=2390s) | Using `use_data` function with its overwrite argument to overwrite existing data | +| CORD-19 Data Package | [47:30](https://www.youtube.com/watch?v=F4oUJp76KUY&t=2850s) | Writing documentation for paragraphs data | +| CORD-19 Data Package | [57:55](https://www.youtube.com/watch?v=F4oUJp76KUY&t=3475s) | Testing an install of the package | +| CORD-19 Data Package | [59:30](https://www.youtube.com/watch?v=F4oUJp76KUY&t=3570s) | Adding link to code in documentation | +| CORD-19 Data Package | [1:03:00](https://www.youtube.com/watch?v=F4oUJp76KUY&t=3780s) | Writing examples of how to use the package (in documentation) | +| CORD-19 Data Package | [1:08:45](https://www.youtube.com/watch?v=F4oUJp76KUY&t=4125s) | Discussion of outstanding items that David hasn't done yet (e.g., readme, vignettes, tests) | +| CORD-19 Data Package | [1:09:20](https://www.youtube.com/watch?v=F4oUJp76KUY&t=4160s) | Creating a simple readme, including examples, with `use_readme_rmd` function from `usethis` package | +| CORD-19 Data Package | [1:16:10](https://www.youtube.com/watch?v=F4oUJp76KUY&t=4570s) | Using `knit` function from the `knitr` package to knit the readme into a markdown file | +| CORD-19 Data Package | [1:17:10](https://www.youtube.com/watch?v=F4oUJp76KUY&t=4630s) | Creating a GitHub repository to host the package (includes how to commit to a GitHub repo using RStudio's GUI) | +| CORD-19 Data Package | [1:18:15](https://www.youtube.com/watch?v=F4oUJp76KUY&t=4695s) | Explanation that version 0.0.0.9000 means that the package is in early development | +| CORD-19 Data Package | [1:20:30](https://www.youtube.com/watch?v=F4oUJp76KUY&t=4830s) | Actually creating the GitHub repository | +| CORD-19 Data Package | [1:22:25](https://www.youtube.com/watch?v=F4oUJp76KUY&t=4945s) | Overview of remaining tasks | + +------------------------------------------------------------------------ + +#### R Trick: Creating Pascal's Triangle with `accumulate()` {#r-trick-creating-pascals-triangle-with-accumulate} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| R trick: Creating Pascal's Triangle with accumulate() | [1:10](https://www.youtube.com/watch?v=rUK9Wz9B2n0&t=70s) | Simple explanation of `accumulate` function | +| R trick: Creating Pascal's Triangle with accumulate() | [1:30](https://www.youtube.com/watch?v=rUK9Wz9B2n0&t=90s) | Example using letters | +| R trick: Creating Pascal's Triangle with accumulate() | [2:55](https://www.youtube.com/watch?v=rUK9Wz9B2n0&t=175s) | Using tilde `~` to create an anonymous function | +| R trick: Creating Pascal's Triangle with accumulate() | [4:35](https://www.youtube.com/watch?v=rUK9Wz9B2n0&t=275s) | Introducing Pascal's Triangle | +| R trick: Creating Pascal's Triangle with accumulate() | [6:25](https://www.youtube.com/watch?v=rUK9Wz9B2n0&t=385s) | Starting to create Pascal's triangle in R | +| R trick: Creating Pascal's Triangle with accumulate() | [8:05](https://www.youtube.com/watch?v=rUK9Wz9B2n0&t=485s) | Concerting the conceptual solution into an `accumulate` function | +------------------------------------------------------------------------ -#### Car Fuel Efficiency +#### Riddler: Simulating Replacing Die Sides {#riddler-simulating-replacing-die-sides} [Back to summary](#screencast-summary) -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Car Fuel Efficiency | [3:20](https://www.youtube.com/watch?v=RpeioixHOHw&t=200s) | Using `select`, `sort`, and `colnames` functions to sort variables in alphabetical order | -| Car Fuel Efficiency | [10:00](https://www.youtube.com/watch?v=RpeioixHOHw&t=600s) | Adding `geom_abline` for y = x to a scatter plot for comparison | -| Car Fuel Efficiency | [18:00](https://www.youtube.com/watch?v=RpeioixHOHw&t=1080s) | Visualising using `geom_boxplot` for mpg by vehicle class (size of car) | -| Car Fuel Efficiency | [24:45](https://www.youtube.com/watch?v=RpeioixHOHw&t=1485s) | Start of explanation of prediction goals | -| Car Fuel Efficiency | [27:00](https://www.youtube.com/watch?v=RpeioixHOHw&t=1620s) | Creating train and test sets, along with trick using `sample_frac` function to randomly re-arrange all rows in a dataset | -| Car Fuel Efficiency | [28:35](https://www.youtube.com/watch?v=RpeioixHOHw&t=1715s) | First step of developing linear model: visually adding `geom_smooth` | -| Car Fuel Efficiency | [30:00](https://www.youtube.com/watch?v=RpeioixHOHw&t=1800s) | Using `augment` function to add extra variables from model to original dataset (fitted values and residuals, especially) | -| Car Fuel Efficiency | [30:45](https://www.youtube.com/watch?v=RpeioixHOHw&t=1845s) | Creating residuals plot and explaining what you want and don't want to see | -| Car Fuel Efficiency | [31:50](https://www.youtube.com/watch?v=RpeioixHOHw&t=1910s) | Explanation of splines | -| Car Fuel Efficiency | [33:30](https://www.youtube.com/watch?v=RpeioixHOHw&t=2010s) | Visualising effect of regressing using natural splines | -| Car Fuel Efficiency | [35:10](https://www.youtube.com/watch?v=RpeioixHOHw&t=2110s) | Creating a tibble to test different degrees of freedom (1:10) for natural splines | -| Car Fuel Efficiency | [36:30](https://www.youtube.com/watch?v=RpeioixHOHw&t=2190s) | Using `unnest` function to get tidy versions of different models | -| Car Fuel Efficiency | [37:55](https://www.youtube.com/watch?v=RpeioixHOHw&t=2275s) | Visualising fitted values of all 6 different models at the same time | -| Car Fuel Efficiency | [42:10](https://www.youtube.com/watch?v=RpeioixHOHw&t=2530s) | Investigating whether the model got "better" as we added degrees of freedom to the natural splines, using the `glance` function | -| Car Fuel Efficiency | [47:45](https://www.youtube.com/watch?v=RpeioixHOHw&t=2865s) | Using ANOVA to perform a statistical test on whether natural splines as a group explain variation in MPG | -| Car Fuel Efficiency | [48:30](https://www.youtube.com/watch?v=RpeioixHOHw&t=2910s) | Exploring colinearity of dependant variables (displacement and cylinders) | -| Car Fuel Efficiency | [55:10](https://www.youtube.com/watch?v=RpeioixHOHw&t=3310s) | Binning years into every two years using `floor` function | -| Car Fuel Efficiency | [56:40](https://www.youtube.com/watch?v=RpeioixHOHw&t=3400s) | Using `summarise_at` function to do quick averaging of multiple variables | - - - -*** - +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Riddler: Simulating Replacing Die Sides | [0:45](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=45s) | Explaining why the recursive nature of this problem is well-suited to simulation | +| Riddler: Simulating Replacing Die Sides | [2:05](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=125s) | Introducing the `accumulate` function as a tool for simulation | +| Riddler: Simulating Replacing Die Sides | [3:50](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=230s) | Creating a condition to call the `done` function | +| Riddler: Simulating Replacing Die Sides | [7:00](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=420s) | After creating a function to simulate one round of the problem, using `replicate` function to run simulation many times | +| Riddler: Simulating Replacing Die Sides | [7:15](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=435s) | Using `qplot` function to quickly create a histogram of simulations | +| Riddler: Simulating Replacing Die Sides | [7:40](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=460s) | Making observations on the distribution of simulations (looks kind of like a gamma distribution) | +| Riddler: Simulating Replacing Die Sides | [10:05](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=605s) | Observing that the distribution is kind of log-normal (but that doesn't really apply because we're using integers) | +| Riddler: Simulating Replacing Die Sides | [10:35](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=635s) | Using `table` and `sort` functions to find the most common number of rolls | +| Riddler: Simulating Replacing Die Sides | [11:20](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=680s) | Starting the Extra Credit portion of the problem (N-sided die) | +| Riddler: Simulating Replacing Die Sides | [11:40](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=700s) | Using the `crossing` function to set up a tibble to run simulations | +| Riddler: Simulating Replacing Die Sides | [12:35](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=755s) | Using `map_dbl` function to apply a set of simulations to each possibility of N sides | +| Riddler: Simulating Replacing Die Sides | [13:30](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=810s) | Spotting an error in the formula for simulating one round (6-sided die was hard-coded) | +| Riddler: Simulating Replacing Die Sides | [16:40](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=1000s) | Using simple linear regression with the `lm` function to find the relationship between number of sides and average number of rolls | +| Riddler: Simulating Replacing Die Sides | [17:20](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=1040s) | Reviewing distributions for different N-sided dice | +| Riddler: Simulating Replacing Die Sides | [18:00](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=1080s) | Calculating variance, standard deviation, and coefficient of variation to get hints on the distribution (and ruling out Poisson) | + +------------------------------------------------------------------------ + +#### Beer Production {#beer-production} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Beer Production | [4:25](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=265s) | Asking, "What ingredients are used in beer?" | +| Beer Production | [4:40](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=280s) | Using `filter` and `max` functions to look at the most recent period of time | +| Beer Production | [7:25](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=445s) | Using `paste` and `ymd` functions (`ymd` is from `lubridate` package) to convert year-month field into an date-formatted field | +| Beer Production | [9:20](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=560s) | Spotting potential missing or mis-parsed data | +| Beer Production | [13:50](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=830s) | Introducing the `tidymetrics` framework | +| Beer Production | [14:45](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=885s) | Using `install_github` function to install `tidymetrics` from GitHub | +| Beer Production | [15:25](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=925s) | Using `cross_by_dimensions` function from `tidymetrics` package to get aggregations at different levels of multiple dimensions | +| Beer Production | [18:10](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=1090s) | Using `cross_by_periods` function from `tidymetrics` package to also get aggregations for different intervals (e.g, month, quarter, year) | +| Beer Production | [22:00](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=1320s) | Using `use_metrics_scaffold` function from `tidymetrics` package to create framework for documenting dimensions in RMarkdown YAML header | +| Beer Production | [24:00](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=1440s) | Using `create_metrics` function from `tidymetrics` package to save data as a tibble with useful metadata (good for visualizing interactively) | +| Beer Production | [25:15](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=1515s) | Using `preview_metric` function from `shinymetrics` package (still under development as of 2020-04-24) to demonstrate `shinymetrics` | +| Beer Production | [27:35](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=1655s) | Succesfuly getting `shinymetrics` to work | +| Beer Production | [28:25](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=1705s) | Explanation of the `shinymetrics` bug David ran into | +| Beer Production | [34:10](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=2050s) | Changing order of ordinal variable (e.g., "1,000 to 10,000" and "10,000 to 20,000") using the `parse_number`, `fct_lump`, and `coalesce` functions | +| Beer Production | [41:25](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=2485s) | Asking, "Where is beer produced?" | +| Beer Production | [46:45](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=2805s) | Looking up `sf` package documentation to refresh memory on how to draw state borders for a map | +| Beer Production | [48:55](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=2935s) | Using `match` function and `state.abb` vector (state abbreviations) from `sf` package to perform a lookup of state names | +| Beer Production | [51:05](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=3065s) | Using `geom_sf` function (and working through some hiccoughs) to create a choropleth map | +| Beer Production | [52:30](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=3150s) | Using `theme_map` function from `ggthemes` package to get more appropriate styling for maps | +| Beer Production | [55:40](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=3340s) | Experimenting with how to get the legend to display in the bottom right corner | +| Beer Production | [58:25](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=3505s) | Starting to build an animation of consumption patterns over time using `gganimate` package | +| Beer Production | [1:03:40](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=3820s) | Getting the year being animated to show up in the title of a `gganimate` map | +| Beer Production | [1:05:40](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=3940s) | Summary of screencast | +| Beer Production | [1:06:50](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=4010s) | Spotting a mistake in a `group_by` call causing the percentages not to add up properly | +| Beer Production | [1:09:10](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=4150s) | Brief extra overview of `tidymetrics` code | + +------------------------------------------------------------------------ + +#### Riddler: Simulating a Non-increasing Sequence {#riddler-simulating-a-non-increasing-sequence} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Riddler: Simulating a Non-increasing Sequence | [2:20](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=140s) | Introducing `accumulate` functon as a possible solution (but not used here) | +| Riddler: Simulating a Non-increasing Sequence | [3:20](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=200s) | Using `sample` function to simulate 1000 rolls of a 10-sided die | +| Riddler: Simulating a Non-increasing Sequence | [3:40](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=220s) | Explanation of dividing sample rolls into streaks (instead of using logic similar to a while loop) | +| Riddler: Simulating a Non-increasing Sequence | [4:55](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=295s) | Using `cumsum` function to separate 1000 rolls into individual sequences (which end when a 0 is rolled) | +| Riddler: Simulating a Non-increasing Sequence | [5:50](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=350s) | Using `lag` function to "shift" sequence numbering down by one row | +| Riddler: Simulating a Non-increasing Sequence | [7:35](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=455s) | Using `cummax` and `lag` functions to check whether a roll is less than the highest value rolled previously in the sequence | +| Riddler: Simulating a Non-increasing Sequence | [9:30](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=570s) | Fixing previous step with `cummin` function (instead of `cummax`) and dropping the `lag` function | +| Riddler: Simulating a Non-increasing Sequence | [13:05](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=785s) | Finished simulation code and starting to calculate scores | +| Riddler: Simulating a Non-increasing Sequence | [13:10](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=790s) | Using -`row_number` function (note the minus sign!) to calculate decimal position of number in the score | +| Riddler: Simulating a Non-increasing Sequence | [15:30](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=930s) | Investigating the distribution of scores | +| Riddler: Simulating a Non-increasing Sequence | [16:25](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=985s) | Using `seq` function in the `breaks` argument of `scale_x_continuous` to set custom, evenly-spaced axis ticks and labels | + +------------------------------------------------------------------------ + +#### Tour de France {#tour-de-france} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Tour de France | [3:55](https://www.youtube.com/watch?v=vT-DElIaKtE&t=235s) | Getting an overview of the data | +| Tour de France | [8:55](https://www.youtube.com/watch?v=vT-DElIaKtE&t=535s) | Aggregating data into decades using the truncated division operator `%/%` | +| Tour de France | [21:50](https://www.youtube.com/watch?v=vT-DElIaKtE&t=1310s) | Noting that death data is right-censored (i.e., some winners are still alive) | +| Tour de France | [24:05](https://www.youtube.com/watch?v=vT-DElIaKtE&t=1445s) | Using `transmute` function, which combines functionality of `mutate` (to create new variables) and `select` (to choose variables to keep) | +| Tour de France | [25:30](https://www.youtube.com/watch?v=vT-DElIaKtE&t=1530s) | Using `survfit` function from `survival` package to conduct survival analysis | +| Tour de France | [27:30](https://www.youtube.com/watch?v=vT-DElIaKtE&t=1650s) | Using `glance` function from `broom` package to get a one-row model summary of the survival model | +| Tour de France | [31:00](https://www.youtube.com/watch?v=vT-DElIaKtE&t=1860s) | Using `extract` function to pull out a string matching a regular expression from a variable (stage number in this case) | +| Tour de France | [34:30](https://www.youtube.com/watch?v=vT-DElIaKtE&t=2070s) | Theorizing that there is a parsing issue with the original data's time field | +| Tour de France | [41:15](https://www.youtube.com/watch?v=vT-DElIaKtE&t=2475s) | Using `group_by` function's built-in "peeling" feature, where a `summarise` call will "peel away" one group but left other groupings intact | +| Tour de France | [42:05](https://www.youtube.com/watch?v=vT-DElIaKtE&t=2525s) | Using `rank` function, then upgrading to `percent_rank` function to give percentile rankings (between 0 and 1) | +| Tour de France | [47:50](https://www.youtube.com/watch?v=vT-DElIaKtE&t=2870s) | Using `geom_smooth` function with `method` argument as "lm" to plot a linear regression | +| Tour de France | [48:10](https://www.youtube.com/watch?v=vT-DElIaKtE&t=2890s) | Using `cut` function to bin numbers (percentiles in this case) into categories | +| Tour de France | [50:25](https://www.youtube.com/watch?v=vT-DElIaKtE&t=3025s) | Reviewing boxplots exploring relationship between first-stage performance and overall Tour performance | +| Tour de France | [51:30](https://www.youtube.com/watch?v=vT-DElIaKtE&t=3090s) | Starting to create an animation using `gganimate` package | +| Tour de France | [56:00](https://www.youtube.com/watch?v=vT-DElIaKtE&t=3360s) | Actually writing the code to create the animation | +| Tour de France | [58:20](https://www.youtube.com/watch?v=vT-DElIaKtE&t=3500s) | Using `reorder_within` function from `tidytext` package to re-order factors that have the same name across multiple groups | +| Tour de France | [1:02:40](https://www.youtube.com/watch?v=vT-DElIaKtE&t=3760s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Riddler: Simulating a Branching Process {#riddler-simulating-a-branching-process} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Riddler: Simulating a Branching Process | [0:35](https://www.youtube.com/watch?v=QtThluGted0&t=35s) | Explanation of a Poisson process | +| Riddler: Simulating a Branching Process | [2:40](https://www.youtube.com/watch?v=QtThluGted0&t=160s) | Asking "How long do you have to wait for X to happen?", which the Exponential distribution can answer | +| Riddler: Simulating a Branching Process | [4:20](https://www.youtube.com/watch?v=QtThluGted0&t=260s) | Using `rexp` function to generate numbers from the Exponential distribution | +| Riddler: Simulating a Branching Process | [5:25](https://www.youtube.com/watch?v=QtThluGted0&t=325s) | Using a vector of rates inside the `rexp` function (to explore consecutive waiting times) | +| Riddler: Simulating a Branching Process | [7:05](https://www.youtube.com/watch?v=QtThluGted0&t=425s) | Using `cumsum` function to calculate total waiting time until hitting a specific number in the Poisson process | +| Riddler: Simulating a Branching Process | [7:35](https://www.youtube.com/watch?v=QtThluGted0&t=455s) | Using `which` function to determine the first instance \> 3 in a vector | +| Riddler: Simulating a Branching Process | [9:20](https://www.youtube.com/watch?v=QtThluGted0&t=560s) | Using `replicate` function to do a quick simulation of the function just written | +| Riddler: Simulating a Branching Process | [10:55](https://www.youtube.com/watch?v=QtThluGted0&t=655s) | Discussing methods of making the simulation function faster | +| Riddler: Simulating a Branching Process | [12:00](https://www.youtube.com/watch?v=QtThluGted0&t=720s) | Using `crossing` function to set up "tidy" simulation (gives you all possible combinations of values you provide it) | +| Riddler: Simulating a Branching Process | [13:15](https://www.youtube.com/watch?v=QtThluGted0&t=795s) | Noting how the consecutive waiting times seems to follow the Harmonic series | +| Riddler: Simulating a Branching Process | [17:10](https://www.youtube.com/watch?v=QtThluGted0&t=1030s) | Noticing that we are missing trials with 0 comments and fixing | +| Riddler: Simulating a Branching Process | [20:25](https://www.youtube.com/watch?v=QtThluGted0&t=1225s) | Using `nls` function (non-linear least squares) to test how well the data fits with an exponential curve | +| Riddler: Simulating a Branching Process | [23:05](https://www.youtube.com/watch?v=QtThluGted0&t=1385s) | Visualizing fit between data and the exponential curve calculated with `nls` in previous step | +| Riddler: Simulating a Branching Process | [23:50](https://www.youtube.com/watch?v=QtThluGted0&t=1430s) | Using `augment` function to added fitted values of the `nls` function | +| Riddler: Simulating a Branching Process | [26:00](https://www.youtube.com/watch?v=QtThluGted0&t=1560s) | Exploring whether the data actually follows a Geometric distribution | +| Riddler: Simulating a Branching Process | [30:55](https://www.youtube.com/watch?v=QtThluGted0&t=1855s) | Explanation of the Geometric distribution as it applies to this question | +| Riddler: Simulating a Branching Process | [34:05](https://www.youtube.com/watch?v=QtThluGted0&t=2045s) | Generalizing the question to ask how long it takes to get to multiple comments (not just 3) | +| Riddler: Simulating a Branching Process | [38:45](https://www.youtube.com/watch?v=QtThluGted0&t=2325s) | Explanation of why we subtract 1 when fitting an exponential curve | +| Riddler: Simulating a Branching Process | [46:00](https://www.youtube.com/watch?v=QtThluGted0&t=2760s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### GDPR Violations {#gdpr-violations} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| GDPR Violations | [4:05](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=245s) | Use the `mdy` function from the `lubridate` package to change the date variable from `character` class to `date` class. | +| GDPR Violations | [5:35](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=335s) | Use the `rename` function from the `dplyr` package to rename variable in the dataset. | +| GDPR Violations | [6:15](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=375s) | Use the `fct_reorder` function from the `forcats` package to sort the `geom_col` in descending order. | +| GDPR Violations | [6:30](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=390s) | Use the `fct_lump` function from the `forcats` package within `count` to lump together country names except for the 6 most frequent. | +| GDPR Violations | [7:05](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=425s) | Use the `scale_x_continuous` function from `ggplot2` with the `scales` package to change the x-axis values to dollar format. | +| GDPR Violations | [8:15](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=495s) | Use the `month` and `floor_date` function from the `lubridate` package to get the month component from the `date` variable to count the total fines per month. | +| GDPR Violations | [8:55](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=535s) | Use the `na_if` function from the `dplyr` package to convert specific date value to `NA`. | +| GDPR Violations | [11:05](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=665s) | Use the `fct_reorder` function from the `forcats` package to sort the stacked `geom_col` and legend labels in descending order. | +| GDPR Violations | [15:15](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=915s) | Use the `dollar` function from the `scales` package to convert the `price` variable into dollar format. | +| GDPR Violations | [15:40](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=940s) | Use the `str_trunc` to shorten the `summary` string values to 140 characters. | +| GDPR Violations | [17:35](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=1055s) | Use the `separate_rows` function from the `tidyr` package with a `regular expression` to separate the values in the `article_violated` variable with each matching group placed in its own row. | +| GDPR Violations | [19:30](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=1170s) | Use the `extract` function from the `tidyr` package with a `regular expression` to turn each matching group into a new column. | +| GDPR Violations | [27:30](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=1650s) | Use the `geom_jitter` function from the `ggplot2` package to add points to the horizontal box plot. | +| GDPR Violations | [31:55](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=1915s) | Use the `inner_join` function from the `dplyr` package to join together `article_titles` and `separated_articles` tables. | +| GDPR Violations | [32:55](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=1975s) | Use the `paste0` function from `base R` to concatenate `article` and `article_title`. | +| GDPR Violations | [38:48](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=2328s) | Use the `str_detect` function from the `stringr` package to detect the presence of a pattern in a string. | +| GDPR Violations | [40:25](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=2425s) | Use the `group_by` and `summarize` functions from the `dplyr` package to aggregate fines that were issued to the same country on the same day allowing for size to be used in `geom_point` plot. | +| GDPR Violations | [41:14](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=2474s) | Use the `scale_size_continuous` function from the `ggplot2` package to remove the size legend. | +| GDPR Violations | [42:55](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=2575s) | Create an interactive dashboard using the `shinymetrics` and `tidymetrics` which is [a tidy approach to business intelligence](https://github.com/datacamp/tidymetrics). | +| GDPR Violations | [47:25](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=2845s) | Use the `cross_by_dimensions` and `cross_by_periods` functions from the `tidyr` package which stacks an extra copy of the table for each dimension specified as an argument (`country`, `article_title`, `type`), replaces the value of the column with the word `All` and `periods`, and groups by all the columns. It acts as an extended group_by that allows complete summaries across each individual dimension and possible combinations. | +------------------------------------------------------------------------ -#### Horror Movies +#### Broadway Musicals {#broadway-musicals} [Back to summary](#screencast-summary) -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Horror Movies | [4:15](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=255s) | Extracting digits (release year) from character string using regex, along with good explanation of `extract` function | -| Horror Movies | [8:00](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=480s) | Quick check on why `parse_number` is unable to parse some values -- is it because they are NA or some other reason? | -| Horror Movies | [9:45](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=585s) | Visually investigating correlation between budget and rating | -| Horror Movies | [11:50](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=710s) | Investigating correlation between MPAA rating (PG-13, R, etc.) and rating using boxplots | -| Horror Movies | [12:50](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=770s) | Using `pull` function to quickly check levels of a factor | -| Horror Movies | [13:30](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=810s) | Using ANOVA to check difference of variation within groups (MPAA rating) than between groups | -| Horror Movies | [15:40](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=940s) | Separating genre using `separate_rows` function (instead of `str_split` and `unnest`) | -| Horror Movies | [18:00](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1080s) | Removing boilerplate "Directed by..." and "With..." part of plot variable and isolating plot, first using regex, then by using `separate` function with periods as separator | -| Horror Movies | [20:40](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1240s) | Unnesting word tokens, removing stop words, and counting appearances | -| Horror Movies | [21:20](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1280s) | Aggregating by word to find words that appear in high- or low-rated movies | -| Horror Movies | [23:00](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1380s) | Discussing potential confounding factors for ratings associated with specific words | -| Horror Movies | [24:50](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1490s) | Searching for duplicated movie titles | -| Horror Movies | [25:50](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1550s) | De-duping using `distinct` function | -| Horror Movies | [26:55](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1615s) | Loading in and explaining `glmnet` package | -| Horror Movies | [28:00](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1680s) | Using movie titles to pull out ratings using `rownmaes` and `match` functions to create an index of which rating to pull out of the original dataset | -| Horror Movies | [29:10](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=1750s) | Actually using `glmnet` function to create lasso model | -| Horror Movies | [34:05](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=2045s) | Showing built-in plot of lasso lambda against mean-squared error | -| Horror Movies | [37:05](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=2225s) | Explaining when certain terms appeared in the lasso model as the lambda value dropped | -| Horror Movies | [41:10](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=2470s) | Gathering all variables except for title, so that the dataset is very tall | -| Horror Movies | [42:35](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=2555s) | Using `unite` function to combine two variables (better alternative to `paste`) | -| Horror Movies | [45:45](https://www.youtube.com/watch?v=yFRSTlk3kRQ&t=2745s) | Creating a new lasso with tons of new variables other than plot words | - - - -*** - +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Broadway Musicals | [8:15](https://www.youtube.com/watch?v=OhY5ZaILRpg&t=495s) | Use the `cross_by_periods` function from the `tidymetrics` package to aggregate data over time (`month`, `quarter`, and `year`) then visualize with `geom_line`. | +| Broadway Musicals | [14:00](https://www.youtube.com/watch?v=OhY5ZaILRpg&t=840s) | Use the `cross_by_periods` function from the `tidymetrics` package with `windows = c(28))` to create a 4-week rolling average across `month`, `quarter`, and `year`. | +| Broadway Musicals | [21:50](https://www.youtube.com/watch?v=OhY5ZaILRpg&t=1310s) | Create and `interactive dashboard` using the `shinymetrics` and `tidymetrics` packages. | +| Broadway Musicals | [25:00](https://www.youtube.com/watch?v=OhY5ZaILRpg&t=1500s) | Use the `str_remove` function from the `stringr` package to remove matched pattern in a string. | +| Broadway Musicals | [25:20](https://www.youtube.com/watch?v=OhY5ZaILRpg&t=1520s) | Use the `cross_by_dimensions` function from the `tidymetrics` package which acts as an extended `group_by` that allows complete summaries across each individual dimension and possible combinations. | +| Broadway Musicals | [41:25](https://www.youtube.com/watch?v=OhY5ZaILRpg&t=2485s) | Use the `shinybones` package to create an interactive dashboard to visualize all 3 metrics at the same time. | +------------------------------------------------------------------------ -#### NYC Squirrel Census +#### Riddler: Simulating and Optimizing Coin Flipping {#riddler-simulating-and-optimizing-coin-flipping} [Back to summary](#screencast-summary) -| Screencast | Time | Description | -| :--- | ---: | :--- | -| NYC Squirrel Census | [5:45](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=345s) | Starter EDA of latitude and longitude using `geom_point` | -| NYC Squirrel Census | [6:45](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=405s) | Aggregating squirrel counts by hectare to get a "binned" map | -| NYC Squirrel Census | [9:00](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=540s) | Investigating colour notes | -| NYC Squirrel Census | [10:30](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=630s) | Asking question, "Are there areas of the parks where we see certain-coloured squirrels | -| NYC Squirrel Census | [12:45](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=765s) | Plotting latitude and percentage of gray squirrels to answer, "Do we get a lower proportion of gray squirrels as we go farther north?" | -| NYC Squirrel Census | [13:30](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=810s) | Using logistic regression to test gray squirrel (proportion as we go farther north) | -| NYC Squirrel Census | [16:30](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=990s) | Noting that he could have used original data sets as input for logistic regression function | -| NYC Squirrel Census | [19:30](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1170s) | "Does a squirrel run away?" based on location in the park (latitude), using logistic regression | -| NYC Squirrel Census | [20:45](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1245s) | Using `summarise_at` function to apply same function to multiple variables | -| NYC Squirrel Census | [25:25](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1525s) | Loading `ggmap` package | -| NYC Squirrel Census | [27:00](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1620s) | Start using `ggmap`, with the `get_map` function | -| NYC Squirrel Census | [28:20](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1700s) | Decision to not set up Google API key to use `ggmap` properly | -| NYC Squirrel Census | [30:15](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1815s) | Using the `sf` package to read in a shapefile of Central Park | -| NYC Squirrel Census | [30:40](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1840s) | Using `read_sf` function from `sf` package to import a shapefile into R | -| NYC Squirrel Census | [31:30](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1890s) | Using `geom_sf` function from `sf` package to visualise the imported shapefile | -| NYC Squirrel Census | [32:45](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=1965s) | Combining shapefile "background" with relevant squirrel data in one plot | -| NYC Squirrel Census | [34:40](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2080s) | Visualising pathways (footpaths, bicycle paths) in the shapefile | -| NYC Squirrel Census | [37:55](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2275s) | Finishing visualisation and moving on to analysing activity types | -| NYC Squirrel Census | [38:45](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2325s) | Selecting fields based on whether they end with "ing", then gathering those fields into tidy format | -| NYC Squirrel Census | [39:50](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2390s) | Decision to create a `shiny` visualisation | -| NYC Squirrel Census | [41:30](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2490s) | Setting `shiny` app settings (e.g., slider for minimum number of squirrels) | -| NYC Squirrel Census | [42:15](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2535s) | Setting up `shiny` app options / variables | -| NYC Squirrel Census | [43:50](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2630s) | Explanation of why setting up options in `shiny` app the way he did | -| NYC Squirrel Census | [46:00](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2760s) | Solving error "Discrete value supplied to continuous scale" | -| NYC Squirrel Census | [46:50](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2810s) | First draft of `shiny` app | -| NYC Squirrel Census | [48:35](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=2915s) | Creating a dynamic midpoint for the two-gradient scale in the `shiny` app | -| NYC Squirrel Census | [51:30](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=3090s) | Adding additional variables of more behaviours to `shiny` app (kuks, moans, runs from, etc.) | -| NYC Squirrel Census | [53:10](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=3190s) | "What are the distributions of some of these behaviours?" | -| NYC Squirrel Census | [56:50](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=3410s) | Adding ground location (above ground, ground plane) to `shiny` app | -| NYC Squirrel Census | [58:20](https://www.youtube.com/watch?v=6GV9sAD6Pi0&t=3500s) | Summary of screencast | - +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Riddler: Simulating and Optimizing Coin Flipping | [2:15](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=135s) | Using `crossing` function to set up "tidy" simulation (gives you all possible combinations of values you provide it) | +| Riddler: Simulating and Optimizing Coin Flipping | [3:00](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=180s) | Using `rbinom` function to simulate the number of prisoners who choose to flip, then using `rbinom` again to simulate number of tails | +| Riddler: Simulating and Optimizing Coin Flipping | [7:20](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=440s) | Using `dbinom` function (probability mass function) to see probabilities of any given number of prisoners choosing to flip | +| Riddler: Simulating and Optimizing Coin Flipping | [10:15](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=615s) | Using `map_dbl` function to iterate a function, making sure to return a `dbl`-class object | +| Riddler: Simulating and Optimizing Coin Flipping | [11:25](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=685s) | Using `seq_len(n)` instead of `1:n` to be slightly more efficient | +| Riddler: Simulating and Optimizing Coin Flipping | [12:20](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=740s) | Using `optimise` function to conduct single-dimension optimisation (for analytical solution to this question) | +| Riddler: Simulating and Optimizing Coin Flipping | [14:15](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=855s) | Using backticks (`like this`) for inline R functions in RMarkdown | +| Riddler: Simulating and Optimizing Coin Flipping | [15:15](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=915s) | Starting the Extra Credit portion of the problem (N prisoners instead of 4) | +| Riddler: Simulating and Optimizing Coin Flipping | [16:30](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=990s) | Using `map2_dbl` function to iterate a function that requires two inputs (and make sure it returns a `dbl`-class object) | +| Riddler: Simulating and Optimizing Coin Flipping | [20:05](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=1205s) | Reviewing visualisation of probabilties with a varying numbers of prisoners | +| Riddler: Simulating and Optimizing Coin Flipping | [21:30](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=1290s) | Tweaking graph to look nicer | +| Riddler: Simulating and Optimizing Coin Flipping | [22:00](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=1320s) | Get the exact optimal probability value for each number of prisoners | +| Riddler: Simulating and Optimizing Coin Flipping | [22:45](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=1365s) | Troubleshooting `optimise` function to work when iterated over different numbers of prisoners | +| Riddler: Simulating and Optimizing Coin Flipping | [23:45](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=1425s) | Using `unnest_wider` function to disaggregate a list, but put different elements on separate columns (not separate rows, which `unnest` does | +| Riddler: Simulating and Optimizing Coin Flipping | [25:30](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=1530s) | Explanation of what happens to probabilities as number of prisoners increases | + +------------------------------------------------------------------------ + +#### Animal Crossing {#animal-crossing} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Animal Crossing | [5:05](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=305s) | Starting text analysis of critic reviews of Animal Crossing | +| Animal Crossing | [7:50](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=470s) | Using `floor_date` function from `lubridate` package to round dates down to nearest month (then week) | +| Animal Crossing | [9:00](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=540s) | Using `unnest_tokens` function and `anti_join` functions from `tidytext` package to break reviews into individual words and remove stop words | +| Animal Crossing | [10:35](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=635s) | Taking the average rating associated with individual words (simple approach to gauge sentiment) | +| Animal Crossing | [12:30](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=750s) | Using `geom_line` and `geom_point` to graph ratings over time | +| Animal Crossing | [14:40](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=880s) | Using `mean` function and logical statement to calculate percentages that meet a certain condition | +| Animal Crossing | [22:30](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=1350s) | Using `geom_text` to visualize what words are associated with positive/negative reviews | +| Animal Crossing | [27:00](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=1620s) | Disclaimer that this exploration is not text regression -- wine ratings screencast is a good resource for that | +| Animal Crossing | [28:30](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=1710s) | Starting to do topic modelling | +| Animal Crossing | [30:45](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=1845s) | Explanation of `stm` function from `stm` package | +| Animal Crossing | [34:30](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=2070s) | Explanation of `stm` function's output (topic modelling output) | +| Animal Crossing | [36:55](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=2215s) | Changing the number of topics from 4 to 6 | +| Animal Crossing | [37:40](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=2260s) | Explanation of how topic modelling works conceptually | +| Animal Crossing | [40:55](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=2455s) | Using `tidy` function from `broom` package to find which "documents" (reviews) were the "strongest" representation of each topic | +| Animal Crossing | [44:50](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=2690s) | Noting that there might be a scraping issue resulting in review text being repeated | +| Animal Crossing | [46:05](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=2765s) | (Unsuccessfully) Using `str_sub` function to help fix repeated review text by locating where in the review text starts being repeated | +| Animal Crossing | [48:20](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=2900s) | (Unsuccessfully) Using `str_replace` and `map2_chr` functions, as well as regex cpaturing groups to fix repeated text | +| Animal Crossing | [52:00](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=3120s) | Looking at the association between review grade and gamma of the topic model (how "strong" a review represents a topic) | +| Animal Crossing | [53:55](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=3235s) | Using `cor` function with method = "spearman" to calculate correlation based on rank instead of actual values | +| Animal Crossing | [57:35](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=3455s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Volcano Eruptions {#volcano-eruptions} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Volcano Eruptions | [7:00](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=420s) | Change the `last_eruption_year` into `years_ago` by using `mutate` from the `dplyr` package with `years_ago = 2020 - as.numeric(last_eruption_year))`. In the plot David includes `+1` to account for 0 values in the `years_ago` variable. | +| Volcano Eruptions | [9:50](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=590s) | Use `str_detect` from the `stringr` package to search the `volcano_name` variable for `Vesuvius` when not sure if spelling is correct. | +| Volcano Eruptions | [12:50](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=770s) | Use the `longitude` and `latitude` to create a world map showing where the volcanoes are located. | +| Volcano Eruptions | [15:30](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=930s) | Use `fct_lump` from the`forcats` package to lump together all `primary_volcano_type` factor levels except for the `n` most frequent. | +| Volcano Eruptions | [16:25](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=985s) | Use `str_remove` from the `stringr` package with the regular expression `"\\(.\\)"` to remove the parentheses. | +| Volcano Eruptions | [18:30](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=1110s) | Use the `leaflet` package to create an interactive map with popup information about each volcano. | +| Volcano Eruptions | [24:10](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=1450s) | Use `glue` from the `glue` package to create an `HTML` string by concatenating `volcano_name` and `primary_volcano_type` between `HTML

tags`. | +| Volcano Eruptions | [27:15](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=1635s) | Use the `DT` package to turn the `leaflet` popup information into a `datatable`. | +| Volcano Eruptions | [31:40](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=1900s) | Use `str_replace_all` fromt he `stringr` package to replace all the underscores `_` in `volcano_name` with space. Then use `str_to_title` from the `stringr` package to convert the `volcano_name` variable to title case. | +| Volcano Eruptions | [32:05](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=1925s) | Use `kable` with `format = HTML` from the `knitr` package instead of `DT` to make turning the data into `HTML` much easier. | +| Volcano Eruptions | [34:05](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=2045s) | Use `paste0` from `base` R to bold the `Volcano Name`, `Primary Volcano Type`, and `Last Eruption Year` in the `leaflet` popup. | +| Volcano Eruptions | [34:50](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=2090s) | Use `replace_na` from the `tidyr` package to replace `unknown` with `NA`. | +| Volcano Eruptions | [37:15](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=2235s) | Use `addMeasure` from the `leaflet` package to add a tool to the map that allows for the measuring of distance between points. | +| Volcano Eruptions | [39:30](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=2370s) | Use `colorNumeric` from the `leaflet` package to color the points based on their `population within 5km`. To accomplish this, David creates 2 new variables: 1) `transformed_pop` to get the population on a `log2` scale & 2) `pop_color` which uses the `colorNumeric` function to generate the color hex values based on `transformed_pop`. | +| Volcano Eruptions | [46:30](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=2790s) | Use the `gganimate` package to create an animated map. | +| Volcano Eruptions | [48:45](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=2925s) | Use `geom_point` from the `ggplot2` package with `size = .00001 * 10 ^ vei` so the size of the points are then proportional to the `volume` metrics provided in the `Volcano Eruption Index`. The metrics are in `Km^3`. | +| Volcano Eruptions | [50:20](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=3020s) | Use `scale_size_continuous` from the `ggplot2` package with `range = c(.1, 6)` to make the smaller points smaller and larger points larger. | +| Volcano Eruptions | [50:55](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=3055s) | Use `scale_color_gradient2` from the `ggplot2` package to apply color gradient to each point based on the volcano size and whether its low or high. | +| Volcano Eruptions | [59:40](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=3580s) | Summary of screencast while waiting for `gganimate` map to render. Also, brief discussion on using `transition_reveal` instead of `transition_time` to keep the point on the map instead of replacing them in each frame. | + +------------------------------------------------------------------------ + +#### Beach Volleyball {#beach-volleyball} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Beach Volleyball | [5:30](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=330s) | Use `pivot_longer` from the `dplyr` package to pivot the data set from `wide` to `long`. | +| Beach Volleyball | [7:20](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=440s) | Use `mutate_at` from the `dplyr` package with `starts_with` to change the class to `character` for all columns that start with `w_` and `l_`. | +| Beach Volleyball | [8:00](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=480s) | Use `separate` from the `tidyr` package to separate the `name` variable into three columns with `extra = merge` and `fill = right`. | +| Beach Volleyball | [10:35](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=635s) | Use `rename` from the `dplyr` package to rename `w_player1`, `w_player2`, `l_player1`, and `l_player2`. | +| Beach Volleyball | [12:50](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=770s) | Use `pivot_wider` from the `dplyr` package to pivot the `name` variable from `long` to `wide`. | +| Beach Volleyball | [15:15](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=915s) | Use `str_to_upper` to convert the `winner_loser` `w` and `l` values to uppercase. | +| Beach Volleyball | [20:25](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=1225s) | Add unique row numbers for each match using `mutate` with `row_number` from the `dplyr` package. | +| Beach Volleyball | [21:20](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=1280s) | Separate the `score` values into multiple rows using `separate_rows` from the `tidyr` package. | +| Beach Volleyball | [22:45](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=1365s) | Use `separate` from the `tidyr` package to actual scores into two columns, one for the winners score `w_score` and another for the losers score `l_score`. | +| Beach Volleyball | [23:45](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=1425s) | Use `na_if` from the `dplyr` package to change the `Forfeit or other` value from the `score` variable to `NA`. | +| Beach Volleyball | [24:35](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=1475s) | Use `str_remove` from the `stringr` package to remove scores that include `retired`. | +| Beach Volleyball | [25:25](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=1525s) | Determine how many times the winners score `w_score` is greter than the losers score `l_score` at least 1/3 of the time. | +| Beach Volleyball | [28:30](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=1710s) | Use `summarize` from the `dplyr` package to create the summary statistics including the `number of matches`, `winning percentage`, `date of first match`, `date of most recent match`. | +| Beach Volleyball | [34:15](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=2055s) | Use `type_convert` from the `readr` package to convert `character` class variables to `numeric`. | +| Beach Volleyball | [35:00](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=2100s) | Use `summarize_all` from the `dplyr` package to calculate the calculate which fraction of the data is not `NA`. | +| Beach Volleyball | [42:00](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=2520s) | Use `summarize` from the `dplyr` package to determine players `number of matches`, `winning percentage`, `average attacks`, `average errors`, `average kills`, `average aces`, `average serve errors`, and `total rows with data` for years prior to 2019. The summary statistics are then used to answer how would we could predict if a player will win in 2019 using `geom_point` and `logistic regression`. Initially, David wanted to predict performance based on players first year performance. (NOTE - David mistakingly grouped by `year` and `age`. He cathces this around 1:02:00.) | +| Beach Volleyball | [49:25](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=2965s) | Use `year` from the `lubridate` package within a `group_by` to determine the `age` for each play given their `birthdate`. | +| Beach Volleyball | [54:30](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=3270s) | Turn the summary statistics at timestamp `42:00` into a `.` DOT `%>%` PIPE function. | +| Beach Volleyball | [1:04:30](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=3870s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Cocktails {#cocktails} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Cocktails | [6:20](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=380s) | Use `fct_reorder` from the `forcats` package to reorder the `ingredient` factor levels along `n`. | +| Cocktails | [7:40](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=460s) | Use `fct_lump` from the `forcats` package to lump together all the levels except the `n` most frequent in the `category` and `ingredient` variables. | +| Cocktails | [11:30](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=690s) | Use `pairwise_cor` from the `widyr` package to find the correlation between the `ingredients`. | +| Cocktails | [16:00](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=960s) | Use `reorder_within` from the `tidytext` package with `scale_x_reordered` to reorder the the columns in each `facet`. | +| Cocktails | [19:45](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=1185s) | Use the `ggraph` and `igraph` packages to create a `network diagram` | +| Cocktails | [25:15](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=1515s) | Use `extract` from the `tidyr` package with `regex = (.*) oz` to create a new variable `amount` which doesn't include the `oz`. | +| Cocktails | [26:40](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=1600s) | Use `extract` with `regex` to turn the strings in the new `amount` variable into separate columns for the `ones`, `numerator`, and `denominator`. | +| Cocktails | [28:53](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=1733s) | Use `replace_na` from the `tidyr` package to replace `NA` with zeros in the `ones`, `numberator`, and `denominator` columns. David ends up reaplcing the `zero` in the `denominator` column with ones in order for the calculation to work. | +| Cocktails | [31:49](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=1909s) | Use `geom_text_repel` from the `ggrepel` package to add `ingredient` labels to the `geom_point` plot. | +| Cocktails | [32:30](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=1950s) | Use `na_if` from the `dplyr` package to replace `zeros` with `NA` | +| Cocktails | [34:25](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=2065s) | Use `scale_size_continuous` with `labels = percent_format()` to convert size legend values to percent. | +| Cocktails | [36:35](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=2195s) | Change the size of the points in the `network diagram` proportional to `n` using `vertices = ingredient_info` within `graph_from_data_frame` and `aes(size = n)` within `geom_node_point`. | +| Cocktails | [48:05](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=2885s) | Use `widely_svd` from the `widyr` package to perform principle component analysis on the `ingredients`. | +| Cocktails | [52:32](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=3152s) | Use `paste0` to concatenate `PC` and `dimension` in the facet panel titles. | +| Cocktails | [57:00](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=3420s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### African-American Achievements {#african-american-achievements} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| African-American Achievements | [8:20](https://www.youtube.com/watch?v=-W-OopvhNPo&t=500s) | Use `fct_reorder` from the `forcats` package to reorder the `category` factor levels by sorting along `n`. | +| African-American Achievements | [11:35](https://www.youtube.com/watch?v=-W-OopvhNPo&t=695s) | Use `str_remove` from the `stringr` package to remove anything after a bracket or parenthesis from the `person` variable with the `regular expression` `"[\\[\\(].*"` David then discusses how web scraping may be a better option than parsing the strings. | +| African-American Achievements | [12:25](https://www.youtube.com/watch?v=-W-OopvhNPo&t=745s) | Use `str_trim` from the `stringr` package to remove the `whitespace` from the `person` variable. David then discusses how web scraping may be a better option than parsing the strings. | +| African-American Achievements | [15:50](https://www.youtube.com/watch?v=-W-OopvhNPo&t=950s) | Create an interactive `plotly` timeline. | +| African-American Achievements | [18:20](https://www.youtube.com/watch?v=-W-OopvhNPo&t=1100s) | Use `ylim(c(-.1, 1))` to set scale limits moving the `geom_point` to the bottom of the graph. | +| African-American Achievements | [19:30](https://www.youtube.com/watch?v=-W-OopvhNPo&t=1170s) | Use `paste0` from `base R` to concatenate the `accomplishment` and `person` with `": "` in between the two displayed in the timeline hover label. | +| African-American Achievements | [20:30](https://www.youtube.com/watch?v=-W-OopvhNPo&t=1230s) | Set `y` to `category` in `ggplot` `aesthetics` to get 8 separate timelines on one plot, one for each category. Doing this allows David to remove the `ylim` mentioned above. | +| African-American Achievements | [22:25](https://www.youtube.com/watch?v=-W-OopvhNPo&t=1345s) | Use the `plotly` `tooltip = text` parameter to get just a single line of text in the `plotly` hover labels. | +| African-American Achievements | [26:05](https://www.youtube.com/watch?v=-W-OopvhNPo&t=1565s) | Use `glue` from the `glue` package to reformat `text` with `\n` included so that the single line of text can now be broken up into 2 separate lines in the hover labels. | +| African-American Achievements | [33:55](https://www.youtube.com/watch?v=-W-OopvhNPo&t=2035s) | Use `separate_rows` from the `tidyr` package to separate the `occupation_s` variable from the `science` dataset into multiple columns delimited by a semicolon with `sep = "; "` | +| African-American Achievements | [34:25](https://www.youtube.com/watch?v=-W-OopvhNPo&t=2065s) | Use `str_to_title` from the `stringr` package to conver the case to title case in the `occupation_s` variable. | +| African-American Achievements | [35:15](https://www.youtube.com/watch?v=-W-OopvhNPo&t=2115s) | Use `str_detect` from the `stringr` package to detect the presence of `statistician` from within the `occupation_s` variable with `regex("statistician", ignore_case = TRUE)` to perform a case-insensitive search. | +| African-American Achievements | [41:55](https://www.youtube.com/watch?v=-W-OopvhNPo&t=2515s) | Use the `rvest` package with `Selector Gadget` to scrape additional information about the individual from their `Wikipedia` infobox. | +| African-American Achievements | [49:15](https://www.youtube.com/watch?v=-W-OopvhNPo&t=2955s) | Use `map` and `possibly` from the `purrr` package to separate out the downloading of data from parsing the useful information. David then turns the infobox extraction step into an `anonymous function` using `.%>%` dot-pipe. | +| African-American Achievements | [58:40](https://www.youtube.com/watch?v=-W-OopvhNPo&t=3520s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### African-American History {#african-american-history} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| African-American History | [6:55](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=415s) | Use `fct_lump` from the `forcats` package to lump together all the factor levels in `ship_name` except the `n` most frequent. Used within `filter` with `! = "Other"` to remove `other`. | +| African-American History | [8:00](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=480s) | use `fct_reorder` from the `forcats` package to reorder the `ship_name` factor levels y sorting along the `n_slaves_arrived` variable. | +| African-American History | [10:20](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=620s) | Add `geom_vline` to `geom_histogram` to annotate the plot with a vertical line indicating the Revolutionary War and the Civil War. | +| African-American History | [13:00](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=780s) | Use `truncated division` within `count` to create a new `decade` variable equal to `10 * (year_arrival %/% 10))` | +| African-American History | [17:20](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=1040s) | Use `str_trunc` from the `stringr` package to truncate the titles in each facet panel accounting for the slave ports with really long names. | +| African-American History | [18:05](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=1085s) | Another option for accounting for long titles in the facet panels is to use `strip.text` within `theme` with `element_text(size = 6)` | +| African-American History | [26:55](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=1615s) | Use the `ggraph` package to create a `network diagram` using `port_origin` and `port_arrival`. | +| African-American History | [29:05](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=1745s) | Use `arrow` from the `grid` package to add directional arrows to the points in the `network diagram`. | +| African-American History | [29:40](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=1780s) | Use `scale_width_size_continuous` from the `ggraph` packge to adjust the size of the points in the `network diagram`. | +| African-American History | [35:25](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=2125s) | Within `summarize` use `mean(n_slaves_arrived, na.rm = TRUE) * n())` to come up with an estimated total numer of slaves since 49% of the data is missing. | +| African-American History | [48:20](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=2900s) | Create a faceted stacked percent barplot (spinogram) showing the percentage of `black_free`, `black_slaves`, `white`, and `other` for each region. | +| African-American History | [51:00](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=3060s) | Use the `wordcloud` package to create a `wordcloud` with the `african_names` dataset. David hsa issues with the `wordcloud` package and opts to use `ggwordcloud` instead. Also, mentions the `worldcloud2` package. | +| African-American History | [55:20](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=3320s) | Use `fct_recode` from the `forcats` package to change the factor levels for the `gender` variable while renaming `Man = "Boy"` and `Woman = "Girl"` | +| African-American History | [57:20](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=3440s) | Use `reorder_within` from the `tidytext` package to reorder the `geom_col` by `n` within `gender` variable for each facet panel. | +| African-American History | [59:00](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=3540s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Caribou Locations {#caribou-locations} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Caribou Locations | [4:00](https://www.youtube.com/watch?v=7G7SVODhVo4&t=240s) | Use `summarize` and `across` to calculate the proportion of `NA` values in the `individuals` dataset. Note, you do not need to use `list()`. | +| Caribou Locations | [9:00](https://www.youtube.com/watch?v=7G7SVODhVo4&t=540s) | Use `ggplot` and `borders` from the `ggplot2` package to create a map of `Canada` with `deploy_on_longitude` and `deploy_on_latitude` from the `individuals` dataset. | +| Caribou Locations | [13:50](https://www.youtube.com/watch?v=7G7SVODhVo4&t=830s) | Import Canada province `shapefile` using the `sf` package. [Unsuccessful] | +| Caribou Locations | [25:00](https://www.youtube.com/watch?v=7G7SVODhVo4&t=1500s) | Use `min` and `max` from `base r` within `summarize` to find out the `start` and `end` dates for each caribou in the `locations` dataset. | +| Caribou Locations | [27:15](https://www.youtube.com/watch?v=7G7SVODhVo4&t=1635s) | Use `sample` from `base r` to pick one single caribou at a time then use the subset with `geom_path` from `ggplot2` to track the path a that caribou takes over time. `color = factor(floor_date(timestamp, "quarter")` is used to color the path according to what quarter the observation occured in. | +| Caribou Locations | [35:15](https://www.youtube.com/watch?v=7G7SVODhVo4&t=2115s) | Use `as.Date` from `base r` and `floor_date` from the `lubridate` package to convert `timestamp` variable into quarters then `facet_wrap` the previous plot by `quarter`. | +| Caribou Locations | [37:15](https://www.youtube.com/watch?v=7G7SVODhVo4&t=2235s) | Within `mutate`, use `as.numeric(difftime(timestamp, lag(timestamp), unit = "hours"))` from `base r` to figure out the gap in time between observations. | +| Caribou Locations | [43:05](https://www.youtube.com/watch?v=7G7SVODhVo4&t=2585s) | Use `distHaversine` from the `geosphere` package to calculate distance in `km` then convert it to speed in `kph`. | +| Caribou Locations | [1:00:00](https://www.youtube.com/watch?v=7G7SVODhVo4&t=3600s) | Summary of dataset. | + +------------------------------------------------------------------------ + +#### X-Men Comics {#x-men-comics} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| X-Men Comics | [07:25](https://www.youtube.com/watch?v=NY0-IFet5AM&t=445s) | Using `separate` to separate the name from secrete identity in the `character` column | +| X-Men Comics | [09:55](https://www.youtube.com/watch?v=NY0-IFet5AM&t=595s) | Using `summarize` and `across` to find the frequency of the action variables and find out how many issues each action was used for each character | +| X-Men Comics | [13:25](https://www.youtube.com/watch?v=NY0-IFet5AM&t=805s) | Create a `geom_col` chart to visualize which character speaks in the most issues | +| X-Men Comics | [18:35](https://www.youtube.com/watch?v=NY0-IFet5AM&t=1115s) | Create a `geom_point` chart to visualize each character's average lines per issue in which the character is depicted | +| X-Men Comics | [22:05](https://www.youtube.com/watch?v=NY0-IFet5AM&t=1325s) | Create a `geom_point` chart to visualize each character's average thoughts per issue in which the character is depicted | +| X-Men Comics | [23:10](https://www.youtube.com/watch?v=NY0-IFet5AM&t=1390s) | Create a `geom_point` chart to visualize character's speech versus thought ratio per issue in which the character is depicted | +| X-Men Comics | [30:05](https://www.youtube.com/watch?v=NY0-IFet5AM&t=1805s) | Create a `geom_point` to visualize character's number of lines while in costume versus not in costume | +| X-Men Comics | [34:30](https://www.youtube.com/watch?v=NY0-IFet5AM&t=2070s) | Create a `geom_point` chart to visualize the lines in costume versus lines out of costume ratio | +| X-Men Comics | [39:20](https://www.youtube.com/watch?v=NY0-IFet5AM&t=2360s) | Create a `lollipop graph` using `geom_point` and `geom_errorbarh` to visualize the lines in costume versus lines out of costume ratio and their distance from 1.0 (1 to 1) | +| X-Men Comics | [45:00](https://www.youtube.com/watch?v=NY0-IFet5AM&t=2700s) | Use `summarize` to find the frequency of each location and the total number of unique issues where the location is used | +| X-Men Comics | [46:00](https://www.youtube.com/watch?v=NY0-IFet5AM&t=2760s) | Use `summarize` and `fct_lump` to count how many issues each author has written while lumping together all authors except the most frequent | +| X-Men Comics | [47:25](https://www.youtube.com/watch?v=NY0-IFet5AM&t=2845s) | Use `summarize` and `fct_lump` to see if the authors rates of passing the Bechdel test differ from one another | +| X-Men Comics | [52:45](https://www.youtube.com/watch?v=NY0-IFet5AM&t=3165s) | Create a `geom_line` chart to visualize if the rates of passing the Bechdel test changed over time and `floor division` `%/%` to generate 20 observations per group | +| X-Men Comics | [54:35](https://www.youtube.com/watch?v=NY0-IFet5AM&t=3275s) | Create a `geom_col` to visualize the amount of lines each character has per issue over time giving context to Bechdel test passing rates | +| X-Men Comics | [1:00:00](https://www.youtube.com/watch?v=NY0-IFet5AM&t=3600s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Coffee Ratings {#coffee-ratings} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Coffee Ratings | [08:15](https://www.youtube.com/watch?v=-1x8Kpyndss&t=495s) | Using `fct_lump` within `count` and then `mutate` to lump the variety of coffee together except for the most frequent | +| Coffee Ratings | [08:50](https://www.youtube.com/watch?v=-1x8Kpyndss&t=530s) | Create a `geom_boxplot` to visualize the variety and the distribution of `total_cup_points` | +| Coffee Ratings | [09:55](https://www.youtube.com/watch?v=-1x8Kpyndss&t=595s) | Create a `geom_histogram` to visualize the variety and the distribution of `total_cup_points` | +| Coffee Ratings | [11:40](https://www.youtube.com/watch?v=-1x8Kpyndss&t=700s) | Using `fct_reorder` to reorder `variety` by sorting it along `total_cup_points` in ascending order | +| Coffee Ratings | [12:35](https://www.youtube.com/watch?v=-1x8Kpyndss&t=755s) | Using `summarize` with `across` to calculate the percent of missing data (NA) for each rating variable | +| Coffee Ratings | [15:20](https://www.youtube.com/watch?v=-1x8Kpyndss&t=920s) | Create a bar chart using `geom_col` with `fct_lump` to visualize the frequency of top countries | +| Coffee Ratings | [20:35](https://www.youtube.com/watch?v=-1x8Kpyndss&t=1235s) | Using `pivot_longer` to pivot the rating metrics for wide format to long format | +| Coffee Ratings | [21:30](https://www.youtube.com/watch?v=-1x8Kpyndss&t=1290s) | Create a `geom_line` chart to see if the `sum` of the rating categories equal to the `total_cup_points` column | +| Coffee Ratings | [23:10](https://www.youtube.com/watch?v=-1x8Kpyndss&t=1390s) | Create a `geom_density_ridges` chart to show the distribution of ratings across each rating metric | +| Coffee Ratings | [24:35](https://www.youtube.com/watch?v=-1x8Kpyndss&t=1475s) | Using `summarize` with `mean` and `sd` to show the average rating per metric with its standard deviation | +| Coffee Ratings | [26:15](https://www.youtube.com/watch?v=-1x8Kpyndss&t=1575s) | Using `pairwise_cor` to find correlations amongst the rating metrics | +| Coffee Ratings | [27:20](https://www.youtube.com/watch?v=-1x8Kpyndss&t=1640s) | Create a `network plot` to show the clustering of the rating metrics | +| Coffee Ratings | [29:35](https://www.youtube.com/watch?v=-1x8Kpyndss&t=1775s) | Using `widely_svd` to visualize the biggest source of variation with the rating metrics (Singular value decomposition) | +| Coffee Ratings | [37:40](https://www.youtube.com/watch?v=-1x8Kpyndss&t=2260s) | Create a `geom_histogram` to visualize the distribution of altitude | +| Coffee Ratings | [40:20](https://www.youtube.com/watch?v=-1x8Kpyndss&t=2420s) | Using `pmin` to set a maximum numeric altitude value of 3000 | +| Coffee Ratings | [41:05](https://www.youtube.com/watch?v=-1x8Kpyndss&t=2465s) | Create a `geom-point` chart to visualize the correlation between altitude and quality (`total_cup_points`) | +| Coffee Ratings | [42:00](https://www.youtube.com/watch?v=-1x8Kpyndss&t=2520s) | Using `summarize` with `cor` to show the correlation between altitude and each rating metric | +| Coffee Ratings | [44:25](https://www.youtube.com/watch?v=-1x8Kpyndss&t=2665s) | Create a linear model `lm` for each rating metric then visualize the results using a `geom_line` chart to show how each kilometer of altitude contributes to the score | +| Coffee Ratings | [50:35](https://www.youtube.com/watch?v=-1x8Kpyndss&t=3035s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Australian Animal Outcomes {#australian-animal-outcomes} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Australian Animal Outcomes | [1:20](https://www.youtube.com/watch?v=E2amEz_upzU&t=80s) | Using `use_tidytemplate` to open the project dataset with the package's tidytemplate Rmd | +| Australian Animal Outcomes | [4:30](https://www.youtube.com/watch?v=E2amEz_upzU&t=270s) | Using `rename` to rename `Total` column to `total` | +| Australian Animal Outcomes | [6:20](https://www.youtube.com/watch?v=E2amEz_upzU&t=380s) | Using `fct_reorder` to reorder stacked barplot with `weight = sum` | +| Australian Animal Outcomes | [7:00](https://www.youtube.com/watch?v=E2amEz_upzU&t=420s) | Using `fct_lump` with `w = n` to lump together `outcome` factor levels displaying the most frequenct with rest lumped into `other` | +| Australian Animal Outcomes | [9:15](https://www.youtube.com/watch?v=E2amEz_upzU&t=555s) | Using `fct_recode` to combine the factor level `In Stock` with `Currently In Care` | +| Australian Animal Outcomes | [12:10](https://www.youtube.com/watch?v=E2amEz_upzU&t=730s) | Using `fct_reorder` to reorder `facet_wrap` panels | +| Australian Animal Outcomes | [13:03](https://www.youtube.com/watch?v=E2amEz_upzU&t=783s) | Using `scale_y_continuous` with `labels = comma` to separate digits with comma | +| Australian Animal Outcomes | [14:10](https://www.youtube.com/watch?v=E2amEz_upzU&t=850s) | Using `complete` to complete account for missing combinations of data where the value is 0 in the `released` column | +| Australian Animal Outcomes | [16:10](https://www.youtube.com/watch?v=E2amEz_upzU&t=970s) | Using `max (year)` within `filter` to subset the data displaying only the most recent year | +| Australian Animal Outcomes | [19:30](https://www.youtube.com/watch?v=E2amEz_upzU&t=1170s) | Using `pivot_longer` to pivot location variables from wide to long | +| Australian Animal Outcomes | [21:45](https://www.youtube.com/watch?v=E2amEz_upzU&t=1305s) | Web Scaraping table from Wikipedia with `SelectorGadget` and `Rvest` | +| Australian Animal Outcomes | [25:45](https://www.youtube.com/watch?v=E2amEz_upzU&t=1545s) | Using `str_to_upper` to upper case the values in the `shorthand` column | +| Australian Animal Outcomes | [27:13](https://www.youtube.com/watch?v=E2amEz_upzU&t=1633s) | Using `parse_number` to remove commas from `population` and `area` columns | +| Australian Animal Outcomes | [28:55](https://www.youtube.com/watch?v=E2amEz_upzU&t=1735s) | Using `bind_rows` to bind the two web scraped tables from Wikipedia together by row and column | +| Australian Animal Outcomes | [29:35](https://www.youtube.com/watch?v=E2amEz_upzU&t=1775s) | Using `inner_join` to combine the Wikipedia table with the original data set | +| Australian Animal Outcomes | [29:47](https://www.youtube.com/watch?v=E2amEz_upzU&t=1787s) | Using `mutate` to create new `per_capita_million` column to show `outcome` on a per million people basis | +| Australian Animal Outcomes | [37:25](https://www.youtube.com/watch?v=E2amEz_upzU&t=2245s) | Using `summarize` to create new column `pct_euthanized` showing percent of cats and dogs euthanized over time. Formula accounts for 0 values thus avoiding a resulting empty vector. | +| Australian Animal Outcomes | [39:10](https://www.youtube.com/watch?v=E2amEz_upzU&t=2350s) | Using `scale_y_continuous` with `labels = percent` to add percentage sign to y-axis values | +| Australian Animal Outcomes | [42:45](https://www.youtube.com/watch?v=E2amEz_upzU&t=2565s) | Create a choropleth map of Australia using an Australian States `Shapefile` using the `sf` and `ggplot2` packages | +| Australian Animal Outcomes | [55:45](https://www.youtube.com/watch?v=E2amEz_upzU&t=3345s) | Add animation to the map of Australia showing the percent of cats euthanized by region using `gganimate` | +| Australian Animal Outcomes | [1:01:35](https://www.youtube.com/watch?v=E2amEz_upzU&t=3695s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Palmer Penguins {#palmer-penguins} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Palmer Penguins | [11:17](https://www.youtube.com/watch?v=ImpXawPNCfM&t=677s) | Create a pivoted histogram plot to visualize the distribution of penguin metrics using `pivot_longer`, `geom_histogram`, and `facet_wrap` | +| Palmer Penguins | [14:40](https://www.youtube.com/watch?v=ImpXawPNCfM&t=880s) | Create a pivoted density plot to visualize the distribution of penguin metrics using `geom_density` and `facet_wrap` | +| Palmer Penguins | [15:21](https://www.youtube.com/watch?v=ImpXawPNCfM&t=921s) | Create a pivoted boxplot plot to visualize the distribution of penguin metrics using `geom_boxplot` and `facet_wrap` | +| Palmer Penguins | [17:50](https://www.youtube.com/watch?v=ImpXawPNCfM&t=1070s) | Create a bar plot to show penguin species changed over time | +| Palmer Penguins | [18:25](https://www.youtube.com/watch?v=ImpXawPNCfM&t=1105s) | Create a bar plot to show specie counts per island | +| Palmer Penguins | [20:00](https://www.youtube.com/watch?v=ImpXawPNCfM&t=1200s) | Create a logistic regression model to predict if a penguin is Adelie or not using bill length with cross validaiton of metrics | +| Palmer Penguins | [39:35](https://www.youtube.com/watch?v=ImpXawPNCfM&t=2375s) | Create second logistic regression model using 4 predictive metrics (bill length, bill depth, flipper length, body mass) and then compare the accuracy of both models | +| Palmer Penguins | [43:25](https://www.youtube.com/watch?v=ImpXawPNCfM&t=2605s) | Create a k-nearest neighbor model and then compare accuracy against logistic regression models to see which has the highest cross validated accuracy | +| Palmer Penguins | [53:05](https://www.youtube.com/watch?v=ImpXawPNCfM&t=3185s) | What is the accuracy of the testing holdout data on the k-nearest neighbor model? | +| Palmer Penguins | [1:05:40](https://www.youtube.com/watch?v=ImpXawPNCfM&t=3940s) | Create a decision tree and then compare accuracy against the previous models to see which has the highest cross validated accuracy + how to extract a decision tree | +| Palmer Penguins | [1:10:45](https://www.youtube.com/watch?v=ImpXawPNCfM&t=4245s) | Perform multi class regression using `multinom_reg` | +| Palmer Penguins | [1:19:40](https://www.youtube.com/watch?v=ImpXawPNCfM&t=4780s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### European Energy {#european-energy} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| European Energy | [01:50](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=110s) | Using `count` to get an overview of scategorical data | +| European Energy | [07:25](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=445s) | Using `pivot_longer` and `gather` to pivot date variables from wide to long | +| European Energy | [09:00](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=540s) | Using `as.integer` to change `year` variable from `character` to `integer` class | +| European Energy | [10:10](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=610s) | Using `fct_reorder` to reorder stacked barplot | +| European Energy | [10:30](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=630s) | Using `scale_y_continuous` with `labels = comma` from `scales` package to insert a comma every three digits on the y-axis | +| European Energy | [16:35](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=995s) | Using `replace_na` and `list` to replace `NA` values in `country_name` column with United Kingdom | +| European Energy | [18:05](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=1085s) | Using `fct_lump` to lump factor levels together except for the 10 most frequent for each facet panel | +| European Energy | [20:10](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=1210s) | Using `reorder_within` with `fun = sum` and `scale_y_reordered` to reorder the categories within each facet panel | +| European Energy | [24:30](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=1470s) | Using `ggflags` package to add country flags | +| European Energy | [29:20](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=1760s) | (Unsuccessfully) Using `fct_recode` to rename the ISO two-digit identifier for the United Kingdom from the UK to GB | +| European Energy | [33:20](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=2000s) | Using `ifelse` to replace the ISO two-digit identifier for the United Kingdom from UK to GB & from EL to GR fro Greece | +| European Energy | [40:45](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=2445s) | Using `str_to_lower` to convert observations in `country` column to lower case | +| European Energy | [45:00](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=2700s) | Creating a `slope graph` to show differences in Nuclear production (2106 versus 2018) | +| European Energy | [47:00](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=2820s) | Using `scale_x_continuous` with `breaks = c(2016, 2018)` to show only 2016 and 2018 on x-axis | +| European Energy | [48:20](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=2900s) | Extend x-axis limits using `scale_x_continuous` with `limits = c(2015, 2019)` and `geom_text` with an `ifelse` within `hjust` to alternate labels for the right and left side of `slope graph` | +| European Energy | [52:40](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=3160s) | Creating a slopegraph function | +| European Energy | [1:00:00](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=3600s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Plants in Danger {#plants-in-danger} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Plants in Danger | [2:00](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=120s) | Getting an overview of categorical data | +| Plants in Danger | [5:00](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=300s) | Using `fct_relevel` to reorder the "Before 1900" level to the first location leaving the other levels in their existing order | +| Plants in Danger | [8:05](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=485s) | Using `n` and `sum` in `fct_reorder` to reorder factor levels when there are multiple categories in `count` | +| Plants in Danger | [12:00](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=720s) | Using `reorder_within` and `scale_y_reordered` such that the values are ordered within each facet | +| Plants in Danger | [14:55](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=895s) | Using `axis.text.x` to rotate overlapping labels | +| Plants in Danger | [19:05](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=1145s) | Using `filter` and `fct_lump` to lump all levels except for the 8 most frequest facet panels | +| Plants in Danger | [26:55](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=1615s) | Using `separate` to separate the character column `binomial_name` into multiple columns (genus and species) | +| Plants in Danger | [28:20](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=1700s) | Using `fct_lump` within `count` to lump all levels except for the 8 most frequent genus | +| Plants in Danger | [45:30](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=2730s) | Using `rvest` and `SelectorGadget` to web scrape list of species | +| Plants in Danger | [49:35](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=2975s) | Using `str_trim` to remove whitespace from character string | +| Plants in Danger | [50:00](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=3000s) | Using `separate` to separate character string into genus, species, and rest/citation columns and using `extra = "merge"` to merge extra pieces into the rest/citation column | +| Plants in Danger | [51:00](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=3060s) | Using `rvest` and `SelectorGadget` to web scrape image links | +| Plants in Danger | [57:50](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=3470s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Chopped {#chopped} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Chopped | [5:20](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=320s) | Use `geom_histogram` to visualize the distribution of episode ratings. | +| Chopped | [6:30](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=390s) | Use `geom_point` and `geom_line` with `color = factor(season)` to visualize the episode rating for every episode. | +| Chopped | [7:15](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=435s) | Use `group_by` and `summarize` to show the average rating for each season and the number of episodes in each season. | +| Chopped | [7:15](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=435s) | Use `geom_line` and `geom_point` with `size = n_episodes` to visualize the average rating for each season with point size indicating the total number of episodes (larger = more episodes, smaller = fewer episodes). | +| Chopped | [10:55](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=655s) | Use `fct_reorder` to reorder the `episode_name` factor levels by sorting along the `episode_rating` variable. | +| Chopped | [10:55](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=655s) | Use `geom_point` to visualize the top episodes by rating. Use the 'glue' package to place `season number` and `episode number` before episode name on the `y axis`. | +| Chopped | [15:20](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=920s) | Use `pivot_longer` to combine ingredients into one single column. Use `separate_rows` with `sep = ", "` to separate out the ingredients with each ingredient getting its own row. | +| Chopped | [18:10](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1090s) | Use `fct_lump` to lump ingredients together except for the 10 most frequent. Use `fct_reorder` to reorder `ingredient` factor levels by sorting against `n`. | +| Chopped | [18:10](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1090s) | Use `geom_col` to create a stacked bar plot to visualize the most common ingredients by course. | +| Chopped | [19:45](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1185s) | Use `fct_relevel` to reorder `course` factor levels to appetizer, entree, dessert. | +| Chopped | [21:00](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1260s) | Use `fct_rev` and `scale_fill_discrete` with `guide = guide_legend(reverse = TRUE)` to reorder the segments within the stacked bar plot. | +| Chopped | [23:20](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1400s) | Use the `widyr` package and `pairwise_cor` to find out what ingredients appear together. Mentioned: [David Robinson - The `widyr` Package YouTube Talk at 2020 R Conference](https://www.youtube.com/watch?v=mApnx5NJwQA) | +| Chopped | [26:20](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1580s) | Use `ggraph` , `geom_edge_link`, `geom_node_point`, `geom_node_text` to create an ingredient network diagram to show their makeup and how they interact. | +| Chopped | [28:00](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1680s) | Use `pairwise_count` from `widyr` to count the number of times each pair of items appear together within a group defined by feature. | +| Chopped | [30:15](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1815s) | Use `unite` from the `tidyr` package in order to paste together the `episode_course` and `series_episode` columns into one column to figure out if any pairs of ingredients appear together in the same course across episodes. | +| Chopped | [31:55](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1915s) | Use `summarize` with `min`, `mean`, `max`, and `n()` to create the `first_season`, `avg_season`, `last_season` and `n_appearances` variables. | +| Chopped | [34:35](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=2075s) | Use `slice` with `tail` to get the `n` ingredients that appear in early and late seasons. | +| Chopped | [35:40](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=2140s) | Use `geom_boxplot` to visualize the distribution of each ingredient across all seasons. | +| Chopped | [36:50](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=2210s) | Fit predictive models (`linear regression` , `random forest`, and `natural spline`) to determine if episode rating is explained by the ingredients or season. Use `pivot_wider` with `values_fill = list(value = 0))` with 1 indicating ingredient was used and 0 indicating it wasn't used. | +| Chopped | [1:17:25](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=4645s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Global Crop Yields {#global-crop-yields} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Global Crop Yields | [03:35](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=215s) | Using `rename` to shorten column name | +| Global Crop Yields | [06:40](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=400s) | Using `rename_all` with `str_remove` and regex to remove characters in column name | +| Global Crop Yields | [07:40](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=460s) | Using `pivot_longer` to change data from wide to long | +| Global Crop Yields | [08:25](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=505s) | Create a faceted `geom_line` chart | +| Global Crop Yields | [09:40](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=580s) | Using `fct_reorder` to reorder facet panels in ascending order | +| Global Crop Yields | [11:50](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=710s) | Create an interactive `Shiny` dashboard | +| Global Crop Yields | [33:20](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=2000s) | Create a faceted `geom_line` chart with `add_count` and `filter(n = max(x))` to subset the data for crops that have observations in every year | +| Global Crop Yields | [36:50](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=2210s) | Create a faceted `geom_point` chart showing the crop yields at start and end over a 50 year period (1968 start date and 2018 end date) | +| Global Crop Yields | [45:00](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=2700s) | Create a `geom_boxplot` to visualize the distribution of yield ratios for the different crops to see how efficiency has increased across countries | +| Global Crop Yields | [46:00](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=2760s) | Create a `geom_col` chart to visualize the median yield ratio for each crop | +| Global Crop Yields | [47:50](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=2870s) | Create a `geom_point` chart to visualize efficiency imporvement for each country for a specific crop (yield start / yield ratio) | +| Global Crop Yields | [50:25](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=3025s) | Using the `countrycode` package to color `geom_point` chart by continent names | +| Global Crop Yields | [56:50](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=3410s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Friends {#friends} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Friends | [7:30](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=450s) | Use `dplyr` package's `count` function to count the unique values of multiple variables. | +| Friends | [9:35](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=575s) | Use `geom_col` to show how many lines of dialogue there is for each character. Use `fct_reorder` to reorder the `speaker` factor levels by sorting along `n`. | +| Friends | [12:07](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=727s) | Use `semi_join` to join `friends` dataset with `main_cast` with `by = ""speaker` returning all rows from `friends` with a match in `main_cast`. | +| Friends | [12:30](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=750s) | Use `unite` to create the `episode_number` variable which pastes together `season` and `episode` with `sep = "."`. Then, use `inner_join` to combine above dataset with `friends_info` with `by = c("season", "episode")`. Then, use `mutate` and the `glue` package instead to combine `{ season }.{ episode } { title }`. Then use `fct_reorder(episode_title, season + .001 * episode)` to order it by `season` first then `episode`. | +| Friends | [15:45](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=945s) | Use `geom_point` to visualize `episode_title` and `us_views_millions`. Use `as.integer` to change `episode_title` to integer class. Add labels to `geom_point` using `geom_text` with `check_overlap = TRUE` so text that overlaps previous text in the same layer will not be plotted. | +| Friends | [19:95](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=1235s) | Run the above plot again using `imdb_rating` instead of `us_views_millions` | +| Friends | [21:35](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=1295s) | Ahead of modeling: Use `geom_boxplot` to visualize the distribution of speaking for main characters. Use the `complete` function with `fill = list(n = 0)` to replace existing explicit missing values in the data set. Demonstration of how to account for missing `imdb_rating` values using the `fill` function with `.direction = "downup"` to keep the imdb rating across the same title. | +| Friends | [26:45](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=1605s) | Ahead of modeling: Use `summarize` with `cor(log2(n), imdb_rating)` to find the correlation between speaker and imdb rating -- the fact that the correlation is positive for all speakers gives David a suspicion that some episodes are longer than others because they're in 2 parts with higher ratings due to important moments. David addresses this `confounding factor` by including `percentage of lines` instead of `number of lines`. Visualize results with `geom_boxplot`, `geom_point` with `geom_smooth`. | +| Friends | [34:05](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=2045s) | Use a `linear model` to predict imdb rating based on various variables. | +| Friends | [42:00](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=2520s) | Use the `tidytext` and `tidylo` packages to see what words are most common amongst characters, and whether they are said more times than would be expected by chance. Use `geom_col` to visualize the most overrepresented words per character according to `log_odds_weighted`. | +| Friends | [54:15](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=3255s) | Use the `widyr` package and `pairwise correlation` to determine which characters tend to appear in the same scences together? Use `geom_col` to visualize the correlation between characters. | +| Friends | [1:00:25](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=3625s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Government Spending on Kids {#government-spending-on-kids} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Government Spending on Kids | [6:15](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=375s) | Using `geom_line` and `summarize` to visualize education spending over time. First for all states. Then individual states. Then small groups of states using `%in%`. Then in random groups of size n using `%in%` and `sample` with `unique`. `fct_reorder` is used to reorder `state` factor levels by sorting along the `inf_adj` variable. `geom_vline` used to add reference to the 2009 financial crisis. | +| " | Government Spending on Kids | [16:00](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=960s) | +| Government Spending on Kids | [23:35](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=1415s) | Create a `function` named `plot_changed_faceted` to make it easier to visualize the many other variables included in the dataset. | +| Government Spending on Kids | [27:25](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=1645s) | Create a `function` named `plot_faceted` with a `{{ y_axis }}` [embracing](https://dplyr.tidyverse.org/articles/programming.html) argument. Adding this function creates two stages: one for data transformation and another for plotting. | +| Government Spending on Kids | [37:05](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=2225s) | Use the `dir` function with `pattern` and `purrr` package's `map_df` function to read in many different `.csv` files with GDP values for each state. Troubleshooting `Can't combine and columns` error using `function` and `mutate` with `across` and `as.numeric`. Extract state name from filename using `extract` from `tidyr` and `regular expression`. | +| Government Spending on Kids | [50:50](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=3050s) | Unsuccessful attempt at importing state population data via a not user friendly dataset from `census.gov` by skipping the first 3 rows of the Excel file. | +| Government Spending on Kids | [54:22](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=3262s) | Use `geom_col` to see which states spend the most for each child for a single variable and multiple variables using `%in%`. Use `scale_fill_discrete` with `guide_legend(reverse = TRUE)` to change the ordering of the legend. | +| Government Spending on Kids | [57:40](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=3460s) | Use `geom_col` and `pairwise_corr` to visualize the correlation between variables across states in 2016 using `pairwise correlation`. | +| Government Spending on Kids | [1:02:02](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=3722s) | Use `geom_point` to plot `inf_adjust_perchild_PK12ed` versus `inf_adj_perchild_highered`. `geom_text` used to apply state names to each point. | +| Government Spending on Kids | [1:05:00](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=3900s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Himalayan Climbers {#himalayan-climbers} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Himalayan Climbers | [3:00](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=180s) | Create a `geom_col` chart to visualize the top 50 tallest mountains. Use `fct_reorder` to reorder the `peak_name` factor levels by sorting along the `height_metres` variable. | +| Himalayan Climbers | [8:50](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=530s) | Use `summarize` with `across` to get the total number of climbs, climbers, deaths, and first year climbed. Use `mutate` to calculate the percent death rate for members and hired staff. Use `inner_join` and `select` to join with `peaks` dataset by `peak_id`. | +| Himalayan Climbers | [11:20](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=680s) | Touching on statistical `noise` and how it impacts the death rate for mountains with fewer number of climbs, and how to account for it using various statistical methods including `Beta Binomial Regression` & `Empirical Bayes`. | +| Himalayan Climbers | [14:30](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=870s) | Further description of `Empirical Bayes` and how to account for not overestimating death rate for mountains with fewer climbers. Recommended reading: [Introduction to Empirical Bayes: Examples from Baseball Statistics](http://varianceexplained.org/r/empirical-bayes-book/) by David Robinson. | +| Himalayan Climbers | [17:00](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=1020s) | Use the `ebbr` package (Empirical Bayes for Binomial in R) to create an Empirical Bayes Estimate for each mountain by fitting prior distribution across data and adjusting the death rates down or up based on the prior distributions. Use a `geom_point` chart to visualize the difference between the raw death rate and new `ebbr` fitted death rate. | +| Himalayan Climbers | [21:20](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=1280s) | Use `geom_point` to visualize how deadly each mountain is with `geom_errorbarh` representing the 95% credible interval between minimum and maximum values. | +| Himalayan Climbers | [26:35](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=1595s) | Use `geom_point` to visualize the relationship between `death rate` and `height` of mountain. There is not a clear relationship, but David does briefly mention how one could use `Beta Binomial Regression` to further inspect for possible relationships / trends. | +| Himalayan Climbers | [28:00](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=1680s) | Use `geom_histogram` and `geom_boxplot` to visualize the distribution of time it took climbers to go from basecamp to the mountain's high point for successful climbs only. Use `mutate` to calculate the number of days it took climbers to get from basecamp to the highpoint. Add column to data using `case_when` and `str_detect` to identify strings in `termination_reason` that contain the word `Success` and rename them to `Success` & how to use a `vector` and `%in%` to change multiple values in `termination_reason` to `NA` and rest to `Failed`. Use `fct_lump` to show the top 10 mountains while lumping the other factor levels (mountains) into `other`. | +| Himalayan Climbers | [35:30](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=2130s) | For just Mount Everest, use `geom_histogram` and `geom_density` with `fill = success` to visualize the days from basecamp to highpoint for climbs that ended in `success`, `failure` or `other`. | +| Himalayan Climbers | [38:40](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=2320s) | For just Mount Everest, use `geom_histogram` to see the distribution of climbs per year. | +| Himalayan Climbers | [39:55](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=2395s) | For just Mount Everest, use 'geom_line`and`geom_point`to visualize`pct_death`over time by decade. Use`mutate`with`pmax`and`integer division`to create a decade variable that lumps together the data for 1970 and before. | | Himalayan Climbers | [41:30](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=2490s) | Write a function for summary statistics such as`n_climbs`,`pct_success`,`first_climb`,`pct_death`, ‘pct_hired_staff_death`. | +| Himalayan Climbers | [46:20](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=2780s) | For just Mount Everest, use `geom_line` and `geom_point` to visualize `pct_success` over time by decade. | +| Himalayan Climbers | [47:10](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=2830s) | For just Mount Everest, use `geom_line` and `geom_point` to visualize `pct_hired_staff_deaths` over time by decade. David decides to visualize the `pct_hired_staff_deaths` and `pct_death` charts together on the same plot. | +| Himalayan Climbers | [50:45](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=3045s) | For just Mount Everest, fit a logistic regression model to predict the probability of death with `format.pval` to calculate the `p.value`. Use `fct_lump` to lump together all `expedition_role` factors except for the n most frequent. | +| Himalayan Climbers | [56:30](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=3390s) | Use `group_by` with `integer division` and `summarize` to calculate `n_climbers` and `pct_death` for age bucketed into decades. | +| Himalayan Climbers | [59:45](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=3585s) | Use `geom_point` and `geom_errorbarh` to visualize the logistic regression model with confident intervals. | +| Himalayan Climbers | [1:03:30](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=3810s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Beyoncé and Taylor Swift Lyrics {#beyoncé-and-taylor-swift-lyrics} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Beyonce and Taylor Swift Lyrics | [7:50](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=470s) | Use `fct_reorder` from the `forcats` package to reorder `title` factor levels by sorting along the `sales` variable in `geom_col` plot. | +| Beyonce and Taylor Swift Lyrics | [8:10](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=490s) | Use `labels = dollar` from the `scales` package to format the `geom_col` x-axis values as currency. | +| Beyonce and Taylor Swift Lyrics | [11:15](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=675s) | Use `rename_all(str_to_lower)` to convert variable names to lowercase. | +| Beyonce and Taylor Swift Lyrics | [12:45](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=765s) | Use `unnest_tokens` from the `tidytext` package to split the lyrics into one-lyric-per-row. | +| Beyonce and Taylor Swift Lyrics | [13:00](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=780s) | Use `anti_join` from the `tidytext` package to find the most common words int he lyrics without `stop_words`. | +| Beyonce and Taylor Swift Lyrics | [15:15](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=915s) | Use `bind_tf_idf` from the `tidytext` package to determine `tf` - the proportion each word has in each album and `idf` - how specific each word is to each particular album. | +| Beyonce and Taylor Swift Lyrics | [17:45](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=1065s) | Use `reorder_within` with `scale_y_reordered` in order to reorder the bars within each `facet panel`. David replaces `top_n` with `slice_max` from the `dplyr` package in order to show the top 10 words with `ties = FALSE`. | +| Beyonce and Taylor Swift Lyrics | [20:45](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=1245s) | Use `bind_log_odds` from the `tidylo` package to calculate the `log odds ratio` of album and words, that is how much more common is the word in a specific album than across all the other albums. | +| Beyonce and Taylor Swift Lyrics | [23:10](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=1390s) | Use `filter(str_length(word) <= 3)` to come up with a list in order to remove common filler words like `ah`, `uh`, `ha`, `ey`, `eeh`, and `huh`. | +| Beyonce and Taylor Swift Lyrics | [27:00](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=1620s) | Use `mdy` from the `lubridate` package and `str_remove(released, " \\(.*)"))` from the `stringr` package to parse the dates in the `released` variable. | +| Beyonce and Taylor Swift Lyrics | [28:15](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=1695s) | Use `inner_join` from the `dplyr` package to join `taylor_swift_words` with `release_dates`. David ends up having to use `fct_recode` since the albums `reputation` and `folklore` were nor `lowercase` in a previous table thus excluding them from the `inner_join`. | +| Beyonce and Taylor Swift Lyrics | [28:30](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=1710s) | Use `fct_reorder` from the `forcats` package to reorder `album` factor levels by sorting along the `released` variable to be used in the `faceted` `geom_col`. | +| Beyonce and Taylor Swift Lyrics | [34:40](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=2080s) | Use `bind_rows` from hte `dplyr` package to bind `ts` with `beyonce` with `unnest_tokens` from the `tidytext` package to get one lyric per row per artist. | +| Beyonce and Taylor Swift Lyrics | [38:40](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=2320s) | Use `bind_log_odds` to figure out which words are more likely to come from a Taylor Swift or Beyonce song? | +| Beyonce and Taylor Swift Lyrics | [41:10](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=2470s) | Use `slice_max` from the `dplyr` package to select the top 100 words by `num_words_total` and then the top 25 by `log_odds_weighted`. Results are used to create a diverging bar chart showing which words are most common between Beyonce and Taylor Swift songs. | +| Beyonce and Taylor Swift Lyrics | [44:40](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=2680s) | Use `scale_x_continuous` to make the `log_odds_weighted` scale more interpretable. | +| Beyonce and Taylor Swift Lyrics | [50:45](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=3045s) | Take the previous plot and turn it into a `lollipop graph` with `geom_point(aes(size = num_words_total, color = direction))` | +| Beyonce and Taylor Swift Lyrics | [53:05](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=3185s) | Use `ifelse` to change the `1x` value on the x-axis to `same`. | +| Beyonce and Taylor Swift Lyrics | [54:15](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=3255s) | Create a `geom_point` with `geom_abline` to show the most popular words they use in common. | +| Beyonce and Taylor Swift Lyrics | [1:01:55](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=3715s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### NCAA Women's Basketball {#ncaa-womens-basketball} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| NCAA Women's Basketball | [15:00](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=900s) | Use `fct_relevel` from the `forcats` package to order the factor levels for the `tourney_finish` variable. | +| NCAA Women's Basketball | [16:35](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=995s) | Use `geom_tile` from the `ggplot2` package to create a `heatmap` to show how far a particular seed ends up going in the tournament. | +| NCAA Women's Basketball | [20:35](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=1235s) | Use `scale_y_continuous` from the `ggplot2` package with `breaks = seq(1, 16)` in order to include all 16 seeds. | +| NCAA Women's Basketball | [20:55](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=1255s) | Use `geom_text` from the `ggplot2` package with `label = percent(pct)` to apply the percentage to each tile in the heatmap. | +| NCAA Women's Basketball | [21:40](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=1300s) | Use `scale_x_discrete` and `scale_y_continuous` both with `expand = c(0, 0)` to remove the space between the x and y axis and the heatmap tiles. David calls this flattening. | +| NCAA Women's Basketball | [32:15](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=1935s) | Use `scale_y_reverse` to flip the order of the y-axis from 1-16 to 16-1. | +| NCAA Women's Basketball | [34:45](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=2085s) | Use `cor` from the `stats` package to calculate the `correlation` between `seed` and `tourney_finish`. Then plotted to determine if there is a correlation over time. | +| NCAA Women's Basketball | [39:50](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=2390s) | Use `geom_smooth` with `method = "loess"` to add a smoothing line with confidence bound to aid in seeing the trend between `seed` and `reg_percent`. | +| NCAA Women's Basketball | [42:10](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=2530s) | Use `fct_lump` from the `forcats` package to lump together all the conference except for the `n` most frequent. | +| NCAA Women's Basketball | [42:55](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=2575s) | Use `geom_jitter` from the `ggplot2` package instead of `geom_boxplot` to avoid overplotting which makes it easier to visualize the points that make up the distribution of the `seed` variable. | +| NCAA Women's Basketball | [47:05](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=2825s) | Use `geom_smooth` with `method = "lm"` to aid in seeing the trend between `reg_percent` and `tourney_w`. | +| NCAA Women's Basketball | [54:20](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=3260s) | Create a `dot pipe function` using `.` and `%>%` to avoid duplicating summary statistics with `summarize`. | +| NCAA Women's Basketball | [56:35](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=3395s) | Use `glue` from the `glue` package to concatenate together `school` and `n_entries` on the `geo_col` y-axis. | +| NCAA Women's Basketball | [59:50](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=3590s) | Summary of screencast | +------------------------------------------------------------------------ -*** +#### Great American Beer Festival {#great-american-beer-festival} +[Back to summary](#screencast-summary) - -#### CRAN Package Code - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| CRAN Package Code | [4:30](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=270s) | Summarizing many things by language (e.g., lines of code, comment/code ratio) | -| CRAN Package Code | [9:35](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=575s) | Using `gather` function (now `pivot_longer`) to consolidate multiple metrics into one dimension, then visualizing by facetting by metric | -| CRAN Package Code | [11:20](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=680s) | Setting ncol = 1 within `facet_wrap` function to get facetted graphs to stack vertically | -| CRAN Package Code | [11:30](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=690s) | Using `reorder_within` function from `tidytext` package to properly reorder factors within each facet | -| CRAN Package Code | [16:00](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=960s) | Using `geom_text` label to add language name as label to scatter points | -| CRAN Package Code | [20:00](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=1200s) | Completing preliminary overview and looking at distribution of R code in packages | -| CRAN Package Code | [26:15](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=1575s) | Using `str_extract` to extract only letters and names from character vector (using regex) | -| CRAN Package Code | [34:00](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=2040s) | Re-ordering the order of categorical variables in the legend using `guides` function | -| CRAN Package Code | [36:00](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=2160s) | Investigating comment/code ratio | -| CRAN Package Code | [43:05](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=2585s) | Importing additional package data (looking around for a bit, then starting to actually import ~46:00) | -| CRAN Package Code | [54:40](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=3280s) | Importing even more additional data (available packages) | -| CRAN Package Code | [57:50](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=3470s) | Using `separate_rows` function to separate delimited values | -| CRAN Package Code | [58:45](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=3525s) | Using `extract` function and regex to pull out specific types of characters from a string | -| CRAN Package Code | [1:05:35](https://www.youtube.com/watch?v=dr4qw8o0nYU&t=3935s) | Summary of screencast | - - - -*** - - - -#### Riddler: Spelling Bee Honeycomb - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Riddler: Spelling Bee Honeycomb | [2:00](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=120s) | Using `read_lines` function to import a plain text file (.txt) | -| Riddler: Spelling Bee Honeycomb | [2:35](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=155s) | Using `str_detect` function to filter out words that do not contain the letter "g" | -| Riddler: Spelling Bee Honeycomb | [3:25](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=205s) | Using `str_split` function to get a list of a word's individual letters | -| Riddler: Spelling Bee Honeycomb | [3:55](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=235s) | Using `setdiff` function to find words with invalid letters (letters that are not in the puzzle honeycomb) -- also needs `map` function (at 4:35) | -| Riddler: Spelling Bee Honeycomb | [10:45](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=645s) | Changing existing code to make a function that will calculate scores for letter combinations | -| Riddler: Spelling Bee Honeycomb | [14:10](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=850s) | Noticing the rule about bonus points for pangrams and using `n_distinct` function to determine if a word gets those points | -| Riddler: Spelling Bee Honeycomb | [17:25](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=1045s) | Using `map` function to eliminate duplicate letters from each word's list of component letters | -| Riddler: Spelling Bee Honeycomb | [25:55](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=1555s) | Using `acast` function from `reshape2` package to create a matrix of words by letters | -| Riddler: Spelling Bee Honeycomb | [27:50](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=1670s) | Using the words/letters matrix to find valid words for a given letter combination | -| Riddler: Spelling Bee Honeycomb | [29:55](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=1795s) | Using the matrix multiplication operator `%*%` to find the number of "forbidden" letters for each word | -| Riddler: Spelling Bee Honeycomb | [42:05](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=2525s) | Using `microbenchmark` function from `microbenchmark` package to test how long it takes to run a function | -| Riddler: Spelling Bee Honeycomb | [43:35](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=2615s) | Using combn function to get the actual combinations of 6 letters (not just the count) | -| Riddler: Spelling Bee Honeycomb | [45:15](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=2715s) | Using `map` function to get scores for different combinations of letters created above | -| Riddler: Spelling Bee Honeycomb | [47:30](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=2850s) | Using `which.max` function to find the position of the max value in a vector | -| Riddler: Spelling Bee Honeycomb | [1:05:10](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=3910s) | Using `t` function to transpose a matrix | -| Riddler: Spelling Bee Honeycomb | [1:19:15](https://www.youtube.com/watch?v=wFZhuQEfEYA&t=4755s) | Summary of screencast | - - - -*** - - - -#### The Office - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| The Office | [1:45](https://www.youtube.com/watch?v=_IvAubTDQME&t=105s) | Overview of transcripts data | -| The Office | [2:25](https://www.youtube.com/watch?v=_IvAubTDQME&t=145s) | Overview of ratintgs data | -| The Office | [4:10](https://www.youtube.com/watch?v=_IvAubTDQME&t=250s) | Using `fct_inorder` function to create a factor with levels based on when they appear in the dataframe | -| The Office | [4:50](https://www.youtube.com/watch?v=_IvAubTDQME&t=290s) | Using `theme` and `element_text` functions to turn axis labels 90 degrees | -| The Office | [5:55](https://www.youtube.com/watch?v=_IvAubTDQME&t=355s) | Creating a line graph with points at each observation (using `geom_line` and `geom_point`) | -| The Office | [7:10](https://www.youtube.com/watch?v=_IvAubTDQME&t=430s) | Adding text labels to very high and very low-rated episodes | -| The Office | [8:50](https://www.youtube.com/watch?v=_IvAubTDQME&t=530s) | Using `theme` function's `panel.grid.major` argument to get rid of some extraneous gridlines, using `element_blank` function | -| The Office | [10:15](https://www.youtube.com/watch?v=_IvAubTDQME&t=615s) | Using `geom_text_repel` from `ggrepel` package to experiment with different labelling (before abandoning this approach) | -| The Office | [12:45](https://www.youtube.com/watch?v=_IvAubTDQME&t=765s) | Using `row_number` function to add episode_number field to make graphing easier | -| The Office | [14:05](https://www.youtube.com/watch?v=_IvAubTDQME&t=845s) | Explanation of why number of ratings (votes) is relevant to interpreting the graph | -| The Office | [19:10](https://www.youtube.com/watch?v=_IvAubTDQME&t=1150s) | Using `unnest_tokens` function from `tidytext` package to split full-sentence text field to individual words | -| The Office | [20:10](https://www.youtube.com/watch?v=_IvAubTDQME&t=1210s) | Using `anti_join` function to filter out stop words (e.g., and, or, the) | -| The Office | [22:25](https://www.youtube.com/watch?v=_IvAubTDQME&t=1345s) | Using `str_remove_all` function to get rid of quotation marks from character names (quirks that might pop up when parsing) | -| The Office | [25:40](https://www.youtube.com/watch?v=_IvAubTDQME&t=1540s) | Asking, "Are there words that are specific to certain characters?" (using `bind_tf_idf` function) | -| The Office | [32:25](https://www.youtube.com/watch?v=_IvAubTDQME&t=1945s) | Using `reorder_within` function to re-order factors within a grouping (when a term appears in multiple groups) and `scale_x_reordered` function to graph | -| The Office | [37:05](https://www.youtube.com/watch?v=_IvAubTDQME&t=2225s) | Asking, "What effects the popularity of an episode?" | -| The Office | [37:55](https://www.youtube.com/watch?v=_IvAubTDQME&t=2275s) | Dealing with inconsistent episode names between datasets | -| The Office | [41:25](https://www.youtube.com/watch?v=_IvAubTDQME&t=2485s) | Using `str_remove` function and some regex to remove "(Parts 1&2)" from some episode names | -| The Office | [42:45](https://www.youtube.com/watch?v=_IvAubTDQME&t=2565s) | Using `str_to_lower` function to further align episode names (addresses inconsistent capitalization) | -| The Office | [52:20](https://www.youtube.com/watch?v=_IvAubTDQME&t=3140s) | Setting up dataframe of features for a LASSO regression, with director and writer each being a feature with its own line | -| The Office | [52:55](https://www.youtube.com/watch?v=_IvAubTDQME&t=3175s) | Using `separate_rows` function to separate episodes with multiple writers so that each has their own row | -| The Office | [58:25](https://www.youtube.com/watch?v=_IvAubTDQME&t=3505s) | Using `log2` function to transform number of lines fields to something more useable (since it is log-normally distributed) | -| The Office | [1:00:20](https://www.youtube.com/watch?v=_IvAubTDQME&t=3620s) | Using `cast_sparse` function from `tidytext` package to create a sparse matrix of features by episode | -| The Office | [1:01:55](https://www.youtube.com/watch?v=_IvAubTDQME&t=3715s) | Using `semi_join` function as a "filtering join" | -| The Office | [1:02:30](https://www.youtube.com/watch?v=_IvAubTDQME&t=3750s) | Setting up dataframes (after we have our features) to run LASSO regression | -| The Office | [1:03:50](https://www.youtube.com/watch?v=_IvAubTDQME&t=3830s) | Using `cv.glmnet` function from `glmnet` package to run a cross-validated LASSO regression | -| The Office | [1:05:35](https://www.youtube.com/watch?v=_IvAubTDQME&t=3935s) | Explanation of how to pick a lambda penalty parameter | -| The Office | [1:05:55](https://www.youtube.com/watch?v=_IvAubTDQME&t=3955s) | Explanation of output of LASSO model | -| The Office | [1:09:25](https://www.youtube.com/watch?v=_IvAubTDQME&t=4165s) | Outline of why David likes regularized linear models (which is what LASSO is) | -| The Office | [1:10:55](https://www.youtube.com/watch?v=_IvAubTDQME&t=4255s) | Summary of screencast | - - - -*** - - - -#### COVID-19 Open Research Dataset (CORD-19) - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| COVID-19 Open Research Dataset (CORD-19) | [0:55](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=55s) | Disclaimer that David's not an epidemiologist | -| COVID-19 Open Research Dataset (CORD-19) | [2:55](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=175s) | Overview of dataset | -| COVID-19 Open Research Dataset (CORD-19) | [7:50](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=470s) | Using `dir` function with its `full.names` argument to get file paths for all files in a folder | -| COVID-19 Open Research Dataset (CORD-19) | [9:45](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=585s) | Inspecting JSON-formatted data | -| COVID-19 Open Research Dataset (CORD-19) | [10:40](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=640s) | Introducing `hoist` function as a way to deal with nested lists (typical for JSON data) | -| COVID-19 Open Research Dataset (CORD-19) | [11:40](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=700s) | Continuing to use the `hoist` function | -| COVID-19 Open Research Dataset (CORD-19) | [13:10](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=790s) | Brief explanation of `pluck` specification | -| COVID-19 Open Research Dataset (CORD-19) | [16:35](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=995s) | Using `object.size` function to check size of JSON data | -| COVID-19 Open Research Dataset (CORD-19) | [17:40](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=1060s) | Using `map_chr` and `str_c` functions together to combine paragraphs of text in a list into a single character string | -| COVID-19 Open Research Dataset (CORD-19) | [20:00](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=1200s) | Using `unnest_tokens` function from `tidytext` package to split full paragraphs into individual words | -| COVID-19 Open Research Dataset (CORD-19) | [22:50](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=1370s) | Overview of `scispaCy` package for Python, which has named entity recognition features | -| COVID-19 Open Research Dataset (CORD-19) | [24:40](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=1480s) | Introducting `spacyr` package, which is a R wrapper around the Python `scispaCy` package | -| COVID-19 Open Research Dataset (CORD-19) | [28:50](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=1730s) | Showing how `tidytext` can use a custom tokenization function (David uses `spacyr` package's named entity recognition) | -| COVID-19 Open Research Dataset (CORD-19) | [32:20](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=1940s) | Demonstrating the `tokenize_words` function from the `tokenizers` package | -| COVID-19 Open Research Dataset (CORD-19) | [37:00](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=2220s) | Actually using a custom tokenizer in `unnest_tokens` function | -| COVID-19 Open Research Dataset (CORD-19) | [39:45](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=2385s) | Using `sample_n` function to get a random sample of n rows | -| COVID-19 Open Research Dataset (CORD-19) | [43:25](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=2605s) | Asking, "What are groups of words that tend to occur together?" | -| COVID-19 Open Research Dataset (CORD-19) | [44:30](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=2670s) | Using `pairwise_cor` from `widyr` package to find correlation between named entities | -| COVID-19 Open Research Dataset (CORD-19) | [45:40](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=2740s) | Using `ggraph` and `igraph` packages to create a network plot | -| COVID-19 Open Research Dataset (CORD-19) | [52:05](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=3125s) | Starting to look at papers' references | -| COVID-19 Open Research Dataset (CORD-19) | [53:30](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=3210s) | Using `unnest_longer` then `unnest_wider` function to convert lists into a tibble | -| COVID-19 Open Research Dataset (CORD-19) | [59:30](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=3570s) | Using `str_trunc` function to truncate long character strings to a certain number of characters | -| COVID-19 Open Research Dataset (CORD-19) | [1:06:25](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=3985s) | Using `glue` function for easy combination of strings and R code | -| COVID-19 Open Research Dataset (CORD-19) | [1:19:15](https://www.youtube.com/watch?v=-5HYdBq_PTM&t=4755s) | Summary of screencast | - - - -*** - - - -#### CORD-19 Data Package - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| CORD-19 Data Package | [1:10](https://www.youtube.com/watch?v=F4oUJp76KUY&t=70s) | Overview of JSON files with the data David will make a package of | -| CORD-19 Data Package | [3:05](https://www.youtube.com/watch?v=F4oUJp76KUY&t=185s) | Starting to create a new package with "New Project" in RStudio | -| CORD-19 Data Package | [5:40](https://www.youtube.com/watch?v=F4oUJp76KUY&t=340s) | Creating a file to reference the license for the dataset | -| CORD-19 Data Package | [7:25](https://www.youtube.com/watch?v=F4oUJp76KUY&t=445s) | Using `use_data_raw` function from `usethis` package to set up a folder structure and preliminary function for raw data | -| CORD-19 Data Package | [8:30](https://www.youtube.com/watch?v=F4oUJp76KUY&t=510s) | Explanation that we want to limit the number of packages we load when building a package (e.g., no `library(tidyverse)` ) | -| CORD-19 Data Package | [9:00](https://www.youtube.com/watch?v=F4oUJp76KUY&t=540s) | Using `use_package` function from `usethis` package to add "Suggested packages" | -| CORD-19 Data Package | [10:15](https://www.youtube.com/watch?v=F4oUJp76KUY&t=615s) | Reviewing import and cleaning code already completed | -| CORD-19 Data Package | [14:55](https://www.youtube.com/watch?v=F4oUJp76KUY&t=895s) | Using `roxygen2` package to write documentation | -| CORD-19 Data Package | [19:35](https://www.youtube.com/watch?v=F4oUJp76KUY&t=1175s) | More documentation writing | -| CORD-19 Data Package | [24:50](https://www.youtube.com/watch?v=F4oUJp76KUY&t=1490s) | Using `use_data` function from `usethis` package to create a folder structure and datafile for (finished/cleaned) data | -| CORD-19 Data Package | [26:10](https://www.youtube.com/watch?v=F4oUJp76KUY&t=1570s) | Making a mistake clicking "Install and Restart" button on the "Build" tab (because of huge objects in the environment) (see 26:50 for alternative) | -| CORD-19 Data Package | [26:50](https://www.youtube.com/watch?v=F4oUJp76KUY&t=1610s) | Using `load_all` function from `devtrools` package as an alternative to "Install and Restart" from above step | -| CORD-19 Data Package | [27:35](https://www.youtube.com/watch?v=F4oUJp76KUY&t=1655s) | Using `document` function from `devtools` package to process written documentation | -| CORD-19 Data Package | [32:20](https://www.youtube.com/watch?v=F4oUJp76KUY&t=1940s) | De-duplicating paper data in a way the keeps records that have fewer missing values than other records for the same paper | -| CORD-19 Data Package | [39:50](https://www.youtube.com/watch?v=F4oUJp76KUY&t=2390s) | Using `use_data` function with its overwrite argument to overwrite existing data | -| CORD-19 Data Package | [47:30](https://www.youtube.com/watch?v=F4oUJp76KUY&t=2850s) | Writing documentation for paragraphs data | -| CORD-19 Data Package | [57:55](https://www.youtube.com/watch?v=F4oUJp76KUY&t=3475s) | Testing an install of the package | -| CORD-19 Data Package | [59:30](https://www.youtube.com/watch?v=F4oUJp76KUY&t=3570s) | Adding link to code in documentation | -| CORD-19 Data Package | [1:03:00](https://www.youtube.com/watch?v=F4oUJp76KUY&t=3780s) | Writing examples of how to use the package (in documentation) | -| CORD-19 Data Package | [1:08:45](https://www.youtube.com/watch?v=F4oUJp76KUY&t=4125s) | Discussion of outstanding items that David hasn't done yet (e.g., readme, vignettes, tests) | -| CORD-19 Data Package | [1:09:20](https://www.youtube.com/watch?v=F4oUJp76KUY&t=4160s) | Creating a simple readme, including examples, with `use_readme_rmd` function from `usethis` package | -| CORD-19 Data Package | [1:16:10](https://www.youtube.com/watch?v=F4oUJp76KUY&t=4570s) | Using `knit` function from the `knitr` package to knit the readme into a markdown file | -| CORD-19 Data Package | [1:17:10](https://www.youtube.com/watch?v=F4oUJp76KUY&t=4630s) | Creating a GitHub repository to host the package (includes how to commit to a GitHub repo using RStudio's GUI) | -| CORD-19 Data Package | [1:18:15](https://www.youtube.com/watch?v=F4oUJp76KUY&t=4695s) | Explanation that version 0.0.0.9000 means that the package is in early development | -| CORD-19 Data Package | [1:20:30](https://www.youtube.com/watch?v=F4oUJp76KUY&t=4830s) | Actually creating the GitHub repository | -| CORD-19 Data Package | [1:22:25](https://www.youtube.com/watch?v=F4oUJp76KUY&t=4945s) | Overview of remaining tasks | - - - -*** - - - -#### R Trick: Creating Pascal's Triangle with `accumulate()` - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| R trick: Creating Pascal's Triangle with accumulate() | [1:10](https://www.youtube.com/watch?v=rUK9Wz9B2n0&t=70s) | Simple explanation of `accumulate` function | -| R trick: Creating Pascal's Triangle with accumulate() | [1:30](https://www.youtube.com/watch?v=rUK9Wz9B2n0&t=90s) | Example using letters | -| R trick: Creating Pascal's Triangle with accumulate() | [2:55](https://www.youtube.com/watch?v=rUK9Wz9B2n0&t=175s) | Using tilde `~` to create an anonymous function | -| R trick: Creating Pascal's Triangle with accumulate() | [4:35](https://www.youtube.com/watch?v=rUK9Wz9B2n0&t=275s) | Introducing Pascal's Triangle | -| R trick: Creating Pascal's Triangle with accumulate() | [6:25](https://www.youtube.com/watch?v=rUK9Wz9B2n0&t=385s) | Starting to create Pascal's triangle in R | -| R trick: Creating Pascal's Triangle with accumulate() | [8:05](https://www.youtube.com/watch?v=rUK9Wz9B2n0&t=485s) | Concerting the conceptual solution into an `accumulate` function | - - - -*** - - - -#### Riddler: Simulating Replacing Die Sides - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Riddler: Simulating Replacing Die Sides | [0:45](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=45s) | Explaining why the recursive nature of this problem is well-suited to simulation | -| Riddler: Simulating Replacing Die Sides | [2:05](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=125s) | Introducing the `accumulate` function as a tool for simulation | -| Riddler: Simulating Replacing Die Sides | [3:50](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=230s) | Creating a condition to call the `done` function | -| Riddler: Simulating Replacing Die Sides | [7:00](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=420s) | After creating a function to simulate one round of the problem, using `replicate` function to run simulation many times | -| Riddler: Simulating Replacing Die Sides | [7:15](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=435s) | Using `qplot` function to quickly create a histogram of simulations | -| Riddler: Simulating Replacing Die Sides | [7:40](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=460s) | Making observations on the distribution of simulations (looks kind of like a gamma distribution) | -| Riddler: Simulating Replacing Die Sides | [10:05](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=605s) | Observing that the distribution is kind of log-normal (but that doesn't really apply because we're using integers) | -| Riddler: Simulating Replacing Die Sides | [10:35](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=635s) | Using `table` and `sort` functions to find the most common number of rolls | -| Riddler: Simulating Replacing Die Sides | [11:20](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=680s) | Starting the Extra Credit portion of the problem (N-sided die) | -| Riddler: Simulating Replacing Die Sides | [11:40](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=700s) | Using the `crossing` function to set up a tibble to run simulations | -| Riddler: Simulating Replacing Die Sides | [12:35](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=755s) | Using `map_dbl` function to apply a set of simulations to each possibility of N sides | -| Riddler: Simulating Replacing Die Sides | [13:30](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=810s) | Spotting an error in the formula for simulating one round (6-sided die was hard-coded) | -| Riddler: Simulating Replacing Die Sides | [16:40](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=1000s) | Using simple linear regression with the `lm` function to find the relationship between number of sides and average number of rolls | -| Riddler: Simulating Replacing Die Sides | [17:20](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=1040s) | Reviewing distributions for different N-sided dice | -| Riddler: Simulating Replacing Die Sides | [18:00](https://www.youtube.com/watch?v=XEsNpxl5b1M&t=1080s) | Calculating variance, standard deviation, and coefficient of variation to get hints on the distribution (and ruling out Poisson) | - - - -*** - - - -#### Beer Production - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Beer Production | [4:25](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=265s) | Asking, "What ingredients are used in beer?" | -| Beer Production | [4:40](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=280s) | Using `filter` and `max` functions to look at the most recent period of time | -| Beer Production | [7:25](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=445s) | Using `paste` and `ymd` functions (`ymd` is from `lubridate` package) to convert year-month field into an date-formatted field | -| Beer Production | [9:20](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=560s) | Spotting potential missing or mis-parsed data | -| Beer Production | [13:50](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=830s) | Introducing the `tidymetrics` framework | -| Beer Production | [14:45](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=885s) | Using `install_github` function to install `tidymetrics` from GitHub | -| Beer Production | [15:25](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=925s) | Using `cross_by_dimensions` function from `tidymetrics` package to get aggregations at different levels of multiple dimensions | -| Beer Production | [18:10](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=1090s) | Using `cross_by_periods` function from `tidymetrics` package to also get aggregations for different intervals (e.g, month, quarter, year) | -| Beer Production | [22:00](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=1320s) | Using `use_metrics_scaffold` function from `tidymetrics` package to create framework for documenting dimensions in RMarkdown YAML header | -| Beer Production | [24:00](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=1440s) | Using `create_metrics` function from `tidymetrics` package to save data as a tibble with useful metadata (good for visualizing interactively) | -| Beer Production | [25:15](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=1515s) | Using `preview_metric` function from `shinymetrics` package (still under development as of 2020-04-24) to demonstrate `shinymetrics` | -| Beer Production | [27:35](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=1655s) | Succesfuly getting `shinymetrics` to work | -| Beer Production | [28:25](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=1705s) | Explanation of the `shinymetrics` bug David ran into | -| Beer Production | [34:10](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=2050s) | Changing order of ordinal variable (e.g., "1,000 to 10,000" and "10,000 to 20,000") using the `parse_number`, `fct_lump`, and `coalesce` functions | -| Beer Production | [41:25](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=2485s) | Asking, "Where is beer produced?" | -| Beer Production | [46:45](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=2805s) | Looking up `sf` package documentation to refresh memory on how to draw state borders for a map | -| Beer Production | [48:55](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=2935s) | Using `match` function and `state.abb` vector (state abbreviations) from `sf` package to perform a lookup of state names | -| Beer Production | [51:05](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=3065s) | Using `geom_sf` function (and working through some hiccoughs) to create a choropleth map | -| Beer Production | [52:30](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=3150s) | Using `theme_map` function from `ggthemes` package to get more appropriate styling for maps | -| Beer Production | [55:40](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=3340s) | Experimenting with how to get the legend to display in the bottom right corner | -| Beer Production | [58:25](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=3505s) | Starting to build an animation of consumption patterns over time using `gganimate` package | -| Beer Production | [1:03:40](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=3820s) | Getting the year being animated to show up in the title of a `gganimate` map | -| Beer Production | [1:05:40](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=3940s) | Summary of screencast | -| Beer Production | [1:06:50](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=4010s) | Spotting a mistake in a `group_by` call causing the percentages not to add up properly | -| Beer Production | [1:09:10](https://www.youtube.com/watch?v=1R4X09w7tQ8&t=4150s) | Brief extra overview of `tidymetrics` code | - - - -*** - - - -#### Riddler: Simulating a Non-increasing Sequence - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Riddler: Simulating a Non-increasing Sequence | [2:20](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=140s) | Introducing `accumulate` functon as a possible solution (but not used here) | -| Riddler: Simulating a Non-increasing Sequence | [3:20](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=200s) | Using `sample` function to simulate 1000 rolls of a 10-sided die | -| Riddler: Simulating a Non-increasing Sequence | [3:40](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=220s) | Explanation of dividing sample rolls into streaks (instead of using logic similar to a while loop) | -| Riddler: Simulating a Non-increasing Sequence | [4:55](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=295s) | Using `cumsum` function to separate 1000 rolls into individual sequences (which end when a 0 is rolled) | -| Riddler: Simulating a Non-increasing Sequence | [5:50](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=350s) | Using `lag` function to "shift" sequence numbering down by one row | -| Riddler: Simulating a Non-increasing Sequence | [7:35](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=455s) | Using `cummax` and `lag` functions to check whether a roll is less than the highest value rolled previously in the sequence | -| Riddler: Simulating a Non-increasing Sequence | [9:30](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=570s) | Fixing previous step with `cummin` function (instead of `cummax`) and dropping the `lag` function | -| Riddler: Simulating a Non-increasing Sequence | [13:05](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=785s) | Finished simulation code and starting to calculate scores | -| Riddler: Simulating a Non-increasing Sequence | [13:10](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=790s) | Using -`row_number` function (note the minus sign!) to calculate decimal position of number in the score | -| Riddler: Simulating a Non-increasing Sequence | [15:30](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=930s) | Investigating the distribution of scores | -| Riddler: Simulating a Non-increasing Sequence | [16:25](https://www.youtube.com/watch?v=aR6jf6ZzlFk&t=985s) | Using `seq` function in the `breaks` argument of `scale_x_continuous` to set custom, evenly-spaced axis ticks and labels | - - - -*** - - - -#### Tour de France - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Tour de France | [3:55](https://www.youtube.com/watch?v=vT-DElIaKtE&t=235s) | Getting an overview of the data | -| Tour de France | [8:55](https://www.youtube.com/watch?v=vT-DElIaKtE&t=535s) | Aggregating data into decades using the truncated division operator `%/%` | -| Tour de France | [21:50](https://www.youtube.com/watch?v=vT-DElIaKtE&t=1310s) | Noting that death data is right-censored (i.e., some winners are still alive) | -| Tour de France | [24:05](https://www.youtube.com/watch?v=vT-DElIaKtE&t=1445s) | Using `transmute` function, which combines functionality of `mutate` (to create new variables) and `select` (to choose variables to keep) | -| Tour de France | [25:30](https://www.youtube.com/watch?v=vT-DElIaKtE&t=1530s) | Using `survfit` function from `survival` package to conduct survival analysis | -| Tour de France | [27:30](https://www.youtube.com/watch?v=vT-DElIaKtE&t=1650s) | Using `glance` function from `broom` package to get a one-row model summary of the survival model | -| Tour de France | [31:00](https://www.youtube.com/watch?v=vT-DElIaKtE&t=1860s) | Using `extract` function to pull out a string matching a regular expression from a variable (stage number in this case) | -| Tour de France | [34:30](https://www.youtube.com/watch?v=vT-DElIaKtE&t=2070s) | Theorizing that there is a parsing issue with the original data's time field | -| Tour de France | [41:15](https://www.youtube.com/watch?v=vT-DElIaKtE&t=2475s) | Using `group_by` function's built-in "peeling" feature, where a `summarise` call will "peel away" one group but left other groupings intact | -| Tour de France | [42:05](https://www.youtube.com/watch?v=vT-DElIaKtE&t=2525s) | Using `rank` function, then upgrading to `percent_rank` function to give percentile rankings (between 0 and 1) | -| Tour de France | [47:50](https://www.youtube.com/watch?v=vT-DElIaKtE&t=2870s) | Using `geom_smooth` function with `method` argument as "lm" to plot a linear regression | -| Tour de France | [48:10](https://www.youtube.com/watch?v=vT-DElIaKtE&t=2890s) | Using `cut` function to bin numbers (percentiles in this case) into categories | -| Tour de France | [50:25](https://www.youtube.com/watch?v=vT-DElIaKtE&t=3025s) | Reviewing boxplots exploring relationship between first-stage performance and overall Tour performance | -| Tour de France | [51:30](https://www.youtube.com/watch?v=vT-DElIaKtE&t=3090s) | Starting to create an animation using `gganimate` package | -| Tour de France | [56:00](https://www.youtube.com/watch?v=vT-DElIaKtE&t=3360s) | Actually writing the code to create the animation | -| Tour de France | [58:20](https://www.youtube.com/watch?v=vT-DElIaKtE&t=3500s) | Using `reorder_within` function from `tidytext` package to re-order factors that have the same name across multiple groups | -| Tour de France | [1:02:40](https://www.youtube.com/watch?v=vT-DElIaKtE&t=3760s) | Summary of screencast | - - - -*** - - - -#### Riddler: Simulating a Branching Process - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Riddler: Simulating a Branching Process | [0:35](https://www.youtube.com/watch?v=QtThluGted0&t=35s) | Explanation of a Poisson process | -| Riddler: Simulating a Branching Process | [2:40](https://www.youtube.com/watch?v=QtThluGted0&t=160s) | Asking "How long do you have to wait for X to happen?", which the Exponential distribution can answer | -| Riddler: Simulating a Branching Process | [4:20](https://www.youtube.com/watch?v=QtThluGted0&t=260s) | Using `rexp` function to generate numbers from the Exponential distribution | -| Riddler: Simulating a Branching Process | [5:25](https://www.youtube.com/watch?v=QtThluGted0&t=325s) | Using a vector of rates inside the `rexp` function (to explore consecutive waiting times) | -| Riddler: Simulating a Branching Process | [7:05](https://www.youtube.com/watch?v=QtThluGted0&t=425s) | Using `cumsum` function to calculate total waiting time until hitting a specific number in the Poisson process | -| Riddler: Simulating a Branching Process | [7:35](https://www.youtube.com/watch?v=QtThluGted0&t=455s) | Using `which` function to determine the first instance > 3 in a vector | -| Riddler: Simulating a Branching Process | [9:20](https://www.youtube.com/watch?v=QtThluGted0&t=560s) | Using `replicate` function to do a quick simulation of the function just written | -| Riddler: Simulating a Branching Process | [10:55](https://www.youtube.com/watch?v=QtThluGted0&t=655s) | Discussing methods of making the simulation function faster | -| Riddler: Simulating a Branching Process | [12:00](https://www.youtube.com/watch?v=QtThluGted0&t=720s) | Using `crossing` function to set up "tidy" simulation (gives you all possible combinations of values you provide it) | -| Riddler: Simulating a Branching Process | [13:15](https://www.youtube.com/watch?v=QtThluGted0&t=795s) | Noting how the consecutive waiting times seems to follow the Harmonic series | -| Riddler: Simulating a Branching Process | [17:10](https://www.youtube.com/watch?v=QtThluGted0&t=1030s) | Noticing that we are missing trials with 0 comments and fixing | -| Riddler: Simulating a Branching Process | [20:25](https://www.youtube.com/watch?v=QtThluGted0&t=1225s) | Using `nls` function (non-linear least squares) to test how well the data fits with an exponential curve | -| Riddler: Simulating a Branching Process | [23:05](https://www.youtube.com/watch?v=QtThluGted0&t=1385s) | Visualizing fit between data and the exponential curve calculated with `nls` in previous step | -| Riddler: Simulating a Branching Process | [23:50](https://www.youtube.com/watch?v=QtThluGted0&t=1430s) | Using `augment` function to added fitted values of the `nls` function | -| Riddler: Simulating a Branching Process | [26:00](https://www.youtube.com/watch?v=QtThluGted0&t=1560s) | Exploring whether the data actually follows a Geometric distribution | -| Riddler: Simulating a Branching Process | [30:55](https://www.youtube.com/watch?v=QtThluGted0&t=1855s) | Explanation of the Geometric distribution as it applies to this question | -| Riddler: Simulating a Branching Process | [34:05](https://www.youtube.com/watch?v=QtThluGted0&t=2045s) | Generalizing the question to ask how long it takes to get to multiple comments (not just 3) | -| Riddler: Simulating a Branching Process | [38:45](https://www.youtube.com/watch?v=QtThluGted0&t=2325s) | Explanation of why we subtract 1 when fitting an exponential curve | -| Riddler: Simulating a Branching Process | [46:00](https://www.youtube.com/watch?v=QtThluGted0&t=2760s) | Summary of screencast | - - - -*** - - -#### GDPR Violations - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| GDPR Violations | [4:05](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=245s) | Use the `mdy` function from the `lubridate` package to change the date variable from `character` class to `date` class. | -| GDPR Violations | [5:35](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=335s) | Use the `rename` function from the `dplyr` package to rename variable in the dataset. | -| GDPR Violations | [6:15](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=375s) | Use the `fct_reorder` function from the `forcats` package to sort the `geom_col` in descending order. | -| GDPR Violations | [6:30](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=390s) | Use the `fct_lump` function from the `forcats` package within `count` to lump together country names except for the 6 most frequent. | -| GDPR Violations | [7:05](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=425s) | Use the `scale_x_continuous` function from `ggplot2` with the `scales` package to change the x-axis values to dollar format. | -| GDPR Violations | [8:15](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=495s) | Use the `month` and `floor_date` function from the `lubridate` package to get the month component from the `date` variable to count the total fines per month. | -| GDPR Violations | [8:55](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=535s) | Use the `na_if` function from the `dplyr` package to convert specific date value to `NA`. | -| GDPR Violations | [11:05](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=665s) | Use the `fct_reorder` function from the `forcats` package to sort the stacked `geom_col` and legend labels in descending order. | -| GDPR Violations | [15:15](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=915s) | Use the `dollar` function from the `scales` package to convert the `price` variable into dollar format. | -| GDPR Violations | [15:40](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=940s) | Use the `str_trunc` to shorten the `summary` string values to 140 characters. | -| GDPR Violations | [17:35](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=1055s) | Use the `separate_rows` function from the `tidyr` package with a `regular expression` to separate the values in the `article_violated` variable with each matching group placed in its own row. | -| GDPR Violations | [19:30](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=1170s) | Use the `extract` function from the `tidyr` package with a `regular expression` to turn each matching group into a new column. | -| GDPR Violations | [27:30](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=1650s) | Use the `geom_jitter` function from the `ggplot2` package to add points to the horizontal box plot. | -| GDPR Violations | [31:55](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=1915s) | Use the `inner_join` function from the `dplyr` package to join together `article_titles` and `separated_articles` tables. | -| GDPR Violations | [32:55](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=1975s) | Use the `paste0` function from `base R` to concatenate `article` and `article_title`. | -| GDPR Violations | [38:48](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=2328s) | Use the `str_detect` function from the `stringr` package to detect the presence of a pattern in a string. | -| GDPR Violations | [40:25](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=2425s) | Use the `group_by` and `summarize` functions from the `dplyr` package to aggregate fines that were issued to the same country on the same day allowing for size to be used in `geom_point` plot. | -| GDPR Violations | [41:14](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=2474s) | Use the `scale_size_continuous` function from the `ggplot2` package to remove the size legend. | -| GDPR Violations | [42:55](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=2575s) | Create an interactive dashboard using the `shinymetrics` and `tidymetrics` which is [a tidy approach to business intelligence](https://github.com/datacamp/tidymetrics). | -| GDPR Violations | [47:25](https://www.youtube.com/watch?v=EVvnnWKO_4w&t=2845s) | Use the `cross_by_dimensions` and `cross_by_periods` functions from the `tidyr` package which stacks an extra copy of the table for each dimension specified as an argument (`country`, `article_title`, `type`), replaces the value of the column with the word `All` and `periods`, and groups by all the columns. It acts as an extended group_by that allows complete summaries across each individual dimension and possible combinations. | - - - -*** - - -#### Broadway Musicals - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Broadway Musicals | [8:15](https://www.youtube.com/watch?v=OhY5ZaILRpg&t=495s) | Use the `cross_by_periods ` function from the `tidymetrics` package to aggregate data over time (`month`, `quarter`, and `year`) then visualize with `geom_line`. | -| Broadway Musicals | [14:00](https://www.youtube.com/watch?v=OhY5ZaILRpg&t=840s) | Use the `cross_by_periods ` function from the `tidymetrics` package with `windows = c(28))` to create a 4-week rolling average across `month`, `quarter`, and `year`. | -| Broadway Musicals | [21:50](https://www.youtube.com/watch?v=OhY5ZaILRpg&t=1310s) | Create and `interactive dashboard` using the `shinymetrics` and `tidymetrics` packages. | -| Broadway Musicals | [25:00](https://www.youtube.com/watch?v=OhY5ZaILRpg&t=1500s) | Use the `str_remove` function from the `stringr` package to remove matched pattern in a string. | -| Broadway Musicals | [25:20](https://www.youtube.com/watch?v=OhY5ZaILRpg&t=1520s) | Use the `cross_by_dimensions` function from the `tidymetrics` package which acts as an extended `group_by` that allows complete summaries across each individual dimension and possible combinations. | -| Broadway Musicals | [41:25](https://www.youtube.com/watch?v=OhY5ZaILRpg&t=2485s) | Use the `shinybones` package to create an interactive dashboard to visualize all 3 metrics at the same time. | - - - -*** - - - -#### Riddler: Simulating and Optimizing Coin Flipping - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Riddler: Simulating and Optimizing Coin Flipping | [2:15](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=135s) | Using `crossing` function to set up "tidy" simulation (gives you all possible combinations of values you provide it) | -| Riddler: Simulating and Optimizing Coin Flipping | [3:00](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=180s) | Using `rbinom` function to simulate the number of prisoners who choose to flip, then using `rbinom` again to simulate number of tails | -| Riddler: Simulating and Optimizing Coin Flipping | [7:20](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=440s) | Using `dbinom` function (probability mass function) to see probabilities of any given number of prisoners choosing to flip | -| Riddler: Simulating and Optimizing Coin Flipping | [10:15](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=615s) | Using `map_dbl` function to iterate a function, making sure to return a `dbl`-class object | -| Riddler: Simulating and Optimizing Coin Flipping | [11:25](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=685s) | Using `seq_len(n)` instead of `1:n` to be slightly more efficient | -| Riddler: Simulating and Optimizing Coin Flipping | [12:20](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=740s) | Using `optimise` function to conduct single-dimension optimisation (for analytical solution to this question) | -| Riddler: Simulating and Optimizing Coin Flipping | [14:15](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=855s) | Using backticks (`like this`) for inline R functions in RMarkdown | -| Riddler: Simulating and Optimizing Coin Flipping | [15:15](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=915s) | Starting the Extra Credit portion of the problem (N prisoners instead of 4) | -| Riddler: Simulating and Optimizing Coin Flipping | [16:30](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=990s) | Using `map2_dbl` function to iterate a function that requires two inputs (and make sure it returns a `dbl`-class object) | -| Riddler: Simulating and Optimizing Coin Flipping | [20:05](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=1205s) | Reviewing visualisation of probabilties with a varying numbers of prisoners | -| Riddler: Simulating and Optimizing Coin Flipping | [21:30](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=1290s) | Tweaking graph to look nicer | -| Riddler: Simulating and Optimizing Coin Flipping | [22:00](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=1320s) | Get the exact optimal probability value for each number of prisoners | -| Riddler: Simulating and Optimizing Coin Flipping | [22:45](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=1365s) | Troubleshooting `optimise` function to work when iterated over different numbers of prisoners | -| Riddler: Simulating and Optimizing Coin Flipping | [23:45](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=1425s) | Using `unnest_wider` function to disaggregate a list, but put different elements on separate columns (not separate rows, which `unnest` does | -| Riddler: Simulating and Optimizing Coin Flipping | [25:30](https://www.youtube.com/watch?v=nmS3UZSWYRo&t=1530s) | Explanation of what happens to probabilities as number of prisoners increases | - - - -*** - - - -#### Animal Crossing - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Animal Crossing | [5:05](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=305s) | Starting text analysis of critic reviews of Animal Crossing | -| Animal Crossing | [7:50](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=470s) | Using `floor_date` function from `lubridate` package to round dates down to nearest month (then week) | -| Animal Crossing | [9:00](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=540s) | Using `unnest_tokens` function and `anti_join` functions from `tidytext` package to break reviews into individual words and remove stop words | -| Animal Crossing | [10:35](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=635s) | Taking the average rating associated with individual words (simple approach to gauge sentiment) | -| Animal Crossing | [12:30](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=750s) | Using `geom_line` and `geom_point` to graph ratings over time | -| Animal Crossing | [14:40](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=880s) | Using `mean` function and logical statement to calculate percentages that meet a certain condition | -| Animal Crossing | [22:30](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=1350s) | Using `geom_text` to visualize what words are associated with positive/negative reviews | -| Animal Crossing | [27:00](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=1620s) | Disclaimer that this exploration is not text regression -- wine ratings screencast is a good resource for that | -| Animal Crossing | [28:30](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=1710s) | Starting to do topic modelling | -| Animal Crossing | [30:45](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=1845s) | Explanation of `stm` function from `stm` package | -| Animal Crossing | [34:30](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=2070s) | Explanation of `stm` function's output (topic modelling output) | -| Animal Crossing | [36:55](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=2215s) | Changing the number of topics from 4 to 6 | -| Animal Crossing | [37:40](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=2260s) | Explanation of how topic modelling works conceptually | -| Animal Crossing | [40:55](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=2455s) | Using `tidy` function from `broom` package to find which "documents" (reviews) were the "strongest" representation of each topic | -| Animal Crossing | [44:50](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=2690s) | Noting that there might be a scraping issue resulting in review text being repeated | -| Animal Crossing | [46:05](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=2765s) | (Unsuccessfully) Using `str_sub` function to help fix repeated review text by locating where in the review text starts being repeated | -| Animal Crossing | [48:20](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=2900s) | (Unsuccessfully) Using `str_replace` and `map2_chr` functions, as well as regex cpaturing groups to fix repeated text | -| Animal Crossing | [52:00](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=3120s) | Looking at the association between review grade and gamma of the topic model (how "strong" a review represents a topic) | -| Animal Crossing | [53:55](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=3235s) | Using `cor` function with method = "spearman" to calculate correlation based on rank instead of actual values | -| Animal Crossing | [57:35](https://www.youtube.com/watch?v=Xt7ACiedRRI&t=3455s) | Summary of screencast | - - - -*** - - - -#### Volcano Eruptions - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Volcano Eruptions | [7:00](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=420s) | Change the `last_eruption_year` into `years_ago` by using `mutate` from the `dplyr` package with `years_ago = 2020 - as.numeric(last_eruption_year))`. In the plot David includes `+1` to account for 0 values in the `years_ago` variable. | -| Volcano Eruptions | [9:50](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=590s) | Use `str_detect` from the `stringr` package to search the `volcano_name` variable for `Vesuvius` when not sure if spelling is correct. | -| Volcano Eruptions | [12:50](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=770s) | Use the `longitude` and `latitude` to create a world map showing where the volcanoes are located. | -| Volcano Eruptions | [15:30](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=930s) | Use `fct_lump` from the`forcats` package to lump together all `primary_volcano_type` factor levels except for the `n` most frequent. | -| Volcano Eruptions | [16:25](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=985s) | Use `str_remove` from the `stringr` package with the regular expression `"\\(.\\)"` to remove the parentheses. | -| Volcano Eruptions | [18:30](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=1110s) | Use the `leaflet` package to create an interactive map with popup information about each volcano. | -| Volcano Eruptions | [24:10](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=1450s) | Use `glue` from the `glue` package to create an `HTML` string by concatenating `volcano_name` and `primary_volcano_type` between `HTML

tags`. | -| Volcano Eruptions | [27:15](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=1635s) | Use the `DT` package to turn the `leaflet` popup information into a `datatable`. | -| Volcano Eruptions | [31:40](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=1900s) | Use `str_replace_all` fromt he `stringr` package to replace all the underscores `_` in `volcano_name` with space. Then use `str_to_title` from the `stringr` package to convert the `volcano_name` variable to title case. | -| Volcano Eruptions | [32:05](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=1925s) | Use `kable` with `format = HTML` from the `knitr` package instead of `DT` to make turning the data into `HTML` much easier. | -| Volcano Eruptions | [34:05](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=2045s) | Use `paste0` from `base` R to bold the `Volcano Name`, `Primary Volcano Type`, and `Last Eruption Year` in the `leaflet` popup. | -| Volcano Eruptions | [34:50](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=2090s) | Use `replace_na` from the `tidyr` package to replace `unknown` with `NA`. | -| Volcano Eruptions | [37:15](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=2235s) | Use `addMeasure` from the `leaflet` package to add a tool to the map that allows for the measuring of distance between points. | -| Volcano Eruptions | [39:30](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=2370s) | Use `colorNumeric` from the `leaflet` package to color the points based on their `population within 5km`. To accomplish this, David creates 2 new variables: 1) `transformed_pop` to get the population on a `log2` scale & 2) `pop_color` which uses the `colorNumeric` function to generate the color hex values based on `transformed_pop`. | -| Volcano Eruptions | [46:30](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=2790s) | Use the `gganimate` package to create an animated map. | -| Volcano Eruptions | [48:45](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=2925s) | Use `geom_point` from the `ggplot2` package with `size = .00001 * 10 ^ vei` so the size of the points are then proportional to the `volume` metrics provided in the `Volcano Eruption Index`. The metrics are in `Km^3`. | -| Volcano Eruptions | [50:20](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=3020s) | Use `scale_size_continuous` from the `ggplot2` package with `range = c(.1, 6)` to make the smaller points smaller and larger points larger. | -| Volcano Eruptions | [50:55](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=3055s) | Use `scale_color_gradient2` from the `ggplot2` package to apply color gradient to each point based on the volcano size and whether its low or high. | -| Volcano Eruptions | [59:40](https://www.youtube.com/watch?v=pZINGjQ86Hc&t=3580s) | Summary of screencast while waiting for `gganimate` map to render. Also, brief discussion on using `transition_reveal` instead of `transition_time` to keep the point on the map instead of replacing them in each frame. | - - - -*** - - - -#### Beach Volleyball - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Beach Volleyball | [5:30](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=330s) | Use `pivot_longer` from the `dplyr` package to pivot the data set from `wide` to `long`. | -| Beach Volleyball | [7:20](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=440s) | Use `mutate_at` from the `dplyr` package with `starts_with` to change the class to `character` for all columns that start with `w_` and `l_`. | -| Beach Volleyball | [8:00](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=480s) | Use `separate` from the `tidyr` package to separate the `name` variable into three columns with `extra = merge` and `fill = right`. | -| Beach Volleyball | [10:35](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=635s) | Use `rename` from the `dplyr` package to rename `w_player1`, `w_player2`, `l_player1`, and `l_player2`. | -| Beach Volleyball | [12:50](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=770s) | Use `pivot_wider` from the `dplyr` package to pivot the `name` variable from `long` to `wide`. | -| Beach Volleyball | [15:15](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=915s) | Use `str_to_upper` to convert the `winner_loser` `w` and `l` values to uppercase. | -| Beach Volleyball | [20:25](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=1225s) | Add unique row numbers for each match using `mutate` with `row_number` from the `dplyr` package. | -| Beach Volleyball | [21:20](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=1280s) | Separate the `score` values into multiple rows using `separate_rows` from the `tidyr` package. | -| Beach Volleyball | [22:45](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=1365s) | Use `separate` from the `tidyr` package to actual scores into two columns, one for the winners score `w_score` and another for the losers score `l_score`. | -| Beach Volleyball | [23:45](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=1425s) | Use `na_if` from the `dplyr` package to change the `Forfeit or other` value from the `score` variable to `NA`. | -| Beach Volleyball | [24:35](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=1475s) | Use `str_remove` from the `stringr` package to remove scores that include `retired`. | -| Beach Volleyball | [25:25](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=1525s) | Determine how many times the winners score `w_score` is greter than the losers score `l_score` at least 1/3 of the time. | -| Beach Volleyball | [28:30](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=1710s) | Use `summarize` from the `dplyr` package to create the summary statistics including the `number of matches`, `winning percentage`, `date of first match`, `date of most recent match`. | -| Beach Volleyball | [34:15](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=2055s) | Use `type_convert` from the `readr` package to convert `character` class variables to `numeric`. | -| Beach Volleyball | [35:00](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=2100s) | Use `summarize_all` from the `dplyr` package to calculate the calculate which fraction of the data is not `NA`. | -| Beach Volleyball | [42:00](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=2520s) | Use `summarize` from the `dplyr` package to determine players `number of matches`, `winning percentage`, `average attacks`, `average errors`, `average kills`, `average aces`, `average serve errors`, and `total rows with data` for years prior to 2019. The summary statistics are then used to answer how would we could predict if a player will win in 2019 using `geom_point` and `logistic regression`. Initially, David wanted to predict performance based on players first year performance. (NOTE - David mistakingly grouped by `year` and `age`. He cathces this around 1:02:00.) | -| Beach Volleyball | [49:25](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=2965s) | Use `year` from the `lubridate` package within a `group_by` to determine the `age` for each play given their `birthdate`. | -| Beach Volleyball | [54:30](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=3270s) | Turn the summary statistics at timestamp `42:00` into a `.` DOT `%>%` PIPE function. | -| Beach Volleyball | [1:04:30](https://www.youtube.com/watch?v=MfDdmsW3OMo&t=3870s) | Summary of screencast | - - - -*** - - - -#### Cocktails - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Cocktails | [6:20](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=380s) | Use `fct_reorder` from the `forcats` package to reorder the `ingredient` factor levels along `n`. | -| Cocktails | [7:40](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=460s) | Use `fct_lump` from the `forcats` package to lump together all the levels except the `n` most frequent in the `category` and `ingredient` variables. | -| Cocktails | [11:30](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=690s) | Use `pairwise_cor` from the `widyr` package to find the correlation between the `ingredients`. | -| Cocktails | [16:00](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=960s) | Use `reorder_within` from the `tidytext` package with `scale_x_reordered` to reorder the the columns in each `facet`. | -| Cocktails | [19:45](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=1185s) | Use the `ggraph` and `igraph` packages to create a `network diagram` | -| Cocktails | [25:15](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=1515s) | Use `extract` from the `tidyr` package with `regex = (.*) oz` to create a new variable `amount` which doesn't include the `oz`. | -| Cocktails | [26:40](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=1600s) | Use `extract` with `regex` to turn the strings in the new `amount` variable into separate columns for the `ones`, `numerator`, and `denominator`. | -| Cocktails | [28:53](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=1733s) | Use `replace_na` from the `tidyr` package to replace `NA` with zeros in the `ones`, `numberator`, and `denominator` columns. David ends up reaplcing the `zero` in the `denominator` column with ones in order for the calculation to work. | -| Cocktails | [31:49](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=1909s) | Use `geom_text_repel` from the `ggrepel` package to add `ingredient` labels to the `geom_point` plot. | -| Cocktails | [32:30](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=1950s) | Use `na_if` from the `dplyr` package to replace `zeros` with `NA` | -| Cocktails | [34:25](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=2065s) | Use `scale_size_continuous` with `labels = percent_format()` to convert size legend values to percent. | -| Cocktails | [36:35](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=2195s) | Change the size of the points in the `network diagram` proportional to `n` using `vertices = ingredient_info` within `graph_from_data_frame` and `aes(size = n)` within `geom_node_point`. | -| Cocktails | [48:05](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=2885s) | Use `widely_svd` from the `widyr` package to perform principle component analysis on the `ingredients`. | -| Cocktails | [52:32](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=3152s) | Use `paste0` to concatenate `PC` and `dimension` in the facet panel titles. | -| Cocktails | [57:00](https://www.youtube.com/watch?v=EC0SVkFB2OU&t=3420s) | Summary of screencast | - - - -*** - - - -#### African-American Achievements - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| African-American Achievements | [8:20](https://www.youtube.com/watch?v=-W-OopvhNPo&t=500s) | Use ` fct_reorder` from the `forcats` package to reorder the `category` factor levels by sorting along `n`. | -| African-American Achievements | [11:35](https://www.youtube.com/watch?v=-W-OopvhNPo&t=695s) | Use `str_remove` from the `stringr` package to remove anything after a bracket or parenthesis from the `person` variable with the `regular expression` `"[\\[\\(].*"` David then discusses how web scraping may be a better option than parsing the strings. | -| African-American Achievements | [12:25](https://www.youtube.com/watch?v=-W-OopvhNPo&t=745s) | Use `str_trim` from the `stringr` package to remove the `whitespace` from the `person` variable. David then discusses how web scraping may be a better option than parsing the strings. | -| African-American Achievements | [15:50](https://www.youtube.com/watch?v=-W-OopvhNPo&t=950s) | Create an interactive `plotly` timeline. | -| African-American Achievements | [18:20](https://www.youtube.com/watch?v=-W-OopvhNPo&t=1100s) | Use `ylim(c(-.1, 1))` to set scale limits moving the `geom_point` to the bottom of the graph. | -| African-American Achievements | [19:30](https://www.youtube.com/watch?v=-W-OopvhNPo&t=1170s) | Use `paste0` from `base R` to concatenate the `accomplishment` and `person` with `": "` in between the two displayed in the timeline hover label. | -| African-American Achievements | [20:30](https://www.youtube.com/watch?v=-W-OopvhNPo&t=1230s) | Set `y` to `category` in `ggplot` `aesthetics` to get 8 separate timelines on one plot, one for each category. Doing this allows David to remove the `ylim` mentioned above. | -| African-American Achievements | [22:25](https://www.youtube.com/watch?v=-W-OopvhNPo&t=1345s) | Use the `plotly` `tooltip = text` parameter to get just a single line of text in the `plotly` hover labels. | -| African-American Achievements | [26:05](https://www.youtube.com/watch?v=-W-OopvhNPo&t=1565s) | Use `glue` from the `glue` package to reformat `text` with `\n` included so that the single line of text can now be broken up into 2 separate lines in the hover labels. | -| African-American Achievements | [33:55](https://www.youtube.com/watch?v=-W-OopvhNPo&t=2035s) | Use `separate_rows` from the `tidyr` package to separate the `occupation_s` variable from the `science` dataset into multiple columns delimited by a semicolon with `sep = "; "` | -| African-American Achievements | [34:25](https://www.youtube.com/watch?v=-W-OopvhNPo&t=2065s) | Use `str_to_title` from the `stringr` package to conver the case to title case in the `occupation_s` variable. | -| African-American Achievements | [35:15](https://www.youtube.com/watch?v=-W-OopvhNPo&t=2115s) | Use `str_detect` from the `stringr` package to detect the presence of `statistician` from within the `occupation_s` variable with `regex("statistician", ignore_case = TRUE)` to perform a case-insensitive search. | -| African-American Achievements | [41:55](https://www.youtube.com/watch?v=-W-OopvhNPo&t=2515s) | Use the `rvest` package with `Selector Gadget` to scrape additional information about the individual from their `Wikipedia` infobox. | -| African-American Achievements | [49:15](https://www.youtube.com/watch?v=-W-OopvhNPo&t=2955s) | Use `map` and `possibly` from the `purrr` package to separate out the downloading of data from parsing the useful information. David then turns the infobox extraction step into an `anonymous function` using `.%>%` dot-pipe. | -| African-American Achievements | [58:40](https://www.youtube.com/watch?v=-W-OopvhNPo&t=3520s) | Summary of screencast | - - - -*** - - - -#### African-American History - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| African-American History | [6:55](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=415s) | Use `fct_lump` from the `forcats` package to lump together all the factor levels in `ship_name` except the `n` most frequent. Used within `filter` with `! = "Other"` to remove `other`. | -| African-American History | [8:00](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=480s) | use `fct_reorder` from the `forcats` package to reorder the `ship_name` factor levels y sorting along the `n_slaves_arrived` variable. | -| African-American History | [10:20](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=620s) | Add `geom_vline` to `geom_histogram` to annotate the plot with a vertical line indicating the Revolutionary War and the Civil War. | -| African-American History | [13:00](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=780s) | Use `truncated division` within `count` to create a new `decade` variable equal to `10 * (year_arrival %/% 10))` | -| African-American History | [17:20](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=1040s) | Use `str_trunc` from the `stringr` package to truncate the titles in each facet panel accounting for the slave ports with really long names. | -| African-American History | [18:05](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=1085s) | Another option for accounting for long titles in the facet panels is to use `strip.text` within `theme` with `element_text(size = 6)` | -| African-American History | [26:55](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=1615s) | Use the `ggraph` package to create a `network diagram` using `port_origin` and `port_arrival`. | -| African-American History | [29:05](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=1745s) | Use `arrow` from the `grid` package to add directional arrows to the points in the `network diagram`. | -| African-American History | [29:40](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=1780s) | Use `scale_width_size_continuous` from the `ggraph` packge to adjust the size of the points in the `network diagram`. | -| African-American History | [35:25](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=2125s) | Within `summarize` use `mean(n_slaves_arrived, na.rm = TRUE) * n())` to come up with an estimated total numer of slaves since 49% of the data is missing. | -| African-American History | [48:20](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=2900s) | Create a faceted stacked percent barplot (spinogram) showing the percentage of `black_free`, `black_slaves`, `white`, and `other` for each region. | -| African-American History | [51:00](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=3060s) | Use the `wordcloud` package to create a `wordcloud` with the `african_names` dataset. David hsa issues with the `wordcloud` package and opts to use `ggwordcloud` instead. Also, mentions the `worldcloud2` package. | -| African-American History | [55:20](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=3320s) | Use `fct_recode` from the `forcats` package to change the factor levels for the `gender` variable while renaming `Man = "Boy"` and `Woman = "Girl"` | -| African-American History | [57:20](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=3440s) | Use `reorder_within` from the `tidytext` package to reorder the `geom_col` by `n` within `gender` variable for each facet panel. | -| African-American History | [59:00](https://www.youtube.com/watch?v=2L-jA-Me3zg&t=3540s) | Summary of screencast | - - - -*** - - - -#### Caribou Locations - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Caribou Locations | [4:00](https://www.youtube.com/watch?v=7G7SVODhVo4&t=240s) | Use `summarize` and `across` to calculate the proportion of `NA` values in the `individuals` dataset. Note, you do not need to use `list()`. | -| Caribou Locations | [9:00](https://www.youtube.com/watch?v=7G7SVODhVo4&t=540s) | Use `ggplot` and `borders` from the `ggplot2` package to create a map of `Canada` with `deploy_on_longitude` and `deploy_on_latitude` from the `individuals` dataset. | -| Caribou Locations | [13:50](https://www.youtube.com/watch?v=7G7SVODhVo4&t=830s) | Import Canada province `shapefile` using the `sf` package. [Unsuccessful] | -| Caribou Locations | [25:00](https://www.youtube.com/watch?v=7G7SVODhVo4&t=1500s) | Use `min` and `max` from `base r ` within `summarize` to find out the `start` and `end` dates for each caribou in the `locations` dataset. | -| Caribou Locations | [27:15](https://www.youtube.com/watch?v=7G7SVODhVo4&t=1635s) | Use `sample` from `base r` to pick one single caribou at a time then use the subset with `geom_path` from `ggplot2` to track the path a that caribou takes over time. `color = factor(floor_date(timestamp, "quarter")` is used to color the path according to what quarter the observation occured in. | -| Caribou Locations | [35:15](https://www.youtube.com/watch?v=7G7SVODhVo4&t=2115s) | Use `as.Date` from `base r` and `floor_date` from the `lubridate` package to convert `timestamp` variable into quarters then `facet_wrap` the previous plot by `quarter`. | -| Caribou Locations | [37:15](https://www.youtube.com/watch?v=7G7SVODhVo4&t=2235s) | Within `mutate`, use `as.numeric(difftime(timestamp, lag(timestamp), unit = "hours"))` from `base r` to figure out the gap in time between observations. | -| Caribou Locations | [43:05](https://www.youtube.com/watch?v=7G7SVODhVo4&t=2585s) | Use `distHaversine` from the `geosphere` package to calculate distance in `km` then convert it to speed in `kph`. | -| Caribou Locations | [1:00:00](https://www.youtube.com/watch?v=7G7SVODhVo4&t=3600s) | Summary of dataset. | - - - -*** - - - -#### X-Men Comics - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| X-Men Comics | [07:25](https://www.youtube.com/watch?v=NY0-IFet5AM&t=445s) | Using `separate` to separate the name from secrete identity in the `character` column | -| X-Men Comics | [09:55](https://www.youtube.com/watch?v=NY0-IFet5AM&t=595s) | Using `summarize` and `across` to find the frequency of the action variables and find out how many issues each action was used for each character | -| X-Men Comics | [13:25](https://www.youtube.com/watch?v=NY0-IFet5AM&t=805s) | Create a `geom_col` chart to visualize which character speaks in the most issues | -| X-Men Comics | [18:35](https://www.youtube.com/watch?v=NY0-IFet5AM&t=1115s) | Create a `geom_point` chart to visualize each character’s average lines per issue in which the character is depicted | -| X-Men Comics | [22:05](https://www.youtube.com/watch?v=NY0-IFet5AM&t=1325s) | Create a `geom_point` chart to visualize each character’s average thoughts per issue in which the character is depicted | -| X-Men Comics | [23:10](https://www.youtube.com/watch?v=NY0-IFet5AM&t=1390s) | Create a `geom_point` chart to visualize character’s speech versus thought ratio per issue in which the character is depicted | -| X-Men Comics | [30:05](https://www.youtube.com/watch?v=NY0-IFet5AM&t=1805s) | Create a `geom_point` to visualize character’s number of lines while in costume versus not in costume | -| X-Men Comics | [34:30](https://www.youtube.com/watch?v=NY0-IFet5AM&t=2070s) | Create a `geom_point` chart to visualize the lines in costume versus lines out of costume ratio | -| X-Men Comics | [39:20](https://www.youtube.com/watch?v=NY0-IFet5AM&t=2360s) | Create a `lollipop graph` using `geom_point` and `geom_errorbarh` to visualize the lines in costume versus lines out of costume ratio and their distance from 1.0 (1 to 1) | -| X-Men Comics | [45:00](https://www.youtube.com/watch?v=NY0-IFet5AM&t=2700s) | Use `summarize` to find the frequency of each location and the total number of unique issues where the location is used | -| X-Men Comics | [46:00](https://www.youtube.com/watch?v=NY0-IFet5AM&t=2760s) | Use `summarize` and `fct_lump` to count how many issues each author has written while lumping together all authors except the most frequent | -| X-Men Comics | [47:25](https://www.youtube.com/watch?v=NY0-IFet5AM&t=2845s) | Use `summarize` and `fct_lump` to see if the authors rates of passing the Bechdel test differ from one another | -| X-Men Comics | [52:45](https://www.youtube.com/watch?v=NY0-IFet5AM&t=3165s) | Create a `geom_line` chart to visualize if the rates of passing the Bechdel test changed over time and `floor division` `%/%` to generate 20 observations per group | -| X-Men Comics | [54:35](https://www.youtube.com/watch?v=NY0-IFet5AM&t=3275s) | Create a `geom_col` to visualize the amount of lines each character has per issue over time giving context to Bechdel test passing rates | -| X-Men Comics | [1:00:00](https://www.youtube.com/watch?v=NY0-IFet5AM&t=3600s) | Summary of screencast | - - - -*** - - - -#### Coffee Ratings - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Coffee Ratings | [08:15](https://www.youtube.com/watch?v=-1x8Kpyndss&t=495s) | Using `fct_lump` within `count` and then `mutate` to lump the variety of coffee together except for the most frequent | -| Coffee Ratings | [08:50](https://www.youtube.com/watch?v=-1x8Kpyndss&t=530s) | Create a `geom_boxplot` to visualize the variety and the distribution of `total_cup_points` | -| Coffee Ratings | [09:55](https://www.youtube.com/watch?v=-1x8Kpyndss&t=595s) | Create a `geom_histogram` to visualize the variety and the distribution of `total_cup_points` | -| Coffee Ratings | [11:40](https://www.youtube.com/watch?v=-1x8Kpyndss&t=700s) | Using `fct_reorder` to reorder `variety` by sorting it along `total_cup_points` in ascending order | -| Coffee Ratings | [12:35](https://www.youtube.com/watch?v=-1x8Kpyndss&t=755s) | Using `summarize` with `across` to calculate the percent of missing data (NA) for each rating variable | -| Coffee Ratings | [15:20](https://www.youtube.com/watch?v=-1x8Kpyndss&t=920s) | Create a bar chart using `geom_col` with `fct_lump` to visualize the frequency of top countries | -| Coffee Ratings | [20:35](https://www.youtube.com/watch?v=-1x8Kpyndss&t=1235s) | Using `pivot_longer` to pivot the rating metrics for wide format to long format | -| Coffee Ratings | [21:30](https://www.youtube.com/watch?v=-1x8Kpyndss&t=1290s) | Create a `geom_line` chart to see if the `sum` of the rating categories equal to the `total_cup_points` column | -| Coffee Ratings | [23:10](https://www.youtube.com/watch?v=-1x8Kpyndss&t=1390s) | Create a `geom_density_ridges` chart to show the distribution of ratings across each rating metric | -| Coffee Ratings | [24:35](https://www.youtube.com/watch?v=-1x8Kpyndss&t=1475s) | Using `summarize` with `mean` and `sd` to show the average rating per metric with its standard deviation | -| Coffee Ratings | [26:15](https://www.youtube.com/watch?v=-1x8Kpyndss&t=1575s) | Using `pairwise_cor` to find correlations amongst the rating metrics | -| Coffee Ratings | [27:20](https://www.youtube.com/watch?v=-1x8Kpyndss&t=1640s) | Create a `network plot` to show the clustering of the rating metrics | -| Coffee Ratings | [29:35](https://www.youtube.com/watch?v=-1x8Kpyndss&t=1775s) | Using `widely_svd` to visualize the biggest source of variation with the rating metrics (Singular value decomposition) | -| Coffee Ratings | [37:40](https://www.youtube.com/watch?v=-1x8Kpyndss&t=2260s) | Create a `geom_histogram` to visualize the distribution of altitude | -| Coffee Ratings | [40:20](https://www.youtube.com/watch?v=-1x8Kpyndss&t=2420s) | Using `pmin` to set a maximum numeric altitude value of 3000 | -| Coffee Ratings | [41:05](https://www.youtube.com/watch?v=-1x8Kpyndss&t=2465s) | Create a `geom-point` chart to visualize the correlation between altitude and quality (`total_cup_points`) | -| Coffee Ratings | [42:00](https://www.youtube.com/watch?v=-1x8Kpyndss&t=2520s) | Using `summarize` with `cor` to show the correlation between altitude and each rating metric | -| Coffee Ratings | [44:25](https://www.youtube.com/watch?v=-1x8Kpyndss&t=2665s) | Create a linear model `lm` for each rating metric then visualize the results using a `geom_line` chart to show how each kilometer of altitude contributes to the score | -| Coffee Ratings | [50:35](https://www.youtube.com/watch?v=-1x8Kpyndss&t=3035s) | Summary of screencast | - - - -*** - - - -#### Australian Animal Outcomes - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Australian Animal Outcomes | [1:20](https://www.youtube.com/watch?v=E2amEz_upzU&t=80s) | Using `use_tidytemplate` to open the project dataset with the package's tidytemplate Rmd | -| Australian Animal Outcomes | [4:30](https://www.youtube.com/watch?v=E2amEz_upzU&t=270s) | Using `rename` to rename `Total` column to `total` | -| Australian Animal Outcomes | [6:20](https://www.youtube.com/watch?v=E2amEz_upzU&t=380s) | Using `fct_reorder` to reorder stacked barplot with `weight = sum` | -| Australian Animal Outcomes | [7:00](https://www.youtube.com/watch?v=E2amEz_upzU&t=420s) | Using `fct_lump` with `w = n` to lump together `outcome` factor levels displaying the most frequenct with rest lumped into `other` | -| Australian Animal Outcomes | [9:15](https://www.youtube.com/watch?v=E2amEz_upzU&t=555s) | Using `fct_recode` to combine the factor level `In Stock` with `Currently In Care` | -| Australian Animal Outcomes | [12:10](https://www.youtube.com/watch?v=E2amEz_upzU&t=730s) | Using `fct_reorder` to reorder `facet_wrap` panels | -| Australian Animal Outcomes | [13:03](https://www.youtube.com/watch?v=E2amEz_upzU&t=783s) | Using `scale_y_continuous` with `labels = comma` to separate digits with comma | -| Australian Animal Outcomes | [14:10](https://www.youtube.com/watch?v=E2amEz_upzU&t=850s) | Using `complete` to complete account for missing combinations of data where the value is 0 in the `released` column | -| Australian Animal Outcomes | [16:10](https://www.youtube.com/watch?v=E2amEz_upzU&t=970s) | Using `max (year)` within `filter` to subset the data displaying only the most recent year | -| Australian Animal Outcomes | [19:30](https://www.youtube.com/watch?v=E2amEz_upzU&t=1170s) | Using `pivot_longer` to pivot location variables from wide to long | -| Australian Animal Outcomes | [21:45](https://www.youtube.com/watch?v=E2amEz_upzU&t=1305s) | Web Scaraping table from Wikipedia with `SelectorGadget` and `Rvest` | -| Australian Animal Outcomes | [25:45](https://www.youtube.com/watch?v=E2amEz_upzU&t=1545s) | Using `str_to_upper` to upper case the values in the `shorthand` column | -| Australian Animal Outcomes | [27:13](https://www.youtube.com/watch?v=E2amEz_upzU&t=1633s) | Using `parse_number` to remove commas from `population` and `area` columns | -| Australian Animal Outcomes | [28:55](https://www.youtube.com/watch?v=E2amEz_upzU&t=1735s) | Using `bind_rows` to bind the two web scraped tables from Wikipedia together by row and column | -| Australian Animal Outcomes | [29:35](https://www.youtube.com/watch?v=E2amEz_upzU&t=1775s) | Using `inner_join` to combine the Wikipedia table with the original data set | -| Australian Animal Outcomes | [29:47](https://www.youtube.com/watch?v=E2amEz_upzU&t=1787s) | Using `mutate` to create new `per_capita_million` column to show `outcome` on a per million people basis | -| Australian Animal Outcomes | [37:25](https://www.youtube.com/watch?v=E2amEz_upzU&t=2245s) | Using `summarize` to create new column `pct_euthanized` showing percent of cats and dogs euthanized over time. Formula accounts for 0 values thus avoiding a resulting empty vector. | -| Australian Animal Outcomes | [39:10](https://www.youtube.com/watch?v=E2amEz_upzU&t=2350s) | Using `scale_y_continuous` with `labels = percent` to add percentage sign to y-axis values | -| Australian Animal Outcomes | [42:45](https://www.youtube.com/watch?v=E2amEz_upzU&t=2565s) | Create a choropleth map of Australia using an Australian States `Shapefile` using the `sf` and `ggplot2` packages | Troubleshooting begins at 44:25 (downsizing / downsampling with `sf_simplify`) | -| Australian Animal Outcomes | [55:45](https://www.youtube.com/watch?v=E2amEz_upzU&t=3345s) | Add animation to the map of Australia showing the percent of cats euthanized by region using `gganimate` | -| Australian Animal Outcomes | [1:01:35](https://www.youtube.com/watch?v=E2amEz_upzU&t=3695s) | Summary of screencast | - - - -*** - - - -#### Palmer Penguins - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Palmer Penguins | [11:17](https://www.youtube.com/watch?v=ImpXawPNCfM&t=677s) | Create a pivoted histogram plot to visualize the distribution of penguin metrics using `pivot_longer`, `geom_histogram`, and `facet_wrap` | -| Palmer Penguins | [14:40](https://www.youtube.com/watch?v=ImpXawPNCfM&t=880s) | Create a pivoted density plot to visualize the distribution of penguin metrics using `geom_density` and `facet_wrap` | -| Palmer Penguins | [15:21](https://www.youtube.com/watch?v=ImpXawPNCfM&t=921s) | Create a pivoted boxplot plot to visualize the distribution of penguin metrics using `geom_boxplot` and `facet_wrap` | -| Palmer Penguins | [17:50](https://www.youtube.com/watch?v=ImpXawPNCfM&t=1070s) | Create a bar plot to show penguin species changed over time | -| Palmer Penguins | [18:25](https://www.youtube.com/watch?v=ImpXawPNCfM&t=1105s) | Create a bar plot to show specie counts per island | -| Palmer Penguins | [20:00](https://www.youtube.com/watch?v=ImpXawPNCfM&t=1200s) | Create a logistic regression model to predict if a penguin is Adelie or not using bill length with cross validaiton of metrics | -| Palmer Penguins | [39:35](https://www.youtube.com/watch?v=ImpXawPNCfM&t=2375s) | Create second logistic regression model using 4 predictive metrics (bill length, bill depth, flipper length, body mass) and then compare the accuracy of both models | -| Palmer Penguins | [43:25](https://www.youtube.com/watch?v=ImpXawPNCfM&t=2605s) | Create a k-nearest neighbor model and then compare accuracy against logistic regression models to see which has the highest cross validated accuracy | -| Palmer Penguins | [53:05](https://www.youtube.com/watch?v=ImpXawPNCfM&t=3185s) | What is the accuracy of the testing holdout data on the k-nearest neighbor model? | -| Palmer Penguins | [1:05:40](https://www.youtube.com/watch?v=ImpXawPNCfM&t=3940s) | Create a decision tree and then compare accuracy against the previous models to see which has the highest cross validated accuracy + how to extract a decision tree | -| Palmer Penguins | [1:10:45](https://www.youtube.com/watch?v=ImpXawPNCfM&t=4245s) | Perform multi class regression using `multinom_reg` | -| Palmer Penguins | [1:19:40](https://www.youtube.com/watch?v=ImpXawPNCfM&t=4780s) | Summary of screencast | - - - -*** - - - -#### European Energy - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| European Energy | [01:50](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=110s) | Using `count` to get an overview of scategorical data | -| European Energy | [07:25](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=445s) | Using `pivot_longer` and `gather` to pivot date variables from wide to long | -| European Energy | [09:00](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=540s) | Using `as.integer` to change `year` variable from `character` to `integer` class | -| European Energy | [10:10](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=610s) | Using `fct_reorder` to reorder stacked barplot | -| European Energy | [10:30](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=630s) | Using `scale_y_continuous` with `labels = comma` from `scales` package to insert a comma every three digits on the y-axis | -| European Energy | [16:35](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=995s) | Using `replace_na` and `list` to replace `NA` values in `country_name` column with United Kingdom | -| European Energy | [18:05](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=1085s) | Using `fct_lump` to lump factor levels together except for the 10 most frequent for each facet panel | -| European Energy | [20:10](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=1210s) | Using `reorder_within` with `fun = sum` and `scale_y_reordered` to reorder the categories within each facet panel | -| European Energy | [24:30](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=1470s) | Using `ggflags` package to add country flags | Debugging strategies include 1) minimal reproducible example and 2) binary search | -| European Energy | [29:20](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=1760s) | (Unsuccessfully) Using `fct_recode` to rename the ISO two-digit identifier for the United Kingdom from the UK to GB | -| European Energy | [33:20](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=2000s) | Using `ifelse` to replace the ISO two-digit identifier for the United Kingdom from UK to GB & from EL to GR fro Greece | Debugging included | -| European Energy | [40:45](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=2445s) | Using `str_to_lower` to convert observations in `country` column to lower case | -| European Energy | [45:00](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=2700s) | Creating a `slope graph` to show differences in Nuclear production (2106 versus 2018) | Using `scale_y_log10` to increase distance between points | Using `ggflags` for country flags | -| European Energy | [47:00](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=2820s) | Using `scale_x_continuous` with `breaks = c(2016, 2018)` to show only 2016 and 2018 on x-axis | -| European Energy | [48:20](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=2900s) | Extend x-axis limits using `scale_x_continuous` with `limits = c(2015, 2019)` and `geom_text` with an `ifelse` within `hjust` to alternate labels for the right and left side of `slope graph` | -| European Energy | [52:40](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=3160s) | Creating a slopegraph function | -| European Energy | [1:00:00](https://www.youtube.com/watch?v=Rcmu5e-9FSc&t=3600s) | Summary of screencast | - - - -*** - - - -#### Plants in Danger - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Plants in Danger | [2:00](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=120s) | Getting an overview of categorical data | -| Plants in Danger | [5:00](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=300s) | Using `fct_relevel` to reorder the "Before 1900" level to the first location leaving the other levels in their existing order | -| Plants in Danger | [8:05](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=485s) | Using `n` and `sum` in `fct_reorder` to reorder factor levels when there are multiple categories in `count` | -| Plants in Danger | [12:00](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=720s) | Using `reorder_within` and `scale_y_reordered` such that the values are ordered within each facet | -| Plants in Danger | [14:55](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=895s) | Using `axis.text.x` to rotate overlapping labels | -| Plants in Danger | [19:05](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=1145s) | Using `filter` and `fct_lump` to lump all levels except for the 8 most frequest facet panels | -| Plants in Danger | [26:55](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=1615s) | Using `separate` to separate the character column `binomial_name` into multiple columns (genus and species) | -| Plants in Danger | [28:20](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=1700s) | Using `fct_lump` within `count` to lump all levels except for the 8 most frequent genus | -| Plants in Danger | [45:30](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=2730s) | Using `rvest` and `SelectorGadget` to web scrape list of species | -| Plants in Danger | [49:35](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=2975s) | Using `str_trim` to remove whitespace from character string | -| Plants in Danger | [50:00](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=3000s) | Using `separate` to separate character string into genus, species, and rest/citation columns and using `extra = "merge"` to merge extra pieces into the rest/citation column | -| Plants in Danger | [51:00](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=3060s) | Using `rvest` and `SelectorGadget` to web scrape image links | -| Plants in Danger | [57:50](https://www.youtube.com/watch?v=f7Rc1bvMgZY&t=3470s) | Summary of screencast | - - - -*** - - - -#### Chopped - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Chopped | [5:20](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=320s) | Use `geom_histogram` to visualize the distribution of episode ratings. | -| Chopped | [6:30](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=390s) | Use `geom_point` and `geom_line` with `color = factor(season)` to visualize the episode rating for every episode. | -| Chopped | [7:15](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=435s) | Use `group_by` and `summarize` to show the average rating for each season and the number of episodes in each season. | -| Chopped | [7:15](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=435s) | Use `geom_line` and `geom_point` with `size = n_episodes` to visualize the average rating for each season with point size indicating the total number of episodes (larger = more episodes, smaller = fewer episodes). | -| Chopped | [10:55](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=655s) | Use `fct_reorder` to reorder the `episode_name` factor levels by sorting along the `episode_rating` variable. | -| Chopped | [10:55](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=655s) | Use `geom_point` to visualize the top episodes by rating. Use the 'glue' package to place `season number` and `episode number` before episode name on the `y axis`. | -| Chopped | [15:20](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=920s) | Use `pivot_longer` to combine ingredients into one single column. Use `separate_rows` with `sep = ", "` to separate out the ingredients with each ingredient getting its own row. | -| Chopped | [18:10](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1090s) | Use `fct_lump` to lump ingredients together except for the 10 most frequent. Use `fct_reorder` to reorder `ingredient` factor levels by sorting against `n`. | -| Chopped | [18:10](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1090s) | Use `geom_col` to create a stacked bar plot to visualize the most common ingredients by course. | -| Chopped | [19:45](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1185s) | Use `fct_relevel` to reorder `course` factor levels to appetizer, entree, dessert. | -| Chopped | [21:00](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1260s) | Use `fct_rev` and `scale_fill_discrete` with `guide = guide_legend(reverse = TRUE)` to reorder the segments within the stacked bar plot. | -| Chopped | [23:20](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1400s) | Use the `widyr` package and `pairwise_cor` to find out what ingredients appear together. Mentioned: [David Robinson - The `widyr` Package YouTube Talk at 2020 R Conference](https://www.youtube.com/watch?v=mApnx5NJwQA) | -| Chopped | [26:20](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1580s) | Use `ggraph` , `geom_edge_link`, `geom_node_point`, `geom_node_text` to create an ingredient network diagram to show their makeup and how they interact. | -| Chopped | [28:00](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1680s) | Use `pairwise_count` from `widyr` to count the number of times each pair of items appear together within a group defined by feature. | -| Chopped | [30:15](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1815s) | Use `unite` from the `tidyr` package in order to paste together the `episode_course` and `series_episode` columns into one column to figure out if any pairs of ingredients appear together in the same course across episodes. | -| Chopped | [31:55](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=1915s) | Use `summarize` with `min`, `mean`, `max`, and `n()` to create the `first_season`, `avg_season`, `last_season` and `n_appearances` variables. | -| Chopped | [34:35](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=2075s) | Use `slice` with `tail` to get the `n` ingredients that appear in early and late seasons. | -| Chopped | [35:40](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=2140s) | Use `geom_boxplot` to visualize the distribution of each ingredient across all seasons. | -| Chopped | [36:50](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=2210s) | Fit predictive models (`linear regression` , `random forest`, and `natural spline`) to determine if episode rating is explained by the ingredients or season. Use `pivot_wider` with `values_fill = list(value = 0))` with 1 indicating ingredient was used and 0 indicating it wasn't used. | -| Chopped | [1:17:25](https://www.youtube.com/watch?v=6V0vAx2Km7U&t=4645s) | Summary of screencast | - - - -*** - - - -#### Global Crop Yields - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Global Crop Yields | [03:35](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=215s) | Using `rename` to shorten column name | -| Global Crop Yields | [06:40](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=400s) | Using `rename_all` with `str_remove` and regex to remove characters in column name | -| Global Crop Yields | [07:40](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=460s) | Using `pivot_longer` to change data from wide to long | -| Global Crop Yields | [08:25](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=505s) | Create a faceted `geom_line` chart | -| Global Crop Yields | [09:40](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=580s) | Using `fct_reorder` to reorder facet panels in ascending order | -| Global Crop Yields | [11:50](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=710s) | Create an interactive `Shiny` dashboard | -| Global Crop Yields | [33:20](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=2000s) | Create a faceted `geom_line` chart with `add_count` and `filter(n = max(x))` to subset the data for crops that have observations in every year | -| Global Crop Yields | [36:50](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=2210s) | Create a faceted `geom_point` chart showing the crop yields at start and end over a 50 year period (1968 start date and 2018 end date) | -| Global Crop Yields | [45:00](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=2700s) | Create a `geom_boxplot` to visualize the distribution of yield ratios for the different crops to see how efficiency has increased across countries | -| Global Crop Yields | [46:00](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=2760s) | Create a `geom_col` chart to visualize the median yield ratio for each crop | -| Global Crop Yields | [47:50](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=2870s) | Create a `geom_point` chart to visualize efficiency imporvement for each country for a specific crop (yield start / yield ratio) | -| Global Crop Yields | [50:25](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=3025s) | Using the `countrycode` package to color `geom_point` chart by continent names | -| Global Crop Yields | [56:50](https://www.youtube.com/watch?v=0uqAhIiK9Rc&t=3410s) | Summary of screencast | - - - -*** - - - -#### Friends - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Friends | [7:30](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=450s) | Use `dplyr` package's `count` function to count the unique values of multiple variables. | -| Friends | [9:35](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=575s) | Use `geom_col` to show how many lines of dialogue there is for each character. Use `fct_reorder` to reorder the `speaker` factor levels by sorting along `n`. | -| Friends | [12:07](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=727s) | Use `semi_join` to join `friends` dataset with `main_cast` with `by = ""speaker` returning all rows from `friends` with a match in `main_cast`. | -| Friends | [12:30](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=750s) | Use `unite` to create the `episode_number` variable which pastes together `season` and `episode` with `sep = "."`. Then, use `inner_join` to combine above dataset with `friends_info` with `by = c("season", "episode")`. Then, use `mutate` and the `glue` package instead to combine `{ season }.{ episode } { title }`. Then use `fct_reorder(episode_title, season + .001 * episode)` to order it by `season` first then `episode`. | -| Friends | [15:45](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=945s) | Use `geom_point` to visualize `episode_title` and `us_views_millions`. Use `as.integer` to change `episode_title` to integer class. Add labels to `geom_point` using `geom_text` with `check_overlap = TRUE` so text that overlaps previous text in the same layer will not be plotted. | -| Friends | [19:95](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=1235s) | Run the above plot again using `imdb_rating` instead of `us_views_millions` | -| Friends | [21:35](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=1295s) | Ahead of modeling: Use `geom_boxplot` to visualize the distribution of speaking for main characters. Use the `complete` function with `fill = list(n = 0)` to replace existing explicit missing values in the data set. Demonstration of how to account for missing `imdb_rating` values using the `fill` function with `.direction = "downup"` to keep the imdb rating across the same title. | -| Friends | [26:45](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=1605s) | Ahead of modeling: Use `summarize` with `cor(log2(n), imdb_rating)` to find the correlation between speaker and imdb rating -- the fact that the correlation is positive for all speakers gives David a suspicion that some episodes are longer than others because they're in 2 parts with higher ratings due to important moments. David addresses this `confounding factor` by including `percentage of lines` instead of `number of lines`. Visualize results with `geom_boxplot`, `geom_point` with `geom_smooth`. | -| Friends | [34:05](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=2045s) | Use a `linear model` to predict imdb rating based on various variables. | -| Friends | [42:00](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=2520s) | Use the `tidytext` and `tidylo` packages to see what words are most common amongst characters, and whether they are said more times than would be expected by chance. Use `geom_col` to visualize the most overrepresented words per character according to `log_odds_weighted`. | -| Friends | [54:15](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=3255s) | Use the `widyr` package and `pairwise correlation` to determine which characters tend to appear in the same scences together? Use `geom_col` to visualize the correlation between characters. | -| Friends | [1:00:25](https://www.youtube.com/watch?v=bgcBEBqVnx8&t=3625s) | Summary of screencast | - - - -*** - - - -#### Government Spending on Kids - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Government Spending on Kids | [6:15](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=375s) | Using `geom_line` and `summarize` to visualize education spending over time. First for all states. Then individual states. Then small groups of states using `%in%`. Then in random groups of size n using `%in%` and `sample` with `unique`. `fct_reorder` is used to reorder `state` factor levels by sorting along the `inf_adj` variable. `geom_vline` used to add reference to the 2009 financial crisis. | -"| Government Spending on Kids | [16:00](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=960s) | Take the previous chart setting the `inf_adj_perchild` for the first year `1997` to `100%` in order to show a measure of increase from `100%` as opposed to absolute value for change over time for each state relative to `1997`. `geom_hline` used to add reference for the `100%` starting point. David ends up changing the starting point from `100%` to `0%`. `fct_reorder` with `max` used to reorder the plots in descending order based on highest peak values. David briefly mentions the [small multiples](https://www.sharpsightlabs.com/blog/small-multiples-ggplot/#:~:text=The%20small%20multiples%20technique%20is,groups%20or%20comparing%20over%20time.&text=In%20contrast%2C%20R's%20GGPlot2%20package,multiples%20extraordinarily%20easy%20to%20create.) approach to analyzing data. | -| Government Spending on Kids | [23:35](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=1415s) | Create a `function` named `plot_changed_faceted` to make it easier to visualize the many other variables included in the dataset. | -| Government Spending on Kids | [27:25](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=1645s) | Create a `function` named `plot_faceted` with a `{{ y_axis }}` [embracing](https://dplyr.tidyverse.org/articles/programming.html) argument. Adding this function creates two stages: one for data transformation and another for plotting. | -| Government Spending on Kids | [37:05](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=2225s) | Use the `dir` function with `pattern` and `purrr` package's `map_df` function to read in many different `.csv` files with GDP values for each state. Troubleshooting `Can't combine and columns` error using `function` and `mutate` with `across` and `as.numeric`. Extract state name from filename using `extract` from `tidyr` and `regular expression`. | -| Government Spending on Kids | [50:50](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=3050s) | Unsuccessful attempt at importing state population data via a not user friendly dataset from `census.gov` by skipping the first 3 rows of the Excel file. | -| Government Spending on Kids | [54:22](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=3262s) | Use `geom_col` to see which states spend the most for each child for a single variable and multiple variables using `%in%`. Use `scale_fill_discrete` with `guide_legend(reverse = TRUE)` to change the ordering of the legend. | -| Government Spending on Kids | [57:40](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=3460s) | Use `geom_col` and `pairwise_corr` to visualize the correlation between variables across states in 2016 using `pairwise correlation`. | -| Government Spending on Kids | [1:02:02](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=3722s) | Use `geom_point` to plot `inf_adjust_perchild_PK12ed` versus `inf_adj_perchild_highered`. `geom_text` used to apply state names to each point. | -| Government Spending on Kids | [1:05:00](https://www.youtube.com/watch?v=dHRPrVsnNwo&t=3900s) | Summary of screencast | - - - -*** - - - -#### Himalayan Climbers - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Himalayan Climbers | [3:00](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=180s) | Create a `geom_col` chart to visualize the top 50 tallest mountains. Use `fct_reorder` to reorder the `peak_name` factor levels by sorting along the `height_metres` variable. | -| Himalayan Climbers | [8:50](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=530s) | Use `summarize` with `across` to get the total number of climbs, climbers, deaths, and first year climbed. Use `mutate` to calculate the percent death rate for members and hired staff. Use `inner_join` and `select` to join with `peaks` dataset by `peak_id`. | -| Himalayan Climbers | [11:20](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=680s) | Touching on statistical `noise` and how it impacts the death rate for mountains with fewer number of climbs, and how to account for it using various statistical methods including `Beta Binomial Regression` & `Empirical Bayes`. | -| Himalayan Climbers | [14:30](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=870s) | Further description of `Empirical Bayes` and how to account for not overestimating death rate for mountains with fewer climbers. Recommended reading: [Introduction to Empirical Bayes: Examples from Baseball Statistics](http://varianceexplained.org/r/empirical-bayes-book/) by David Robinson. | -| Himalayan Climbers | [17:00](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=1020s) | Use the `ebbr` package (Empirical Bayes for Binomial in R) to create an Empirical Bayes Estimate for each mountain by fitting prior distribution across data and adjusting the death rates down or up based on the prior distributions. Use a `geom_point` chart to visualize the difference between the raw death rate and new `ebbr` fitted death rate. | -| Himalayan Climbers | [21:20](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=1280s) | Use `geom_point` to visualize how deadly each mountain is with `geom_errorbarh` representing the 95% credible interval between minimum and maximum values. | -| Himalayan Climbers | [26:35](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=1595s) | Use `geom_point` to visualize the relationship between `death rate` and `height` of mountain. There is not a clear relationship, but David does briefly mention how one could use `Beta Binomial Regression` to further inspect for possible relationships / trends. | -| Himalayan Climbers | [28:00](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=1680s) | Use `geom_histogram` and `geom_boxplot` to visualize the distribution of time it took climbers to go from basecamp to the mountain’s high point for successful climbs only. Use `mutate` to calculate the number of days it took climbers to get from basecamp to the highpoint. Add column to data using `case_when` and `str_detect` to identify strings in `termination_reason` that contain the word `Success` and rename them to `Success` & how to use a `vector` and `%in%` to change multiple values in `termination_reason` to `NA` and rest to `Failed`. Use `fct_lump` to show the top 10 mountains while lumping the other factor levels (mountains) into `other`. | -| Himalayan Climbers | [35:30](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=2130s) | For just Mount Everest, use `geom_histogram` and `geom_density` with `fill = success` to visualize the days from basecamp to highpoint for climbs that ended in `success`, `failure` or `other`. | -| Himalayan Climbers | [38:40](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=2320s) | For just Mount Everest, use `geom_histogram` to see the distribution of climbs per year. | -| Himalayan Climbers | [39:55](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=2395s) | For just Mount Everest, use ‘geom_line` and `geom_point` to visualize `pct_death` over time by decade. Use `mutate` with `pmax` and `integer division` to create a decade variable that lumps together the data for 1970 and before. | -| Himalayan Climbers | [41:30](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=2490s) | Write a function for summary statistics such as `n_climbs`, `pct_success`, `first_climb`, `pct_death`, ‘pct_hired_staff_death`. | -| Himalayan Climbers | [46:20](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=2780s) | For just Mount Everest, use `geom_line` and `geom_point` to visualize `pct_success` over time by decade. | -| Himalayan Climbers | [47:10](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=2830s) | For just Mount Everest, use `geom_line` and `geom_point` to visualize `pct_hired_staff_deaths ` over time by decade. David decides to visualize the `pct_hired_staff_deaths` and `pct_death` charts together on the same plot. | -| Himalayan Climbers | [50:45](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=3045s) | For just Mount Everest, fit a logistic regression model to predict the probability of death with `format.pval` to calculate the `p.value`. Use `fct_lump` to lump together all `expedition_role` factors except for the n most frequent. | -| Himalayan Climbers | [56:30](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=3390s) | Use `group_by` with `integer division` and `summarize` to calculate `n_climbers` and `pct_death` for age bucketed into decades. | -| Himalayan Climbers | [59:45](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=3585s) | Use `geom_point` and `geom_errorbarh` to visualize the logistic regression model with confident intervals. | -| Himalayan Climbers | [1:03:30](https://www.youtube.com/watch?v=WT7FMn-_jPY&t=3810s) | Summary of screencast | - - - -*** - - - -#### Beyoncé and Taylor Swift Lyrics - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Beyonce and Taylor Swift Lyrics | [7:50](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=470s) | Use `fct_reorder` from the `forcats` package to reorder `title` factor levels by sorting along the `sales` variable in `geom_col` plot. | -| Beyonce and Taylor Swift Lyrics | [8:10](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=490s) | Use `labels = dollar` from the `scales` package to format the `geom_col` x-axis values as currency. | -| Beyonce and Taylor Swift Lyrics | [11:15](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=675s) | Use `rename_all(str_to_lower)` to convert variable names to lowercase. | -| Beyonce and Taylor Swift Lyrics | [12:45](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=765s) | Use `unnest_tokens` from the `tidytext` package to split the lyrics into one-lyric-per-row. | -| Beyonce and Taylor Swift Lyrics | [13:00](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=780s) | Use `anti_join` from the `tidytext` package to find the most common words int he lyrics without `stop_words`. | -| Beyonce and Taylor Swift Lyrics | [15:15](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=915s) | Use `bind_tf_idf` from the `tidytext` package to determine `tf` - the proportion each word has in each album and `idf` - how specific each word is to each particular album. | -| Beyonce and Taylor Swift Lyrics | [17:45](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=1065s) | Use `reorder_within` with `scale_y_reordered` in order to reorder the bars within each `facet panel`. David replaces `top_n` with `slice_max` from the `dplyr` package in order to show the top 10 words with `ties = FALSE`. | -| Beyonce and Taylor Swift Lyrics | [20:45](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=1245s) | Use `bind_log_odds` from the `tidylo` package to calculate the `log odds ratio` of album and words, that is how much more common is the word in a specific album than across all the other albums. | -| Beyonce and Taylor Swift Lyrics | [23:10](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=1390s) | Use `filter(str_length(word) <= 3)` to come up with a list in order to remove common filler words like `ah`, `uh`, `ha`, `ey`, `eeh`, and `huh`. | -| Beyonce and Taylor Swift Lyrics | [27:00](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=1620s) | Use `mdy` from the `lubridate` package and `str_remove(released, " \\(.*)"))` from the `stringr` package to parse the dates in the `released` variable. | -| Beyonce and Taylor Swift Lyrics | [28:15](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=1695s) | Use `inner_join` from the `dplyr` package to join `taylor_swift_words` with `release_dates`. David ends up having to use `fct_recode` since the albums `reputation` and `folklore` were nor `lowercase` in a previous table thus excluding them from the `inner_join`. | -| Beyonce and Taylor Swift Lyrics | [28:30](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=1710s) | Use `fct_reorder` from the `forcats` package to reorder `album` factor levels by sorting along the `released` variable to be used in the `faceted` `geom_col`. | -| Beyonce and Taylor Swift Lyrics | [34:40](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=2080s) | Use `bind_rows` from hte `dplyr` package to bind `ts` with `beyonce` with `unnest_tokens` from the `tidytext` package to get one lyric per row per artist. | -| Beyonce and Taylor Swift Lyrics | [38:40](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=2320s) | Use `bind_log_odds` to figure out which words are more likely to come from a Taylor Swift or Beyonce song? | -| Beyonce and Taylor Swift Lyrics | [41:10](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=2470s) | Use `slice_max` from the `dplyr` package to select the top 100 words by `num_words_total` and then the top 25 by `log_odds_weighted`. Results are used to create a diverging bar chart showing which words are most common between Beyonce and Taylor Swift songs. | -| Beyonce and Taylor Swift Lyrics | [44:40](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=2680s) | Use `scale_x_continuous` to make the `log_odds_weighted` scale more interpretable. | -| Beyonce and Taylor Swift Lyrics | [50:45](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=3045s) | Take the previous plot and turn it into a `lollipop graph` with `geom_point(aes(size = num_words_total, color = direction))` | -| Beyonce and Taylor Swift Lyrics | [53:05](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=3185s) | Use `ifelse` to change the `1x` value on the x-axis to `same`. | -| Beyonce and Taylor Swift Lyrics | [54:15](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=3255s) | Create a `geom_point` with `geom_abline` to show the most popular words they use in common. | -| Beyonce and Taylor Swift Lyrics | [1:01:55](https://www.youtube.com/watch?v=vYbDyfv_v4Q&t=3715s) | Summary of screencast | - - - -*** - - - -#### NCAA Women's Basketball - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| NCAA Women's Basketball | [15:00](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=900s) | Use `fct_relevel` from the `forcats` package to order the factor levels for the `tourney_finish` variable. | -| NCAA Women's Basketball | [16:35](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=995s) | Use `geom_tile` from the `ggplot2` package to create a `heatmap` to show how far a particular seed ends up going in the tournament. | -| NCAA Women's Basketball | [20:35](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=1235s) | Use `scale_y_continuous` from the `ggplot2` package with `breaks = seq(1, 16)` in order to include all 16 seeds. | -| NCAA Women's Basketball | [20:55](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=1255s) | Use `geom_text` from the `ggplot2` package with `label = percent(pct)` to apply the percentage to each tile in the heatmap. | -| NCAA Women's Basketball | [21:40](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=1300s) | Use `scale_x_discrete` and `scale_y_continuous` both with `expand = c(0, 0)` to remove the space between the x and y axis and the heatmap tiles. David calls this flattening. | -| NCAA Women's Basketball | [32:15](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=1935s) | Use `scale_y_reverse` to flip the order of the y-axis from 1-16 to 16-1. | -| NCAA Women's Basketball | [34:45](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=2085s) | Use `cor` from the `stats` package to calculate the `correlation` between `seed` and `tourney_finish`. Then plotted to determine if there is a correlation over time. | -| NCAA Women's Basketball | [39:50](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=2390s) | Use `geom_smooth` with `method = "loess"` to add a smoothing line with confidence bound to aid in seeing the trend between `seed` and `reg_percent`. | -| NCAA Women's Basketball | [42:10](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=2530s) | Use `fct_lump` from the `forcats` package to lump together all the conference except for the `n` most frequent. | -| NCAA Women's Basketball | [42:55](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=2575s) | Use `geom_jitter` from the `ggplot2` package instead of `geom_boxplot` to avoid overplotting which makes it easier to visualize the points that make up the distribution of the `seed` variable. | -| NCAA Women's Basketball | [47:05](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=2825s) | Use `geom_smooth` with `method = "lm"` to aid in seeing the trend between `reg_percent` and `tourney_w`. | -| NCAA Women's Basketball | [54:20](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=3260s) | Create a `dot pipe function` using `.` and `%>%` to avoid duplicating summary statistics with `summarize`. | -| NCAA Women's Basketball | [56:35](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=3395s) | Use `glue` from the `glue` package to concatenate together `school` and `n_entries` on the `geo_col` y-axis. | -| NCAA Women's Basketball | [59:50](https://www.youtube.com/watch?v=-RD8GNCNsCk&t=3590s) | Summary of screencast | - - - -*** - - - -#### Great American Beer Festival - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Great American Beer Festival | [8:20](https://www.youtube.com/watch?v=BV_afpCDQ70&t=500s) | Use `pivot_wider` with `values_fill = list(value =0))` from the `tidyr` package along with `mutate(value = 1)` to pivot the `medal` variable from `long` to `wide` adding a 1 for the medal type awarded and 0 for the remaining medal types in the row. | -| Great American Beer Festival | [11:25](https://www.youtube.com/watch?v=BV_afpCDQ70&t=685s) | Use `fct_lump` from the `forcats` package to lump together all the beers except for the N most frequent. | -| Great American Beer Festival | [12:25](https://www.youtube.com/watch?v=BV_afpCDQ70&t=745s) | Use `str_to_upper` from the `stringr` package to convert the case of the `state` variable to uppercase. | -| Great American Beer Festival | [12:25](https://www.youtube.com/watch?v=BV_afpCDQ70&t=745s) | Use `fct_relevel` from the the `forcats` package in order to reorder the `medal` factor levels. | -| Great American Beer Festival | [13:25](https://www.youtube.com/watch?v=BV_afpCDQ70&t=805s) | Use `fct_reorder` from the `forcats` package to sort `beer_name` factor levels by sorting along `n`. | -| Great American Beer Festival | [14:30](https://www.youtube.com/watch?v=BV_afpCDQ70&t=870s) | Use `glue` from the `glue` package to concatenate `beer_name` and `brewery` on the y-axis. | -| Great American Beer Festival | [15:00](https://www.youtube.com/watch?v=BV_afpCDQ70&t=900s) | Use `ties.mthod = "first" ` within `fct_lump` to show only the first `brewery` when a tie exists between them. | -| Great American Beer Festival | [19:25](https://www.youtube.com/watch?v=BV_afpCDQ70&t=1165s) | Use `setdiff` from the `dplyr` package and the `state.abb` built in vector from the `datasets` package to check which states are missing from the dataset. | +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Great American Beer Festival | [8:20](https://www.youtube.com/watch?v=BV_afpCDQ70&t=500s) | Use `pivot_wider` with `values_fill = list(value =0))` from the `tidyr` package along with `mutate(value = 1)` to pivot the `medal` variable from `long` to `wide` adding a 1 for the medal type awarded and 0 for the remaining medal types in the row. | +| Great American Beer Festival | [11:25](https://www.youtube.com/watch?v=BV_afpCDQ70&t=685s) | Use `fct_lump` from the `forcats` package to lump together all the beers except for the N most frequent. | +| Great American Beer Festival | [12:25](https://www.youtube.com/watch?v=BV_afpCDQ70&t=745s) | Use `str_to_upper` from the `stringr` package to convert the case of the `state` variable to uppercase. | +| Great American Beer Festival | [12:25](https://www.youtube.com/watch?v=BV_afpCDQ70&t=745s) | Use `fct_relevel` from the the `forcats` package in order to reorder the `medal` factor levels. | +| Great American Beer Festival | [13:25](https://www.youtube.com/watch?v=BV_afpCDQ70&t=805s) | Use `fct_reorder` from the `forcats` package to sort `beer_name` factor levels by sorting along `n`. | +| Great American Beer Festival | [14:30](https://www.youtube.com/watch?v=BV_afpCDQ70&t=870s) | Use `glue` from the `glue` package to concatenate `beer_name` and `brewery` on the y-axis. | +| Great American Beer Festival | [15:00](https://www.youtube.com/watch?v=BV_afpCDQ70&t=900s) | Use `ties.mthod = "first"` within `fct_lump` to show only the first `brewery` when a tie exists between them. | +| Great American Beer Festival | [19:25](https://www.youtube.com/watch?v=BV_afpCDQ70&t=1165s) | Use `setdiff` from the `dplyr` package and the `state.abb` built in vector from the `datasets` package to check which states are missing from the dataset. | | Great American Beer Festival | [21:25](https://www.youtube.com/watch?v=BV_afpCDQ70&t=1285s) | Use `summarize` from the `dplyr` package to calculate the `number of medals` with `n_medals = n()`, `number of beers` with `n_distinct`, `number of gold medals` with `sum()`, and `weighted medal totals` using `sum(as.integer()` because `medal` is an ordered factor, so 1 for each bronze, 2 for each silver, and 3 for each gold. | -| Great American Beer Festival | [26:05](https://www.youtube.com/watch?v=BV_afpCDQ70&t=1565s) | Import `Craft Beers Dataset` from `Kaggle` using `read_csv` from the `readr` package. | -| Great American Beer Festival | [28:00](https://www.youtube.com/watch?v=BV_afpCDQ70&t=1680s) | Use `inner_join` from the `dplyr` package to join together the 2 datasets from `kaggle`. | -| Great American Beer Festival | [29:40](https://www.youtube.com/watch?v=BV_afpCDQ70&t=1780s) | Use `semi_join` from the `dplyr` package to join together to see if the beer names match with the `kaggle` dataset. Ends up at a dead end with not enough matches between the datasets. | -| Great American Beer Festival | [33:05](https://www.youtube.com/watch?v=BV_afpCDQ70&t=1985s) | Use `bind_log_odds` from the `tidylo` package to show the representation of each beer category for each state compared to the categories across the other states. | -| Great American Beer Festival | [33:35](https://www.youtube.com/watch?v=BV_afpCDQ70&t=2015s) | Use `complete` from the `tidyr` package in order to turn missing values into explicit missing values. | -| Great American Beer Festival | [35:30](https://www.youtube.com/watch?v=BV_afpCDQ70&t=2130s) | Use `reorder_within` from the `tidytext` package and `scale_y_reordered` from the `tidytext` package in order to reorder the bars within each facet panel. | -| Great American Beer Festival | [36:40](https://www.youtube.com/watch?v=BV_afpCDQ70&t=2200s) | Use `fct_reorder` from the `forcats` package to reorder the `facet panels` in descending order. | -| Great American Beer Festival | [39:35](https://www.youtube.com/watch?v=BV_afpCDQ70&t=2375s) | For the previous plot, use `fill = log_odds_weighted > 0` in the `ggplot` `aes` argument to highlight the positive and negative values. | -| Great American Beer Festival | [41:45](https://www.youtube.com/watch?v=BV_afpCDQ70&t=2505s) | Use `add_count` from the `dplyr` package to add a `year_total` variable which shows the total awards for each year. Then use this to calculate the percent change in totals medals per state using `mutate(pct_year = n / year)` | -| Great American Beer Festival | [44:40](https://www.youtube.com/watch?v=BV_afpCDQ70&t=2680s) | Use `glm` from the `stats` package to create a `logistic regression` model to find out if their is a statistical trend in the probability of award success over time. | -| Great American Beer Festival | [47:15](https://www.youtube.com/watch?v=BV_afpCDQ70&t=2835s) | Exapnd on the previous model by using the `broom` package to fit multiple `logistic regressions` across multiple states instead of doing it for an individual state at a time. | -| Great American Beer Festival | [50:25](https://www.youtube.com/watch?v=BV_afpCDQ70&t=3025s) | Use `conf.int = TRUE` to add `confidence bounds` to the `logistic regression` output then use it to create a `TIE Fighter` plot to show which states become more or less frequent medal winners over time. | -| Great American Beer Festival | [53:00](https://www.youtube.com/watch?v=BV_afpCDQ70&t=3180s) | Use the `state.name` dataset with `match` from `base r` to change state abbreviation to the state name. | -| Great American Beer Festival | [55:00](https://www.youtube.com/watch?v=BV_afpCDQ70&t=3300s) | Summary of screencast | - - - -*** - - - -#### IKEA Furniture - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| IKEA Furniture | [4:30](https://www.youtube.com/watch?v=lY0YLDZhT88&t=270s) | Use `fct_reorder` from the `forcats` package to reorder the factor levels for `category` sorted along `n`. | -| IKEA Furniture | [6:00](https://www.youtube.com/watch?v=lY0YLDZhT88&t=360s) | Brief explanation of why `scale_x_log10` is needed given the distribution of `category` and `price` with `geom_boxplot`. | -| IKEA Furniture | [7:00](https://www.youtube.com/watch?v=lY0YLDZhT88&t=420s) | Using `geom_jitter` with `geom_boxplot` to show how many items are within each `category`. | -| IKEA Furniture | [8:00](https://www.youtube.com/watch?v=lY0YLDZhT88&t=480s) | Use `add_count` from the `dplyr` package and `glue` from the `glue` package to concatenate the `category` name with `category_total` on the `geom_boxplot` y-axis. | -| IKEA Furniture | [9:00](https://www.youtube.com/watch?v=lY0YLDZhT88&t=540s) | Convert from `Saudi Riyals` to `United States Dollars`. | -| IKEA Furniture | [11:05](https://www.youtube.com/watch?v=lY0YLDZhT88&t=665s) | Create a `ridgeplot` - AKA `joyplot` - using `ggridges` package showing the distribution of `price` across `category`. | -| IKEA Furniture | [12:50](https://www.youtube.com/watch?v=lY0YLDZhT88&t=770s) | Discussion on `distributions` and when to use a `log scale`. | -| IKEA Furniture | [19:20](https://www.youtube.com/watch?v=lY0YLDZhT88&t=1160s) | Use `fct_lump` from the `forcats` package to lump together all the levels in `category` except for the `n` most frequent. | -| IKEA Furniture | [21:00](https://www.youtube.com/watch?v=lY0YLDZhT88&t=1260s) | Use `scale_fill_discrete` from the `ggplot2` package with `guide = guide_legend(reverse = TRUE)` to reverse the `fill legend`. | -| IKEA Furniture | [24:20](https://www.youtube.com/watch?v=lY0YLDZhT88&t=1460s) | Use `str_trim` from the `stringr` package to remove whitespace from the `short_description` variable. David then decides to use `str_replace_all` instead with the following regular expression `"\\s+", " "` to replace all whitespace with a single space instead. | -| IKEA Furniture | [25:30](https://www.youtube.com/watch?v=lY0YLDZhT88&t=1530s) | Use `separate` from the `tidyr` package with `extra = "merge"` and `fill = "right"` to separate item description from item dimension. | -| IKEA Furniture | [26:45](https://www.youtube.com/watch?v=lY0YLDZhT88&t=1605s) | Use `extract` from the `tidyr` package with the regular expression `"[\\d\\-xX]+) cm"` to extract the numbers before `cm`. | -| IKEA Furniture | [29:50](https://www.youtube.com/watch?v=lY0YLDZhT88&t=1790s) | Use `unite` from the `tidyr` package to paste together the `category` and `main_description` columns into a new column named `category_and_description`. | -| IKEA Furniture | [32:45](https://www.youtube.com/watch?v=lY0YLDZhT88&t=1965s) | Calculate the volume given the `depth`, `height`, and `width` of each item in dataset in liters using `depth * height * width / 1000`. At 36:15, David decides to change to `cubic meters` instead using `depth * height * width / 1000000`. | -| IKEA Furniture | [44:20](https://www.youtube.com/watch?v=lY0YLDZhT88&t=2660s) | Use `str_squish` from the `stringr` package to remove whitespace from the start to the end of the `short_description` variable. | +| Great American Beer Festival | [26:05](https://www.youtube.com/watch?v=BV_afpCDQ70&t=1565s) | Import `Craft Beers Dataset` from `Kaggle` using `read_csv` from the `readr` package. | +| Great American Beer Festival | [28:00](https://www.youtube.com/watch?v=BV_afpCDQ70&t=1680s) | Use `inner_join` from the `dplyr` package to join together the 2 datasets from `kaggle`. | +| Great American Beer Festival | [29:40](https://www.youtube.com/watch?v=BV_afpCDQ70&t=1780s) | Use `semi_join` from the `dplyr` package to join together to see if the beer names match with the `kaggle` dataset. Ends up at a dead end with not enough matches between the datasets. | +| Great American Beer Festival | [33:05](https://www.youtube.com/watch?v=BV_afpCDQ70&t=1985s) | Use `bind_log_odds` from the `tidylo` package to show the representation of each beer category for each state compared to the categories across the other states. | +| Great American Beer Festival | [33:35](https://www.youtube.com/watch?v=BV_afpCDQ70&t=2015s) | Use `complete` from the `tidyr` package in order to turn missing values into explicit missing values. | +| Great American Beer Festival | [35:30](https://www.youtube.com/watch?v=BV_afpCDQ70&t=2130s) | Use `reorder_within` from the `tidytext` package and `scale_y_reordered` from the `tidytext` package in order to reorder the bars within each facet panel. | +| Great American Beer Festival | [36:40](https://www.youtube.com/watch?v=BV_afpCDQ70&t=2200s) | Use `fct_reorder` from the `forcats` package to reorder the `facet panels` in descending order. | +| Great American Beer Festival | [39:35](https://www.youtube.com/watch?v=BV_afpCDQ70&t=2375s) | For the previous plot, use `fill = log_odds_weighted > 0` in the `ggplot` `aes` argument to highlight the positive and negative values. | +| Great American Beer Festival | [41:45](https://www.youtube.com/watch?v=BV_afpCDQ70&t=2505s) | Use `add_count` from the `dplyr` package to add a `year_total` variable which shows the total awards for each year. Then use this to calculate the percent change in totals medals per state using `mutate(pct_year = n / year)` | +| Great American Beer Festival | [44:40](https://www.youtube.com/watch?v=BV_afpCDQ70&t=2680s) | Use `glm` from the `stats` package to create a `logistic regression` model to find out if their is a statistical trend in the probability of award success over time. | +| Great American Beer Festival | [47:15](https://www.youtube.com/watch?v=BV_afpCDQ70&t=2835s) | Exapnd on the previous model by using the `broom` package to fit multiple `logistic regressions` across multiple states instead of doing it for an individual state at a time. | +| Great American Beer Festival | [50:25](https://www.youtube.com/watch?v=BV_afpCDQ70&t=3025s) | Use `conf.int = TRUE` to add `confidence bounds` to the `logistic regression` output then use it to create a `TIE Fighter` plot to show which states become more or less frequent medal winners over time. | +| Great American Beer Festival | [53:00](https://www.youtube.com/watch?v=BV_afpCDQ70&t=3180s) | Use the `state.name` dataset with `match` from `base r` to change state abbreviation to the state name. | +| Great American Beer Festival | [55:00](https://www.youtube.com/watch?v=BV_afpCDQ70&t=3300s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### IKEA Furniture {#ikea-furniture} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| IKEA Furniture | [4:30](https://www.youtube.com/watch?v=lY0YLDZhT88&t=270s) | Use `fct_reorder` from the `forcats` package to reorder the factor levels for `category` sorted along `n`. | +| IKEA Furniture | [6:00](https://www.youtube.com/watch?v=lY0YLDZhT88&t=360s) | Brief explanation of why `scale_x_log10` is needed given the distribution of `category` and `price` with `geom_boxplot`. | +| IKEA Furniture | [7:00](https://www.youtube.com/watch?v=lY0YLDZhT88&t=420s) | Using `geom_jitter` with `geom_boxplot` to show how many items are within each `category`. | +| IKEA Furniture | [8:00](https://www.youtube.com/watch?v=lY0YLDZhT88&t=480s) | Use `add_count` from the `dplyr` package and `glue` from the `glue` package to concatenate the `category` name with `category_total` on the `geom_boxplot` y-axis. | +| IKEA Furniture | [9:00](https://www.youtube.com/watch?v=lY0YLDZhT88&t=540s) | Convert from `Saudi Riyals` to `United States Dollars`. | +| IKEA Furniture | [11:05](https://www.youtube.com/watch?v=lY0YLDZhT88&t=665s) | Create a `ridgeplot` - AKA `joyplot` - using `ggridges` package showing the distribution of `price` across `category`. | +| IKEA Furniture | [12:50](https://www.youtube.com/watch?v=lY0YLDZhT88&t=770s) | Discussion on `distributions` and when to use a `log scale`. | +| IKEA Furniture | [19:20](https://www.youtube.com/watch?v=lY0YLDZhT88&t=1160s) | Use `fct_lump` from the `forcats` package to lump together all the levels in `category` except for the `n` most frequent. | +| IKEA Furniture | [21:00](https://www.youtube.com/watch?v=lY0YLDZhT88&t=1260s) | Use `scale_fill_discrete` from the `ggplot2` package with `guide = guide_legend(reverse = TRUE)` to reverse the `fill legend`. | +| IKEA Furniture | [24:20](https://www.youtube.com/watch?v=lY0YLDZhT88&t=1460s) | Use `str_trim` from the `stringr` package to remove whitespace from the `short_description` variable. David then decides to use `str_replace_all` instead with the following regular expression `"\\s+", " "` to replace all whitespace with a single space instead. | +| IKEA Furniture | [25:30](https://www.youtube.com/watch?v=lY0YLDZhT88&t=1530s) | Use `separate` from the `tidyr` package with `extra = "merge"` and `fill = "right"` to separate item description from item dimension. | +| IKEA Furniture | [26:45](https://www.youtube.com/watch?v=lY0YLDZhT88&t=1605s) | Use `extract` from the `tidyr` package with the regular expression `"[\\d\\-xX]+) cm"` to extract the numbers before `cm`. | +| IKEA Furniture | [29:50](https://www.youtube.com/watch?v=lY0YLDZhT88&t=1790s) | Use `unite` from the `tidyr` package to paste together the `category` and `main_description` columns into a new column named `category_and_description`. | +| IKEA Furniture | [32:45](https://www.youtube.com/watch?v=lY0YLDZhT88&t=1965s) | Calculate the volume given the `depth`, `height`, and `width` of each item in dataset in liters using `depth * height * width / 1000`. At 36:15, David decides to change to `cubic meters` instead using `depth * height * width / 1000000`. | +| IKEA Furniture | [44:20](https://www.youtube.com/watch?v=lY0YLDZhT88&t=2660s) | Use `str_squish` from the `stringr` package to remove whitespace from the start to the end of the `short_description` variable. | | IKEA Furniture | [48:00](https://www.youtube.com/watch?v=lY0YLDZhT88&t=2880s) | Use `lm` from the `stats` package to create a linear model on a `log, log scale` to predict the price of an item based on volume + category. David then uses `fct_relevel` to reorder the factor levels for `category` such that `tables & desks` is first (starting point) since it's the most frequent item in the category variable and it's price distribution is in the middle. | -| IKEA Furniture | [53:00](https://www.youtube.com/watch?v=lY0YLDZhT88&t=3180s) | Use the `broom` package to turn the model output into a coefficient / TIE fighter plot. | -| IKEA Furniture | [56:20](https://www.youtube.com/watch?v=lY0YLDZhT88&t=3380s) | Use `str_remove` from the `stringr` package to remove `category` from the start of the strings on the y-axis using the regular expression `"^category"` | -| IKEA Furniture | [57:50](https://www.youtube.com/watch?v=lY0YLDZhT88&t=3470s) | Summary of screencast | - - - -*** - - - -#### Historical Phones - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Historical Phones | [2:15](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=135s) | Use `bind_rows` from the `dplyr` package to combine the two data sets. | -| Historical Phones | [7:30](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=450s) | Use `group = interaction(type, country)` within `ggplot` `aes()` to set the interaction `type` with every single `country` on one plot. | -| Historical Phones | [9:30](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=570s) | Use `semi_join` from the `dplyr` package to join rows from `phones` with a match in `country_sizes`. | -| Historical Phones | [14:00](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=840s) | Use `quantile` from the `stats` package within `summarize` to show the 25th, and 75th quantiles (interquartile range) on the plot. | -| Historical Phones | [17:50](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=1070s) | Import the `wdi` package (World Development Indicators from the World Bank) with `extra = TRUE` in order to get the `iso3c` code and `income` level for each country. | -| Historical Phones | [19:45](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=1185s) | Use `inner_join` from the `dplyr` package to join the `WDI` data with the `phones` data. | -| Historical Phones | [20:35](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=1235s) | Use `fct_relevel` from the `forcats` package to reorder `income` factor levels in ascending order. | -| Historical Phones | [21:05](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=1265s) | Create an `anonymous function` using `.` (dot). | -| Historical Phones | [29:30](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=1770s) | Use `inner_join` from the `dplyr` package to join the `mobile` data and `landline` data together with a `geom_abline` to see how different the total populations are between the two datasets. | -| Historical Phones | [31:00](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=1860s) | Use `geom_hline` to add a refrence line to the plot shwoing when each country crossed the 50 per 100 subscription mark. | -| Historical Phones | [35:20](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=2120s) | Use `summarize` from the `dplyr` package with `min(year([Mobile >= 50]))` to find the year in which each country crossed the 50 per 100 subscription mark. | -| Historical Phones | [35:20](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=2120s) | Use `summarize` from the `dplyr` package with `max(Mobile)` to find the peak number of mobile subscriptions per country. | -| Historical Phones | [35:20](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=2120s) | Use `na_if` from the `dplyr` package within `summarize` to change `Inf` to `NA`. | -| Historical Phones | [38:20](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=2300s) | Using the `WDIsearch` function to search the `WDI` package for proper GDP per capita indicator. Ended up using the `NY.GDP.PCAP.PP.KD` indicator. | -| Historical Phones | [39:05](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=2345s) | Adding the `GDP` data from the `WDI` package to the `country_incomes` table. | -| Historical Phones | [39:52](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=2392s) | Using the `inner_join` function from the `dplyr` package to join the `phones` table with the `country_incomes` table pulling in the `gdp_per_capita` variable. | -| Historical Phones | [42:25](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=2545s) | Using the `WDIsearch` function to search the `WDI` package for proper population indicator. Ended up using the `SP.POP.TOTL` indicator. | -| Historical Phones | [50:00](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=3000s) | Create an animated choropleth world map with `fill = subscriptions`. | -| Historical Phones | [1:00:00](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=3600s) | Summary of screencast | - - - -*** - - - -#### Riddler: Simulating a Circular Random Walk - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Riddler: Simulating a Circular Random Walk | [1:25](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=85s) | Using `sample()` and `cumsum()` to simulate a random walk | -| Riddler: Simulating a Circular Random Walk | [2:30](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=150s) | Using `%%` (modulo operator) to "close" the circle (set the number of people in the circle) | -| Riddler: Simulating a Circular Random Walk | [3:40](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=220s) | Using `crossing` function to set up "tidy" simulation (gives you all possible combinations of values you provide it) | -| Riddler: Simulating a Circular Random Walk | [5:10](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=310s) | Using `distinct` function and its `.keep_all` argument to get only the first unique set of the variables you give it | -| Riddler: Simulating a Circular Random Walk | [8:15](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=495s) | Visualizing the number of steps it takes for the sauce to reach people at differents seats | -| Riddler: Simulating a Circular Random Walk | [13:40](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=820s) | Visualizing the distribution of number of steps it takes to reach each seat | -| Riddler: Simulating a Circular Random Walk | [26:30](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=1590s) | Investigating the parabolic shape of average number of steps to reach a given seat | -| Riddler: Simulating a Circular Random Walk | [28:40](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=1720s) | Using `lm` and `I` functions to calculate formula of the parabola describing average number of steps | -| Riddler: Simulating a Circular Random Walk | [30:15](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=1815s) | Starting to vary the size of the table | -| Riddler: Simulating a Circular Random Walk | [38:45](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=2325s) | Summary of screencast | - - - -*** - - - -#### Ninja Warrior - -[Back to summary](#screencast-summary) - -| Screencast | Time | Description | -| :--- | ---: | :--- | -| Ninja Warrior | [2:35](https://www.youtube.com/watch?v=4AhXvMsCooM&t=155s) | Inspecting the dataset | -| Ninja Warrior | [6:40](https://www.youtube.com/watch?v=4AhXvMsCooM&t=400s) | Using `geom_histogram` to look at distribution of obstacles in a stage | -| Ninja Warrior | [9:05](https://www.youtube.com/watch?v=4AhXvMsCooM&t=545s) | Using `str_remove` function to clean stage names (remove "(Regional/City)") | -| Ninja Warrior | [10:40](https://www.youtube.com/watch?v=4AhXvMsCooM&t=640s) | Asking, "Are there obstacles that are more common in the Finals than Qualifying rounds?" | -| Ninja Warrior | [10:50](https://www.youtube.com/watch?v=4AhXvMsCooM&t=650s) | Using `bind_log_odds` function from `tidylo` package to calculate log-odds of obstacles within a stage type | -| Ninja Warrior | [16:05](https://www.youtube.com/watch?v=4AhXvMsCooM&t=965s) | Using `unite` function to combine two columns | -| Ninja Warrior | [18:20](https://www.youtube.com/watch?v=4AhXvMsCooM&t=1100s) | Graphing the average position of different obstacles with many, many tweaks to make it look nice | -| Ninja Warrior | [23:10](https://www.youtube.com/watch?v=4AhXvMsCooM&t=1390s) | Creating a stacked bar plot of which obstacles appear in which order | -| Ninja Warrior | [30:30](https://www.youtube.com/watch?v=4AhXvMsCooM&t=1830s) | Turning stacked bar plot visualization into a custom function | -| Ninja Warrior | [37:40](https://www.youtube.com/watch?v=4AhXvMsCooM&t=2260s) | Asking, "Is there data on how difficult an obstacle is?" | -| Ninja Warrior | [45:30](https://www.youtube.com/watch?v=4AhXvMsCooM&t=2730s) | Visualizing which obstacles appear in different seasons with `geom_tile` and a lot of tweaking | -| Ninja Warrior | [50:22](https://www.youtube.com/watch?v=4AhXvMsCooM&t=3022s) | Reviewing the result of the previous step (obstacles in different seasons) | -| Ninja Warrior | [59:25](https://www.youtube.com/watch?v=4AhXvMsCooM&t=3565s) | Summary of screencast | - - - -*** - - - +| IKEA Furniture | [53:00](https://www.youtube.com/watch?v=lY0YLDZhT88&t=3180s) | Use the `broom` package to turn the model output into a coefficient / TIE fighter plot. | +| IKEA Furniture | [56:20](https://www.youtube.com/watch?v=lY0YLDZhT88&t=3380s) | Use `str_remove` from the `stringr` package to remove `category` from the start of the strings on the y-axis using the regular expression `"^category"` | +| IKEA Furniture | [57:50](https://www.youtube.com/watch?v=lY0YLDZhT88&t=3470s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Historical Phones {#historical-phones} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Historical Phones | [2:15](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=135s) | Use `bind_rows` from the `dplyr` package to combine the two data sets. | +| Historical Phones | [7:30](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=450s) | Use `group = interaction(type, country)` within `ggplot` `aes()` to set the interaction `type` with every single `country` on one plot. | +| Historical Phones | [9:30](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=570s) | Use `semi_join` from the `dplyr` package to join rows from `phones` with a match in `country_sizes`. | +| Historical Phones | [14:00](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=840s) | Use `quantile` from the `stats` package within `summarize` to show the 25th, and 75th quantiles (interquartile range) on the plot. | +| Historical Phones | [17:50](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=1070s) | Import the `wdi` package (World Development Indicators from the World Bank) with `extra = TRUE` in order to get the `iso3c` code and `income` level for each country. | +| Historical Phones | [19:45](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=1185s) | Use `inner_join` from the `dplyr` package to join the `WDI` data with the `phones` data. | +| Historical Phones | [20:35](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=1235s) | Use `fct_relevel` from the `forcats` package to reorder `income` factor levels in ascending order. | +| Historical Phones | [21:05](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=1265s) | Create an `anonymous function` using `.` (dot). | +| Historical Phones | [29:30](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=1770s) | Use `inner_join` from the `dplyr` package to join the `mobile` data and `landline` data together with a `geom_abline` to see how different the total populations are between the two datasets. | +| Historical Phones | [31:00](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=1860s) | Use `geom_hline` to add a refrence line to the plot shwoing when each country crossed the 50 per 100 subscription mark. | +| Historical Phones | [35:20](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=2120s) | Use `summarize` from the `dplyr` package with `min(year([Mobile >= 50]))` to find the year in which each country crossed the 50 per 100 subscription mark. | +| Historical Phones | [35:20](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=2120s) | Use `summarize` from the `dplyr` package with `max(Mobile)` to find the peak number of mobile subscriptions per country. | +| Historical Phones | [35:20](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=2120s) | Use `na_if` from the `dplyr` package within `summarize` to change `Inf` to `NA`. | +| Historical Phones | [38:20](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=2300s) | Using the `WDIsearch` function to search the `WDI` package for proper GDP per capita indicator. Ended up using the `NY.GDP.PCAP.PP.KD` indicator. | +| Historical Phones | [39:05](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=2345s) | Adding the `GDP` data from the `WDI` package to the `country_incomes` table. | +| Historical Phones | [39:52](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=2392s) | Using the `inner_join` function from the `dplyr` package to join the `phones` table with the `country_incomes` table pulling in the `gdp_per_capita` variable. | +| Historical Phones | [42:25](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=2545s) | Using the `WDIsearch` function to search the `WDI` package for proper population indicator. Ended up using the `SP.POP.TOTL` indicator. | +| Historical Phones | [50:00](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=3000s) | Create an animated choropleth world map with `fill = subscriptions`. | +| Historical Phones | [1:00:00](https://www.youtube.com/watch?v=pJPqAIb8MKA&t=3600s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Riddler: Simulating a Circular Random Walk {#riddler-simulating-a-circular-random-walk} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Riddler: Simulating a Circular Random Walk | [1:25](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=85s) | Using `sample()` and `cumsum()` to simulate a random walk | +| Riddler: Simulating a Circular Random Walk | [2:30](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=150s) | Using `%%` (modulo operator) to "close" the circle (set the number of people in the circle) | +| Riddler: Simulating a Circular Random Walk | [3:40](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=220s) | Using `crossing` function to set up "tidy" simulation (gives you all possible combinations of values you provide it) | +| Riddler: Simulating a Circular Random Walk | [5:10](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=310s) | Using `distinct` function and its `.keep_all` argument to get only the first unique set of the variables you give it | +| Riddler: Simulating a Circular Random Walk | [8:15](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=495s) | Visualizing the number of steps it takes for the sauce to reach people at differents seats | +| Riddler: Simulating a Circular Random Walk | [13:40](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=820s) | Visualizing the distribution of number of steps it takes to reach each seat | +| Riddler: Simulating a Circular Random Walk | [26:30](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=1590s) | Investigating the parabolic shape of average number of steps to reach a given seat | +| Riddler: Simulating a Circular Random Walk | [28:40](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=1720s) | Using `lm` and `I` functions to calculate formula of the parabola describing average number of steps | +| Riddler: Simulating a Circular Random Walk | [30:15](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=1815s) | Starting to vary the size of the table | +| Riddler: Simulating a Circular Random Walk | [38:45](https://www.youtube.com/watch?v=b1oKh9eeqkY&t=2325s) | Summary of screencast | + +------------------------------------------------------------------------ + +#### Ninja Warrior {#ninja-warrior} + +[Back to summary](#screencast-summary) + +| Screencast | Time | Description | +|:-----------------------|-----------------------:|:-----------------------| +| Ninja Warrior | [2:35](https://www.youtube.com/watch?v=4AhXvMsCooM&t=155s) | Inspecting the dataset | +| Ninja Warrior | [6:40](https://www.youtube.com/watch?v=4AhXvMsCooM&t=400s) | Using `geom_histogram` to look at distribution of obstacles in a stage | +| Ninja Warrior | [9:05](https://www.youtube.com/watch?v=4AhXvMsCooM&t=545s) | Using `str_remove` function to clean stage names (remove "(Regional/City)") | +| Ninja Warrior | [10:40](https://www.youtube.com/watch?v=4AhXvMsCooM&t=640s) | Asking, "Are there obstacles that are more common in the Finals than Qualifying rounds?" | +| Ninja Warrior | [10:50](https://www.youtube.com/watch?v=4AhXvMsCooM&t=650s) | Using `bind_log_odds` function from `tidylo` package to calculate log-odds of obstacles within a stage type | +| Ninja Warrior | [16:05](https://www.youtube.com/watch?v=4AhXvMsCooM&t=965s) | Using `unite` function to combine two columns | +| Ninja Warrior | [18:20](https://www.youtube.com/watch?v=4AhXvMsCooM&t=1100s) | Graphing the average position of different obstacles with many, many tweaks to make it look nice | +| Ninja Warrior | [23:10](https://www.youtube.com/watch?v=4AhXvMsCooM&t=1390s) | Creating a stacked bar plot of which obstacles appear in which order | +| Ninja Warrior | [30:30](https://www.youtube.com/watch?v=4AhXvMsCooM&t=1830s) | Turning stacked bar plot visualization into a custom function | +| Ninja Warrior | [37:40](https://www.youtube.com/watch?v=4AhXvMsCooM&t=2260s) | Asking, "Is there data on how difficult an obstacle is?" | +| Ninja Warrior | [45:30](https://www.youtube.com/watch?v=4AhXvMsCooM&t=2730s) | Visualizing which obstacles appear in different seasons with `geom_tile` and a lot of tweaking | +| Ninja Warrior | [50:22](https://www.youtube.com/watch?v=4AhXvMsCooM&t=3022s) | Reviewing the result of the previous step (obstacles in different seasons) | +| Ninja Warrior | [59:25](https://www.youtube.com/watch?v=4AhXvMsCooM&t=3565s) | Summary of screencast | + +------------------------------------------------------------------------