Parsing data more fully

This commit is contained in:
BooshPC 2025-01-28 11:54:31 -05:00
parent 99d5f41140
commit 0a3a8ecb2e
75 changed files with 80 additions and 333629 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,6 +1,7 @@
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from dateutil.parser import parse from dateutil.parser import parse
import json import json
from tqdm import tqdm
import re import re
def calcPredictedScore(sF,sU,S,O): def calcPredictedScore(sF,sU,S,O):
@ -9,24 +10,17 @@ def calcPredictedScore(sF,sU,S,O):
scoreObj["sF"] = int(O) - ((int(O)-int(S))/2) scoreObj["sF"] = int(O) - ((int(O)-int(S))/2)
return scoreObj return scoreObj
fullObj = { fullObj = []
"years":[]
}
start_year = 1952 start_year = 1952
for year in range(start_year, 2025): for year in tqdm(range(start_year, 1954)):
with open("data/"+str(year)+".html") as fp: with open("src/data/"+str(year)+".html") as fp:
soup = BeautifulSoup(fp, 'html.parser') soup = BeautifulSoup(fp, 'html.parser')
start_pos = soup.find(string=str(year)+" Regular Season - Week 1"); start_pos = soup.find(string=re.compile(".*Regular Season - Week 1"))
gamesObj = {
"year":year,
"games":[]
}
try: try:
for table in start_pos.find_all_next(class_="soh1"): for table in start_pos.find_all_next(class_="soh1"):
@ -68,15 +62,16 @@ for year in range(start_year, 2025):
if spreadVal != -1 and ouVal != -1: if spreadVal != -1 and ouVal != -1:
game["pScore"] = calcPredictedScore(game["sF"],game["sU"],spreadVal,ouVal) game["pScore"] = calcPredictedScore(game["sF"],game["sU"],spreadVal,ouVal)
gamesObj["games"].append(game) fullObj.append(game)
except: except:
print("Error parsing " + str(year)) print("Error parsing " + str(year))
fullObj["years"].append(gamesObj) objson = json.dumps(fullObj, indent=4)
objson = json.dumps(fullObj) with open("src/data/odds_data_abbr.json", "w") as odds_file:
odds_file.write(
print(objson) objson
)
''' '''

@ -1,5 +1,71 @@
# .\NFLOddsVis ```js
const parseTime = d3.timeParse("%b %d, %Y");
const coerceGameData = (d,i) => ({date: parseTime(d.date), spread: Number(d.spread)});
const oddsfile = FileAttachment("./data/odds_data_abbr.json").json().then((D) => D.map(coerceGameData));
```
This is the home page of your new Observable Framework app. ```js
Inputs.table(oddsfile);
```
For more, see <https://observablehq.com/framework/getting-started>. ```js
function oddsPlot(data, {width} = {}) {
// Declare the chart dimensions and margins.
const height = 500;
const marginTop = 20;
const marginRight = 30;
const marginBottom = 30;
const marginLeft = 40;
// Declare the x (horizontal position) scale.
const x = d3.scaleUtc(d3.extent(data, d => d.date), [marginLeft, width - marginRight]);
// Declare the y (vertical position) scale.
const y = d3.scaleLinear([0, d3.max(data, d => d.spread)], [height - marginBottom, marginTop]);
// Declare the line generator.
const line = d3.line()
.x(d => x(d.date))
.y(d => y(d.spread));
// Create the SVG container.
const svg = d3.create("svg")
.attr("width", width)
.attr("height", height)
.attr("viewBox", [0, 0, width, height])
.attr("style", "max-width: 100%; height: auto; height: intrinsic;");
// Add the x-axis.
svg.append("g")
.attr("transform", `translate(0,${height - marginBottom})`)
.call(d3.axisBottom(x).ticks(width / 80).tickSizeOuter(0));
// Add the y-axis, remove the domain line, add grid lines and a label.
svg.append("g")
.attr("transform", `translate(${marginLeft},0)`)
.call(d3.axisLeft(y).ticks(height / 40))
.call(g => g.select(".domain").remove())
.call(g => g.selectAll(".tick line").clone()
.attr("x2", width - marginLeft - marginRight)
.attr("stroke-opacity", 0.1))
.call(g => g.append("text")
.attr("x", -marginLeft)
.attr("y", 10)
.attr("fill", "currentColor")
.attr("text-anchor", "start")
.text("↑ Daily close ($)"));
// Append a path for the line.
svg.append("path")
.attr("fill", "none")
.attr("stroke", "steelblue")
.attr("stroke-width", 1.5)
.attr("d", line(data));
return svg.node();
}
```
<div class="grid grid-cols-1">
<div class="card">${resize((width) => oddsPlot(oddsfile, {width}))}</div>
</div>