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.
15 changes: 15 additions & 0 deletions ideas/MiloWesselData400MiniProjectIdea1 (1).md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
Milo Wessel
Data 400
30 January 2026

Data 400 Mini-Project Idea #1

My first idea for my mini project adresses the question: "Which draft-context and early-career performance factors best predict how much an NBA player will over- or under-perform the median career earnings for their draft position?" This relates to both my three-course sequence in economics as well as my deep interest in the front office world of professional sports, and more specifically, the NBA.

Data for this project is readily available on websites such as Basketball Reference, Spotrac, and others, but those two will be the primary sites I use data from. I plan to scrape those two (or more) websites to get draft-related (e.g. draft position, age, and year), salary (individual player career earnings for both the model and the median values, which I will adjust for inflation), and early-career performance-based data (e.g. BPM, VORP, PER, TS%, etc.).

I plan to use multiple regression because it allows me to isolate the impact of individual "predictors", such as a player’s Year 2 VORP or their draft age, while holding other factors constant. By training the model using the "Draft ROI" (the difference between a player’s actual career earnings and the median for their draft slot) amid a combination of draft-context and performance variables, I can determine which specific factors carry the most weight in predicting financial over-performance.

This project primarily matters to NBA front offices and ownership groups, the people who are making decisions about player contracts. By identifying the specific early indicators of a high Draft ROI, General Managers can continue the modern trend of focusing less on subjective scouting and making more objective, data-driven decisions during contract extensions and trade negotiations. Additionally, the project can provide value to sports agents and players, as it will hopefully highlight which performance metrics (if improved early in a career) are most correlated with higher salaries over the course of a player's career.

On a broader scale, this project can contribute to efficiency/transparency in the professional sports labor market. By identifying specific factors that predict financial over-performance, this research can help ensure that as a player's career takes off, compensation is more accurately aligned with actual value production rather than their draft position. Ultimately, I believe that applying this approach to sports data can improve the industry’s ability to recognize and reward talent that might otherwise be overlooked by traditional, potentially biased evaluation methods.
12 changes: 12 additions & 0 deletions ideas/MiloWesselData400MiniProjectIdea1.md (1).html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><title>MiloWesselData400MiniProjectIdea1.md</title><style></style></head><body id="preview">
<p class="has-line-data" data-line-start="0" data-line-end="3">Milo Wessel<br>
Data 400<br>
30 January 2026</p>
<p class="has-line-data" data-line-start="4" data-line-end="5">Data 400 Mini-Project Idea #1</p>
<p class="has-line-data" data-line-start="6" data-line-end="7">My first idea for my mini project adresses the question: “Which draft-context and early-career performance factors best predict how much an NBA player will over- or under-perform the median career earnings for their draft position?” This relates to both my three-course sequence in economics as well as my deep interest in the front office world of professional sports, and more specifically, the NBA.</p>
<p class="has-line-data" data-line-start="8" data-line-end="9">Data for this project is readily available on websites such as Basketball Reference, Spotrac, and others, but those two will be the primary sites I use data from. I plan to scrape those two (or more) websites to get draft-related (e.g. draft position, age, and year), salary (individual player career earnings for both the model and the median values, which I will adjust for inflation), and early-career performance-based data (e.g. BPM, VORP, PER, TS%, etc.).</p>
<p class="has-line-data" data-line-start="10" data-line-end="11">I plan to use multiple regression because it allows me to isolate the impact of individual “predictors”, such as a player’s Year 2 VORP or their draft age, while holding other factors constant. By training the model using the “Draft ROI” (the difference between a player’s actual career earnings and the median for their draft slot) amid a combination of draft-context and performance variables, I can determine which specific factors carry the most weight in predicting financial over-performance.</p>
<p class="has-line-data" data-line-start="12" data-line-end="13">This project primarily matters to NBA front offices and ownership groups, the people who are making decisions about player contracts. By identifying the specific early indicators of a high Draft ROI, General Managers can continue the modern trend of focusing less on subjective scouting and making more objective, data-driven decisions during contract extensions and trade negotiations. Additionally, the project can provide value to sports agents and players, as it will hopefully highlight which performance metrics (if improved early in a career) are most correlated with higher salaries over the course of a player’s career.</p>
<p class="has-line-data" data-line-start="14" data-line-end="15">On a broader scale, this project can contribute to efficiency/transparency in the professional sports labor market. By identifying specific factors that predict financial over-performance, this research can help ensure that as a player’s career takes off, compensation is more accurately aligned with actual value production rather than their draft position. Ultimately, I believe that applying this approach to sports data can improve the industry’s ability to recognize and reward talent that might otherwise be overlooked by traditional, potentially biased evaluation methods.</p>

</body></html>
28 changes: 28 additions & 0 deletions presentations/TestXaringan.Rmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
title: "Presentation Ninja"
subtitle: "⚔<br/>with xaringan"
author: "Milo Wessel"
institute: "RStudio, PBC"
date: "2016/12/12 (updated: `r Sys.Date()`)"
output:
xaringan::moon_reader:
lib_dir: libs
nature:
highlightStyle: github
highlightLines: true
countIncrementalSlides: false
---

background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/be/Sharingan_triple.svg)

```{r setup, include=FALSE}
options(htmltools.dir.version = FALSE)
```

???

Image credit: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Sharingan_triple.svg)

---

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

.title[
# Presentation Ninja
]
.subtitle[
## ⚔<br/>with xaringan
]
.author[
### Milo Wessel
]
.institute[
### RStudio, PBC
]
.date[
### 2016/12/12 (updated: 2026-01-23)
]

---


background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/be/Sharingan_triple.svg)



???

Image credit: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Sharingan_triple.svg)

---

# 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>