Skip to main content
The Category Strengths feature provides a comprehensive weekly breakdown of how all teams in your league perform across every fantasy basketball category. This view helps you identify competitive advantages, spot weaknesses, and make strategic roster decisions.

What It Does

Category Strengths displays weekly team comparisons across all fantasy categories tracked in your league. For each week, you can see:
  • Head-to-head category rankings for every team
  • Win-loss projections comparing any team against others
  • Automated strength/weakness analysis highlighting top and bottom categories
  • Real-time rank tracking showing where each team stands in each stat
The system automatically pulls your league’s scoring categories from Yahoo Fantasy, so you’ll see exactly the stats that matter for your league format.

How to Use It

Selecting a Week

Use the week selector dropdown at the top of the Category Strengths tab to choose which week to analyze:
// The week selector is populated based on league settings
for (let w = 1; w <= totalWeeks; w++) {
  weekSel.insertAdjacentHTML('beforeend', `<option value="${w}">${w}</option>`);
}
The interface automatically loads the current week when you first visit the dashboard.

Choosing a Comparison Team

Select any team from the Team Selector dropdown to use as the baseline for comparisons. Your team is marked with “(Your Team)” for easy identification:
teams.forEach((team, index) => {
  const option = document.createElement('option');
  option.value = index;
  option.textContent = team.isMine ? `${team.name} (Your Team)` : team.name;
  selectElement.appendChild(option);
});

Understanding Rankings

Enable the “Show ranks” checkbox to see ordinal rankings (1st, 2nd, 3rd, etc.) for each category:
Rankings are calculated dynamically based on the selected week’s data, accounting for whether higher or lower values are better for each stat.

Statistics Shown

The feature displays all enabled fantasy categories from your league settings. Common categories include:
Stat IDDisplay NameSort Direction
103PTM (3-Pointers Made)High
113PT% (3-Point Percentage)High
12PTS (Points)High
15REB (Rebounds)High
16AST (Assists)High
17ST (Steals)High
18BLK (Blocks)High
19TO (Turnovers)Low
27DD (Double-Doubles)High
Percentage stats (FG%, FT%, 3PT%) are formatted with three decimal places and displayed as .XXX format.

Stat Configuration

Categories are loaded from your league settings via the API:
const settingsBlock = leagueBlocks.find(block => block?.settings)?.settings?.[0];
const statCats = settingsBlock.stat_categories.stats;

statCats.forEach(catObj => {
  const stat = catObj.stat;
  if (!stat || stat.enabled !== '1') return;
  
  const id = stat.stat_id.toString();
  categories.push([
    id,
    stat.display_name || stat.abbr || meta.name,
    meta.sort_order === '1' ? 'high' : 'low'
  ]);
});

Viewing Options

Table View

The table view shows all teams in a spreadsheet-style layout with:
  • The selected team highlighted at the top
  • Color-coded cells (green = better than selected team, red = worse)
  • A “Score” column showing projected category wins vs. the selected team

Card View

Switch to card view for a mobile-friendly display featuring:
  • Individual cards for each opposing team
  • Side-by-side stat comparisons
  • Difference indicators (+/- from selected team)
  • Win-loss record at the top of each card

Table View

Best for desktop analysis with all teams visible at once

Card View

Optimized for mobile devices with one team per card

Automated Analysis

The Analysis Summary section appears at the top of the view and provides:

Strong Categories

Categories where the selected team ranks in the top 30% of the league:
if (rank <= strongThreshold) {
  strongCategories.push({ name, rank, id });
}

Weak Categories

Categories where the selected team ranks in the bottom 30% of the league:
if (rank >= weakThreshold) {
  weakCategories.push({ name, rank, id });
}
Use the weakness analysis to identify trade targets or waiver wire pickups that can shore up your team’s deficiencies.

Understanding Win-Loss Scores

The “Score” column shows how many categories the selected team would win vs. each opponent:
recordVsUser: (baseTeam, oppTeam) => {
  let w = 0, l = 0;
  CONFIG.COLS.forEach(([id, , dir]) => {
    const u = parseFloat(baseTeam[id]);
    const o = parseFloat(oppTeam[id]);
    if (isNaN(u) || isNaN(o) || u === o) return;
    (dir === 'high' ? u > o : u < o) ? w++ : l++;
  });
  return `${w} - ${l}`;
}
A score of “6 - 3” means the selected team would win 6 categories and lose 3 in a head-to-head matchup.

Technical Details

Data Source

Weekly data is fetched from the Yahoo Fantasy API:
const r = await fetch(`/api/scoreboard?week=${week}`);
const raw = await r.json();
const teams = DataService.extractWeekTeams(raw);

Ranking Algorithm

Rankings handle ties and missing data appropriately:
vals.sort((a, b) => {
  if (isNaN(a.num)) return 1;
  if (isNaN(b.num)) return -1;
  return dir === 'high' ? b.num - a.num : a.num - b.num;
});

vals.forEach(({ num, i }, idx) => {
  if (isNaN(num)) { 
    ranks[i][id] = '-'; 
    return;
  }
  if (prev === null || num !== prev) { 
    curr = idx + 1; 
    prev = num; 
  }
  ranks[i][id] = curr;
});

Next Steps

Team Comparison

View season-long totals and averages

Trends

Track performance changes over time

Build docs developers (and LLMs) love