Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
10 changes: 10 additions & 0 deletions Ideas/Idea_1.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><title>Idea 1</title><style></style></head><body id="preview">
<p class="has-line-data" data-line-start="0" data-line-end="1">Mini Project Idea 1</p>
<p class="has-line-data" data-line-start="2" data-line-end="3">My idea is centered around the current day NFL and the analytics behind “going for it” on fourth down. The project will center around this question: “Do NFL teams go for it on fourth down in the right scenarios. What teams are most aggresive in their play calling?”</p>
<p class="has-line-data" data-line-start="4" data-line-end="5">The data is retrievable because NFL play-by-play data is available publicly through the nflfastR/nflverse dataset, which can be accessed via an R/Python workflow and downloaded in a structured table format. It is tractable because each observation is a single play with standardized fields (down, distance, yard line, time remaining, score differential, and EPA/WPA), and the dataset includes consistent game and team identifiers that support filtering and modeling. The scope is large enough to produce reliable estimates but can be subset by season and stored locally, keeping computation manageable on a personal laptop.</p>
<p class="has-line-data" data-line-start="6" data-line-end="7">I will obtain this data by installing the nflfastR package into python, and loading in the relevant data timeline. Relevant fields can then be selected from the data source and used as needed in the model.</p>
<p class="has-line-data" data-line-start="8" data-line-end="9">I will perform a logistic regression on the data, creating a binary for if the offense either goes for it or kicks it on fourth down. I can include predictors such as yards to go, current yard line, weather, time remaining, timeouts remaing, team strength, etc. This can give direct insight into what drives aggresiveness in decision making. We can also look at Expected points based on the play (calculated by the team behind the dataset) and factor that into the model as well.</p>
<p class="has-line-data" data-line-start="10" data-line-end="11">This project helps show which teams make aggressive or conservative 4th-down decisions, and whether those choices tend to help or hurt outcomes. Coaches and front offices could use it to check if their strategy matches what the numbers suggest in different game situations. Broadcasters and fans can use it to talk about decisions with evidence instead of hindsight. Overall, it gives a clearer, data-based view of a part of football that can swing games.</p>
<p class="has-line-data" data-line-start="12" data-line-end="13">Even with public data, the results can be misunderstood or used unfairly. Calling a coach “bad” based on a model can be misleading if you ignore context, small samples, or uncertainty, so the findings should be presented carefully. The work could also indirectly support sports betting, so it should be framed as analysis rather than advice. Finally, you should follow the data source’s terms of use and avoid sharing any restricted raw data.</p>

</body></html>
13 changes: 13 additions & 0 deletions Ideas/Idea_1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Mini Project Idea 1

My idea is centered around the current day NFL and the analytics behind "going for it" on fourth down. The project will center around this question: "Do NFL teams go for it on fourth down in the right scenarios. What teams are most aggresive in their play calling?"

The data is retrievable because NFL play-by-play data is available publicly through the nflfastR/nflverse dataset, which can be accessed via an R/Python workflow and downloaded in a structured table format. It is tractable because each observation is a single play with standardized fields (down, distance, yard line, time remaining, score differential, and EPA/WPA), and the dataset includes consistent game and team identifiers that support filtering and modeling. The scope is large enough to produce reliable estimates but can be subset by season and stored locally, keeping computation manageable on a personal laptop.

I will obtain this data by installing the nflfastR package into python, and loading in the relevant data timeline. Relevant fields can then be selected from the data source and used as needed in the model.

I will perform a logistic regression on the data, creating a binary for if the offense either goes for it or kicks it on fourth down. I can include predictors such as yards to go, current yard line, weather, time remaining, timeouts remaing, team strength, etc. This can give direct insight into what drives aggresiveness in decision making. We can also look at Expected points based on the play (calculated by the team behind the dataset) and factor that into the model as well.

This project helps show which teams make aggressive or conservative 4th-down decisions, and whether those choices tend to help or hurt outcomes. Coaches and front offices could use it to check if their strategy matches what the numbers suggest in different game situations. Broadcasters and fans can use it to talk about decisions with evidence instead of hindsight. Overall, it gives a clearer, data-based view of a part of football that can swing games.

Even with public data, the results can be misunderstood or used unfairly. Calling a coach “bad” based on a model can be misleading if you ignore context, small samples, or uncertainty, so the findings should be presented carefully. The work could also indirectly support sports betting, so it should be framed as analysis rather than advice. Finally, you should follow the data source’s terms of use and avoid sharing any restricted raw data.
16 changes: 16 additions & 0 deletions presentations/TestPresentation.Rmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
title: "Test Presentation"
subtitle: "⚔<br/>with xaringan"
author: "Charlie Baughan"
institute: ""
date: "2016/12/12 (updated: `r Sys.Date()`)"
output:
xaringan::moon_reader:
lib_dir: libs
nature:
highlightStyle: github
highlightLines: true
countIncrementalSlides: false
---

# this is a test presentation
167 changes: 167 additions & 0 deletions presentations/TestPresentation.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
<!DOCTYPE html>
<html lang="" xml:lang="">
<head>
<title>Test Presentation</title>
<meta charset="utf-8" />
<meta name="author" content="Charlie Baughan" />
<script src="libs/header-attrs-2.29/header-attrs.js"></script>
<link href="libs/remark-css-0.0.1/default.css" rel="stylesheet" />
<link href="libs/remark-css-0.0.1/default-fonts.css" rel="stylesheet" />
</head>
<body>
<textarea id="source">
class: center, middle, inverse, title-slide

