Skip to content

association 4.2.0

Choose a tag to compare

@jeffknupp jeffknupp released this 18 Sep 13:43
· 706 commits to master since this release
  • A NetPoints name ESPN spells with a generational suffix, or hyphenates
    differently, now matches too.
    match_key reduces both sides to a
    comparable form in four measured steps - diacritics dropped, hyphens to
    spaces, whitespace collapsed, and a trailing suffix from a closed set
    removed - which recovers 710 of the 1,060 remaining unmatched per-game rows:
    Jimmy Butler to ESPN's Jimmy Butler III (498 rows, his whole per-game
    record), Rondae Hollis-Jefferson to Rondae Hollis Jefferson (144),
    Trey Jemison, Billy Garrett, Darius Brown. The suffix step is the one
    that can merge two real people, and it does - ESPN holds Gary Payton and
    Gary Payton II, Tim Hardaway and Tim Hardaway Jr., fathers and sons, 31
    colliding keys in all - so a reduced spelling more than one athlete id can
    reach is never usable, and those names resolve only exactly. What is left
    unmatched is a different name rather than a different spelling (a nickname, a
    short first name, a middle name, a reversed order) and wants a curated list.
  • A NetPoints name spelled with diacritics now matches ESPN's spelling of
    it.
    NetPoints' 2026 files say Nikola Jokić where ESPN's players says
    Nikola Jokic, so an exact match lost those players their whole 2026 season:
    Jokic matched every season from 2019 to 2025 and none of 2026, and
    re-fetching cost 682 already-resolved player-games. The name coming in from
    NetPoints is now folded (NFKD, combining marks dropped) when the exact
    spelling misses, which resolves 20 of the 39 unmatched names. Checked rather
    than assumed: no ESPN name carries a diacritic (0 of 3,080) and no two fold
    to the same string, so the fold cannot reach a player it was not already
    about, and the exact spelling always wins where both exist. Only diacritics -
    not case, punctuation or whitespace.
  • scripts/backfill_netpoints_names.py re-parses the NetPoints tables that
    are matched by display name, without refetching ESPN. The 4.1.0 parser fixes
    (#22, #101) mean the Parquet on disk was written by the old code, so a load
    alone changes nothing - but a full data pull --force over the NetPoints era
    also refetches about 11,000 ESPN game summaries the fix does not touch, some
    40 minutes at the default rate limit. This runs the NetPoints steps of a pull
    and nothing else, through the same Pipeline methods, _write_rows and
    warehouse.build, and reports both measurements before and after: unmatched
    rows per table, and the row counts of the players ESPN files under two ids,
    which is the only one that shows #101 moving (that table drops an unmatched
    row rather than nulling its id, so its unmatched count is always 0).