.title[
# Test Presentation
]
.subtitle[
## ⚔<br/>with xaringan
]
.author[
### Charlie Baughan
]
.date[
### 2016/12/12 (updated: 2026-01-23)
]

---


# this is a test presentation
</textarea>
<style data-target="print-only">@media screen {.remark-slide-container{display:block;}.remark-slide-scaler{box-shadow:none;}}</style>
<script src="https://remarkjs.com/downloads/remark-latest.min.js"></script>
<script>var slideshow = remark.create({
"highlightStyle": "github",
"highlightLines": true,
"countIncrementalSlides": false
});
if (window.HTMLWidgets) slideshow.on('afterShowSlide', function (slide) {
window.dispatchEvent(new Event('resize'));
});
(function(d) {
var s = d.createElement("style"), r = d.querySelector(".remark-slide-scaler");
if (!r) return;
s.type = "text/css"; s.innerHTML = "@page {size: " + r.style.width + " " + r.style.height +"; }";
d.head.appendChild(s);
})(document);

(function(d) {
var el = d.getElementsByClassName("remark-slides-area");
if (!el) return;
var slide, slides = slideshow.getSlides(), els = el[0].children;
for (var i = 1; i < slides.length; i++) {
slide = slides[i];
if (slide.properties.continued === "true" || slide.properties.count === "false") {
els[i - 1].className += ' has-continuation';
}
}
var s = d.createElement("style");
s.type = "text/css"; s.innerHTML = "@media print { .has-continuation { display: none; } }";
d.head.appendChild(s);
})(document);
// delete the temporary CSS (for displaying all slides initially) when the user
// starts to view slides
(function() {
var deleted = false;
slideshow.on('beforeShowSlide', function(slide) {
if (deleted) return;
var sheets = document.styleSheets, node;
for (var i = 0; i < sheets.length; i++) {
node = sheets[i].ownerNode;
if (node.dataset["target"] !== "print-only") continue;
node.parentNode.removeChild(node);
}
deleted = true;
});
})();
// add `data-at-shortcutkeys` attribute to <body> to resolve conflicts with JAWS
// screen reader (see PR #262)
(function(d) {
let res = {};
d.querySelectorAll('.remark-help-content table tr').forEach(tr => {
const t = tr.querySelector('td:nth-child(2)').innerText;
tr.querySelectorAll('td:first-child .key').forEach(key => {
const k = key.innerText;
if (/^[a-z]$/.test(k)) res[k] = t; // must be a single letter (key)
});
});
d.body.setAttribute('data-at-shortcutkeys', JSON.stringify(res));
})(document);
(function() {
"use strict"
// Replace <script> tags in slides area to make them executable
var scripts = document.querySelectorAll(
'.remark-slides-area .remark-slide-container script'
);
if (!scripts.length) return;
for (var i = 0; i < scripts.length; i++) {
var s = document.createElement('script');
var code = document.createTextNode(scripts[i].textContent);
s.appendChild(code);
var scriptAttrs = scripts[i].attributes;
for (var j = 0; j < scriptAttrs.length; j++) {
s.setAttribute(scriptAttrs[j].name, scriptAttrs[j].value);
}
scripts[i].parentElement.replaceChild(s, scripts[i]);
}
})();
(function() {
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
if (/^(https?:)?\/\//.test(links[i].getAttribute('href'))) {
links[i].target = '_blank';
}
}
})();
// adds .remark-code-has-line-highlighted class to <pre> parent elements
// of code chunks containing highlighted lines with class .remark-code-line-highlighted
(function(d) {
const hlines = d.querySelectorAll('.remark-code-line-highlighted');
const preParents = [];
const findPreParent = function(line, p = 0) {
if (p > 1) return null; // traverse up no further than grandparent
const el = line.parentElement;
return el.tagName === "PRE" ? el : findPreParent(el, ++p);
};

for (let line of hlines) {
let pre = findPreParent(line);
if (pre && !preParents.includes(pre)) preParents.push(pre);
}
preParents.forEach(p => p.classList.add("remark-code-has-line-highlighted"));
})(document);</script>

<script>
slideshow._releaseMath = function(el) {
var i, text, code, codes = el.getElementsByTagName('code');
for (i = 0; i < codes.length;) {
code = codes[i];
if (code.parentNode.tagName !== 'PRE' && code.childElementCount === 0) {
text = code.textContent;
if (/^\\\((.|\s)+\\\)$/.test(text) || /^\\\[(.|\s)+\\\]$/.test(text) ||
/^\$\$(.|\s)+\$\$$/.test(text) ||
/^\\begin\{([^}]+)\}(.|\s)+\\end\{[^}]+\}$/.test(text)) {
code.outerHTML = code.innerHTML; // remove <code></code>
continue;
}
}
i++;
}
};
slideshow._releaseMath(document);
</script>
<!-- dynamically load mathjax for compatibility with self-contained -->
<script>
(function () {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-MML-AM_CHTML';
if (location.protocol !== 'file:' && /^https?:/.test(script.src))
script.src = script.src.replace(/^https?:/, '');
document.getElementsByTagName('head')[0].appendChild(script);
})();
</script>
</body>
</html>